BA & SA | 10000 Interview questions
10.2K subscribers
172 photos
14 videos
342 links
Вопросы и задачи, которые задают на собеседованиях на позицию Бизнес и Системного аналитика. По вопросам сотрудничества- @DeliveryManager7
Download Telegram
№4821 категория вопросов: #REQUIREMENTS
4821. Вы аналитик в стартапе. Заказчик требует, чтобы система обрабатывала 10 000 заказов в секунду, хотя текущий пик — 10 заказов в секунду. Разработка такого уровня масштабирования обойдётся в утроение бюджета. Ваши действия?
Anonymous Quiz
0%
Принять требование и искать более дешёвую реализацию
100%
Анализ: спросить заказчика, откуда взялась цифра, предложить альтернативу и задокументировать риск.
0%
Отказаться от проекта
0%
Добавить требование в бэклог и забыть
Объяснение:

Проблема
Нереалистичные нефункциональные требования (NFR) — частая ошибка стартапов. Заказчик может назвать цифру «10 000» без обоснования, потому что «конкуренты так могут» или «на всякий случай».

Что должен сделать аналитик
Уточнить источник цифры: откуда ожидается такой рост, есть ли маркетинговые прогнозы или это просто желание.
Предложить компромисс: сделать архитектуру, которая позволит горизонтально масштабироваться, но не строить инфраструктуру на полную мощность сейчас (например, использовать облачные сервисы с автосейлингом).
Задокументировать риск: «При резком росте нагрузки без дополнительных инвестиций система может не выдержать. Требуется повторная оценка через 6 месяцев».

Почему не другие варианты
A — согласиться без анализа — приведёт к перерасходу бюджета или невыполнимому обязательству.
C — отказ от проекта без попытки обсуждения — не гибко.
D — игнорирование — безответственно.

Реальный кейс
Один стартап по доставке еды требовал 5000 RPS с первого дня. Аналитик предложил использовать масштабируемый облачный кластер, но с минимальной конфигурацией. После запуска пик оказался 50 RPS. Экономия составила 80% бюджета.
Please open Telegram to view this post
VIEW IN TELEGRAM
№4822 категория вопросов: #INTEGRATION
4822. Сервис А, получив ошибку, начал повторять запросы каждую секунду, создавая лавину нагрузки на сервис В, которая не давала ему восстановиться. Как называется этот эффект и как его предотвратить?
Anonymous Quiz
13%
Deadlock; использовать распределённую блокировку
84%
Retry storm; использовать экспоненциальную задержку и ограничение числа ретраев,плюс Circuit Breaker
2%
Race condition; добавить идемпотентность
2%
Thundering herd; использовать очереди
Объяснение:

Проблема
Когда сервис В недоступен, множество экземпляров сервиса А одновременно начинают повторные попытки с фиксированным интервалом. Это создаёт синхронизированные всплески нагрузки, которые мешают восстановлению. Это называется retry storm (шторм повторных вызовов).

Решение
Экспоненциальная задержка (exponential backoff) — интервал между ретраями удваивается (1, 2, 4, 8 секунд). Это раздвигает по времени пики нагрузки.

Джиттер (jitter) — случайное небольшое смещение, чтобы разные экземпляры не синхронизировались.
Ограничение числа ретраев (например, 5 попыток).
Circuit Breaker — после определённого числа ошибок быстрый сброс без вызова вообще.

Почему не другие варианты
A — deadlock относится к блокировкам в БД.
C — race condition — состояние гонки, не то.
D — thundering herd — асинхронная проблема, но решение с очередями не прямое.

Реальный случай
В Amazon одна из внутренних систем легла из-за retry storm. После внедрения экспоненциального бэккотта и джиттера инциденты прекратились.

Требования аналитика
Политика ретраев: начальная задержка 1 сек, максимум 10 сек, коэффициент 2, джиттер 0-30%.
Please open Telegram to view this post
VIEW IN TELEGRAM
№4823 категория вопросов: #DBMS
4823. Нужно отображать бесконечную ленту новостей (скроллинг). Запрос с OFFSET 10000 LIMIT 10работает очень медленно. Какой метод пагинации использовать для большой глубины?
Anonymous Quiz
1%
Повысить размер кэша БД
93%
Пагинация на основе курсора (keyset pagination) — использовать WHERE created_at < последнее_значение
5%
Использовать OFFSET с подзапросом
1%
Сгружать всю таблицу в приложение и фильтровать
Честно, мне кажется, через пару лет навык работы с ИИ будет таким же базовым,
как умение пользоваться интернетом.

И самое интересное — многие это до сих пор недооценивают.

Кто-то делает всё вручную,
а другие уже экономят часы работы с помощью нейросетей и растут быстрее.
Разница между ними со временем будет только увеличиваться.


Я для себя собрал папку с сильными экспертами по ИИ.
Там — реальные инструменты, кейсы и способы использовать нейросети с пользой.

Если вам тоже интересна эта тема — добавляйте папку 👇

https://t.me/addlist/KuqHb68lTqhhNDJi


доступ 48 часов
Объяснение:

Почему OFFSET плох
OFFSET заставляет базу пропускать все предыдущие строки (10000 записей), даже если они не нужны. При глубине 1 млн строк производительность катастрофична.

Пагинация на основе курсора
Вместо 
OFFSET запрос использует условие на индексированное поле, по которому идёт сортировка, например:
SELECT * FROM news WHERE created_at < last_seen_date ORDER BY created_at DESC LIMIT 10.
Переменная 
last_seen_date — значение из последней записи предыдущей страницы. Это называется keyset pagination или seek method.

Преимущества
База сканирует только нужные строки + ограниченный диапазон.
Работает за O(логарифм) по индексу.
Не зависает на больших смещениях.

Требования
Индекс на поле сортировки (например, 
created_at).
Уникальный вторичный ключ для разрешения связей (добавить 
id в ORDER BY).

Реальный пример
Twitter и Reddit используют курсоры для бесконечной ленты.

Вывод
Аналитик должен потребовать использования курсора вместо 
OFFSET для любых бесконечных списков.
Please open Telegram to view this post
VIEW IN TELEGRAM
№4824 категория вопросов: #ARCHITECTURE
4824. В системе из 5 микросервисов при каждом обновлении данных нужно уведомлять 3 других сервиса. Прямые вызовы привели к большой связанности и падению одного сервиса, блокирующему других. Какой архитектурный стиль снизит связанность?
Anonymous Quiz
1%
Перейти на синхронные вызовы с ретраями
99%
Внедрить событийно-ориентированную архитектуру, где сервисы публикуют события в брокер
0%
Сделать всё в одном монолите
0%
Использовать общую базу данных для уведомлений
Объяснение:

Проблема
Прямые синхронные вызовы между сервисами создают жесткую связанность. Когда сервис А вызывает Б, В, Г, то падение любого из них может затронуть А. Событийная архитектура решает это.

Event-driven
Сервис-источник публикует событие в брокер (Kafka, RabbitMQ).
Подписчики (другие сервисы) получают события асинхронно.
Источник не знает о подписчиках и не ждёт ответа.
Отказ одного подписчика не влияет на источник и других.

Почему это снижает связанность
Слабая связанность — публикация события и его обработка разделены.
Отказоустойчивость — брокер буферизует события, упавший подписчик получит их при восстановлении.
Легко добавлять новых подписчиков без изменения источника.

Почему не другие
A — ретраи не решат связанность.
C — монолит против микросервисной идеи.
D — общая БД создаёт другую связанность.

Реальный пример
Upwork перешёл на event-driven и ускорил доставку уведомлений в реальном времени.

Вывод аналитика
Событийная архитектура — стандарт для слабо связанных микросервисов. Аналитик должен в требованиях указывать асинхронное взаимодействие для всех бизнес-событий, не требующих немедленного ответа.
Please open Telegram to view this post
VIEW IN TELEGRAM
№4825 категория вопросов: #REQUIREMENTS
4825. Вам нужно оценить стоимость разработки системы для аренды самокатов. Бизнес-функции: «заблокировать самокат», «начать поездку», «завершить поездку», «списать оплату». Какой метод позволит измерить объём требований независимо от технологии?
Anonymous Quiz
10%
Количество пользовательских историй
82%
Метод COSMIC – считаем функциональные процессы, триггеры и объекты данных
1%
Количество экранов в прототипе
7%
Стори-поинты на основе усреднения
Объяснение:

Почему это важно
Заказчикам нужна объективная оценка размера требований до начала разработки. Метод COSMIC позволяет измерить функциональный размер в единицах CFP (COSMIC Function Points) на основе логики данных, независимо от языка и платформы.

Как работает COSMIC (упрощённо)
Выделяем функциональные процессы (например, «Начать поездку»).
Для каждого процесса определяем триггер (событие, инициирующее процесс – например, пользователь отсканировал QR-код).
Определяем объекты данных, которые процесс читает или изменяет (например, состояние самоката, ID пользователя, временная метка).
Каждое перемещение данных (вход, выход, чтение, запись) – 1 CFP.
В примере с самокатом:
«Начать поездку»: триггер – сканирование; читается статус самоката, записывается начало поездки, обновляется счётчик. Это даст, скажем, 4 CFP.
Суммируя по всем процессам, получим объективный размер.

Почему не другие варианты
A (количество историй) – зависит от степени детализации, субъективно.
C (количество экранов) – не отражает сложность логики.
D (стори-поинты) – относительная оценка, не переносится между проектами.

Реальный кейс
Крупный банк использовал COSMIC для оценки размера кредитного конвейера. Оказалось, что оценка в CFP отличается от экспертной на 15%, но зато прозрачна для заказчика.

Вывод
Аналитик, владеющий COSMIC, может дать объективную оценку размера требований и обосновать бюджет.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21
№4826 категория вопросов: #INTEGRATION
4826. Вам нужно синхронизировать данные из реляционной OLTP-базы в аналитическое хранилище (DWH) с минимальной задержкой (< 5 секунд). Традиционный ETL ночью не подходит. Какой подход обеспечит почти реальное время и не нагрузит исходную систему?
Anonymous Quiz
1%
Периодический SELECT всех изменённых строк по флагу
95%
Change Data Capture (CDC) через чтение лога транзакций (например, Debezium + Kafka)
1%
Триггеры на каждую таблицу
2%
Отказ от синхронизации, использовать прямое чтение из OLTP для отчётов
Объяснение:

Проблема
Периодический SELECT из большой OLTP-базы создаёт нагрузку и не обеспечивает задержку 5 секунд. Триггеры замедляют транзакции прямо в продовой системе.

Решение – CDC
Change Data Capture читает журнал транзакций (WAL в PostgreSQL, binlog в MySQL) и отправляет изменения (INSERT, UPDATE, DELETE) в Kafka. Потребитель (например, коннектор к ClickHouse) воспроизводит их в DWH с задержкой миллисекунды.
Преимущества
Минимальная нагрузка на исходную БД (читается уже сформированный лог).
Гарантированный порядок и сохранность (можно воспроизвести с любого смещения).
Не требует изменений в таблицах (ни триггеров, ни флагов).
Почему не другие варианты
A – высокий load, не даст 5 секунд.
C – триггеры замедляют вставку/обновление.
D – прямое чтение из OLTP убивает производительность аналитики.

Реальный пример
В крупном ритейлере CDC + Kafka синхронизирует 5000 изменений/сек с задержкой 1 секунда.

Требования аналитика
Использовать логическую репликацию или инструмент типа Debezium.
Обеспечить идемпотентность в целевой системе.
Please open Telegram to view this post
VIEW IN TELEGRAM
№4827 категория вопросов: #SYSTEMDESIGN