BA & SA | 10000 Interview questions
10.2K subscribers
172 photos
14 videos
342 links
Вопросы и задачи, которые задают на собеседованиях на позицию Бизнес и Системного аналитика. По вопросам сотрудничества- @DeliveryManager7
Download Telegram
№4696 категория вопросов: #INTEGRATION
🧑‍🎓Объяснение:
Это классический сценарий использования паттерна «Strangler Fig Application» (Удушающий инжир) — стратегии постепенной замены унаследованных систем.

Почему вариант B — оптимальное решение:

Постепенность и бесшовность:
Адаптер выступает «прослойкой», которая скрывает от нового микросервиса детали реализации legacy. Новый сервис вызывает единый REST-интерфейс, адаптер транслирует вызовы в SOAP и преобразует ответы.
Результат: Legacy продолжает работать без изменений, новый сервис разрабатывается в современном стеке.
Минимизация рисков:
Не нужно останавливать бизнес-критичную систему
Нет необходимости в risky big-bang миграции
Возможно поэтапное замещение: по мере готовности отдельных модулей новой системы адаптер перенаправляет вызовы на них
Гибкость и контролируемость:
Адаптер можно развивать: добавлять кэширование, мониторинг, circuit breaker, балансировку — не трогая legacy.
Почему другие варианты хуже или опасны:

A (Полная перепись legacy):
Это Big Bang migration — высокорисковый подход. Legacy-система часто не имеет тестов, документации, в ней скрыта критическая бизнес-логика. Ошибки при переписывании могут остановить работу склада на недели.
C (Общая база данных):
Антипаттерн интеграции. Нарушает инкапсуляцию, создаёт жёсткую связанность, усложняет развитие и масштабирование. Новый сервис будет завязан на схему данных legacy, которую сложно менять.
D (Остановка legacy на время миграции):
Бизнес-критичная система склада не может быть остановлена — это остановка отгрузок, приёмки товаров, работы всего e-commerce. Недопустимо.
📌 Роль аналитика в этом кейсе:

Вы должны:

Выявить ограничения: Legacy-систему нельзя менять, её схема данных не оптимизирована для новых нагрузок.
Предложить архитектурный паттерн: Strangler Fig, Anti-Corruption Layer.
Специфицировать функционал адаптера: какие методы SOAP маппятся на какие REST-эндпоинты, форматы данных, обработку ошибок, таймауты.
Заложить требования к наблюдаемости: логирование, метрики, алерты для мониторинга качества трансляции.
💡 Инсайт:
Адаптер — это не временный костыль, а полноценный стратегический компонент архитектуры. Он позволяет провести миграцию без остановки бизнеса и даёт время на тщательное тестирование новой системы. Десятки крупных компаний (Amazon, Netflix) прошли этот путь именно через Strangler Fig.

Практический пример:
Когда Spotify переходил с монолита на микросервисы, они вынесли авторизацию в отдельный сервис, но оставили заглушку в монолите, которая проксировала запросы в новый сервис. Только убедившись в стабильности, они удалили код из монолита.

Вывод:
Правильная стратегия интеграции с legacy — не разрушать, а оборачивать. Адаптер — ваш главный инструмент для эволюционной миграции.
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Разобраться в IT без перегруза

Сейчас легко утонуть в потоке новостей про AI, автоматизацию и цифровые инструменты. Каждый день - новые сервисы, громкие заголовки.

Мы сделали проще

В папке «IT» собраны Telegram-каналы экспертов, которые объясняют технологии по делу: что реально работает, где экономит ресурсы, где даёт рост. Папка сэкономит вам часы поиска и десятки случайных подписок.

Добавить можно здесь 🔡 https://t.me/addlist/kUCHduSsW5IxZjRi

Ссылка действительна только 24ч, успейте сохранить!

Попасть в папку
Please open Telegram to view this post
VIEW IN TELEGRAM
2
№4697 категория вопросов: #SECURITY
4697. Права зависят от должности, отдела, типа проекта и статуса. Какую модель доступа выбрать?
Anonymous Quiz
4%
DAC — владелец ресурса назначает права
2%
MAC — метки конфиденциальности
49%
RBAC — права назначаются ролям
44%
ABAC — доступ на основе атрибутов
🧑‍🎓Объяснение:
ABAC позволяет строить правила на основе множества атрибутов (должность, отдел, статус проекта, тип данных).
Ни одна другая модель не даёт такой гибкости:

DAC — создаст хаос из личных назначений
MAC — слишком жёсткая, не учитывает бизнес-атрибуты
RBAC — потребует сотни узких ролей (например, «Руководитель_Продаж_Активные_Проекты»)

ABAC описывает всё несколькими декларативными правилами:

text
Если должность = Руководитель отдела И отдел сотрудника = отдел проекта → полный доступ
Если должность = Аудитор И статус проекта = Закрыт → чтение
Вывод: Когда доступ зависит от контекста — выбирайте ABAC.
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥1
№4698 категория вопросов: #SECURITY
4698. Вы проектируете интеграцию с государственным порталом для получения персональных данных клиентов (паспортные данные, СНИЛС). Портал предоставляет REST API. Какое требование по безопасности обязательно должно быть в спецификации?
Anonymous Quiz
94%
Использовать шифрование TLS и взаимную аутентификацию (mTLS)
1%
Передавать данные в открытом виде внутри корпоративной сети
4%
Хранить логи всех запросов с персональными данными в открытом доступе
1%
Передавать данные через общую базу данных, доступную обоим системам
🧑‍🎓Объяснение:
Почему вариант А — единственно верный:

Шифрование при передаче (TLS) — обязательное требование
Любая передача персональных данных по открытым каналам (интернет) должна быть зашифрована. TLS (Transport Layer Security) гарантирует, что данные не будут перехвачены или изменены в пути. Это базовое требование и 152-ФЗ, и PCI DSS, и здравого смысла.

Взаимная аутентификация (mTLS) — best practice для B2B-интеграций
Взаимный TLS (mutual TLS) позволяет обеим сторонам удостовериться в подлинности друг друга: не только клиент проверяет сертификат сервера, но и сервер проверяет сертификат клиента. Это исключает риск подключения к поддельному порталу или приёма данных от неавторизованного отправителя.

Соответствие законодательству
Статья 19 152-ФЗ «Персональные данные» прямо требует обеспечивать конфиденциальность при обработке, в том числе при передаче. Роскомнадзор при проверках запрашивает наличие шифрования.

Почему другие варианты опасны или недопустимы:

В (Открытая передача внутри сети):
Даже внутри корпоративной сети могут быть внутренние угрозы, перехват, скомпрометированные сегменты. PCI DSS и стандарты безопасности требуют шифрования везде, где данные покидают доверенную среду.

C (Открытые логи с ПДн):
Хранение персональных данных в логах в открытом виде — грубейшее нарушение. Логи часто имеют более слабую защиту, чем основные базы данных, и становятся источником утечек. Требуется либо не логировать ПДн вовсе, либо обезличивать/шифровать их.

D (Общая база данных):
Предоставление прямого доступа к своей БД внешней системе — антипаттерн интеграции и безопасности. Это создаёт неприемлемые риски: избыточный доступ, сложность контроля, масштабирование проблем доступа. Нарушается принцип наименьших привилегий.

📌 Что ещё должен учесть аналитик в требованиях:

Протокол и версия TLS — не ниже 1.2, с запретом устаревших шифров.
Управление сертификатами — кто выпускает, как обновлять, кто отвечает за отзыв.
Логирование без ПДн — фиксировать факт обмена, но не содержимое, либо маскировать данные.
Контракт данных — какие поля передаются, в каком формате, с какой периодичностью.

💡 Реальный кейс из практики:
При интеграции с Госуслугами (ЕСИА) обязательным требованием является использование ГОСТ-криптографии и взаимной аутентификации по сертификатам. Если аналитик этого не заложит в ТЗ, разработка интеграции остановится на этапе подключения к песочнице.

🎯 Вывод:
Безопасность при интеграциях начинается с простых, но критических вещей: шифрование канала и проверка сторон. Аналитик обязан включать эти требования в спецификацию на самом раннем этапе, иначе вся система может быть признана несоответствующей регуляторам и уязвимой для атак.
Please open Telegram to view this post
VIEW IN TELEGRAM
2
№4699 категория вопросов: #SQL
4699. В системе управления задачами есть запрос для получения списка задач, назначенных на конкретного сотрудника. Таблица tasks содержит 10 миллионов записей. Запрос выполняется медленно (более 30 секунд). Какой способ оптимизации даст наибольший эффект?
Anonymous Quiz
25%
Добавить индекс на поле assignee_id
51%
Добавить составной индекс на поля (assignee_id, status, created_at)
2%
Увеличить объем оперативной памяти на сервере БД
23%
Разделить таблицу на две: активные и архивные задачи
🧑‍🎓Объяснение:
Это классическая задача оптимизации запросов в больших таблицах, где важно понимать, как работают индексы и какие данные реально выбираются.

Почему вариант B — оптимальное решение:

Покрывающий индекс (covering index)
Составной индекс (assignee_id, status, created_at) включает все поля, которые, скорее всего, участвуют в типичном запросе:
assignee_id — для фильтрации по сотруднику
status — для фильтрации по статусу ("в работе", "завершена")
created_at — для сортировки по дате (обычно задачи показывают от новых к старым)
Эффективность использования

Такой индекс позволяет СУБД:
Быстро найти все задачи конкретного сотрудника по первой части индекса
Сразу отфильтровать по статусу (вторая часть)

Получить данные уже отсортированными по дате (третья часть) — без дополнительной сортировки
В идеальном случае вообще не обращаться к таблице, если запрашиваются только эти поля
Реальный прирост производительности

Для таблицы в 10 млн записей разница между простым индексом на assignee_id и составным покрывающим индексом может составлять:
Простой индекс: сначала поиск по индексу → затем чтение строк таблицы → затем фильтрация → затем сортировка
Составной индекс: всё делается за один проход по индексу

Почему другие варианты хуже:

A (Индекс на assignee_id):
Поможет найти задачи сотрудника, но после этого СУБД придётся читать сами строки из таблицы (возможно, тысячи), фильтровать по статусу в памяти и сортировать. Это всё ещё дорого.

C (Увеличить память):
Это временное решение. Если запрос неоптимален, память просто откладывает проблему. При первых запросах после перезагрузки или новых данных всё вернётся.

D (Разделение таблиц):
Хорошая стратегия для управления данными, но:
Требует изменений в коде приложения (понимать, в какую таблицу писать/читать)
Не решает проблему сортировки и фильтрации в рамках активной таблицы
Может быть полезно, но как дополнительная оптимизация, а не первичная

📌 Роль аналитика в оптимизации:

Аналитик должен:

Понять типичные запросы к системе (через логи, интервью с пользователями)
Выявить частые паттерны фильтрации и сортировки
Заложить в требования необходимость индексов под эти паттерны
Согласовать с разработчиками возможность и стоимость создания индексов

💡 Пример из практики:
В одном проекре аналитик заметил, что 90% запросов к таблице заказов фильтруются по customer_id и status, а сортируются по created_at. Составной индекс (customer_id, status, created_at) сократил время выполнения типового запроса с 45 секунд до 200 миллисекунд.

🎯 Вывод:
Правильно спроектированные индексы — это не техническая деталь, а архитектурное решение, напрямую влияющее на пользовательский опыт. Аналитик, понимающий это, создаёт системы, которые не тормозят при росте данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31
№4700 категория вопросов: #SQL
4700. Вам нужно для каждого клиента интернет-магазина получить полную информацию о его самом последнем заказе (с самой поздней датой). Какой подход к написанию запроса даст правильный результат и будет оптимальным по производительности?
Anonymous Quiz
44%
Сгруппировать записи по клиентам и выбрать максимальную дату заказа
19%
Использовать левое соединение таблицы с самой собой с условием, что более поздний заказ отсутствует
22%
Применить оконную функцию для нумерации заказов каждого клиента
14%
Отсортировать все заказы по клиенту и дате, но не фильтровать – результат будет содержать все строки
1
🧑‍🎓Объяснение:
Задача на первый взгляд простая, но на практике требует понимания современных возможностей SQL и особенностей работы с группами данных.

Почему вариант C — лучший:

Полнота данных – в отличие от простой группировки (вариант A), оконная функция позволяет получить все поля исходной таблицы, а не только ключ и дату.
Читаемость и стандарт – конструкция с ROW_NUMBER() понятна большинству разработчиков и поддерживается всеми современными СУБД (PostgreSQL, MySQL 8+, Oracle, SQL Server).
Производительность – при наличии индекса на (customer_id, order_date DESC) запрос выполняется за один проход по данным, без многократных вложенных сканирований, как в варианте B.

Почему другие варианты хуже:

A – не решает задачу, так как возвращает только дату, а не все поля заказа.

B – классический «анти-джойн» технически рабочий, но:
Тяжеловесен: требует полного сканирования и сравнения таблицы с самой собой.
Трудночитаем и сложен в поддержке, особенно для начинающих.
При больших объёмах данных (миллионы строк) выполняется неприемлемо долго.

D – просто сортировка без фильтрации не выделяет последний заказ; результат содержит все записи, что не соответствует требованию.

📌 Роль аналитика:
Понимание оконных функций позволяет грамотно формулировать требования к отчётам и выборкам. Зная, что для задачи «последний заказ клиента» оптимально использовать ROW_NUMBER(), вы помогаете команде избежать неэффективных решений и закладываете правильную логику с самого начала.
Please open Telegram to view this post
VIEW IN TELEGRAM
№4701 категория вопросов: #ARCHITECHTURE
4701. Стартап с командой из 5 человек разрабатывает MVP платформы онлайн-курсов. В будущем планируется масштабирование и добавление новых функций. Какую архитектуру выбрать на старте?
Anonymous Quiz
58%
Модульный монолит
33%
Микросервисная
2%
Серверлесс
6%
Событийно-ориентированная
1
🧑‍🎓Объяснение:
Почему модульный монолит — оптимальный выбор:

1. Скорость разработки (Time-to-Market)
В монолите всё работает «в одном процессе»: вызовы между модулями — это просто вызовы функций, а не HTTP-запросы. Не нужно тратить время на:

Проектирование и версионирование API между сервисами
Настройку сетевого взаимодействия и балансировщиков
Обработку таймаутов и повторных попыток
Сериализацию/десериализацию данных
Для команды из 5 человек это означает, что первую версию продукта можно выпустить за 1-2 месяца, а не за полгода. В стартапе это часто вопрос выживания.

2. Простота разработки и тестирования
Одно приложение легче:

Собрать и запустить локально у каждого разработчика
Покрыть интеграционными тестами (не нужно поднимать окружение из 5+ сервисов)
Отлаживать (дебаггер работает сквозь все слои)
Деплоить (один артефакт, одна команда деплоя)
3. Модульность внутри монолита — залог будущего
«Модульный монолит» — это не свалка кода, а чётко организованная структура:

Выделение бизнес-модулей (курсы, пользователи, оплата, уведомления)
Строгое разделение слоёв (контроллеры → сервисы → репозитории)
Чёткие интерфейсы между модулями внутри кода
Это позволяет в будущем «вырезать» модуль в отдельный микросервис, если:

Модуль требует независимого масштабирования (например, видео-сервис)
Команда выросла и нужно разделить ответственность
Появились специфические требования к технологиям (например, для видео нужен Go, а для оплаты — Java)
4. Экономия ресурсов
Пока у стартапа нет миллионной нагрузки, платить за инфраструктуру для микросервисов (балансировщики, несколько баз данных, оркестрация) — просто выбрасывать деньги. Монолит можно крутить на одном небольшом сервере за $50/мес.

Почему другие варианты не подходят:

A) Микросервисная архитектура
Микросервисы — это распределённая система, со всеми вытекающими сложностями:

Сетевое взаимодействие — любой вызов может упасть с таймаутом, нужно реализовывать retry, circuit breaker
Распределённые данные — сложно делать JOIN между таблицами разных сервисов, нужны саги или паттерн CQRS
DevOps-нагрузка — нужно настроить CI/CD для каждого сервиса, мониторинг, логирование, трассировку
Когнитивная нагрузка — разработчики должны держать в голове всю картину взаимодействий
Для 5 человек и MVP это неподъёмно. Микросервисы — это про организационную масштабируемость, а не про техническую. Конвей Глиз (C. Hale) говорил: «Микросервисы — это то, что вы делаете, когда ваша команда выросла настолько, что монолит мешает её организации».

C) Серверлесс (FaaS)
Serverless (AWS Lambda, Google Cloud Functions) хорошо подходит для:

Обработки событий (загрузили файл — запустилась функция)
Микросервисов с чёткой единичной ответственностью
Проектов с непредсказуемой, скачкообразной нагрузкой
Но для целого приложения с множеством взаимосвязанных функций serverless создаёт проблемы:

Холодный старт — если функции долго не вызывались, первый пользователь будет ждать 1-3 секунды
Vendor lock-in — логика привязывается к конкретной облачной платформе
Сложность отладки — трудно воспроизвести распределённый сценарий локально
Ограничения по времени выполнения — большинство функций не могут работать дольше 15 минут
MVP платформы онлайн-курсов требует целостного приложения с сессиями пользователей, сложными транзакциями — serverless здесь неудобен.

D) Событийно-ориентированная архитектура
Event-driven архитектура (через Kafka, RabbitMQ) отлично подходит для:

Слабосвязанных систем
Асинхронных процессов (уведомления, аналитика)
Интеграций между командами
Но для MVP это избыточно:

Сложность понимания потоков данных (событие может обрабатываться несколькими подписчиками в неизвестном порядке)
Eventual consistency — данные не согласованы мгновенно, что может сбивать с толку пользователей
Нужна инфраструктура для брокера сообщений
Для простого сценария «купил курс — получил доступ» можно обойтись синхронным вызовом в монолите, не усложняя систему.
Please open Telegram to view this post
VIEW IN TELEGRAM
3
УСПЕВАЕТЕ СЛЕДИТЬ ЗА ИИ-НОВИНКАМИ ?! Технологии ИИ не ждут. А вы?

Каждую неделю выходят десятки обновлений нейросетей и новых инструментов. То, что вчера делали за 3 часа, сегодня нейросеть делает за 5 минут. Вопрос только в том — узнаете ли вы об этом первыми?
Пока большинство спит, единицы тестируют новые связки и вырываются вперед. Хотите быть в их числе?

Мы собрали ПАПКУ со всеми свежими ИИ-инструментами, фишками и апдейтами. Никакой воды — только то, что реально упрощает работу и приносит результат.

Подписывайтесь, чтобы всегда быть на острие 🚀

Держим руку на пульсе вместе: собираю в папке все прорывные ИИ-инструменты и обновления, чтобы вы всегда были первыми.

Не выпадайте из обоймы! Подписывайся на ИИ-обновления по ссылке ➡️ https://t.me/addlist/J1ZVdNPqSV81YTE0
№4702 категория вопросов: #ARCHITECHTURE