Вопросы на собеседовании: Инженер-программист
100 реальных вопросов с образцовыми ответами и пояснениями для уровня Senior.
Смотреть пример резюме: Инженер-программист →Тренировка флешкарточками
Интервальное повторение · Hunter Pass
Вопросы
Я бы построил чтение через кэш и генерировал ключи без центрального узкого места.
- 64-битный Snowflake ID в Base62 даёт ключ примерно из 11 символов; worker ID выдаются уникально, а откат часов останавливает генерацию до появления дубля.
- Cassandra хранит ключ, адрес, владельца и срок жизни в 256 виртуальных шардах, а Redis кэширует горячие соответствия с TTL 24 часа.
- Узел редиректа делает один запрос в Redis, затем при промахе обращается к шарду, оставляя хранилищу около 20 мс внутри бюджета p99 в 100 мс.
- Пять лет при 20 000 записей в секунду дают около 3,2 триллиона строк; при 100 байтах на строку и replication factor 3 нужен примерно 1 ПБ до учёта компактации и резервных копий.
Зачем это спрашивают: Интервьюер оценивает расчет емкости, генерацию ключей, партиционирование данных и реалистичный бюджет задержки.
Я бы отделил владение сокетами от надежной обработки сообщений и упорядочивал сообщения по комнате.
- Stateless WebSocket-шлюзы держат примерно по 50 000 соединений и публикуют аутентифицированные сообщения в Kafka с ключом room_id.
- Kafka дает упорядоченную партицию для ключа комнаты, а консьюмеры сохраняют сообщения в Cassandra и публикуют их через Redis Streams на шлюзы получателей.
- p99 200 мс измеряется до online-шлюза получателя: 30 мс на ingress, 80 мс на Kafka и сохранение, 60 мс на fan-out и 30 мс запаса.
- У соединения есть исходящий буфер 16 КБ в пределах общего лимита шлюза 1 ГБ; при переполнении медленный клиент получает resync cursor и отключается.
Зачем это спрашивают: Сильный ответ должен связать масштаб соединений, область порядка, надежное хранение и backpressure для медленных клиентов.
Я бы хранил байты в объектном хранилище, а приложению оставил только метаданные и координацию загрузки.
- API создаёт multipart upload в S3 и возвращает подписанные URL для частей по 16 МБ, поэтому загрузка файла на 5 ГБ возобновляется с последней подтверждённой части.
- PostgreSQL хранит версии, хэши, владельца и ID multipart upload с уникальным ограничением по tenant_id, пути и версии.
- Клиенты передают checksum SHA-256 для каждой части S3 и итоговый манифест; S3 проверяет байты до атомарной публикации версии сервером.
- Десять петабайт остаются в S3 с lifecycle-уровнями, а уведомления об изменениях используют монотонный курсор пользователя, чтобы офлайн-клиент забирал только пропущенные метаданные.
Зачем это спрашивают: Интервьюер проверяет разделение потоков данных и управления, возобновление загрузки, корректность метаданных и экономику хранения.
Я бы вычислял флаги внутри каждого процесса по версионированному локальному снимку.
- API control plane сохраняет определение и outbox row в одной транзакции PostgreSQL, после чего CDC публикует каждую закоммиченную версию в Kafka.
- SDK держит неизменяемую in-memory карту и атомарно меняет снимок целиком, поэтому вычисление занимает O(1) и меньше 1 мс.
- Потоковый gRPC-канал доставляет версионированные дельты, разрыв sequence сразу загружает snapshot, а heartbeat каждые 2 секунды обеспечивает SLO 5 секунд для подключённых исправных SDK.
- При недоступности control plane SDK использует последний корректный snapshot и типизированное жёстко заданное значение по умолчанию, а не блокирует запрос.
Зачем это спрашивают: Интервьюер ищет дизайн, который соблюдает задержку горячего пути без потери доставки изменений, восстановления и безопасных значений по умолчанию.
Я бы заставил PostgreSQL обеспечивать одного активного владельца места, а удержание сделал истекающим состоянием.
- Условный UPDATE захватывает свободное или просроченное место и записывает hold_id с expires_at в одной транзакции, поэтому между проверкой и резервированием невозможна гонка.
- Строка места служит точкой сериализации, а индекс по event_id и expires_at позволяет находить просроченные удержания без сканирования события.
- Durable timer table и scheduler публикуют hold_id при истечении; место освобождается только при совпадении hold_id и прошедшем expires_at, поэтому старый таймер не снимет новое удержание.
- API принимает ключ идемпотентности на 24 часа, поэтому повтор клиента возвращает исходное удержание, а не занимает второе место.
Зачем это спрашивают: Интервьюер проверяет, обеспечивается ли корректность атомарно, а не переносится ли она в кэш или блокировку приложения.
Я бы применил fan-out при записи для обычных аккаунтов и fan-out при чтении для знаменитостей.
- Обычные публикации через Kafka попадают в пользовательские ленты Cassandra, ограниченные 1 000 новейших ID.
- Аккаунты с более чем 100 000 подписчиков помечаются как знаменитости, и их публикации остаются в отдельной авторской ленте вместо 50 миллионов записей на пост.
- Сервис читает paged-индекс знаменитостей, пока heap не докажет границу top 20, без фиксированного лимита авторов, который мог бы скрыть публикации.
- Я отвожу 40 мс чтению лент, 60 мс объединению и ранжированию, 60 мс загрузке данных и оставляю 40 мс внутри цели p95 в 200 мс.
Зачем это спрашивают: Интервьюер оценивает, замечает ли кандидат перекос нагрузки и выбирает ли гибридный fan-out с бюджетом задержки.
Я бы обслуживал запросы из компактного префиксного индекса в памяти и перестраивал его вне горячего пути.
- Офлайн-задача Spark строит взвешенный конечный преобразователь по 5 миллионам фраз с локалью и оценкой популярности.
- Каждый stateless-узел отображает версионированный индекс в память и возвращает 10 лучших продолжений без запроса в удаленную базу.
- Балансировщик распределяет трафик по 180 узлам примерно по 5 600 QPS; после потери 1 из 3 зон оставшиеся узлы держат около 8 400 QPS ниже проверенного предела 10 000.
- Redis-overlay хранит трендовые фразы 5 минут; сервис объединяет этот малый набор с неизменяемым индексом внутри p99 в 50 мс.
Зачем это спрашивают: Интервьюер проверяет, соответствует ли хранилище корпусу и задержке, а не выбрана ли база общего назначения по привычке.
Я бы использовал партиционированный лог для приёма и колоночное хранилище временных рядов для сжатых запросов.
- Kafka принимает около 10 ГБ в секунду в 1 500 партиций с ключом из tenant и хэша метрики, удерживая средний ingress партиции ниже 7 МБ/с.
- Консьюмеры пакетируют по 10 000 семплов в ClickHouse MergeTree; 30 дней дают около 26 ПБ raw до compression, поэтому реплики разделены по дням и упорядочены по tenant_id, metric_id и времени.
- Материализованные представления агрегируют данные по сервису в интервалы 10 секунд и 5 минут, поэтому суточный график читает тысячи строк вместо всех исходных серий.
- Квоты отклоняют тенанта выше 1 миллиона активных серий, потому что неограниченные метки разрушат и бюджет хранения на 30 дней, и SLO запроса в 10 секунд.
Зачем это спрашивают: Интервьюер оценивает расчет пропускной способности, физическую раскладку, предагрегацию и контроль кардинальности.
Я бы разбил задачи по временным бакетам и позволил воркерам независимо арендовать пакеты.
- PostgreSQL партиционирует задачи по часу с индексом next_run_at, а 60 логических шардов ограничивают сканирование каждой минуты.
- Узлы планировщика через SELECT FOR UPDATE SKIP LOCKED арендуют по 1 000 готовых задач на 2 минуты и публикуют их в Kafka.
- Воркеры требуют execution_id и сохраняют завершение с бизнес-эффектом, если у них одна база; для внешнего эффекта нужны idempotency key и outbox.
- Сверка ищет задачи с опозданием больше 2 минут, а лаг планирования выше 60 секунд нарушает заявленную точность.
Зачем это спрашивают: Интервьюер ищет практичное партиционирование, семантику аренды, идемпотентное выполнение и измеримую гарантию точности.
Я бы сохранял одну надёжную последовательность и одну активную доставку на получателя, включая время ретраев.
- Kafka ingress использует destination_id как ключ в 1 000 партиций, а state store Kafka Streams хранит упорядоченную очередь каждого получателя.
- Диспетчер отправляет только головной элемент; 20 000 async-соединений дают 200 000 доставок/с лишь при измеренной задержке около 100 мс, а 3 секунды служат cutoff, не основой расчёта.
- Ошибка переносит next_attempt_at головного элемента на 1, 5 и 30 минут в пределах 24 часов, не продвигая очередь этого получателя.
- После 5 ошибок circuit breaker открывается только для этого ключа; ожидание в partitioned state store не блокирует исправных получателей той же партиции.
Зачем это спрашивают: Интервьюер проверяет область порядка, архитектуру ретраев, лимиты соединений и изоляцию клиентов.
Я бы делил систему по бизнес-владению и транзакционным инвариантам, а не по техническим слоям.
- Catalog владеет товарами и ценами, Inventory резервами, Orders состоянием покупки, а Payments интеграциями с провайдерами и своим реестром.
- Каждый сервис открывает версионированные gRPC-команды и события Kafka, а запрет общих таблиц обеспечивается отдельными схемами PostgreSQL и учетными данными.
- Checkout оркестрирует процесс, но не меняет чужие строки; он вызывает ReserveInventory и AuthorizePayment с явными ID запросов.
- Независимость еженедельных релизов проверяется consumer-driven контрактами в CI, а межсервисные изменения остаются аддитивными минимум два релиза.
Зачем это спрашивают: Интервьюер оценивает, следуют ли границы инвариантам и владению команд, сохраняя независимый деплой.
Я бы разделил загрузку и обработку на два асинхронных ресурса.
- Клиент загружает файл прямо в S3 по multipart signed URLs, поэтому API не буферизует тело на 500 МБ.
- POST /jobs проверяет метаданные объекта, записывает задачу в PostgreSQL и возвращает 202 с job_id в пределах 2 секунд.
- Kafka только будит workers; worker получает lease PostgreSQL на 20 минут с heartbeat и fencing version до запуска в изолированном пуле.
- GET /jobs/{id} и webhook завершения отдают статус, а отмена остается best-effort, потому что 15-минутный шаг кодека может остановиться не сразу.
Зачем это спрашивают: Интервьюер ищет асинхронный контракт, учитывающий размер данных, время ответа, владение и семантику отмены.
Я бы потребовал ключ идемпотентности и связал его с клиентом и телом запроса.
- PostgreSQL хранит tenant_id, idempotency_key, request_hash, order_id, status и response под уникальным ограничением tenant и key.
- Первый запрос создает запись идемпотентности и заказ в одной транзакции; дубль возвращает сохраненный статус и ответ.
- Тот же ключ с другим хэшем запроса получает 409, поэтому случайная коллизия не меняет смысл незаметно.
- Записи живут обещанные 24 часа, а параллельный дубль опрашивает исходную операцию вместо повторного создания заказа.
Зачем это спрашивают: Интервьюер проверяет атомарность, область ключа, конфликты тела и поведение во время незавершенного первого запроса.
Я бы сохранял существующие версии аддитивными, а ломающие изменения вел как отдельную программу миграции.
- OpenAPI-схемы через oasdiff запрещают в CI удаление полей, сужение enum и появление новых обязательных свойств.
- Ломающее изменение получает датированную версию, а старая остается на том же надежном шлюзе полные 12 месяцев.
- Метрики версий по клиентам находят оставшиеся из 10 000 интеграций, а уведомления содержат конкретный endpoint и время последнего использования.
- Шлюз поддерживает обе версии поверх одной канонической доменной модели, не создавая отдельный легаси-парк, который угрожал бы цели 99,99%.
Зачем это спрашивают: Интервьюер оценивает механику совместимости, наблюдаемость миграции и эксплуатацию длинного окна депрекации.
Я бы открыл непрозрачные keyset-курсоры по стабильному уникальному порядку.
- Записи упорядочены по created_at и id, которые поддерживает составной B-tree индекс PostgreSQL.
- Курсор кодирует последнюю пару и хэш фильтров и подписывается HMAC, чтобы клиент не менял позицию и не использовал его с другим фильтром.
- Страница выполняет range-запрос с LIMIT 101, возвращает 100 строк и следующий курсор без сканирования прошлых страниц.
- Вставки после cursor могут появиться в текущем проходе, а вставки до него только в новом; snapshot consistency потребовала бы as-of token.
Зачем это спрашивают: Интервьюер проверяет контракт с учетом индекса и честную семантику консистентности при конкурентных изменениях.
Я бы сделал новое поле необязательным и сохранял старый смысл события весь период смешанных версий.
- Avro-схемы живут в Schema Registry с FULL_TRANSITIVE compatibility, поэтому старые consumers читают новые данные, а новые могут переиграть сохранённые старые.
- delivery_window является nullable-записью с явным default null и документированной интерпретацией времени в UTC; отсутствие не подменяется выдуманным значением.
- Продюсеры 6 месяцев заполняют старое и новое представления, если существующие поля не выражают новую концепцию чисто.
- Контрактные фикстуры запускаются против всех 40 consumers, а удаление начинается только после нуля чтений старой схемы по их собственной version telemetry.
Зачем это спрашивают: Интервьюер ищет конкретные правила совместимости, семантические значения по умолчанию и удаление по фактам использования.
Я бы использовал оркестрируемую сагу с явными резервами и компенсациями.
- Оркестратор хранит конечный автомат в PostgreSQL и вызывает трех провайдеров со стабильными operation ID и дедлайнами по 9 секунд.
- Перелет и отель создают удержания на 5 минут, а платеж авторизуется, но не списывается до успеха обоих резервов.
- Сбой любого шага запускает идемпотентную компенсацию, освобождающую резервы и отменяющую авторизацию, с ретраями через надежную очередь.
- Через 30 секунд API возвращает confirmed, rejected или pending с booking_id и не объявляет отказ, пока компенсация не завершена или поздний ответ провайдера не обработан.
Зачем это спрашивают: Интервьюер оценивает состояние распределенного процесса, компенсации, дедлайны и честную семантику клиента без общей транзакции.
Я бы использовал append-only реестр с двойной записью и балансами, выведенными из неизменяемых проводок.
- PostgreSQL принимает проводки только через stored procedure с deferred constraint trigger, который до commit проверяет равенство дебета и кредита.
- Проводки счетов партиционируются по месяцам и индексируются по account_id и sequence, а закрытые разделы через год уходят в дешевое хранилище.
- Таблица балансов обновляется в той же транзакции для быстрого чтения, а ночной пересчет сверяет ее с неизменяемыми проводками.
- Исправления делаются обратными проводками со ссылкой на исходную, сохраняя семилетний аудит и жесткий запрет изменений.
Зачем это спрашивают: Интервьюер проверяет доменные инварианты, неизменяемую модель, оптимизацию чтения и долгосрочное хранение.
Я бы держал свежие семплы в колоночном хранилище с временными партициями, а сжатые разделы архивировал в объектное хранилище.
- Kafka принимает семплы с ключом device_id, а ClickHouse пакетирует вставки в дневные MergeTree-партиции, упорядоченные по device_id и времени.
- Тридцать горячих дней при 3 миллионах семплов в секунду требуют сжатия и репликации; Parquet или Delta в S3 хранят месяцы со второго по двадцать четвертый.
- Запрос по устройству за час использует первичную сортировку и читает узкий диапазон, а часовые min-max-avg проекции обслуживают типовые дашборды.
- Поздние семплы можно писать 48 часов; более старые исправления идут в боковую таблицу, чтобы не переписывать многотерабайтные архивные партиции.
Зачем это спрашивают: Интервьюер оценивает уровни хранения, раскладку записи, локальность запроса и политику поздних данных.
Я бы хранил списки смежности по пользователю и заранее вычислял малые проверки связей для горячего пути.
- Строки Cassandra с ключом follower_id хранят отсортированные followee ID, распределяя 2 миллиарда связей с частыми добавлениями без межузловых транзакций.
- Обратная таблица с ключом followee_id поддерживает страницы подписчиков; обе записи несут одну версию связи и асинхронно сверяются.
- Redis set кэширует подписки активных пользователей, поэтому взаимность проверяется двумя SISMEMBER существенно быстрее 100 мс.
- Для полного списка взаимных связей пересечение выполняется только при менее чем 100 000 рёбер; для знаменитостей используется предвычисленное подмножество.
Зачем это спрашивают: Интервьюер проверяет модель от паттернов доступа, денормализацию и работу с перекосом вершин большой степени.
Закрытые вопросы
- 21
Смоделируйте метаданные 500 миллионов документов для 100 000 тенантов, с 10 000 записей в секунду и листингом папки тенанта ниже 200 мс.
- 22
Смоделируйте остатки для 10 миллионов SKU и 100 000 списаний в секунду на распродаже, с жестким правилом, что доступный остаток не бывает отрицательным.
- 23
Смоделируйте 500 миллионов древовидных комментариев, выдачу по 50, глубину до 8 и отсутствие рекурсивных запросов базы при чтении.
databasequeriesrecursion - 24
Выберите модель данных для 2 миллионов водителей, обновляющих координаты каждые 5 секунд, с поиском в радиусе 3 км ниже 100 мс p95.
queriesmodeling - 25
Спроектируйте неизменяемый аудит на 100 000 событий в секунду с хранением 7 лет и поиском по последним 5 минутам за 2 секунды.
designimmutability - 26
Спроектируйте кэш каталога с 500 000 чтений и 2 000 обновлений цен в секунду, где цена может устареть максимум на 5 секунд.
designcaching - 27
Счетчик знаменитости получает 2 миллиона инкрементов в секунду, может ошибаться на 1% и должен сходиться за 10 секунд; как его реализовать?
- 28
Зашардируйте хранилище заказов, растущее на 5 ТБ в год и обслуживающее 100 000 запросов в секунду, если каждому продавцу нужны range scan за 30 дней.
shardingqueries - 29
Двести pod приложения обслуживают 20 000 запросов в секунду, но PostgreSQL допускает только 2 000 соединений; определите размеры пулов и поведение очереди.
postgrespoolingdata-structures - 30
Запрос API содержит 100 ID, зависимость разрешает 500 QPS, а endpoint должен завершиться за 300 мс p95; как пакетировать и ограничивать работу?
endpointsbatchdependencies - 31
Отдавайте 1 миллион исходных изображений в 20 размерах при 100 000 запросов в секунду, с p95 для запросов с попаданием в кэш ниже 100 мс и без предварительной генерации всех вариантов.
caching - 32
Спроектируйте глобальный rate limiter для 5 миллионов запросов в секунду и 10 000 тенантов, допуская максимум 2% превышения в каждом выровненном окне 1 секунда.
designrate-limiting - 33
Сервис приема получает 500 000 событий в секунду обычно и 2 миллиона в течение 5-минутных всплесков, не имеет права терять данные, а downstream обрабатывает только 1 миллион в секунду.
capacity - 34
Спроектируйте партиционирование потока Kafka со скоростью 1 миллион событий счетов в секунду, со строгим порядком по счету, 200 партициями и масштабированием до 500 консьюмеров.
partitioningkafka - 35
Дедуплицируйте 500 000 событий в секунду за окно 30 дней, если 0,5% являются дублями, с ограниченным хранилищем и без вероятностных ложных срабатываний.
queries - 36
Публикуйте событие не позднее 2 секунд после каждой из 50 000 транзакций базы в секунду, без потери событий и без распределенной транзакции с Kafka.
databasetransactionsdistributed - 37
Храните профили пользователей с записью в 3 регионах, задержкой записи ниже 150 мс, read-your-own-writes и устареванием до 5 секунд для остальных пользователей.
- 38
Спроектируйте счетчик лайков на 5 миллионов обновлений в секунду в 4 регионах, со сходимостью за 2 секунды и временной ошибкой ниже 1%.
design - 39
Общая очередь получает 100 000 задач в секунду и может вырасти в 10 раз, но checkout-задачи должны стартовать за 1 секунду, а email может ждать 10 минут.
capacitydata-structures - 40
Спроектируйте отложенную очередь для 100 миллионов таймеров в день, с точностью 1 секунда на горизонте 24 часа и срабатыванием at-least-once.
designdata-structures - 41
У consumer group 100 партиций, до 500 воркеров, максимум 5 ретраев сообщения и требование не блокировать партицию одним poison message.
partitioning - 42
Тридцать узлов должны запускать одну задачу compaction на 2 минуты, аренда истекает через 10 секунд, а пересекающиеся записи запрещены даже при паузе процесса на 30 секунд.
- 43
Структурируйте биллинг подписок с 6 планами, 3 платежными провайдерами и 12 правилами, если добавление провайдера не должно менять логику планов.
- 44
Спроектируйте импорт 20 форматов, где сторонние парсеры недоверенные, каждая задача ограничена 200 МБ памяти, а новый формат не должен требовать деплоя основного API.
designapimemory - 45
Реализуйте расчет цены по 12 правилам скидок с детерминированным результатом меньше 5 мс и аудитом каждого примененного правила.
- 46
Смоделируйте workflow заказа с 15 состояниями, 15 командами и 40 разрешенными переходами, где невозможны неверные переходы, а команды могут дублироваться 24 часа.
- 47
Реализуйте 10 000 конкурентных переводов в секунду, где многие затрагивают один счет, баланс не может стать отрицательным и ни одно обновление нельзя потерять.
concurrency - 48
Поисковый запрос расходится на 20 шардов, имеет дедлайн 120 мс и должен вернуть 50 лучших результатов; как обрабатывать отмену и медленные шарды?
soft-skillsestimationsharding - 49
WebSocket-узел держит 100 000 клиентов при лимите памяти 4 ГБ; часть клиентов читает 1 КБ/с, когда broadcast приходит со скоростью 100 КБ/с.
memorywebsockets - 50
Спроектируйте worker pool на 64 ядра для 1 миллиона коротких задач в секунду, с очередью максимум 100 000 и graceful shutdown за 10 секунд.
designlifecycledata-structures - 51
Через 5 минут после деплоя checkout доля HTTP 5xx выросла с 0,2% до 18%, под риском 1 200 заказов в минуту; опишите первые 15 минут.
deploymenthttp - 52
Региональный API возвращает 32% таймаутов уже 20 минут, но все pods приложения отмечены как исправные; что вы делаете дальше?
resilienceapi - 53
После выпуска схемы lag консьюмеров Kafka вырос с 30 секунд до 45 минут, задержав 8 миллионов событий заказов; как вы реагируете?
schemakafka - 54
Платёжная зависимость во время распродажи начинает возвращать 40% ответов 503, а ошибки вашего checkout растут до 22%; как вы локализуете инцидент?
incidentsdependencies - 55
В 02:00 CPU primary базы достигает 100%, ошибки API доходят до 27%, а failover может потерять до 20 секунд асинхронных записей; примите решение.
databaseapiasync - 56
Плохая конфигурация попала на все 600 pods и подняла ошибки входа до 65%; распространение конфигурации занимает 8 минут, а откат кода 3 минуты.
configrollback - 57
Кэш-кластер теряет половину узлов, QPS базы растёт с 15 000 до 90 000 при пределе 100 000; что вы делаете в следующие 10 минут?
databasecaching - 58
Истёкший сертификат на 11 минут блокирует 100% внутренних gRPC-вызовов, а владельцы сервисов независимо перезапускают pods; как вы руководите устранением?
grpc - 59
После деплоя Go-сервиса p99 API вырос с 180 мс до 1,4 секунды, p50 остался 70 мс, а CPU не изменился; как вы расследуете?
deploymentapi - 60
После релиза p99 Java-сервиса каждые 6 минут растёт с 250 мс до 2,2 секунды, а CPU во время каждого скачка падает.
- 61
Запрос PostgreSQL занимал 40 мс, а после роста таблицы с 20 до 400 миллионов строк стал занимать 3,8 секунды; каков ваш процесс?
queriespostgresconcurrency - 62
Производительность Python-worker после добавления JSON-валидации упала с 12 000 до 3 000 задач в минуту, а CPU занят одним ядром из 16.
validationthroughputpython - 63
p99 Rust-сервиса удвоился с 90 до 180 мс после замены bounded channel на unbounded, хотя средняя глубина очереди мала.
data-structures - 64
p99 TypeScript API растёт со 120 до 900 мс только для ответов больше 2 МБ, хотя сетевая полоса занята меньше чем на 40%.
typescript - 65
После добавления одного необязательного фильтра p99 поиска Elasticsearch вырос с 300 мс до 4 секунд; фильтр используют лишь 8% запросов.
search - 66
После включения ретраев задержка gRPC выросла с 35 до 600 мс, хотя downstream по-прежнему обрабатывает запрос за 30 мс.
latencygrpcconcurrency - 67
Сервис на PostgreSQL линейно масштабируется до 6 000 RPS, затем рост прекращается при CPU 85% и ожидании блокировок в 30% времени запроса; как выйти на 12 000 RPS?
postgresthroughput - 68
Go API достигает 20 000 RPS при CPU 95%; профили показывают 38% времени в JSON encoding и 22% в аллокациях, а цель составляет 35 000 RPS.
memoryapi - 69
При 50 000 RPS Redis достигает 90% CPU одного потока, хотя в кластере 12 узлов; один ключ получает 35% всех операций.
redisconcurrency - 70
Kafka pipeline обрабатывает 300 000 событий в секунду, но останавливается на 450 000; CPU brokers равен 55%, а одна из 120 партиций несёт 28% трафика.
partitioningkafkaci-cd - 71
Kubernetes масштабирует API с 40 до 200 pods, но throughput остаётся 30 000 RPS, а соединения с базой растут с 800 до 4 000.
databaseapikubernetes - 72
Кластер Cassandra выдерживает 80 000 записей в секунду, но при 110 000 p99 превышает 2 секунды, а backlog компактации растёт на 500 ГБ в час.
backlog - 73
Сервис AWS выдерживает 15 000 RPS, но через 6 недель должен принять запуск на 60 000 RPS; один тенант потребляет 45% write capacity DynamoDB.
dynamodbcapacity - 74
Баг ретраев создал 180 000 дублирующихся заказов за 6 часов, 7 000 уже отправлены; как вы исправите данные и предотвратите повторение?
resilience - 75
База содержит 2,4 миллиона счетов, но после отказа worker в object storage лишь 2,37 миллиона PDF; как восстановить недостающие 30 000?
database - 76
После отказа CDC в Elasticsearch отсутствуют 3% из 50 миллионов обновлений товаров, ещё 1% имеет устаревшие версии, а поиск должен оставаться онлайн.
search - 77
Баг межрегиональной репликации потерял 12 минут обновлений профилей 84 000 пользователей, причём у 19 000 уже есть более новые записи.
replication - 78
После деплоя таблица балансов реестра расходится с неизменяемыми проводками у 0,06% из 30 миллионов счетов, а клиенты всё ещё могут переводить деньги.
deploymentimmutability - 79
Миграция преобразовала timestamps в 200 миллионах строк с неверным timezone offset, затронув 14 дней данных и активные клиентские отчёты.
migrations - 80
При 8 000 конкурентных запросов два покупателя иногда резервируют последнюю единицу товара; проверка и уменьшение остатка сделаны отдельными SQL statements.
sqlconcurrency - 81
Два workers могут обработать одно сообщение очереди после visibility timeout в 30 секунд, а задача занимает до 90 секунд; дубли писем достигли 4%.
concurrencydata-structurescss - 82
Go map, используемый 64 goroutines, раз в несколько дней роняет production из-за concurrent map writes; чтений в 10 000 раз больше, чем записей.
concurrencyzero-to-one - 83
Перевод баланса блокирует сначала источник, затем получателя, а refund делает наоборот; на пике возникает 300 deadlocks в минуту.
locking - 84
Обновление feature flags гоняется с запросами: около 0,2% пользователей видят смесь старых и новых правил внутри одного вычисления.
feature-flags - 85
Замедление зависимости на 2 секунды запускает ретраи в 40 сервисах; трафик достигает шестикратного уровня, и 70% вызовов падают в retry storm.
resiliencedependencies - 86
Сервис аутентификации падает, а каждый API синхронно вызывает его; за 4 минуты блокируются все 1 500 потоков приложения.
authapiconcurrency - 87
Timeout downstream равен 5 секундам, SLO вашего endpoint 800 мс, а три последовательные зависимости делают по два retry.
resiliencesloendpoints - 88
Популярный ключ кэша истекает каждый час, вызывая на 20 секунд скачок QPS базы с 2 000 до 80 000 и повторные частичные отказы.
databasecaching - 89
Консьюмер очереди немедленно повторяет poison messages; 0,1% плохих событий занимают 60% workers и задерживают исправные события на 25 минут.
capacitydata-structures - 90
Product хочет фичу с ожидаемой выручкой $400 000 в квартал, но её сервис вызвал три SEV-1 и 14 часов простоя за 90 дней; что вы предложите?
estimationincidents - 91
Команда тратит 35% каждого sprint на flaky integration tests, а контрактная фича должна выйти через 6 недель под штраф $1 миллион.
integrationflakyagile - 92
Деплой монолита занимает 55 минут и блокирует 6 команд, но production-инцидентов мало, а следующие два квартала заполнены фичами; будете ли вы его делить?
incidentsmonolithdeployment - 93
Поддержка версии базы заканчивается через 4 месяца, миграция требует 6 инженерных недель, а product уже отдал всю ёмкость запуску через 3 месяца.
databasemigrationscapacity - 94
Внутренняя библиотека отстала на 18 major versions, содержит две critical vulnerabilities и используется 70 сервисами; прямой upgrade ломает 23 из них.
vulnerabilities - 95
Middle-инженер открывает изменение платежей на 2 000 строк за два дня до релиза; review не находит идемпотентности и тестов кроме happy path.
idempotency - 96
Junior-инженер вызвал 17-минутный outage миграцией, заблокировавшей таблицу на 300 миллионов строк; как вы действуете на следующий день?
soft-skillsmigrations - 97
Два senior reviewer неделю спорят между Kafka и polling outbox PostgreSQL для 4 000 событий в секунду, блокируя 5 инженеров.
conflictpostgreskafka - 98
Медиана ожидания code review в команде из 8 человек равна 29 часам, из-за чего lead time достигает 3 дней; качество приемлемо, владелец очереди не назначен.
code-reviewdata-structures - 99
Инженер, которого вы менторите, трижды превышает оценку больше чем на 100%, потому что неизвестные факторы обнаруживаются поздно; качество кода высокое.
mentoringestimation - 100
Staff-инженер регулярно одобряет изменения, не читая тесты, а две пропущенные регрессии дали 48 минут downtime; вы не являетесь его руководителем.
testing