В этой подборке вопросы сгруппированы по формату «System Design», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: backend, api, database.
Надёжная схема: сохранить чек и outbox-событие в одной транзакции, доставить его через RabbitMQ, а REST-проверку выполнять с ограниченными повторами и идемпотентностью.
Разделите обработку по независимым ключам и масштабируйте consumers горизонтально, предварительно выяснив узкое место. Для Kafka полезный параллелизм ограничен числом партиций и требованиями к порядку.
Не пересчитывайте весь COUNT после каждого изменения: поддерживайте инкрементальный агрегат или счётчики по сегментам и периодически сверяйте их. Сначала уточните, нужна ли точность в текущий момент.
Удаляйте колонку этапами: сначала прекратите её использование во всех версиях приложения, затем проверьте зависимости и только потом выполняйте DROP COLUMN с ограничением ожидания блокировки.
Вынесите обработку видео в фон: загрузка в объектное хранилище, создание задания, очередь и масштабируемые воркеры. Прогресс храните отдельно и отдавайте клиенту через polling, SSE или WebSocket.
Хорошая схема: commit, проверки, сборка неизменяемого артефакта, staging, совместимые миграции, контролируемая выкладка и проверка метрик. Один и тот же артефакт продвигают между окружениями.
Если модель нужна раз в неделю и допустим холодный старт, постоянный выделенный сервис может быть избыточным. Рассмотрите пакетное задание, масштабирование до нуля или общий пул вычислений.
Минимальная схема включает покупателей, товары, заказы и позиции заказа. Позиции связывают заказ с товарами и сохраняют количество и цену на момент покупки.
Задайте общий deadline, независимые таймауты и ограниченную параллельность внешних вызовов. Быстрые результаты не должны ждать бесконечно медленные или нестабильные зависимости.
Такую структуру можно использовать для слоистой архитектуры: api — HTTP, application — сценарии, domain — бизнес-правила, inf — адаптеры БД, очередей, кеша и внешних API.
Нужны проверка владельца счёта, точное представление суммы, единая транзакция, защита конкурентного списания и идемпотентность. Два независимых UPDATE могут оставить деньги списанными без зачисления.
Разделите поток поступления IoC, нормализацию и быстрый поиск: очередь, идемпотентная обработка, индекс точного совпадения и отдельные индексы для доменных или сетевых запросов.