Node.js
Экспресс-шпаргалка 20/20
- Event Loop проходит фазы
timers -> pending callbacks -> poll -> check -> close, аmicrotasks(Promise,nextTick) выполняются между фазами. - Streams выбирают для больших payload и непрерывных данных, чтобы не держать все в памяти и использовать backpressure.
Bufferнужен для бинарных данных: файлы, сокеты, криптография, кодировки.nextTickвыполняется раньше всего,setImmediateвcheck,setTimeoutвtimersпосле минимальной задержки.worker_threadsдля CPU-bound задач,clusterдля масштабирования HTTP-процесса по ядрам.- CommonJS (
require) проще для legacy, ESM (import) стандартнее и лучше для современного tooling. - Централизованный error handling: единый error schema, middleware/filters, correlation id и разделение 4xx/5xx.
- Graceful shutdown: stop accepting new requests -> drain active -> close DB/broker -> forced exit by timeout.
- От перегрузки защищают rate limit, очереди, таймауты, circuit breaker и ограничение параллелизма.
- Логи должны быть структурными (JSON), с
traceId/requestId, уровнями и метриками latency/error-rate. - Конфиг:
12-factor, fail-fast валидация env при старте, секреты только через secret manager. - Большие файлы обрабатывают stream/pipeline с лимитами размера, type-check и защитой от медленных клиентов.
healthпоказывает жив ли процесс,readinessготов ли сервис принимать трафик с учетом зависимостей.- JWT безопасен только с проверкой
alg, подписи,exp/aud/iss, ротацией ключей и коротким TTL access-токена. - Кэш ставят на read-heavy пути с TTL, стратегией инвалидации и защитой от cache stampede.
- WebSocket требует heartbeat/ping-pong, лимитов соединений, backpressure и стратегии reconnect.
- Утечки памяти ищут через heap snapshots, allocation profiling и сравнение роста heap во времени.
- ORM ускоряет CRUD, query builder/raw SQL нужен для сложных и критичных по perf запросов.
- N+1 лечат batching, joins/eager loading и измерением количества запросов на один API call.
- Backward compatibility достигают additive changes, versioning, deprecation window и контрактными тестами.
1. Как устроен Event Loop в Node.js и его фазы?
Теги: nodejs, backend, event-loop, async
Сложность: Middle/Senior
Короткий ответ
Node Event Loop обрабатывает callback-очереди по фазам: timers -> pending callbacks -> poll -> check -> close callbacks, а microtasks выполняются между фазами.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: CPU-bound операции в request path блокируют Event Loop и увеличивают latency для всех пользователей.
- Как проверяете решение: Проверяю сценарий под пиковым трафиком: latency, saturation и поведение при деградации зависимости.
Мини-пример
console.log('A');
setTimeout(() => console.log('timer'), 0);
setImmediate(() => console.log('immediate'));
process.nextTick(() => console.log('nextTick'));
Углубление (2-3 минуты)
- Свяжите тему "Как устроен Event Loop в Node.js и его фазы?" с одним production-сценарием и объясните, почему она влияет на результат.
- Покажите, какие сигналы observability подтверждают устойчивость решения.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Держат тяжелую обработку в синхронном request path.
- Запускают изменения без наблюдаемости и runbook.
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Что вынесете в фон, чтобы не блокировать critical path?
- Какие метрики покажут деградацию раньше инцидента?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Runbook деградации внешней зависимости.
- Health/readiness и корреляцию логов/метрик.
- Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
2. Когда использовать Streams вместо чтения файла целиком?
Теги: nodejs, backend, streams
Сложность: Middle/Senior
Короткий ответ
Streams применяют для больших или непрерывных данных, чтобы читать/писать чанками и не держать весь payload в памяти.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Неправильная обработка backpressure приводит к росту памяти и нестабильности процесса.
- Как проверяете решение: Прогоняю нагрузочный кейс, фиксирую лимиты (timeout/concurrency/retry) и проверяю стабильность сервиса.
Мини-пример
import { createReadStream } from 'node:fs';
createReadStream('./big.log').pipe(process.stdout);
Углубление (2-3 минуты)
- Свяжите тему "Когда использовать Streams вместо чтения файла целиком?" с одним production-сценарием и объясните, почему она влияет на результат.
- Покажите, какие сигналы observability подтверждают устойчивость решения.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Запускают изменения без наблюдаемости и runbook.
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Что вынесете в фон, чтобы не блокировать critical path?
- Как поведение изменится под пиковым трафиком?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Runbook деградации внешней зависимости.
- Health/readiness и корреляцию логов/метрик.
- Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
3. Что такое Buffer и где он нужен?
Теги: nodejs, backend, buffer
Сложность: Middle/Senior
Короткий ответ
Buffer - бинарный контейнер памяти в Node для работы с байтами, сетевыми пакетами и файлами.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Сверяю поведение по runbook: детектирование, mitigation и проверка восстановления после сбоя.
Мини-пример
const payload = Buffer.from('hello', 'utf8');
console.log(payload.toString('hex'));
Углубление (2-3 минуты)
- Свяжите тему "Что такое Buffer и где он нужен?" с одним production-сценарием и объясните, почему она влияет на результат.
- Покажите, какие сигналы observability подтверждают устойчивость решения.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Держат тяжелую обработку в синхронном request path.
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Что вынесете в фон, чтобы не блокировать critical path?
- Какие метрики покажут деградацию раньше инцидента?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Границы
Event Loop/I-O/CPU и backpressure. - Health/readiness и корреляцию логов/метрик.
- Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
4. Разница между process.nextTick, setImmediate и setTimeout?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
process.nextTick выполняется раньше очереди фаз, setImmediate - в check phase, setTimeout - в timers phase после минимального delay.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Проверяю сценарий под пиковым трафиком: latency, saturation и поведение при деградации зависимости.
Мини-пример
import express from 'express';
const app = express();
app.get('/ping', (_req, res) => res.json({ ok: true }));
Углубление (2-3 минуты)
- Свяжите тему "Разница между
process.nextTick,setImmediateиsetTimeout?" с одним production-сценарием и объясните, почему она влияет на результат. - Покажите, какие сигналы observability подтверждают устойчивость решения.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Запускают изменения без наблюдаемости и runbook.
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Как поведение изменится под пиковым трафиком?
- Какие метрики покажут деградацию раньше инцидента?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Runbook деградации внешней зависимости.
- Границы
Event Loop/I-O/CPU и backpressure. - Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
5. Когда выбирать worker_threads, а когда cluster?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
worker_threads - для CPU-bound задач внутри одного процесса, cluster - для масштабирования HTTP процесса по ядрам через форки.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Прогоняю нагрузочный кейс, фиксирую лимиты (timeout/concurrency/retry) и проверяю стабильность сервиса.
Мини-пример
import express from 'express';
const app = express();
app.get('/ping', (_req, res) => res.json({ ok: true }));
Углубление (2-3 минуты)
- Свяжите тему "Когда выбирать
worker_threads, а когдаcluster?" с одним production-сценарием и объясните, почему она влияет на результат. - Покажите, какие сигналы observability подтверждают устойчивость решения.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Держат тяжелую обработку в синхронном request path.
- Запускают изменения без наблюдаемости и runbook.
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Какие метрики покажут деградацию раньше инцидента?
- Что вынесете в фон, чтобы не блокировать critical path?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Границы
Event Loop/I-O/CPU и backpressure. - Runbook деградации внешней зависимости.
- Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
6. Разница CommonJS и ESM в Node.js?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
CommonJS (require) загружается синхронно и исторически основной в Node, ESM (import) стандартизирован и лучше для tree-shaking/interop с современным tooling.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Прогоняю нагрузочный кейс, фиксирую лимиты (timeout/concurrency/retry) и проверяю стабильность сервиса.
Мини-пример
// CommonJS
const legacy = require('./lib.cjs');
// ESM
import modern from './lib.mjs';
Углубление (2-3 минуты)
- Свяжите тему "Разница CommonJS и ESM в Node.js?" с одним production-сценарием и объясните, почему она влияет на результат.
- Разберите поведение системы под пиковым трафиком и деградацией внешних зависимостей.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Запускают изменения без наблюдаемости и runbook.
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Как поведение изменится под пиковым трафиком?
- Что вынесете в фон, чтобы не блокировать critical path?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Runbook деградации внешней зависимости.
- Границы
Event Loop/I-O/CPU и backpressure. - Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
7. Как организовать централизованный error handling в Node API?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
Единый error handling строят через централизованный middleware, стандартный формат ошибки и логирование с correlation id.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Прогоняю нагрузочный кейс, фиксирую лимиты (timeout/concurrency/retry) и проверяю стабильность сервиса.
Мини-пример
import express from 'express';
const app = express();
app.get('/ping', (_req, res) => res.json({ ok: true }));
Углубление (2-3 минуты)
- Свяжите тему "Как организовать централизованный error handling в Node API?" с одним production-сценарием и объясните, почему она влияет на результат.
- Опишите границы request path и вынос тяжелых операций в фон.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Держат тяжелую обработку в синхронном request path.
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Как поведение изменится под пиковым трафиком?
- Что вынесете в фон, чтобы не блокировать critical path?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Границы
Event Loop/I-O/CPU и backpressure. - Runbook деградации внешней зависимости.
- Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
8. Как реализовать graceful shutdown сервиса?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
Graceful shutdown: перестать принимать новые запросы, дождаться активных операций, закрыть соединения и завершить процесс по таймауту.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Проверяю сценарий под пиковым трафиком: latency, saturation и поведение при деградации зависимости.
Мини-пример
process.on('SIGTERM', async () => {
await server.close();
process.exit(0);
});
Углубление (2-3 минуты)
- Свяжите тему "Как реализовать graceful shutdown сервиса?" с одним production-сценарием и объясните, почему она влияет на результат.
- Опишите границы request path и вынос тяжелых операций в фон.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Держат тяжелую обработку в синхронном request path.
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Как поведение изменится под пиковым трафиком?
- Что вынесете в фон, чтобы не блокировать critical path?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Runbook деградации внешней зависимости.
- Границы
Event Loop/I-O/CPU и backpressure. - Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
9. Как защитить API от перегрузки (rate limit/backpressure)?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
Защита от перегрузки включает rate limit, backpressure, очереди, таймауты и деградационный fallback.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Проверяю сценарий под пиковым трафиком: latency, saturation и поведение при деградации зависимости.
Мини-пример
import express from 'express';
const app = express();
app.get('/ping', (_req, res) => res.json({ ok: true }));
Углубление (2-3 минуты)
- Свяжите тему "Как защитить API от перегрузки (rate limit/backpressure)?" с одним production-сценарием и объясните, почему она влияет на результат.
- Покажите, какие сигналы observability подтверждают устойчивость решения.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Запускают изменения без наблюдаемости и runbook.
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Как поведение изменится под пиковым трафиком?
- Что вынесете в фон, чтобы не блокировать critical path?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Границы
Event Loop/I-O/CPU и backpressure. - Runbook деградации внешней зависимости.
- Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
10. Как проектировать структуру логирования и трассировки?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
Структура логирования: уровни (info/warn/error), request-id/trace-id, контекст запроса и машинно-читаемый JSON формат.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Проверяю сценарий под пиковым трафиком: latency, saturation и поведение при деградации зависимости.
Мини-пример
import express from 'express';
const app = express();
app.get('/ping', (_req, res) => res.json({ ok: true }));
Углубление (2-3 минуты)
- Свяжите тему "Как проектировать структуру логирования и трассировки?" с одним production-сценарием и объясните, почему она влияет на результат.
- Покажите, какие сигналы observability подтверждают устойчивость решения.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Запускают изменения без наблюдаемости и runbook.
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Что вынесете в фон, чтобы не блокировать critical path?
- Как поведение изменится под пиковым трафиком?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Runbook деградации внешней зависимости.
- Health/readiness и корреляцию логов/метрик.
- Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
11. Как выстроить конфигурацию окружений и работу с secrets?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
Конфиги держат в env + schema validation на старте, секреты - в secret manager, а не в репозитории.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Прогоняю нагрузочный кейс, фиксирую лимиты (timeout/concurrency/retry) и проверяю стабильность сервиса.
Мини-пример
import express from 'express';
const app = express();
app.get('/ping', (_req, res) => res.json({ ok: true }));
Углубление (2-3 минуты)
- Свяжите тему "Как выстроить конфигурацию окружений и работу с secrets?" с одним production-сценарием и объясните, почему она влияет на результат.
- Покажите, какие сигналы observability подтверждают устойчивость решения.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Запускают изменения без наблюдаемости и runbook.
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Какие метрики покажут деградацию раньше инцидента?
- Как поведение изменится под пиковым трафиком?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Health/readiness и корреляцию логов/метрик.
- Runbook деградации внешней зависимости.
- Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
12. Как обрабатывать загрузку больших файлов в Node?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
Большие файлы обрабатывают потоками и пайплайном, чтобы избежать OOM и блокировки Event Loop.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Сверяю поведение по runbook: детектирование, mitigation и проверка восстановления после сбоя.
Мини-пример
import express from 'express';
const app = express();
app.get('/ping', (_req, res) => res.json({ ok: true }));
Углубление (2-3 минуты)
- Свяжите тему "Как обрабатывать загрузку больших файлов в Node?" с одним production-сценарием и объясните, почему она влияет на результат.
- Покажите, какие сигналы observability подтверждают устойчивость решения.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Держат тяжелую обработку в синхронном request path.
- Запускают изменения без наблюдаемости и runbook.
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Какие метрики покажут деградацию раньше инцидента?
- Что вынесете в фон, чтобы не блокировать critical path?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Границы
Event Loop/I-O/CPU и backpressure. - Runbook деградации внешней зависимости.
- Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
13. Зачем и как добавлять healthcheck/readiness endpoints?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
Healthcheck отвечает жив ли процесс, readiness - готов ли сервис принимать трафик с учетом зависимостей.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Сверяю поведение по runbook: детектирование, mitigation и проверка восстановления после сбоя.
Мини-пример
app.get('/health', (_req, res) => res.status(200).json({ ok: true }));
Углубление (2-3 минуты)
- Свяжите тему "Зачем и как добавлять healthcheck/readiness endpoints?" с одним production-сценарием и объясните, почему она влияет на результат.
- Покажите, какие сигналы observability подтверждают устойчивость решения.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Держат тяжелую обработку в синхронном request path.
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Как поведение изменится под пиковым трафиком?
- Что вынесете в фон, чтобы не блокировать critical path?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Границы
Event Loop/I-O/CPU и backpressure. - Runbook деградации внешней зависимости.
- Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
14. Как безопасно работать с JWT на backend?
Теги: nodejs, backend, security, auth
Сложность: Middle/Senior
Короткий ответ
JWT на backend требует проверки подписи/exp/aud/iss, ротации ключей и продуманной стратегии refresh/revoke.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Ошибки в валидации токенов и сроков жизни приводят к уязвимостям и неуправляемым 401.
- Как проверяете решение: Прогоняю нагрузочный кейс, фиксирую лимиты (timeout/concurrency/retry) и проверяю стабильность сервиса.
Мини-пример
import express from 'express';
const app = express();
app.get('/ping', (_req, res) => res.json({ ok: true }));
Углубление (2-3 минуты)
- Свяжите тему "Как безопасно работать с JWT на backend?" с одним production-сценарием и объясните, почему она влияет на результат.
- Опишите границы request path и вынос тяжелых операций в фон.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Запускают изменения без наблюдаемости и runbook.
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Что вынесете в фон, чтобы не блокировать critical path?
- Как поведение изменится под пиковым трафиком?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Runbook деградации внешней зависимости.
- Health/readiness и корреляцию логов/метрик.
- Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
15. Как организовать кэширование на стороне Node-сервиса?
Теги: nodejs, backend, cache
Сложность: Middle/Senior
Короткий ответ
Кэширование ускоряет hot-path чтения, но требует TTL, invalidation и защиты от stampede.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Без стратегии инвалидации кэш становится источником stale-данных и трудноуловимых багов.
- Как проверяете решение: Проверяю сценарий под пиковым трафиком: latency, saturation и поведение при деградации зависимости.
Мини-пример
import express from 'express';
const app = express();
app.get('/ping', (_req, res) => res.json({ ok: true }));
Углубление (2-3 минуты)
- Свяжите тему "Как организовать кэширование на стороне Node-сервиса?" с одним production-сценарием и объясните, почему она влияет на результат.
- Опишите границы request path и вынос тяжелых операций в фон.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Держат тяжелую обработку в синхронном request path.
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Что вынесете в фон, чтобы не блокировать critical path?
- Какие метрики покажут деградацию раньше инцидента?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Runbook деградации внешней зависимости.
- Health/readiness и корреляцию логов/метрик.
- Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
16. Как реализовать WebSocket и какие у него риски?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
WebSocket дает двунаправленный канал в реальном времени, но требует heartbeat, контроль количества соединений и backpressure.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Сверяю поведение по runbook: детектирование, mitigation и проверка восстановления после сбоя.
Мини-пример
import express from 'express';
const app = express();
app.get('/ping', (_req, res) => res.json({ ok: true }));
Углубление (2-3 минуты)
- Свяжите тему "Как реализовать WebSocket и какие у него риски?" с одним production-сценарием и объясните, почему она влияет на результат.
- Разберите поведение системы под пиковым трафиком и деградацией внешних зависимостей.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Держат тяжелую обработку в синхронном request path.
- Запускают изменения без наблюдаемости и runbook.
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Как поведение изменится под пиковым трафиком?
- Какие метрики покажут деградацию раньше инцидента?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Runbook деградации внешней зависимости.
- Границы
Event Loop/I-O/CPU и backpressure. - Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
17. Как отлавливать утечки памяти в Node приложении?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
Утечки памяти ловят через heap snapshots, allocation profiling и анализ роста heap на длительном интервале.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Сверяю поведение по runbook: детектирование, mitigation и проверка восстановления после сбоя.
Мини-пример
import express from 'express';
const app = express();
app.get('/ping', (_req, res) => res.json({ ok: true }));
Углубление (2-3 минуты)
- Свяжите тему "Как отлавливать утечки памяти в Node приложении?" с одним production-сценарием и объясните, почему она влияет на результат.
- Покажите, какие сигналы observability подтверждают устойчивость решения.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Держат тяжелую обработку в синхронном request path.
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Что вынесете в фон, чтобы не блокировать critical path?
- Какие метрики покажут деградацию раньше инцидента?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Runbook деградации внешней зависимости.
- Health/readiness и корреляцию логов/метрик.
- Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
18. Когда выбирать ORM, а когда query builder?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
ORM удобно для CRUD и скорости разработки, query builder/raw SQL - для сложных/критичных по производительности запросов.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Сверяю поведение по runbook: детектирование, mitigation и проверка восстановления после сбоя.
Мини-пример
import express from 'express';
const app = express();
app.get('/ping', (_req, res) => res.json({ ok: true }));
Углубление (2-3 минуты)
- Свяжите тему "Когда выбирать ORM, а когда query builder?" с одним production-сценарием и объясните, почему она влияет на результат.
- Разберите поведение системы под пиковым трафиком и деградацией внешних зависимостей.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Держат тяжелую обработку в синхронном request path.
- Запускают изменения без наблюдаемости и runbook.
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Как поведение изменится под пиковым трафиком?
- Какие метрики покажут деградацию раньше инцидента?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Health/readiness и корреляцию логов/метрик.
- Границы
Event Loop/I-O/CPU и backpressure. - Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
19. Что такое N+1 на backend и как его уменьшать?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
N+1 - это серия мелких запросов вместо батча; обычно лечится eager loading, joins и batching.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Проверяю сценарий под пиковым трафиком: latency, saturation и поведение при деградации зависимости.
Мини-пример
import express from 'express';
const app = express();
app.get('/ping', (_req, res) => res.json({ ok: true }));
Углубление (2-3 минуты)
- Свяжите тему "Что такое N+1 на backend и как его уменьшать?" с одним production-сценарием и объясните, почему она влияет на результат.
- Покажите, какие сигналы observability подтверждают устойчивость решения.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Запускают изменения без наблюдаемости и runbook.
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Как поведение изменится под пиковым трафиком?
- Какие метрики покажут деградацию раньше инцидента?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Health/readiness и корреляцию логов/метрик.
- Границы
Event Loop/I-O/CPU и backpressure. - Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.
Связанные модули и карта
20. Как обеспечивать backward compatibility API?
Теги: nodejs, backend
Сложность: Middle/Senior
Короткий ответ
Backward compatibility API обеспечивают через versioning, additive changes, deprecation period и контрактные тесты.
Что сказать на интервью (30-60 секунд)
- Где это применяется: Критично для API-сервисов, фоновых обработчиков, BFF и интеграций с внешними системами.
- Главный риск: Отсутствие лимитов, таймаутов и наблюдаемости в Node-сервисе ведет к каскадным инцидентам под нагрузкой.
- Как проверяете решение: Сверяю поведение по runbook: детектирование, mitigation и проверка восстановления после сбоя.
Мини-пример
import express from 'express';
const app = express();
app.get('/ping', (_req, res) => res.json({ ok: true }));
Куда дальше
- Вернитесь в модуль: Node.js.
- Сверьтесь с картой темы: Node.js.
- Продолжайте по маршруту: Middle трек.
- Закрепите один ответ на практике в Песочнице.
Углубление (2-3 минуты)
- Свяжите тему "Как обеспечивать backward compatibility API?" с одним production-сценарием и объясните, почему она влияет на результат.
- Разберите поведение системы под пиковым трафиком и деградацией внешних зависимостей.
- Сформулируйте ключевой trade-off и объясните, как решение масштабируется на уровне системы.
Типичные ошибки
- Держат тяжелую обработку в синхронном request path.
- Не ограничивают ресурсы (конкурентность, очередь, таймауты).
- Путают соседние концепции и не обозначают границы применимости выбранного подхода.
Follow-up вопросы
- Какие метрики покажут деградацию раньше инцидента?
- Что вынесете в фон, чтобы не блокировать critical path?
- Какой trade-off на уровне архитектуры здесь самый критичный?
Что повторить
- Границы
Event Loop/I-O/CPU и backpressure. - Runbook деградации внешней зависимости.
- Пройдите 2-3 связных вопроса в Банке вопросов и проверьте устойчивость ответа.