BA & SA | 10000 Interview questions
10.2K subscribers
173 photos
14 videos
343 links
Вопросы и задачи, которые задают на собеседованиях на позицию Бизнес и Системного аналитика. По вопросам сотрудничества- @DeliveryManager7
Download Telegram
№4688 категория вопросов: #DBMS
4688. В системе электронной коммерции нужно хранить заказы. Требования:
Полный аудит всех изменений статусов и данных заказа
Высокая скорость обработки текущих заказов Удобная аналитика данных Какой подход к проектированию хранения данных выбрать?
Anonymous Quiz
15%
Одна таблица с флагом актуальности + триггеры для истории
32%
Раздельные таблицы для текущих и архивных заказов
44%
Event Sourcing — хранить ленту событий изменений
9%
Одна таблица + вынос истории в файловые логи
🧑‍🎓Объяснение:
Event Sourcing идеален для сценариев, где важна полная трассируемость и аналитика изменений. Каждое действие (создание, оплата, доставка) хранится как отдельное событие. Это даёт:

Гарантированный аудит всех изменений
Производительность: актуальное состояние можно быстро восстановить или кэшировать
Гибкую аналитику: можно строить отчёты по любому срезу событий

Другие варианты имеют недостатки:

A: Триггеры скрывают логику, флаги усложняют запросы
B: Риск рассинхронизации, дублирование схемы
D: Файловые логи не позволяют делать сложные SQL-запросы

Вывод для аналитика: Event Sourcing — это не просто техника хранения, а бизнес-требование к отслеживаемости процессов. Подходит для финансовых операций, заказов, документооборота — где важна история изменений.
Please open Telegram to view this post
VIEW IN TELEGRAM
3
№4689 категория вопросов: #ARCHINECTURE
🧑‍🎓Объяснение:
Микросервисная архитектура оптимальна для такого сценария:

Независимое масштабирование: Сервис видео-трансляции можно масштабировать отдельно от сервиса рекомендаций, что критично при миллионах просмотров.
Гибкость технологий: Для обработки видео можно использовать C++/Go, для рекомендаций — Python с ML, для пользователей — Java.
Отказоустойчивость: Падение сервиса комментариев не остановит просмотр видео.
Независимые циклы разработки: Команды могут работать параллельно над разными сервисами.

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

A (Монолит): Не способен горизонтально масштабироваться под пиковые нагрузки. Общая БД станет узким местом.
C (Event-Driven): Хороша для реактивных систем, но недостаточна как основная парадигма для стриминга — требует синхронных API для базовых функций.
D (Serverless): Не подходит для долгих видео-сессий из-за ограничений времени выполнения функций и потенциально высоких затрат при непрерывной нагрузке.

💡 Архитектурный компромисс:
В реальности стриминговые платформы используют гибрид: микросервисы для основного функционала + Event-Driven для аналитики и уведомлений + специализированные решения (CDN) для доставки видео.

Ключевой вывод: Выбор архитектуры определяется типом нагрузки и требованиями к масштабированию. Для разнородных нагрузок (тяжелое видео + легкие метаданные) микросервисы дают максимальную гибкость.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1💯1
№4690 категория вопросов: #INTEGRATION
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