В этой подборке вопросы сгруппированы по формату «System Design», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: backend, api, database.
Начните с bounded contexts и владельцев данных, а не разбиения по таблицам. Выделяйте сервисы постепенно, сохраняя локальные инварианты агрегатов и явные межконтекстные контракты.
Разделите оперативные координаты и годовую историю. События геопозиции поступают через очередь, обновляют геоиндекс и записываются в партиционированное хранилище маршрутов.
Используйте сущности Poll, Question, Option, Submission и Answer. Один ответ связывает прохождение, вопрос и выбранный вариант; правильность хранить не требуется.
Разделите заказы, геопозицию и подбор водителей. Приём заказа должен атомарно закреплять одного водителя; координаты и поиск масштабируются отдельно от транзакций поездок.
Начните с границ доменов и модульности монолита, затем выделяйте по одному слабо связанному компоненту через стабильный контракт и обратимое переключение трафика.
Выделите владельца метаданных и обработки изображений, храните оригиналы в объектном хранилище, варианты создавайте асинхронно, а выдачу организуйте через CDN или подписанные URL.
Запускайте модель в ограниченном пуле worker с очередью и backpressure. Жёстко ограничьте ресурсы процесса, а динамически меняйте только конкуренцию в безопасных пределах по метрикам и задержке соседних сервисов.
Разделите сущности на Survey, Question, Option, Submission и Answer. Ответ связывает одно прохождение опроса с вопросом и выбранным вариантом; признак правильности по условию не нужен.
Для простого распределителя используйте round-robin по доступным узлам, защищая общий счётчик от гонок. Выбор узла отделите от проксирования запроса, таймаутов и проверки здоровья backend.
Отделите поток координат, хранилище последних позиций и долговременную историю. Карта запрашивает текущие точки по bounding box, а обновления получает через WebSocket/SSE только для видимой области.