Skip to content

Вопросы на собеседовании: Node.js-разработчик

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

Смотреть пример резюме: Node.js-разработчик

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

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

Вопросы

monolithdependencies

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

  • Order, Inventory и Billing открывали бы узкие TypeScript entry points, а package exports, project references и правила dependency-cruiser или ESLint запрещали бы импорт внутренних файлов.
  • Каждый модуль владел бы своими таблицами PostgreSQL и repository; другой модуль вызывает публичный API вместо одной из 7 прямых записей или join по закрытым таблицам в коде приложения.
  • CI ломался бы на любом из 18 запрещённых рёбер зависимостей, запускал contract tests публичных entry points и публиковал граф зависимостей, чтобы размывание границ было видно до merge.
  • Межмодульная работа, которой нужна одна транзакция базы, шла бы через явный application coordinator и API модулей, а некритичные побочные эффекты через типизированные in-process events с назначенными владельцами.

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

databasetransactions

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

  • Order владеет состоянием и суммой заказа, а Inventory единолично владеет доступным количеством и резервом с ID заказа и сроком жизни 10 минут.
  • Checkout создаёт заказ в статусе Pending, отправляет ReserveStock с ID заказа и подтверждает его только после долговечного резерва от Inventory, поэтому ни один сервис не пишет в таблицы другого контекста.
  • Отклонённый или истёкший резерв отменяет Pending-заказ, а повторные команды резерва и освобождения используют тот же ID заказа и ограничение уникальности.
  • Если бизнес требует создать заказ и уменьшить остаток за 1 атомарный шаг без статуса Pending, я оставлю этот инвариант в 1 контексте вместо внедрения 2PC.

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

httpgrpckafka

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

  • Браузер использует HTTP JSON, а внутренние pricing, inventory и payment могут использовать gRPC, если уже есть сгенерированные Protobuf-контракты; одна смена протокола не исправит плохой бюджет задержки.
  • Я выделю около 50 мс на edge и приложение, 80 мс на pricing, 120 мс на inventory, 180 мс на payment и сохраню 70 мс на сетевой разброс и сериализацию.
  • После коммита заказа transactional outbox публикует OrderConfirmed в Kafka в пределах 1 секунды для доставки, письма и аналитики, которые не должны расходовать бюджет ответа в 500 мс.
  • Если payment не укладывается в свои 180 мс, я верну результат Pending и закончу процесс асинхронно вместо синхронной цепочки, регулярно превышающей 500 мс.

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

authapigateway

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

  • Gateway завершает TLS, проверяет подпись JWT по кешированному JWKS, маршрутизирует запросы, ограничивает body значением 2 МБ, применяет лимиты по клиенту и пишет низкокардинальные метрики трафика.
  • При 100 000 RPS реплики gateway должны быть stateless и не обращаться к базе пользователей или политик на каждый запрос; кешированные ключи и локальная проверка токена сохраняют масштабируемость edge-слоя.
  • Gateway может потребовать scope orders:read, но Order-сервис по актуальным доменным данным проверяет, владеет ли пользователь заказом 8472 или имеет tenant-specific право поддержки.
  • Я не помещу в gateway оркестрацию checkout, переходы состояния заказа или специфичное для сервиса преобразование ответа, потому что уже 3 такие функции создадут связанное узкое место деплоя.

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

designload-balancingkubernetes

Я бы использовал Kubernetes для discovery и балансировал на уровне gRPC streams, а не по числу TCP connections.

  • Service вместе с EndpointSlices или xDS открывает 40 готовых pods, а клиенты держат несколько HTTP/2 channels и применяют round robin по разрешённым endpoints вместо одного закреплённого через DNS канала.
  • L7 gRPC proxy должен выбирать upstream по активным requests или streams, а не по наименьшему числу TCP connections, потому что одно соединение может нести тысячи из 80 000 одновременных streams.
  • Readiness исключает pod из нового выбора endpoints, но не запрещает новые streams в уже открытом channel; drain также должен вызвать server.tryShutdown в grpc-js или отправить GOAWAY и отклонить новые вызовы.
  • Я бы дал 60 секунд на кооперативное завершение streams, затем выполнил force shutdown, а максимальный возраст соединения с jitter постепенно обновлял распределение channels без синхронного переподключения всех клиентов.

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

sagadesignconcurrency

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

  • Оркестратор сохраняет ID checkout, текущий шаг, число попыток и дедлайн 15 минут, затем отправляет каждую команду через outbox после коммита своей локальной транзакции.
  • При сбое он компенсирует в обратном порядке: отменяет доставку, аннулирует авторизацию платежа, освобождает товар и переводит заказ в Cancelled.
  • Каждая прямая и компенсирующая команда использует ключ вроде checkout-482:reserve-stock, а сервис атомарно записывает его со своим локальным изменением до подтверждения.
  • При таймауте временный сбой повторяется не более 3 раз, после чего сага переходит в ManualReview, если компенсацию вроде аннулирования платежа подтвердить не удалось.

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

idempotency

Я проведу единую стабильную идентичность операции через все 3 сервиса и дам каждому побочному эффекту свой детерминированный дочерний ключ.

  • Checkout до начала работы сохраняет tenant ID, endpoint, ключ идемпотентности, SHA-256 fingerprint запроса, состояние и ответ под ограничением уникальности.
  • Он выводит отдельные ключи вроде key-731:payment и key-731:shipment, поэтому все 4 повтора приходят в те же downstream-операции, не смешивая 2 разных эффекта.
  • Каждый сервис захватывает свой ключ и применяет бизнес-изменение в 1 локальной транзакции; конкурентный дубликат получает сохранённый результат или ответ 202 Pending.
  • Я храню ключи 7 дней, дольше окон HTTP-ретраев и повторного чтения сообщений, а тот же ключ с другим fingerprint отклоняю как конфликт 409.

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

deploymentapi

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

  • На 1-й неделе provider принимает customerName или новое структурированное поле customer, возвращает оба представления и нормализует их в 1 доменную модель на границе API.
  • Consumer-driven contract tests проверяют обе формы в CI, а каждый запрос записывает ID потребителя и версию контракта, чтобы незарегистрированный клиент не исчез из подсчёта миграции.
  • Я буду переводить примерно по 2 потребителя в неделю без синхронного релиза, опубликую сгенерированный клиент для новой формы и сохраню совместимость expanded-provider с откатом.
  • После миграции всех 12 потребителей и 0 обращений к старому полю в течение 14 дней я перестану его возвращать, а приём и adapter-код удалю в следующем релизе.

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

resilienceendpointsdependencies

Я помещу всю политику устойчивости внутрь 600 мс, а не дам каждой попытке независимый таймаут.

  • Я зарезервирую 100 мс на работу приложения, 120 мс на базу, 80 мс на разброс ответа и отдам зависимости не более 300 мс суммарно.
  • При измеренном p99 зависимости около 90 мс я начну с таймаута попытки 140 мс и разрешу 1 повтор после jitter до 20 мс только для идемпотентных вызовов и временных ошибок.
  • Переданный дальше дедлайн отменяет downstream-работу, а повтор не начинается, если осталось меньше 160 мс, поэтому истёкший запрос не создаёт бесполезную фоновую нагрузку.
  • Я начну с размыкания breaker при 50% подходящих ошибок минимум в 20 вызовах, открою его на 5 секунд, разрешу 2 half-open проверки и настрою числа по трафику, а не догадкам.

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

postgresendpoints

Я изолирую ёмкость рекомендаций от основного пути товара и уберу рекомендации до того, как они исчерпают 60 соединений базы.

  • Основные чтения товара сохраняют пул PostgreSQL на 60 соединений, а рекомендации получают отдельный HTTP agent на 20 sockets, лимит конкурентности 40 и ограниченную очередь на 80 запросов.
  • Опциональный вызов получает таймаут 80 мс без ретрая внутри запроса; при сбое API возвращает товар с recommendationStatus unavailable или значение Redis не старше 5 минут.
  • После заполнения 80 мест опциональной очереди новые рекомендации сразу пропускаются, поэтому 12 000 RPS не превращают медленную зависимость в неограниченные promises и рост heap.
  • Я отдельно построю графики основной latency, пропущенных рекомендаций, глубины очереди, использования sockets и возраста stale-кеша, затем под нагрузкой проверю, что сбой рекомендаций не поднимает p95 товара выше 250 мс.

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

concurrency

Я запущу 18 одноядерных процессов-реплик, по шесть на каждом из трёх 8-ядерных хостов; при 24 000 RPS каждая обычно обслуживает около 1 333 RPS, а после потери хоста нагрузка вырастает до 2 000 RPS.

  • Один JavaScript event loop использует одно ядро для кода приложения, поэтому остальные ядра задействуют дополнительные процессы, а не увеличение одного процесса.
  • Цель в 2 000 RPS составляет 67% от измеренного предела в 3 000 RPS и оставляет запас для event loop и всплесков трафика.
  • После потери одного хоста останутся 12 реплик и ровно 24 000 RPS плановой ёмкости, а два свободных ядра на хосте останутся ОС и нативной работе.
  • Я вынесу состояние наружу и проведу нагрузочный тест базы, кеша, пулов соединений и сети на 36 000 RPS, потому что ёмкость процессов не равна сквозной ёмкости.

Зачем это спрашивают: Интервьюер проверяет, умеет ли кандидат превратить бенчмарк одного процесса в модель ёмкости N+1 и не предполагает ли, что один event loop использует все восемь ядер.

kubernetescontainersdeployment

Обычно я выберу 24 pod с одним процессом и запросом 1 vCPU вместо четырёх cluster workers внутри каждого из шести pod.

  • Kubernetes сможет независимо размещать, проверять, перезапускать и дренировать каждый процесс, а не считать четыре границы памяти и отказа одним pod.
  • CPU, RSS, задержка event loop и readiness одного pod тогда описывают один процесс Node.js, поэтому лимиты и сигналы автоскейлинга проще интерпретировать.
  • Rolling update может заменять несколько из 24 процессов за раз, тогда как замена одного pod с cluster одновременно убирает четыре процесса.
  • Я оставлю cluster для отдельной 4-ядерной VM или платформы без оркестрации процессов и задокументирую исключение, если sidecar или другие ресурсы каждого pod необычно дороги.

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

httpwebsocketsreplication

Для WebSocket upgrade я выберу взвешенный least-connections, а для короткого HTTP-трафика least-outstanding-requests или round robin.

  • Least-connections направляет новый upgrade на реплику с меньшим числом открытых сокетов и удерживает ожидаемые 5 000 соединений на реплику ниже измеренного лимита в 6 000.
  • Я не позволю 20 000 долгим соединениям определять выбор для HTTP, поэтому балансировщику нужны отдельные счётчики или backend pools для upgrade и обычных запросов.
  • Веса позволяют сократить трафик на меньшую или прогревающуюся реплику, а consistent hashing не нужен без явного требования к локальности после выноса состояния.
  • Readiness должна запретить новые upgrade до дренирования реплики, а существующие сокеты остаются на ней до закрытия или ограниченного дедлайна деплоя.

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

httpwebsocketsreplication

Я не буду использовать sticky routing для HTTP, вынесу сессии и сообщения наружу и оставлю привязку только для WebSocket на время открытого соединения.

  • Непрозрачный session ID может ссылаться на состояние в Redis с TTL 30 минут, поэтому любой из шести экземпляров сможет аутентифицировать следующий HTTP-запрос.
  • Общий реестр соединений и разделённый pub-sub направят сообщение на реплику с нужным сокетом при среднем значении 10 000 сокетов на реплику.
  • Привязка по cookie или исходному IP может скрыть состояние в памяти, но создаёт перекос нагрузки и теряет непрерывность при замене выбранного pod во время rollout.
  • Клиенты должны переподключаться с jitter и resume cursor, чтобы безопасно перенести соединение без сохранения памяти старого процесса.

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

concurrencyjavascriptapi

Оставшиеся 25 мс я разделю на 10 мс ожидания event loop, 10 мс работы приложения и 5 мс запаса, ограничив любую непрерывную синхронную часть 5 мс.

  • При 400 RPS синхронная работа по 1,5 мс требует около 600 мс одного ядра в секунду, поэтому процесс начинает примерно с 60% event-loop utilization без учёта callbacks и GC.
  • Я буду записывать monitorEventLoopDelay как гистограмму и потребую, чтобы её p99 оставался ниже выделенных 10 мс под реальной смесью запросов.
  • Я сравню снимки eventLoopUtilization по окнам нагрузки и буду исследовать устойчивые значения выше примерно 70%, а не считать одно накопленное значение метрикой запроса.
  • CPU profiles найдут части дольше 5 мс, которые я ограничу, разобью планируемыми уступками event loop или перенесу в worker pool перед повторной проверкой p99 в 120 мс.

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

Я запущу шесть worker threads на pod, не менее двух реплик и буду передавать владение каждым ArrayBuffer размером 8 MiB вместо клонирования.

  • Шесть workers дают теоретические 150 задач в секунду, а цель загрузки 70% даёт около 105 задач в секунду и оставляет CPU основному event loop и нативной работе.
  • Две реплики дают около 210 задач в секунду на целевой загрузке, а ограниченная входная очередь должна отклонять или откладывать работу сверх этого темпа.
  • Transfer перемещает backing store ArrayBuffer и отсоединяет его у отправителя, тогда как clone для 200 входов в секунду копировал бы около 1,6 GiB в секунду ещё до ответов.
  • Если отправителю нужны исходные байты, я сделаю копирование явным или спроектирую синхронизированный протокол SharedArrayBuffer, затем вместе измерю вычисления, обмен сообщениями, RSS и p99.

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

replicationpasswords

Я начну с UV_THREADPOOL_SIZE=4, ограничу получение ключей тремя конкурентными операциями на реплику и проведу бенчмарк до увеличения пула.

  • Криптографическая нагрузка потребляет около 2,4 ядро-секунды в секунду на реплику, поэтому большой пул не создаст дополнительный CPU при лимите 4 vCPU.
  • Три конкурентные операции по 40 мс дают теоретические 75 в секунду и оставляют один слот пула для файловой системы, dns.lookup, zlib и другой общей работы libuv.
  • Размер 4 создаёт 48 потоков libuv на 12 репликах, тогда как значение 16 создаст 192 потока и может добавить переключения контекста и память без полезного throughput.
  • Я сравню размеры 4, 6 и 8 по времени в очереди crypto, p99 файловой системы, CPU и RSS и вынесу работу с паролями в отдельные реплики, если общий пул всё ещё нарушает любой SLO.

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

promisesrecursioncallbacks

Цепочка microtasks не даёт выполняться фазам timers и I/O, потому что Node.js продолжает опустошать очередь microtasks до перехода event loop дальше.

  • Promise.then и queueMicrotask планируют новые microtasks, поэтому замена рекурсии одним из этих API не уступает event loop; рекурсивный process.nextTick ещё агрессивнее, поскольку его очередь выполняется раньше обычных promise microtasks.
  • Я бы обрабатывал измеренную часть, например 500 элементов, сохранял cursor и ждал setImmediate из node:timers/promises перед следующей частью, чтобы timers и poll callbacks получили время.
  • Если 100 000 шагов выполняют тяжёлые CPU-вычисления, а не короткую координацию, я бы отправил batch в ограниченный пул worker_threads вместо создания ещё более длинной последовательности проходов event loop.
  • Нагрузочный тест отслеживал бы p99 monitorEventLoopDelay, eventLoopUtilization, опоздание timers, throughput и глубину очереди и сохранял размер части только при выполнении бюджета таймера 10 мс.

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

replicationsnapshotcapacity

Я начну с --max-old-space-size=1024, буду считать полный лимит 2 GiB бюджетом реплики, размещу не более шести таких pod на узле 16 GiB и сниму heap snapshots только на изолированной диагностической реплике.

  • Для ёмкости важен RSS, потому что он включает heap V8, Buffers, нативные аллокации, код и стеки потоков; измеренный пик 1,6 GiB оставляет лишь около 400 MiB до лимита pod.
  • Шесть лимитов по 2 GiB резервируют 12 GiB и оставляют 4 GiB операционной системе, Kubernetes, служебным процессам и временному давлению на узел.
  • Snapshot может остановить event loop и потребовать много дополнительной памяти, поэтому я выведу реплику из трафика и дам диагностическому pod не менее 3 GiB вместо риска OOM в продакшн-pod на 2 GiB.
  • Я сравню прогретые post-GC snapshots по retained size и retaining path, затем проверю исправление по наклону RSS, времени GC и soak test, а не только увеличу heap limit.

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

load-balancingresilienceslo

Я бы позволил балансировщику первым закрывать idle connections, отдельно ограничил медленную загрузку запроса и обеспечил 2-секундный бюджет handler через отмену.

  • Я бы задал server.keepAliveTimeout около 55 секунд, чтобы балансировщик, владеющий и повторно использующий клиентскую сторону upstream-соединения, закрывал его на 50-й секунде раньше server-side idle timeout Node.js.
  • Я бы начал с headersTimeout 10 секунд и requestTimeout 20 секунд на полный запрос до 2 МиБ, добавив лимиты числа headers и размера body, чтобы медленные клиенты не занимали parsers бесконечно.
  • Route использовал бы AbortController с дедлайном меньше 2 секунд и передавал signal в fetch, получение соединения базы и потоковую работу, потому что socket timeouts сервера не отменяют promises приложения автоматически.
  • Я бы согласовал настройки client agent и proxy в нагрузочном тесте и отслеживал connection resets, ответы 408, активные sockets, reuse rate и p99 до изменения значений 55, 10 или 20 секунд.

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

Закрытые вопросы

  • 21

    Kafka получает 50 000 событий в секунду с retention семь дней, и 2% должны стать задачами BullMQ ровно через 10 минут. Как передать отложенное подмножество без потери или дублирования бизнес-эффекта?

    retentionkafka
  • 22

    Топик Kafka получает 50 000 записей в секунду, а одна партиция обрабатывает 2 000 записей в секунду. Сколько партиций и потребителей вы запланируете с сохранением порядка по клиенту?

    partitioningkafkaconcurrency
  • 23

    Node.js-потребитель Kafka применяет 20 000 платёжных событий в секунду к PostgreSQL. Объясните окно сбоя при at-least-once и способ получить effectively-once результат.

    postgreskafka
  • 24

    8 Node.js-потребителей одновременно получают одно событие. Как сделать consumer атомарным и идемпотентным с помощью ограничения уникальности PostgreSQL?

    concurrencyidempotencypostgres
  • 25

    Спроектируйте transactional outbox для Node.js-сервиса с 5 000 записей PostgreSQL в секунду и сохранением порядка событий по счёту.

    transactionspostgresdesign
  • 26

    Спроектируйте retry topics, backoff и dead-letter queue для задач, которые должны успешно завершиться или попасть в DLQ в пределах SLA 45 минут.

    designresiliencedata-structures
  • 27

    Очередь получает 10 000 задач в секунду, средняя обработка занимает 50 миллисекунд, возраст старейшей задачи должен быть меньше 180 секунд, а backlog равен 600 000. Как задать concurrency и backpressure?

    concurrencydata-structuresbackpressure
  • 28

    Топик Kafka из 24 партиций обрабатывает 100 000 событий в секунду, предел одной партиции равен 5 000, а один tenant создаёт 30 000. Как изменить ключ партиционирования?

    partitioningkafka
  • 29

    Старые consumers могут работать 14 дней, пока producer добавляет currency и переименовывает amountCents в amountMinor. Как развить событие через JSON Schema, Avro или Protobuf?

    schema
  • 30

    Система BullMQ получает 200 задач в секунду со средней длительностью 1,5 секунды и запускает billing каждые пять минут. Как настроить durability Redis, retention, job IDs и concurrency workers?

    retentionredissystem-design
  • 31

    Эндпоинт Node.js стабильно обрабатывает 40 000 RPS, использует 85% одного ядра CPU и имеет p99 90 мс без текущего сбоя; как с помощью --cpu-prof или inspector и flame graph получить доказательства для оптимизации?

    optimizationlatencyendpoints
  • 32

    Пользовательский Transform получает chunks по 1 MiB и расширяет каждый до 8 MiB, а downstream writable записывает 20 MiB/s; как должны взаимодействовать _transform, push и callback для ограничения памяти?

    memorycallbacks
  • 33

    Сервис Node.js потоково расшифровывает объект размером 20 GiB во временный файл и должен отменить работу за 2 секунды после отключения клиента; как использовать stream.pipeline для отмены, ошибок и очистки?

    resilienceci-cd
  • 34

    У objectMode Transform значения readableHighWaterMark и writableHighWaterMark равны 16, а каждый объект удерживает Buffer размером 5 MiB; какой риск для памяти это создаёт на 8 pods?

    memory
  • 35

    Один Readable выдаёт 200 MiB/s и должен отправлять одинаковые байты в три destinations со скоростью 200, 150 и 20 MiB/s; какую ограниченную архитектуру вы выберете для передачи длительностью 10 минут?

    architecture
  • 36

    Кластер PostgreSQL допускает 300 подключений, API на Node.js работает в 12 pods с rollout surge 25%, а 60 подключений нужно зарезервировать; какой максимум пула на pod вы настроите?

    postgresapiconfig
  • 37

    Маршрут получает 600 одновременных запросов, каждый удерживает один PostgreSQL client 40 мс, пул содержит 20 clients, а SLO ответа равен 250 мс; как ограничить ожидание подключения и очередь пула?

    concurrencydata-structurespostgres
  • 38

    Checkout использует pg pool на 30 clients, тратит 20 мс на SQL и вызывает платёжный API с p95 800 мс при 100 одновременных запросах; почему транзакция закрепляет один client и стоит ли держать удалённый вызов внутри неё?

    sqltransactionsapi
  • 39

    Четыреста Node.js clients подключены через transaction pooling PgBouncer к 40 соединениям PostgreSQL, а приложение выполняет именованный prepared query 50 000 раз в минуту и использует SET search_path и LISTEN; какие поведения безопасны и что нужно изменить?

    transactionsqueriespostgres
  • 40

    AWS Lambda имеет reserved concurrency 1 000, каждая execution environment создаёт pg pool с max 5, а RDS допускает 500 подключений при резерве 100; как сравнить прямые подключения и RDS Proxy?

    concurrencylambdaproxy
  • 41

    Endpoint запускает 20 вызовов fetch через Promise.all, и вызов 7 отклоняется через 80 мс, пока остальные могут выполняться 2 секунды. Что произойдёт и как остановить уже ненужную работу?

    endpointspromises
  • 42

    Вы читаете из 5 реплик, для кворума нужны любые 3 корректных ответа, а отдельно хеджируете чтение через 3 региона ради первого корректного ответа. Где применимы Promise.allSettled и Promise.any?

    replicationpromises
  • 43

    Задача Node.js должна обработать 100 000 записей в среднем по 8 КиБ через зависимость с задержкой 200 мс и лимитом 250 запросов в секунду. Как ограничить конкурентность promises и память?

    promisesconcurrencydependencies
  • 44

    При 10 000 запросов в секунду HTTP-запрос публикует сообщение Kafka и планирует ретрай через таймер на 200 мс. Как передавать контекст AsyncLocalStorage и где он может потеряться?

    kafkaresiliencehttp
  • 45

    Endpoint на Fastify или NestJS принимает JSON до 2 МиБ и не более 100 позиций. Почему TypeScript недостаточно и как обеспечить runtime-контракт?

    endpointstypescript
  • 46

    API на Node.js обслуживает 30 000 запросов в секунду, а наивный код пишет 3 JSON-лога на запрос. Как спроектировать структурированные логи с корреляцией, маскированием чувствительных данных и контролем кардинальности?

    correlationapidesign
  • 47

    Сервис обрабатывает 20 000 HTTP-запросов в секунду, публикует в Kafka, обращается к PostgreSQL и создаёт в среднем 8 spans на запрос. Как инструментировать и сэмплировать OpenTelemetry traces?

    postgresquerieshttp
  • 48

    Публичный API обслуживает 100 миллионов запросов за 28 дней с SLO доступности 99,9% и целью задержки 300 мс. Какие RED-метрики и buckets гистограммы нужно экспортировать?

    distributionsapilatency
  • 49

    Как определить версионированный контракт cursor pagination для изменяемого набора из 50 миллионов строк с 5 000 обновлений в секунду и максимумом 100 строк на страницу?

    pagination
  • 50

    Gateway GraphQL Federation обслуживает 15 000 запросов в секунду с целью p99 250 мс; один запрос может получить 500 товаров вместе с полями цены и отзывов, а мобильные клиенты остаются активными 12 месяцев. Как ограничить выполнение и развивать схему?

    queriesschemagraphql
  • 51

    У сервиса обработки изображений на Node.js RSS растёт на 180 MiB в час, heapUsed после GC возвращается к 420 MiB, а pod достигают лимита 2 GiB через 7 часов; как провести диагностику и сдержать проблему до завтрашнего пика?

  • 52

    В 14:00 p99 checkout вырос со 140 мс до 1,8 секунды, а monitorEventLoopDelay показал 240 мс после релиза с синхронным gzip для ответов по 6 MiB; что вы сделаете в первые 30 минут?

    monitoring
  • 53

    Платёжная зависимость начинает отвечать 503 на 20% вызовов, три слоя ретраев превращают 4 000 пользовательских запросов в секунду в 22 000 попыток, а инцидент нужно стабилизировать за 15 минут; как вы отреагируете?

    incidentsresiliencedependencies
  • 54

    При нагрузке 12 000 RPS p99 API вырос со 190 мс до 920 мс, p50 остался 75 мс, а CPU достиг 88%; как найти и исправить хвостовую регрессию до релиза в пятницу?

    load-testingapi
  • 55

    У сервиса pg pool на 30 соединений, p99 получения соединения достигает 2,4 секунды, 180 запросов ждут, а CPU PostgreSQL равен лишь 45%; как восстановить SLO API 300 мс за час?

    postgresapislo
  • 56

    После деплоя 6 из 20 pod падают с unhandledRejection при таймауте записи аудита, а Kubernetes перезапускает каждый pod за 20 секунд; как сегодня найти первопричину и исключить потерю запросов?

    kubernetesdeployment
  • 57

    Экспорт из Kafka читает 90 MiB/s, S3 пишет 25 MiB/s, игнорирование результата write увеличивает очередь процесса до 6 GiB за 80 секунд, а pod упадёт по OOM через 3 минуты; как ограничить систему?

    concurrencydata-structureskafka
  • 58

    Node.js-инженер потратил 90 минут на перезапуск pod во время двух инцидентов, не проверив event-loop и pool metrics, а через 3 недели снова выходит основным on-call; как вы будете его менторить?

    mentoringincidentson-call
  • 59

    После включения нового mapper время GC выросло с 4% до 28%, minor collections происходят 40 раз в секунду, а throughput упал на 35%, хотя post-GC heap стабилен; что вы исследуете?

    throughputdata-structures
  • 60

    Heap snapshots показывают 70 000 объектов, удерживающих Buffers общим размером 512 MiB после разбора заголовков по 2 KiB из загруженных файлов, а RSS растёт на 90 MiB в час; какова вероятная ошибка и исправление?

    snapshotdata-structures
  • 61

    Пул worker_threads получает 40 задач с изображениями в секунду и ArrayBuffers по 32 MiB, RSS скачет на 1,3 GiB, а p99 превышает 2 секунды после перехода с transfer на clone; как вы отреагируете?

    refactoring
  • 62

    Pod с 4 vCPU выполняет 80 операций scrypt в секунду, p99 файловой системы вырос с 20 мс до 1,4 секунды, а очередь UV thread pool превышает 900 мс; что изменить до дедлайна batch через 2 часа?

    concurrencydata-structuresbatch
  • 63

    Downstream API замедляется до 3 секунд, число активных sockets растёт с 200 до 12 000, ожидающих запросов до 30 000, а pod Node.js падает по OOM за 6 минут; как исправить HTTP client?

    httpzero-to-one
  • 64

    После установки server keep-alive в 4 секунды при переиспользовании upstream-соединений балансировщиком в течение 60 секунд ECONNRESET вырос до 3,8%, а p99 удвоился; как исправить инцидент?

    incidentsload-balancing
  • 65

    Worker отчётов падает с EMFILE через 25 минут, открытые file descriptors растут со 180 до 9 800, а временных файлов остаётся 4 000; как найти и остановить утечку?

    descriptors
  • 66

    Kafka consumer обрабатывает batch 8 минут, группа выполняет rebalance каждые 5 минут, а 14% записей обрабатываются дважды до дедлайна расчётов 30 минут; что вы измените?

    kafkabatchconcurrency
  • 67

    Одна некорректная запись Kafka уронила consumer Node.js 46 раз за 12 минут, partition не движется, а возраст сообщения уже 18 минут при SLA 30 минут; что вы сделаете?

    partitioningkafka
  • 68

    BullMQ сообщает о 9 000 stalled jobs после CPU throttling workers на 45 секунд, а 320 задач выставления счетов выполнились дважды; как стабилизировать billing до следующего 10-минутного цикла?

    throttle
  • 69

    Во время 70-секундного failover Redis workers BullMQ переподключаются без задержки, CPU достигает 100%, а очередь вырастает на 120 000 jobs; каков план восстановления?

    recoveryredisdata-structures
  • 70

    Релиз cleanup запускает Redis KEYS tenant:* каждую минуту на 40 миллионах ключей, latency команд достигает 2,6 секунды, а API timeouts 8%; что сделать до следующего запуска?

    redisapilatency
  • 71

    После reshard Redis Cluster 6% запросов падают с MOVED в течение 11 минут, потому что custom client кеширует slots на 30 минут; как исправить инцидент?

    incidentsrediscaching
  • 72

    Горячий ключ Redis получает 85 000 GET в секунду, один shard достигает 95% CPU, а p99 кеша checkout растёт с 4 мс до 180 мс; как снять нагрузку за 20 минут?

    shardingrediscaching
  • 73

    Liveness probe Kubernetes проверяет PostgreSQL, 40-секундное замедление базы перезапускает все 60 pod Node.js, а reconnects истощают базу на 12 минут; что вы немедленно измените?

    databasepostgreskubernetes
  • 74

    Rollout отправляет SIGTERM queue worker с 25 активными jobs, Kubernetes убивает его через 30 секунд, а 7 jobs отправляют письма дважды; как исправить lifecycle до второго rollout сегодня?

    kubernetesdata-structures
  • 75

    Обновление рантайма Node.js проходит unit tests, но 3% canary pod падают в sharp при обработке изображений, а security deadline равен 48 часам; как действовать?

    unitconcurrencyestimation
  • 76

    Сервис CommonJS запускается локально, но 18 production pod входят в CrashLoopBackOff с ERR_REQUIRE_ESM после релиза зависимости, а rollback нужно завершить за 10 минут; что вы сделаете?

    dependenciesrollbackmodules
  • 77

    После обновления Node.js CPU вырос на 22%, TLS handshakes падают у одного legacy partner, а дедлайн миграции fleet равен 5 дням; как разделить причины?

    estimationmigrationstls
  • 78

    Два конкурентных запроса иногда пишут в лог неправильный tenant после рефакторинга, 0,4% из 50 000 RPS traces приписаны неверно, а audit report нужен завтра; как отладить AsyncLocalStorage?

    asyncconcurrencyrefactoring
  • 79

    Включение OpenTelemetry повышает RSS сервиса на 600 MiB, а collector теряет 35% spans при 20 000 RPS, и на защиту pod есть только 1 час; что вы измените?

    observability
  • 80

    Изменение логирования пишет 1,2 GiB в минуту в stdout контейнера, event-loop lag достигает 110 мс, а disk pressure узла начинает выселять pod; как исправить это в первый час?

    containerslogging
  • 81

    Code review добавляет JSON.stringify для сериализации объекта 120 MiB в HTTP route с SLO 250 мс; какие доказательства и изменение нужны до одобрения?

    serializationslohttp
  • 82

    Новое пользовательское regular expression загружает одно ядро Node.js до 100% на 9 секунд для входа 4 KiB, а доступность login падает ниже 99,9%; как вы отреагируете?

    regex
  • 83

    Клиенты отменяют 18% поисковых запросов через 400 мс, но downstream fetch продолжаются 12 секунд, а активных promises становится 45 000; как освободить работу?

    promises
  • 84

    Scheduler создаёт 80 000 retry timers во время 5-минутного сбоя, heap растёт на 900 MiB, а восстановление вызывает всплеск трафика; какой ограниченный вариант вы внедрите?

    resiliencedata-structures
  • 85

    Warnings показывают по 35 listeners на общем EventEmitter, heap растёт на 60 MiB в час, а каждый reconnect дублирует обработку сообщения; как доказать и исправить утечку?

    data-structures
  • 86

    p99 DNS lookup растёт до 1,1 секунды только при 64 конкурентных filesystem jobs, а сетевые метрики DNS остаются ниже 20 мс; какую специфичную для Node.js причину вы проверите?

    dnsmonitoringconcurrency
  • 87

    Отключение HTTP keep-alive увеличивает TLS handshakes с 900 до 18 000 в секунду, CPU достигает 92%, а p99 API превышает 300 мс; как восстановить сервис?

    httptlszero-to-one
  • 88

    Деплой заставляет 30 000 WebSocket-клиентов переподключиться за 20 секунд, file descriptors достигают 95% лимита, а p99 Redis аутентификации равен 700 мс; что вы сделаете?

    rediswebsocketsauth
  • 89

    HTTP/2 client оставляет 6 000 streams открытыми после отмен 499, RSS растёт на 75 MiB в час, а GOAWAY не обрабатывается; как исправить lifecycle?

    resiliencehttp
  • 90

    Transaction route удерживает 24 из 25 pg clients на 50 секунд, потому что внешний fraud-вызов стоит между BEGIN и COMMIT, а p99 checkout достигает 8 секунд; как это исправить?

    transactions
  • 91

    После изменения ORM list route выполняет 501 запрос PostgreSQL для 500 заказов, p99 растёт с 220 мс до 2,7 секунды, а окно релиза закроется через 45 минут; что вы сделаете?

    ormpostgresqueries
  • 92

    Смена плана PostgreSQL повышает p99 одного запроса с 40 мс до 1,9 секунды при 9 000 RPS, а pool wait Node.js достигает 700 мс; как сдержать и проверить исправление?

    queriespostgres
  • 93

    Kafka brokers недоступны 4 минуты, producer Node.js буферизует 1,8 миллиона записей, а RSS достигает 1,6 GiB при лимите pod 2 GiB; как предотвратить OOM и потерю данных?

    kafka
  • 94

    В Kafka topic 48 partitions и 48 consumers, но одна partition достигает lag 2,4 миллиона записей и SLA 20 минут, пока остальные актуальны; что вы проверите и измените?

    partitioningkafka
  • 95

    В начале часа одновременно истекают 300 000 записей Redis, CPU PostgreSQL достигает 98%, а p99 API растёт со 120 мс до 4 секунд на 6 минут; как остановить cache stampede?

    postgresredisapi
  • 96

    Pod использует 1,85 GiB из лимита 2 GiB, V8 сообщает allocation failure, а support просит heap snapshot за 10 минут; какое решение безопасно?

    snapshotdata-structures
  • 97

    Native compression addon вызывает segfault двух pod в час только на ARM nodes, JavaScript logs резко обрываются, а дедлайн миграции через 3 дня; как найти первопричину?

    estimationmigrationsjavascript
  • 98

    Один worker thread падает каждые 7 минут на некорректном input, parent немедленно заменяет его, очередь растёт до 50 000 jobs, а CPU остаётся 100%; как остановить restart loop?

    concurrencydata-structures
  • 99

    Production errors показывают только minified frames из dist после TypeScript build, за 20 минут произошло 700 сбоев, а команде нужна строка исходника за 30 минут; что вы сделаете?

    typescript
  • 100

    Изменение метрик добавляет labels userId и raw URL, число series Prometheus растёт с 400 000 до 18 миллионов за 25 минут, а scrapes не успевают до следующей передачи on-call; как восстановить observability?

    observabilitymonitoringon-call