Skip to content

Вопросы на собеседовании: Инженер-программист

100 реальных вопросов с образцовыми ответами и пояснениями для уровня Senior.

Смотреть пример резюме: Инженер-программист

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Вопросы

retentiondesign

Я бы построил чтение через кэш и генерировал ключи без центрального узкого места.

  • 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 ПБ до учёта компактации и резервных копий.

Зачем это спрашивают: Интервьюер оценивает расчет емкости, генерацию ключей, партиционирование данных и реалистичный бюджет задержки.

designconcurrency

Я бы отделил владение сокетами от надежной обработки сообщений и упорядочивал сообщения по комнате.

  • 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 для медленных клиентов.

designproxy

Я бы хранил байты в объектном хранилище, а приложению оставил только метаданные и координацию загрузки.

  • API создаёт multipart upload в S3 и возвращает подписанные URL для частей по 16 МБ, поэтому загрузка файла на 5 ГБ возобновляется с последней подтверждённой части.
  • PostgreSQL хранит версии, хэши, владельца и ID multipart upload с уникальным ограничением по tenant_id, пути и версии.
  • Клиенты передают checksum SHA-256 для каждой части S3 и итоговый манифест; S3 проверяет байты до атомарной публикации версии сервером.
  • Десять петабайт остаются в S3 с lifecycle-уровнями, а уведомления об изменениях используют монотонный курсор пользователя, чтобы офлайн-клиент забирал только пропущенные метаданные.

Зачем это спрашивают: Интервьюер проверяет разделение потоков данных и управления, возобновление загрузки, корректность метаданных и экономику хранения.

designfeature-flags

Я бы вычислял флаги внутри каждого процесса по версионированному локальному снимку.

  • 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 и типизированное жёстко заданное значение по умолчанию, а не блокирует запрос.

Зачем это спрашивают: Интервьюер ищет дизайн, который соблюдает задержку горячего пути без потери доставки изменений, восстановления и безопасных значений по умолчанию.

design

Я бы заставил PostgreSQL обеспечивать одного активного владельца места, а удержание сделал истекающим состоянием.

  • Условный UPDATE захватывает свободное или просроченное место и записывает hold_id с expires_at в одной транзакции, поэтому между проверкой и резервированием невозможна гонка.
  • Строка места служит точкой сериализации, а индекс по event_id и expires_at позволяет находить просроченные удержания без сканирования события.
  • Durable timer table и scheduler публикуют hold_id при истечении; место освобождается только при совпадении hold_id и прошедшем expires_at, поэтому старый таймер не снимет новое удержание.
  • API принимает ключ идемпотентности на 24 часа, поэтому повтор клиента возвращает исходное удержание, а не занимает второе место.

Зачем это спрашивают: Интервьюер проверяет, обеспечивается ли корректность атомарно, а не переносится ли она в кэш или блокировку приложения.

design

Я бы применил fan-out при записи для обычных аккаунтов и fan-out при чтении для знаменитостей.

  • Обычные публикации через Kafka попадают в пользовательские ленты Cassandra, ограниченные 1 000 новейших ID.
  • Аккаунты с более чем 100 000 подписчиков помечаются как знаменитости, и их публикации остаются в отдельной авторской ленте вместо 50 миллионов записей на пост.
  • Сервис читает paged-индекс знаменитостей, пока heap не докажет границу top 20, без фиксированного лимита авторов, который мог бы скрыть публикации.
  • Я отвожу 40 мс чтению лент, 60 мс объединению и ранжированию, 60 мс загрузке данных и оставляю 40 мс внутри цели p95 в 200 мс.

Зачем это спрашивают: Интервьюер оценивает, замечает ли кандидат перекос нагрузки и выбирает ли гибридный fan-out с бюджетом задержки.

queriesdesign

Я бы обслуживал запросы из компактного префиксного индекса в памяти и перестраивал его вне горячего пути.

  • Офлайн-задача Spark строит взвешенный конечный преобразователь по 5 миллионам фраз с локалью и оценкой популярности.
  • Каждый stateless-узел отображает версионированный индекс в память и возвращает 10 лучших продолжений без запроса в удаленную базу.
  • Балансировщик распределяет трафик по 180 узлам примерно по 5 600 QPS; после потери 1 из 3 зон оставшиеся узлы держат около 8 400 QPS ниже проверенного предела 10 000.
  • Redis-overlay хранит трендовые фразы 5 минут; сервис объединяет этот малый набор с неизменяемым индексом внутри p99 в 50 мс.

Зачем это спрашивают: Интервьюер проверяет, соответствует ли хранилище корпусу и задержке, а не выбрана ли база общего назначения по привычке.

queriesdesignmonitoring

Я бы использовал партиционированный лог для приёма и колоночное хранилище временных рядов для сжатых запросов.

  • 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 секунд.

Зачем это спрашивают: Интервьюер оценивает расчет пропускной способности, физическую раскладку, предагрегацию и контроль кардинальности.

design

Я бы разбил задачи по временным бакетам и позволил воркерам независимо арендовать пакеты.

  • PostgreSQL партиционирует задачи по часу с индексом next_run_at, а 60 логических шардов ограничивают сканирование каждой минуты.
  • Узлы планировщика через SELECT FOR UPDATE SKIP LOCKED арендуют по 1 000 готовых задач на 2 минуты и публикуют их в Kafka.
  • Воркеры требуют execution_id и сохраняют завершение с бизнес-эффектом, если у них одна база; для внешнего эффекта нужны idempotency key и outbox.
  • Сверка ищет задачи с опозданием больше 2 минут, а лаг планирования выше 60 секунд нарушает заявленную точность.

Зачем это спрашивают: Интервьюер ищет практичное партиционирование, семантику аренды, идемпотентное выполнение и измеримую гарантию точности.

designwebhooks

Я бы сохранял одну надёжную последовательность и одну активную доставку на получателя, включая время ретраев.

  • 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 не блокирует исправных получателей той же партиции.

Зачем это спрашивают: Интервьюер проверяет область порядка, архитектуру ретраев, лимиты соединений и изоляцию клиентов.

database

Я бы делил систему по бизнес-владению и транзакционным инвариантам, а не по техническим слоям.

  • Catalog владеет товарами и ценами, Inventory резервами, Orders состоянием покупки, а Payments интеграциями с провайдерами и своим реестром.
  • Каждый сервис открывает версионированные gRPC-команды и события Kafka, а запрет общих таблиц обеспечивается отдельными схемами PostgreSQL и учетными данными.
  • Checkout оркестрирует процесс, но не меняет чужие строки; он вызывает ReserveInventory и AuthorizePayment с явными ID запросов.
  • Независимость еженедельных релизов проверяется consumer-driven контрактами в CI, а межсервисные изменения остаются аддитивными минимум два релиза.

Зачем это спрашивают: Интервьюер оценивает, следуют ли границы инвариантам и владению команд, сохраняя независимый деплой.

boundariesapiconcurrency

Я бы разделил загрузку и обработку на два асинхронных ресурса.

  • Клиент загружает файл прямо в 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-минутный шаг кодека может остановиться не сразу.

Зачем это спрашивают: Интервьюер ищет асинхронный контракт, учитывающий размер данных, время ответа, владение и семантику отмены.

designresilience

Я бы потребовал ключ идемпотентности и связал его с клиентом и телом запроса.

  • PostgreSQL хранит tenant_id, idempotency_key, request_hash, order_id, status и response под уникальным ограничением tenant и key.
  • Первый запрос создает запись идемпотентности и заказ в одной транзакции; дубль возвращает сохраненный статус и ответ.
  • Тот же ключ с другим хэшем запроса получает 409, поэтому случайная коллизия не меняет смысл незаметно.
  • Записи живут обещанные 24 часа, а параллельный дубль опрашивает исходную операцию вместо повторного создания заказа.

Зачем это спрашивают: Интервьюер проверяет атомарность, область ключа, конфликты тела и поведение во время незавершенного первого запроса.

promises

Я бы сохранял существующие версии аддитивными, а ломающие изменения вел как отдельную программу миграции.

  • OpenAPI-схемы через oasdiff запрещают в CI удаление полей, сужение enum и появление новых обязательных свойств.
  • Ломающее изменение получает датированную версию, а старая остается на том же надежном шлюзе полные 12 месяцев.
  • Метрики версий по клиентам находят оставшиеся из 10 000 интеграций, а уведомления содержат конкретный endpoint и время последнего использования.
  • Шлюз поддерживает обе версии поверх одной канонической доменной модели, не создавая отдельный легаси-парк, который угрожал бы цели 99,99%.

Зачем это спрашивают: Интервьюер оценивает механику совместимости, наблюдаемость миграции и эксплуатацию длинного окна депрекации.

pagination

Я бы открыл непрозрачные keyset-курсоры по стабильному уникальному порядку.

  • Записи упорядочены по created_at и id, которые поддерживает составной B-tree индекс PostgreSQL.
  • Курсор кодирует последнюю пару и хэш фильтров и подписывается HMAC, чтобы клиент не менял позицию и не использовал его с другим фильтром.
  • Страница выполняет range-запрос с LIMIT 101, возвращает 100 строк и следующий курсор без сканирования прошлых страниц.
  • Вставки после cursor могут появиться в текущем проходе, а вставки до него только в новом; snapshot consistency потребовала бы as-of token.

Зачем это спрашивают: Интервьюер проверяет контракт с учетом индекса и честную семантику консистентности при конкурентных изменениях.

schema

Я бы сделал новое поле необязательным и сохранял старый смысл события весь период смешанных версий.

  • Avro-схемы живут в Schema Registry с FULL_TRANSITIVE compatibility, поэтому старые consumers читают новые данные, а новые могут переиграть сохранённые старые.
  • delivery_window является nullable-записью с явным default null и документированной интерпретацией времени в UTC; отсутствие не подменяется выдуманным значением.
  • Продюсеры 6 месяцев заполняют старое и новое представления, если существующие поля не выражают новую концепцию чисто.
  • Контрактные фикстуры запускаются против всех 40 consumers, а удаление начинается только после нуля чтений старой схемы по их собственной version telemetry.

Зачем это спрашивают: Интервьюер ищет конкретные правила совместимости, семантические значения по умолчанию и удаление по фактам использования.

design

Я бы использовал оркестрируемую сагу с явными резервами и компенсациями.

  • Оркестратор хранит конечный автомат в PostgreSQL и вызывает трех провайдеров со стабильными operation ID и дедлайнами по 9 секунд.
  • Перелет и отель создают удержания на 5 минут, а платеж авторизуется, но не списывается до успеха обоих резервов.
  • Сбой любого шага запускает идемпотентную компенсацию, освобождающую резервы и отменяющую авторизацию, с ретраями через надежную очередь.
  • Через 30 секунд API возвращает confirmed, rejected или pending с booking_id и не объявляет отказ, пока компенсация не завершена или поздний ответ провайдера не обработан.

Зачем это спрашивают: Интервьюер оценивает состояние распределенного процесса, компенсации, дедлайны и честную семантику клиента без общей транзакции.

concurrency

Я бы использовал append-only реестр с двойной записью и балансами, выведенными из неизменяемых проводок.

  • PostgreSQL принимает проводки только через stored procedure с deferred constraint trigger, который до commit проверяет равенство дебета и кредита.
  • Проводки счетов партиционируются по месяцам и индексируются по account_id и sequence, а закрытые разделы через год уходят в дешевое хранилище.
  • Таблица балансов обновляется в той же транзакции для быстрого чтения, а ночной пересчет сверяет ее с неизменяемыми проводками.
  • Исправления делаются обратными проводками со ссылкой на исходную, сохраняя семилетний аудит и жесткий запрет изменений.

Зачем это спрашивают: Интервьюер проверяет доменные инварианты, неизменяемую модель, оптимизацию чтения и долгосрочное хранение.

queries

Я бы держал свежие семплы в колоночном хранилище с временными партициями, а сжатые разделы архивировал в объектное хранилище.

  • Kafka принимает семплы с ключом device_id, а ClickHouse пакетирует вставки в дневные MergeTree-партиции, упорядоченные по device_id и времени.
  • Тридцать горячих дней при 3 миллионах семплов в секунду требуют сжатия и репликации; Parquet или Delta в S3 хранят месяцы со второго по двадцать четвертый.
  • Запрос по устройству за час использует первичную сортировку и читает узкий диапазон, а часовые min-max-avg проекции обслуживают типовые дашборды.
  • Поздние семплы можно писать 48 часов; более старые исправления идут в боковую таблицу, чтобы не переписывать многотерабайтные архивные партиции.

Зачем это спрашивают: Интервьюер оценивает уровни хранения, раскладку записи, локальность запроса и политику поздних данных.

queries

Я бы хранил списки смежности по пользователю и заранее вычислял малые проверки связей для горячего пути.

  • Строки 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