BA & SA | 10000 Interview questions
10.2K subscribers
172 photos
14 videos
342 links
Вопросы и задачи, которые задают на собеседованиях на позицию Бизнес и Системного аналитика. По вопросам сотрудничества- @DeliveryManager7
Download Telegram
Объяснение:

Проблема

Письма клиентам (со сбросом пароля, подтверждением заказа) не должны дублироваться. Но все внешние сервисы могут выдавать временные ошибки 5xx, и клиент, повторив запрос, рискует получить два письма.
Решение – идемпотентность на стороне получателя
В запросе на отправку письма нужно передавать уникальный идентификатор (например, 
message_id = UUID, связанный с заказом или пользователем). Почтовый сервис должен хранить уже обработанные ID (хотя бы в течение суток) и при повторном запросе с тем же ID возвращать успех, не отправляя письмо повторно.

Детали в требованиях

«Перед отправкой письма система должна генерировать уникальный 
message_id (например, order_id + timestamp). Передавать его в заголовке или теле запроса».
«Email-сервис должен реализовать проверку идемпотентности: если запрос с таким 
message_id уже обрабатывался, вернуть 200 OK без повторной отправки».
«Хранить ID не менее 24 часов для защиты от коллизий при сетевых задержках».
Почему не подходят другие варианты

A (не повторять) – письма могут теряться из-за сетевого сбоя. Надёжность упадёт.
C (увеличить таймаут) – не решает дублирование при повторе (пользователь нажал «отправить» дважды).
D (перестать пользоваться) – нереалистично.

Реальный кейс

Банк отправлял SMS с одноразовым кодом. Из-за ошибки в биллинге при повторе отправлялось две SMS. Клиенты путали код. После внедрения 
message_id дубликаты прекратились.
Please open Telegram to view this post
VIEW IN TELEGRAM
№4812 категория вопросов: #DBMS
4812. Запрос на выборку клиентов с суммой покупок > 1000 рублей:
SELECT client_id, SUM(amount) FROM orders GROUP BY client_id HAVING SUM(amount) > 1000.
Запрос выполняется 8 секунд. Как ускорить без сложных архитектурных изменений?
Anonymous Quiz
27%
Добавить индекс на client_id
67%
Создать материализованное представление предрасчитанными суммами по клиентам, обновляемое раз в час
5%
Партиционировать таблицу по дате
1%
Увеличить память сервера
1
Объяснение:

Почему партиционирование не решает
Партиционирование по дате уменьшит объём сканирования, если в 
WHERE есть дата, но здесь её нет – придётся сканировать все партиции.

Материализованное представление (MV)

MV хранит предрассчитанный результат запроса: 
SELECT client_id, SUM(amount) as total FROM orders GROUP BY client_id.
Занимает места ~ (кол-во клиентов) × (несколько байт).
Обновляется инкрементально после каждого изменения в 
orders или по расписанию.
Запрос к MV вместо основной таблицы выполняется за миллисекунды (читает всего N строк).

В требованиях нужно указать:

«Для отчёта "топ клиентов" использовать материализованное представление 
client_totals».
«Обновлять представление раз в час (допустима задержка)».
«При изменении данных (INSERT/UPDATE) в 
orders запускать фоновую задачу пересчёта».

Реальный пример
В CRM-системе отчёт «крупнейшие покупатели» грузился 30 секунд. После создания MV с ежечасным обновлением время упало до 0.2 секунды.
Please open Telegram to view this post
VIEW IN TELEGRAM
№4813 категория вопросов: #ARCHITECTURE
Объяснение:

Почему сложность – главная проблема
Микросервисы решают проблемы масштаба (тысячи разработчиков, миллионы запросов). Для маленькой команды они вводят накладные расходы:
Настройка Kubernetes, сервис-меша, дата-центра или кластера.
Отладка распределённых транзакций – запрос идёт через 5 сервисов, ошибку трудно воспроизвести.
Развёртывание: нужно вызывать CI/CD для каждого сервиса (минимум 3–4).
Мониторинг и логи – собирать их с нескольких сервисов сложнее.
При 100 запросах/сек и 5 разработчиках монолит с чёткими модулями будет работать не хуже, а разработка пойдёт быстрее.

Что делать вместо?

Модульный монолит с чёткими границами пакетов. Если в будущем нагрузка вырастет до 1000+ запросов/сек, легко выделить узкие места в отдельные сервисы.

Реальные примеры

Instagram долгое время был монолитом на Django.
Twitter начинал с монолита Ruby on Rails, а микросервисы внедрял, когда столкнулся с миллионами запросов.

Что аналитик должен рекомендовать

Оценить масштаб (100 запросов/сек – смешная нагрузка для современного сервера).
Оценить команду (5 человек – не нужно разделять).
Указать в NFR не «микросервисы», а «архитектура должна позволять горизонтальное масштабирование и выделение сервисов при росте нагрузки».

Вывод
Не усложняйте. Самая быстрая архитектура для малой команды – монолит с чистыми интерфейсами.
Please open Telegram to view this post
VIEW IN TELEGRAM
№4814 категория вопросов: #REQUIREMENTS
4814. Через месяц после утверждения требований заказчик просит добавить новое поле «скидка постоянного клиента» в форму заказа. Команда уже на середине спринта. Какой процесс нужно запустить?
Anonymous Quiz
2%
Сразу добавить поле, не спрашивая
97%
Оценить влияние, согласовать с командой, предложить варианты и зафиксировать решение в протоколе
1%
Отказать, потому что требования утверждены
0%
Передать решение архитектору
Объяснение:

Реальность
Изменения требований в середине спринта — норма. Бизнес не обязан ждать. Но нельзя их принимать без анализа.

Правильный процесс

Оценка влияния: сколько часов займёт (разработка, тестирование, документация), затронет ли другие модули, какой риск регресса.
Переговоры: можно ли перенести другую задачу, отложить текущую реализацию?

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

A – хаос, потеря контроля, срыв сроков.
C – негибкость, потеря доверия.
D – архитектор не владеет приоритетами бизнеса.

Реальный пример

В крупном ретейле заказчик попросил добавить отчёт по магазинам за прошлый месяц. Оценка показала 3 дня. Вместо срыва спринта договорились перенести менее важную фичу. Изменение задокументировали.
Please open Telegram to view this post
VIEW IN TELEGRAM
№4815 категория вопросов: #INTEGRATION
4815. Партнёр передаёт данные о заказах в виде CSV-файлов по FTP. Система иногда обрабатывает один и тот же файл дважды из-за дублирования имён. Как избежать повторной обработки?
Anonymous Quiz
44%
Переименовывать файл после обработки
42%
Использовать контрольный файл
14%
Удалять файл сразу после чтения
1%
Обрабатывать файлы только вручную
Объяснение:

Почему дублируется
Партнёр может скопировать файл повторно с тем же именем (по ошибке). Система видит новый файл и обрабатывает повторно, что ведёт к дублированию заказов.

Решение – идемпотентность на уровне файлов
Нужно хранить уже обработанные имена файлов и их даты модификации (или контрольные суммы). Например: таблица 
processed_files с колонками filenamesizemodified_timeprocessed_at. Перед обработкой проверять, есть ли уже запись с таким именем и размером. Если есть — пропустить.
Дополнительно
Можно использовать 
.done файл (пустышка), который партнёр создаёт после окончания записи, и система ждёт наличия .done.
Или переименовывать обработки файл в 
.processed и не сканировать «старые» имена.
Почему не подходят другие

A (переименовывать) – но партнёр может положить файл заново уже с новым именем? Не решает глобально.
C (удалять) – плохо для аудита и отказоустойчивости.
D (ручная обработка) – не масштабируется.

Реальный кейс

В логистике дублирование файлов приводило к тому, что машина направлялась дважды. После внедрения таблицы 
processed_files защита от дублей сработала.
Please open Telegram to view this post
VIEW IN TELEGRAM
💯1
№4816 категория вопросов: #DBMS
Объяснение:

Проблема

Если в БД хранить время без зоны (
timestamp), то каждый клиент интерпретирует его по своему часовому поясу (или вообще неверно). Решение: хранить все времена в UTC (единая глобальная шкала). При показе: брать временную зону пользователя (из профиля, геолокации) и преобразовывать.

Почему B оптимально

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

A – преобразовать в 
timestamptz, но это полумера.
C – избыточно, сложно.
D – неприемлемо для международных систем.

Реальный пример

Booking.com хранит даты заезда в UTC, а показывает в локали пользователя.
Требования
Все временные метки в БД – 
TIMESTAMP WITH TIME ZONE или timestamp в UTC.
Конвертация происходит на уровне представления.
Please open Telegram to view this post
VIEW IN TELEGRAM
№4817 категория вопросов: #INTERVIEW
4817. На собеседовании спрашивают: «Оцените, сколько дней потребуется, чтобы внедрить авторизацию через OAuth2». Ваш ответ?
Anonymous Quiz
7%
Назову 5 дней, так как OAuth2 типовой
81%
Скажу, диапазон от 2 до 10 дней, плюс риски
6%
Попрошу помощи у других
6%
Откажусь отвечать
Объяснение:

Что демонстрирует кандидат
Понимание, что оценка без контекста — гадание.
Умение задавать уточняющие вопросы:
Какой провайдер (Google, собственный)?
Есть ли готовый SDK, примеры?
Требуется ли поддержка мобильных приложений?
Как обновлять токены, как хранить секреты?
Выделение рисков: если документация плохая или провайдер меняет API, то срок может вырасти вдвое.

Почему правильный ответ B
Интервьюеры хотят видеть аналитический склад ума, а не цифру.

Реальный опыт
Кандидат, который задавал вопросы, получил оффер, а тот, кто назвал 3 дня без уточнений — нет.

Вывод
На собеседовании никогда не давайте оценки без уточнения контекста.
Please open Telegram to view this post
VIEW IN TELEGRAM
80% системных аналитиков заваливают собеседования из-за глупых ошибок

Самый простой способ подготовиться к собеседованию — это послушать, как его проходят другие.

В канале System | Собеседования собрали базу реальных технических интервью, чтобы вы могли учиться на чужих ошибках, а не на своих.

Что внутри:
💘 Разборы живых записей — от проектирования API до работы с БД
💘 Ключевые вопросы лидов из бигтеха
💘 Анализ ответов — где кандидат «поплыл» и как нужно было ответить правильно

Подписывайтесь, чтобы получить доступ к базе живых разборов и увереннее чувствовать себя на собесах.
Please open Telegram to view this post
VIEW IN TELEGRAM
1
№4818 категория вопросов: #BPMN