В этой подборке вопросы сгруппированы по формату «System Design», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: backend, api, database.
Сначала различите число samples и активных временных рядов: 500 млн отсчётов в сутки — около 5,8 тыс. в секунду. Основные меры — снизить кардинальность, убрать лишний сбор и оптимизировать запросы.
Разделите приём запроса и выполнение: сервер сохраняет задание, возвращает идентификатор, а результат становится доступен позднее через статус, callback или уведомление.
Запрос проходит через аутентификацию, валидацию, проверку прав и сервис обновления настроек. Изменение сохраняется атомарно, а ответ содержит актуальное состояние и версию ресурса.
Возвращайте явное доменное состояние и доступные действия, а различия web и mobile оформляйте согласованной моделью представления. Клиент не должен угадывать сценарий по случайному набору полей.
Сначала найдите причину деградации по планам запросов, статистике и нагрузке. Затем рассмотрите индексы, партиционирование, архивный слой и агрегаты без потери исторических данных.
После отправки записи показывайте состояние ожидания и идентификатор операции. Календарь обновляйте из серверной модели чтения, а push или WebSocket используйте как сигнал получить актуальные данные.
Разделите кампанию, получателей и попытки отправки. Загрузка и проверка номеров предшествуют планированию, а очередь воркеров отправляет сообщения с учётом лимитов провайдера и срока действия.
Хорошая граница сервиса — самостоятельная бизнес-возможность с понятным владением данными и ограниченными связями. Дополнительные причины — независимые релизы, масштабирование и ответственность команды.
Начните с цели бизнеса, пользователей и границ продукта: какие книги продаются, как оплачиваются и доставляются. Затем опишите ключевые сценарии, данные, интеграции и ограничения.
Свяжите рекламный клик и первый запуск через поддерживаемый канал атрибуции или одноразовый контекст перехода. Один только Device ID не позволяет достоверно восстановить анонимный визит.
Используйте ключ идемпотентности: браузер повторяет POST с тем же ключом, а сервер возвращает результат первого создания вместо создания второго гномика.
Основное сопоставление выполняется по ID заказа с дополнительной проверкой суммы, валюты и статуса платежа. Одинаковой суммы недостаточно: без надёжного ключа запись остаётся неразобранной.