BA & SA | 10000 Interview questions
10.2K subscribers
173 photos
14 videos
343 links
Вопросы и задачи, которые задают на собеседованиях на позицию Бизнес и Системного аналитика. По вопросам сотрудничества- @DeliveryManager7
Download Telegram
4690.Приложение должно отправлять данные о действиях пользователя во внешнюю аналитическую платформу (например, Яндекс.Метрика). Отправка не должна влиять на производительность основного приложения. Какой способ интеграции предпочтительнее?
Anonymous Quiz
9%
Синхронный REST-вызов сразу после действия пользователя
14%
Логирование в файл с последующей отправкой раз в час
66%
Асинхронная отправка через очередь сообщений
12%
Сохранение в локальную БД с фоновой синхронизацией
👍2
🧑‍🎓Объяснение:
Это типичный сценарий интеграции для сбора аналитики, где ключевые требования:

Не блокировать основной поток работы приложения
Не потерять данные при сбоях
Масштабироваться при росте нагрузки
Вариант C (очередь сообщений) решает все задачи:

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

A) Синхронный REST-вызов:

Блокирует интерфейс пользователя на время вызова (100-500 мс)
При недоступности аналитики пользователь получит ошибку
Создает нагрузку на основное приложение
B) Логирование в файл:

Сложно обеспечить надежную доставку
Требуется отдельный механизм ротации и обработки файлов
Задержка данных до часа (не подходит для реальной аналитики)
D) Локальная БД:

Создает нагрузку на основную базу данных
Требует сложного механизма фоновой синхронизации
Риск конфликтов при одновременной записи и чтении
💡 Профессиональный совет аналитику:
При проектировании интеграций всегда разделяйте:

Критичные операции (платежи, основные действия) — требуют немедленной обработки
Фоновые операции (аналитика, нотификации, аудит) — можно выполнять асинхронно через очереди
В данном случае сбор аналитики — классический пример фоновой операции, где важна надежность доставки, но не мгновенность.
Please open Telegram to view this post
VIEW IN TELEGRAM
№4691 категория вопросов: #ARCHINECTURE
4691. Для ядра банковской системы (переводы, балансы) критичны точность данных (ACID) и надёжность. Нужно обрабатывать тысячи операций в секунду. Какую архитектуру выбрать?
Anonymous Quiz
43%
Микросервисы — каждый сервис за свой процесс
18%
Монолит с общей БД — всё в одном приложении
21%
Событийная архитектура — общение через события
18%
CQRS — разделение на запись и чтение
🧑‍🎓Объяснение:
Монолит с общей БД здесь оптимален:

ACID-гарантии: Перевод денег между счетами требует атомарности — списать с одного, зачислить на другой. В монолите это одна транзакция в общей БД.
Простота и надежность: Нет сетевых вызовов между сервисами, меньше точек отказа, проще отладка.
Производительность: Локальные вызовы быстрее, чем HTTP-запросы между микросервисами.

Почему не другие:

A (Микросервисы): Создадут проблему распределенных транзакций — сложно гарантировать, что списание и зачисление пройдут согласованно.
C (Событийная): Приводит к отложенной консистентности (eventual consistency). Баланс может обновиться не сразу, что недопустимо.
D (CQRS): Усложняет систему без необходимости. Для переводов важен единый источник истины.

💡 Вывод для аналитика:
Не гонитесь за модными трендами. Для высокосогласованных (highly consistent) доменов, где важна точность каждого состояния (финансы, бронирования), проверенный монолит часто лучше микросервисов.
Please open Telegram to view this post
VIEW IN TELEGRAM
№4692 категория вопросов: #ARCHINECTURE
4692. налитик в финтех-компании, разрабатывающей приложение для трейдинга. Требуется защитить функцию перевода крупных сумм на внешние счета. Какой подход к аутентификации будет наиболее сбалансированным по соотношению безопасности и юзабилити?
Anonymous Quiz
48%
Адаптивная аутентификация: 2FA срабатывает при переводе > 50 000 ₽ или с нового устройства
1%
Использование только пароля, но с усиленным шифрованием канала связи
42%
Обязательная двухфакторная аутентификация (2FA) по SMS для каждого перевода
8%
2FA только при входе в приложение, а переводы — без дополнительных подтверждений
🧑‍🎓Объяснение:
В security-требованиях аналитик должен искать баланс между защитой и удобством.

А (Адаптивная аутентификация) — это risk-based подход:

Безопасность: Срабатывает на рисковые события (большая сумма, новое устройство, необычная геолокация).
Юзабилити: Не беспокоит пользователя при рутинных операциях.
Соответствие стандартам: Отвечает требованиям ЦБ РФ и 115-ФЗ по контролю за подозрительными операциями.

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

С (2FA на каждый перевод): Надежно, но убивает юзабилити — пользователи начнут искать более удобных конкурентов.
B (2FA только на вход): Оставляет уязвимость — если сессия украдена, злоумышленник сможет перевести любую сумму.
D (Только пароль): Не соответствует современным стандартам безопасности для финансовых операций.

💡 Ключевой вывод для аналитика:
Security-требования должны быть контекстно-зависимыми. Ваша задача — прописать в ТЗ правила, когда и при каких условиях срабатывают дополнительные проверки, основываясь на оценке рисков. Это и есть профессиональный подход к проектированию защищенных систем.
Please open Telegram to view this post
VIEW IN TELEGRAM
№4693 категория вопросов: #ARCHINECTURE
4693. Вы анализируете проблему в e-commerce: ежедневный отчёт выполняется 25+ минут, хотя данные за день — всего ~50 000 заказов. Таблица orders проиндексирована, запрос использует SUM() и GROUP BY. В чём вероятная причина и как это исправить?
Anonymous Quiz
6%
Увеличить выделенную память для СУБД
28%
Добавить индекс на поле category_id
50%
Создать материализованное представление (materialized view), которое обновляется ночью
16%
Разделить запрос на несколько более простых
👍1
🧑‍🎓Объяснение:
Это классическая ситуация, когда аналитические (OLAP) запросы пытаются выполняться на операционной (OLTP) базе данных, что приводит к конфликту ресурсов и медленной работе.

Почему вариант C правильный:

Разделение нагрузки: Материализованное представление — это физическая копия результата запроса, которая обновляется по расписанию (например, раз в ночь). Отчёт получает данные из готовой «слепка», не нагружая основную таблицу orders в рабочее время.
Скорость: Выборка из материализованного представления происходит мгновенно, так как это простой SELECT из предварительно рассчитанной таблицы.
Предсказуемость: Время формирования отчёта не зависит от пиковой нагрузки на операционную систему.
Почему другие варианты не решат проблему:

A (Увеличить память): Поможет только если проблема именно в нехватке RAM для обработки запроса, но не устранит конфликт OLTP/OLAP.
B (Добавить индекс): Индекс на category_id уже, скорее всего, есть (раз используется GROUP BY). Новый индекс может даже замедлить вставку новых заказов.
D (Разделить запрос): Не решит фундаментальную проблему — тяжёлый аналитический запрос в рабочее время на операционных данных.
🔍 Глубинный анализ для системного аналитика:
Проблема здесь не техническая, а архитектурная. Аналитик должен был выявить это требование на этапе проектирования и предложить отдельное решение для отчётности:

Data Warehouse — для сложной аналитики
Материализованные представления — для ежедневных отчётов
OLAP-кубы — для многомерного анализа
📌 Практический совет: Когда в требованиях есть «ежедневные отчёты», сразу задавайте вопросы:

Какую задержку данных можно допустить? (реальное время/час/ночь)
В какое время запускать расчёты?
Нужна ли детализация до отдельных транзакций в отчёте?
Этот кейс показывает, как важно разделять операционную обработку и аналитическую обработку данных — принцип, лежащий в основе архитектуры современных data-driven приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
5
№4694 категория вопросов: #DBMS
4694. Запросы по поиску документов конкретного пользователя за последний месяц стали выполняться неприемлемо долго, хотя на поле user_id есть индекс. В чём наиболее вероятная причина проблемы и как её решить?
Anonymous Quiz
23%
Индекс на user_id фрагментирован — нужно выполнить REINDEX
57%
Запрос выбирает слишком много строк — добавить условие по дате и составной индекс
3%
Не хватает оперативной памяти — увеличить shared_buffers
17%
Нужно включить механизм кэширования запросов на уровне приложения
🧑‍🎓Объяснение:
Это классическая ситуация работы с большими таблицами временных данных, где начальный индекс становится неэффективным из-за специфики запросов.

🔍 Почему проблема возникает:

Индекс на user_id позволяет быстро найти ВСЕ документы пользователя за всю историю
У активного пользователя может быть 100K+ документов за несколько лет
После поиска по индексу СУБД всё равно должна просканировать и отсортировать все эти строки
При выборке "за последний месяц" фактически обрабатывается 99% ненужных данных
Почему вариант B правильный:

Составной индекс (user_id, created_at) решает проблему кардинально:

Данные уже отсортированы по пользователю И дате
СУБД находит первую запись пользователя за нужный период и читает последовательно только релевантные строки
Не нужно сортировать результаты или фильтровать лишнее
Статистика эффективности:

До: Сканирование 100K записей пользователя → фильтрация → сортировка
После: Сканирование 1-2K записей (только за нужный месяц) → готовый результат
Пример запроса, который станет эффективным:

```sql
SELECT * FROM documents
WHERE user_id = 12345
AND created_at >= '2024-10-01'
ORDER BY created_at DESC
```

-- Использует индекс (user_id, created_at)
Почему другие варианты не решат проблему:

A (REINDEX): Поможет, если индекс действительно фрагментирован на 40%+, но не изменит принципиальную неэффективность одно-колоночного индекса для такого запроса.
C (Увеличить память): Симптоматичное лечение. Проблема в логике доступа к данным, а не в ресурсах.
D (Кэширование): Маскирует проблему, но не решает её. При первом запросе или сбросе кэша задержки вернутся.
💡 Профессиональный совет аналитику:

При проектировании таблиц с историческими данными всегда задавайте вопросы:

«По каким полям чаще всего будет фильтрация?» → Составные индексы на комбинации этих полей
«Какой типичный диапазон выборки?» → Индексы должны поддерживать типичные сценарии (последние N дней/записей)
«Нужна ли сортировка в результатах?» → Индекс может обеспечивать предварительную сортировку
📊 Реальный пример из практики:
В одной из систем после добавления составного индекса (user_id, created_at, status) время выполнения типовых запросов сократилось:

Поиск документов пользователя: с 14 сек → 120 мс
Отчёт "Документы за месяц": с 8 сек → 90 мс
Нагрузка на БД: снизилась на 40%
🎯 Вывод: Правильные индексы — это не просто техническая оптимизация, а архитектурное решение, которое должно закладываться на этапе проектирования схемы данных. Аналитик, понимающий паттерны доступа к данным, может предотвратить такие проблемы до их возникновения.
Please open Telegram to view this post
VIEW IN TELEGRAM
5
№4695 категория вопросов: #REQUIREMENTS
4695. При сборе требований на модуль «Мгновенные переводы» заказчик хочет: 1) Переводы мгновенные, 2) Максимально безопасные, 3) С возможностью отмены в течение 24 часов, 4) Без нагрузки на основную БД. Что должен сделать аналитик?
Anonymous Quiz
1%
Зафиксировать как есть и передать разработчикам
97%
Структурировать требования, выявить противоречия и организовать сессию с заказчиком
2%
Отклонить требование об отмене как небезопасное
0%
Сразу предложить архитектурное решение
🧑‍🎓Объяснение:
Это классическая ситуация, когда стейкхолдеры выдают смешанные, частично противоречивые требования. Задача аналитика — не просто записать, а проанализировать, структурировать и разрешить противоречия.

🎯 Почему вариант B — правильный:
Разделение требований — первый шаг к ясности:
Функциональные:
«Переводы между клиентами банка»
«Возможность отмены перевода в течение 24 часов»
Нефункциональные:
«Мгновенное проведение» (скорость, latency)
«Максимальная безопасность» (security, compliance)
«Без нагрузки на основную транзакционную БД» (производительность, масштабируемость)
Выявление противоречий:
«Мгновенно» vs «Максимальная безопасность» — усиленные проверки безопасности (3D-Secure, фрод-мониторинг) требуют времени.
«Отмена в течение 24 часов» vs «Безопасность» — может создавать риски мошенничества (chargeback).
«Мгновенно» vs «Без нагрузки на основную БД» — синхронные транзакции нагружают БД.
Организация сессии с заказчиком позволяет:
Выяснить бизнес-цели за каждым требованием.
Определить приоритеты: что критично, а чем можно пожертвовать.
Найти компромиссы: например, «мгновенно» = до 5 секунд, отмена только через службу поддержки с аудитом.

Почему другие варианты ошибочны:
A (Передать как есть): Это позиция безответственного аналитика. Разработчики потратят время на уточнения, возможны переделки, сроки сорвутся. Аналитик — не курьер требований, а их архитектор и валидатор.

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

D (Предложить техническое решение сразу): Это преждевременное погружение в реализацию. Сначала нужно согласовать что и зачем, а потом уже как. К тому же, асинхронная очередь с модерацией нарушает требование «мгновенно».

💡 Как правильно действовать аналитику в таком кейсе:
Уточнить и детализировать каждое требование через вопросы:

«Что значит мгновенно? 1 секунда? 5 секунд?»
«Какие сценарии отмены переводов? Кто может инициировать?»
«Какую нагрузку на основную БД считаем допустимой?»
Документировать в формате, например:

```text
FR-001: Перевод между клиентами банка...
NFR-001: Время обработки 95% переводов ≤ 3 сек...
CONSTRAINT-001: Не использовать прямые транзакции в основной БД OLTP...
```

Провести воркшоп с участием бизнеса и техлидов, чтобы:
Обсудить технические ограничения
Оценить риски и стоимость реализации каждого требования
Зафиксировать осознанные компромиссы в согласованном бэклоге
Предложить варианты архитектуры уже после согласования требований:
Кэширование балансов
Event-driven архитектура с сагой для отмены
Отдельный read-only слой для переводов

Вывод для аналитика: Ваша ключевая ценность — не в записи пожеланий, а в управлении ожиданиями, выявлении противоречий и нахождении жизнеспособного баланса между бизнес-целями и техническими возможностями. Именно это отличает профессионального аналитика от простого «сборщика требований».
Please open Telegram to view this post
VIEW IN 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