В этой подборке вопросы сгруппированы по формату «System Design», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: backend, api, database.
Микросервисы развертываются и взаимодействуют как отдельные сервисы, модульный монолит — одно приложение с внутренними границами модулей. Главное различие — распределённость и независимость жизненного цикла.
Нужен аудит входов и жизненного цикла сессии: успешная авторизация, выход, истечение и последняя активность. Точное время присутствия нельзя надёжно получить только из события login.
Saga — последовательность локальных транзакций с компенсациями вместо общей ACID-транзакции. Оркестратор управляет шагами явно; при хореографии участники реагируют на события друг друга.
QR должен ссылаться на серверный счёт с непрогнозируемым токеном, а не задавать сумму оплаты. Заказ закрывают по проверенному подтверждению платёжного провайдера, не по возврату браузера.
Поставьте обращения в очередь и выпускайте их общим ограничителем не чаще разрешённой частоты. Десять одновременно принятых запросов нельзя честно обслужить внешним сервисом за одну секунду.
Начните с требований: личные и групповые чаты, устройства, offline, порядок, история и шифрование. Базовая схема включает gateway соединений, сервис диалогов, надёжное хранение и доставку событий.
Kafka не гарантирует общий порядок между разными партициями и топиками. При отсутствии связанной записи событие лучше надёжно отложить и повторить после зависимости, а не терять или игнорировать FK.
Даже при одном сервисе Gateway может централизовать TLS, лимиты, проверку токенов, маршрутизацию и наблюдаемость. Но если эти задачи уже решены проще, отдельный слой необязателен.
Отделите бухгалтерские проводки от отображения: комиссия может быть отдельной строкой истории, оставаясь частью одной атомарной операции перевода. Все связанные записи должны иметь общий идентификатор.
Ограничьте отправку повторяющихся ошибок до SDK-транспорта, используйте bounded-очередь и отправляйте агрегированную частоту отдельно. Группировка событий по fingerprint сама по себе не уменьшает их число.
Эти требования нужно согласовать до выбора архитектуры: срок истории, порядок, поиск, модель шифрования, SLO, регионы и семантику удаления. Их значения нельзя вывести из слова «мессенджер».
Используйте ограниченный локальный кеш ещё действующего токена и singleflight для его обновления, чтобы запросы не штормовали Auth Service. Истёкший или недопустимый токен нельзя принимать ради доступности.