В этой подборке вопросы сгруппированы по формату «System Design», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: backend, api, database.
Таблица зарегистрированных пользователей не обязательна, но анонимному сервису иногда нужен внутренний идентификатор сессии или владельца ресурса. Это определяется функциями продукта.
Нужны общая очередь ожидания и глобальный ограничитель, учитывающий все инстансы. Worker получает разрешение перед внешним запросом и освобождает после завершения.
Основные сложности распределённого кеша — устаревшие данные, горячие ключи, массовые промахи, отказы узлов и перемещение данных. Каждая требует явной политики.
Сохраните expires_at брони и проверяйте его при любой попытке подтверждения. Фоновая задача освобождает просроченные записи, но не является единственным источником истины.
Сервис проверяет полномочия, определяет шард по стабильному user ID и обновляет пароль именно там. Пароль хранится как стойкий хеш с солью, а не открытым текстом.
Антифрод обычно является подсистемой продукта: получает события и признаки, оценивает риск и возвращает решение. Его можно реализовать одним сервисом или несколькими компонентами.
Ограничьте число одновременно выполняемых запросов семафором или очередью с пятью workers. Шестой запрос должен ждать свободного слота либо получать понятный отказ.
Сначала определите, нужен ли согласованный снимок или максимально свежие данные. Для долгого чтения подойдут snapshot и реплика; для обновлений — небольшие порции и проверка версий.
Создайте внутреннюю донацию с неизменяемой суммой и валютой, затем связывайте попытки оплаты с ней и идентификатором шлюза. Повторы должны использовать один ключ идемпотентности.