В этой подборке вопросы сгруппированы по формату «System Design», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: backend, api, database.
Нужны устойчивое событие в одной транзакции с записью, повторная доставка и идемпотентное обновление проекции. Обещание 100% требует оговорённых условий восстановления и хранения.
Случайность лишь уменьшает вероятность совпадения. Уникальность обеспечивает атомарная проверка и вставка: синхронизированная структура в памяти или unique constraint в базе.
Сократите объём логов, уберите тяжёлую сериализацию из горячего пути и организуйте ограниченный буфер с контролем backpressure. Синхронность stdout зависит от среды.
Храните общий каталог клиентов отдельно от назначений сотрудникам. Уточните эксклюзивность брони: личный список и захват клиента одним сотрудником требуют разных ограничений БД.
Разделите доставку сообщений, долговременное хранение и локальный офлайн-кэш. WebSocket доставляет события онлайн, но источником истины остаётся серверная история с проверкой доступа к диалогу.
Разделите экран на условия проживания, гостей, стоимость, скидки и оплату. Согласуйте серверную котировку с версией и сроком действия; итоговую сумму не вычисляйте доверенно на клиенте.
Сообщения и статусы передают realtime-событиями, а клиент обновляет локальное состояние без перезагрузки. Для разных событий нужны разные гарантии доставки.
Прикладной обмен можно перенести на WebSocket, но придётся самостоятельно определить запросы, ответы, ошибки, повторные подключения и восстановление состояния.
Используйте Authorization Code flow с PKCE и проверкой ответов провайдера, затем создайте собственную сессию приложения. Проверенная библиотека снижает риск ошибок протокола.
Для чата удобно получать списки и историю через HTTP, а новые события доставлять через WebSocket. Отправка сообщения может работать по любому из этих каналов.