В этой подборке вопросы сгруппированы по формату «System Design», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: backend, api, database.
Проверьте право блокировать продавца и идемпотентно создайте запись с уникальным seller_id. Повторная блокировка не должна создавать дубликаты или терять аудит.
Дубликат заявки может быть критичен, если создаёт повторный выезд, оплату или конфликт статусов. Повтор технического запроса и новое обращение жителя нужно различать.
Контракты могут связываться синхронными API, общими событиями и идентификаторами бизнес-сущностей. Важно отличать необходимую связь от зависимости от внутренних моделей.
Событие сначала сохраняют устойчиво, затем отправляют с подтверждением и повторяют после сбоев. Получатель должен безопасно обрабатывать дубликаты: сеть не даёт exactly-once сама по себе.
Типичные сбои бронирования — конкуренция за место, истечение резерва, неопределённый результат оплаты и повторные запросы. Нужна явная машина состояний и восстановление.
Создайте ограниченный jobs-канал, запустите ровно N workers и собирайте результаты отдельным потребителем. Закройте results только после завершения всех workers.
Опишите PostgreSQL как источник истины и Redis как кэш, если именно так было в проекте. Важны срок жизни, инвалидирование и безопасное поведение при отказе.
Границы сервисов определяют бизнес-ответственностью и владением данными, а взаимодействия — явными API или событиями. Важно избегать скрытой связи через общую схему БД.
Сервисы выделяют по самостоятельной ответственности, владению данными и потребности в независимом развитии или масштабировании, а не ради заданного количества.
Есть классическая слоистая архитектура, Clean Architecture и Hexagonal; DDD — подход к моделированию предметной области, а не просто ещё один набор слоёв.
Проверяйте допустимость запроса до постановки, чтобы не тратить очередь и ресурсы на заведомо некорректную работу. Worker повторно проверяет условия, которые могли измениться.