В этой подборке вопросы сгруппированы по формату «System Design», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: backend, api, database.
BFF предоставляет интерфейс, адаптированный под конкретный frontend, вместо одного универсального API для всех. Он полезен, когда клиентам нужны существенно разные данные и сценарии взаимодействия.
Строгую атомарность дают поддерживаемые распределённые транзакции, например 2PC, либо перенос инварианта в одну транзакционную границу. Saga обеспечивает компенсации, но не равна общему ACID rollback.
Покажите жизненный цикл заявки: событие входа, обработку каждым сервисом, промежуточные состояния и финальное решение. Конкретные топики и правила одобрения нужно брать из реального проекта.
API Gateway решает общие задачи входа и маршрутизации, а BFF адаптирует API под конкретный клиентский опыт. Они могут сосуществовать, а не обязательно заменяют друг друга.
Модульность — разделение ответственности внутри системы; микросервисы дополнительно предполагают самостоятельные процессы и независимое развёртывание. Наличие сервисного класса не делает модуль микросервисом.
Сначала определяют, какие атрибуты нужны и где их источник истины, затем получают их по стабильному идентификатору клиента. Конкретные источники и схема зависят от системы.
Возникнет cache stampede: множество одновременных промахов отправит одинаковые запросы в базу. Нужны объединение обновлений, выдача допустимо устаревшего значения и ограничение нагрузки на источник.
Разделите API скоринга, получение и подготовку признаков, inference и сохранение решения. На интервью опишите фактические границы системы и отдельно свой личный вклад.
При постоянных 10 изображениях в секунду получится 864 000 изображений в сутки. Дальнейший расчёт требует среднего размера, числа производных файлов, времени обработки и срока хранения.
Согласованное хеширование размещает ключи и узлы в одном пространстве хешей. При добавлении или удалении узла меняется владелец только затронутых диапазонов, а не большинства ключей.
Ключи и узлы отображаются на хеш-кольцо; ключ обслуживает следующий узел по кольцу. При изменении состава переносится часть диапазонов, а не почти все ключи, как при hash(key) % N.
Можно фиксировать успехи и ошибки отдельно, если известен результат каждого сообщения. Неподтверждённые сообщения повторяются, а получатель должен выдерживать дубликаты.