В этой подборке вопросы сгруппированы по формату «System Design», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: backend, api, database.
System design начинается с требований, нагрузки и инвариантов, затем определяет API, данные и компоненты. Основные темы — масштабирование, отказоустойчивость, консистентность и наблюдаемость.
Пример: после подтверждённого зачисления денег нужно уведомить клиента. Изменение статуса зачисления и событие PaymentCompleted сохраняются в одной транзакции БД через outbox.
Istio подходит для единых сетевых политик между сервисами: mTLS, авторизации, управления трафиком и наблюдаемости. Это service mesh, а не замена бизнес-логике приложения.
Используйте expand–migrate–contract: сначала добавьте dep_name, обеспечьте синхронизацию новых записей, выполните backfill порциями, проверьте данные и только потом переключайте чтение.
Да, это может быть основой at-least-once, если ответ означает устойчивое завершение операции. Но сбой после внешнего успеха и до commit приведёт к повторной обработке сообщения.
Внутри сервиса применяют слоистую, hexagonal/ports-and-adapters, clean architecture или модульную организацию по бизнес-возможностям. Это способы управлять зависимостями и границами, а не обязательные шаблоны папок.
Начните с сущностей, связей, бизнес-инвариантов и профиля запросов. Затем проектируйте ключи, ограничения, индексы и транзакционные границы под реальные сценарии.
Kafka принимает события планирования, обработчик сохраняет job ID в Redis sorted set со временем отправки в score, а scheduler выбирает наступившие задания и передаёт исполнителям.
30 000 сообщений в минуту — это в среднем 500 в секунду. Число партиций выбирают по измеренной производительности одной партиции/consumer, пикам и требуемому параллелизму.
Commit после REST-ответа не делает внешний вызов и локальное изменение атомарными. Внешняя операция могла завершиться, а локальная транзакция — упасть; timeout также не доказывает отказ.
Mission-critical система критична для основной деятельности: её отказ останавливает существенный процесс или создаёт недопустимые потери. Это не обязательно система, опасная для жизни.
Задайте общий deadline и передавайте остаток бюджета всем этапам: очередям, БД и сетевым вызовам. Отдельный timeout на каждом шаге не гарантирует общий предел десять секунд.