Backend Node.js — техническое интервью
60 минут, middle → senior. Node.js 20+, event loop, Express/Fastify, async, тесты.
- Questions
- 14
- Live coding
- 2
Разогрев: опыт и контекст
Опыт с Node.js
Сколько лет пишете на Node.js? Какие фреймворки и версии использовали в продакшене?
Scoring rubric (0–10)
3–5: «Несколько лет Node», без фреймворков и версий. 6–8: Express/Fastify/Nest; LTS vs current; типичный тип проекта (API, BFF). 9–10: Миграции CommonJS → ESM; осознанный выбор runtime (Node vs Bun/Deno) с trade-offs. Красный флаг: путает Node с «просто JavaScript на фронте» на middle+.
Interviewer notes
2–3 минуты.
Runtime и async
Event loop
Объясните, как Node.js обрабатывает I/O и CPU-bound код. Что такое libuv?
Scoring rubric (0–10)
3–5: «Node однопоточный, async быстрый» без деталей. 6–8: Call stack + thread pool; microtasks vs macrotasks; блокировка loop тяжёлым CPU. 9–10: setImmediate vs process.nextTick; worker_threads; UV_THREADPOOL_SIZE на бытовом уровне. Красный флаг: «async делает код параллельным на всех ядрах».
Interviewer notes
Follow-up: что будет с sync fs.readFileSync в handler? 4 мин.
Promises и async/await
В чём разница между Promise.all, allSettled и race? Когда await в цикле — проблема?
Scoring rubric (0–10)
3–5: «all ждёт все промисы» без нюансов fail-fast. 6–8: all vs allSettled; sequential await в for — N× latency; Promise.all для параллели. 9–10: Error propagation; unhandled rejection; p-limit / semaphore patterns. Красный флаг: try/catch вокруг map без await all.
Interviewer notes
4 минуты.
Middleware в Express
Как работает цепочка middleware? Что делает next() и next(err)?
Scoring rubric (0–10)
3–5: «Функции по порядку» без ошибок. 6–8: req/res/next; error middleware 4 args; порядок регистрации важен. 9–10: Async middleware pitfalls; composition vs monolith router; security headers early. Красный флаг: забывает return после res.send и вызывает next дважды.
Interviewer notes
4 минуты.
Утечки памяти
Какие типичные утечки памяти встречаются в Node.js сервисах и как их искать?
Scoring rubric (0–10)
3–5: «GC всё почистит». 6–8: Closures на большие объекты; глобальные Map/cache без TTL; event listeners. 9–10: heap snapshot / clinic.js; weak refs; graceful shutdown и drain connections. Красный флаг: unbounded in-memory cache «для скорости» без eviction.
Interviewer notes
5 минут.
Зависимости и lockfile
Зачем package-lock.json? Чем npm ci отличается от npm install?
Scoring rubric (0–10)
3–5: «Lock фиксирует версии» без CI контекста. 6–8: Deterministic installs; ci читает lock без обновления; semver ranges. 9–10: Supply chain (audit, pinned transitive); monorepo workspaces. Красный флаг: «lock не коммитим».
Interviewer notes
3 минуты.
Практика: живой код
In-memory rate limiter
Реализуйте функцию isAllowed(key, limit, windowMs), которая возвращает true, если запросов от key не больше limit за последние windowMs миллисекунд.
Scoring rubric (0–10)
3–5: Счётчик без окна или без очистки старых меток. 6–8: Map key → timestamps[]; фильтрация по window; O(k) на ключ приемлемо на интервью. 9–10: Sliding window counter; обсуждает Redis для multi-instance; memory bounds. Красный флаг: глобальный счётчик на все ключи.
Interviewer notes
15 минут.
Parse query string
Напишите функцию parseQuery(qs), которая разбирает строку вида a=1&b=2&a=3 в объект { a: ['1','3'], b: ['2'] } (повторяющиеся ключи — массив).
Scoring rubric (0–10)
3–5: split по & и = без decodeURIComponent и дубликатов. 6–8: decodeURIComponent; массив для повторов; пустые значения. 9–10: Edge cases (+ as space legacy); не использует URLSearchParams слепо без обсуждения API. Красный флаг: теряет второе значение a.
Interviewer notes
10 минут.
API и надёжность
REST и идемпотентность
Как спроектируете POST /payments и PUT /payments/{id}? Что такое идемпотентность и где она критична?
Scoring rubric (0–10)
3–5: «POST создаёт, PUT обновляет» без idempotency keys. 6–8: Idempotency-Key header; retry-safe; статус-коды 201/409. 9–10: Outbox pattern; exactly-once illusion; webhook dedup. Красный флаг: POST без защиты от double-charge при retry.
Interviewer notes
4 минуты.
Логи и метрики
Что логируете в production API? Чем structured logging лучше console.log?
Scoring rubric (0–10)
3–5: «Логируем ошибки». 6–8: requestId/correlationId; JSON logs; уровни; не логировать PII/secrets. 9–10: RED/USE metrics; OpenTelemetry traces; sampling. Красный флаг: логирует пароли и токены «для отладки».
Interviewer notes
4 минуты.
Инженерная культура и вопросы
Run an interview with this template
Sign up free: copy the template to your org, schedule an interview, and run it in a room with live coding.
Get started in FlashTalk