Backend
Node.js #
Node.js basics #
Junior #
Что такое Node.js?
|
Node.js — JavaScript runtime вне браузера, построенный вокруг V8 и системных API. Он используется для servers, CLI, build tools и automation. Node предоставляет filesystem, processes и network APIs, которых нет в browser sandbox. |
Что такое ES Modules в Node.js?
|
Это стандартная система |
Что такое process.env?
|
Это объект environment variables текущего процесса. Значения являются строками или |
Что такое child process?
|
Это отдельный процесс операционной системы, запущенный из Node через |
Middle #
Чем Node.js отличается от браузера?
|
В Node нет DOM, |
Почему Node.js называют event-driven runtime?
|
Программа регистрирует handlers, а runtime вызывает их при событиях I/O, timers или завершении задач. Это позволяет обслуживать много соединений без отдельного JavaScript thread на каждое. CPU-bound handler все равно блокирует event loop. |
Чем require отличается от import?
|
|
Middle+ or Senior #
Что такое V8?
|
V8 — JavaScript engine от Chromium, который парсит, интерпретирует и JIT-компилирует код. Node использует V8 для выполнения ECMAScript. Browser APIs и Node APIs находятся вокруг engine, а не внутри языка. |
Что такое libuv?
|
libuv — библиотека Node для event loop, async I/O, timers, filesystem и thread pool. Она скрывает различия операционных систем. Не все операции выполняются на главном JavaScript thread. |
Что такое event loop в Node.js?
|
Event loop проходит фазы timers, pending callbacks, poll, check и close callbacks, обрабатывая готовые задачи. Microtasks выполняются между соответствующими этапами. Детали важны при диагностике starvation и порядка callbacks. |
Чем event loop в Node.js отличается от browser event loop?
|
Оба координируют tasks и microtasks, но источники событий и фазы различаются. Browser привязан к rendering frames и Web APIs, Node — к libuv phases и server I/O. Нельзя механически переносить весь порядок callbacks между окружениями. |
Что такое CommonJS?
|
CommonJS — историческая module system Node с |
Что такое __dirname и почему его нет в ESM?
|
В CommonJS это directory текущего module file. ESM использует стандартный |
Что такое stream?
|
Stream обрабатывает данные частями вместо загрузки всего объема в память. Бывают readable, writable, duplex и transform streams. Backpressure предотвращает переполнение медленного consumer. |
Что такое Buffer?
|
|
Что такое worker_threads?
|
Worker threads выполняют JavaScript параллельно внутри одного Node process с отдельными isolates. Они подходят для CPU-bound вычислений, а не обычного async I/O. Обмен сообщениями и shared memory добавляют overhead. |
npm и package scripts #
Junior #
Что такое npm package?
|
Это directory или опубликованный artifact с |
Что такое package.json?
|
Manifest проекта описывает metadata, scripts, dependencies, package exports и настройки tools. Он не фиксирует точное дерево transitive dependencies. Для этого нужен lock-файл. |
Что такое peerDependencies?
|
Они объявляют, что package ожидает совместимую dependency от host-проекта. Это важно для frameworks и plugins, которым нужен общий runtime instance. Например, Angular library обычно указывает Angular как peer dependency. |
Что такое npm scripts?
|
Это именованные shell-команды в поле |
Что такое semantic versioning?
|
SemVer использует |
Что значит ^, ~ и exact version в package.json?
|
Exact устанавливает только указанную version. |
Middle #
Чем dependencies отличаются от devDependencies?
|
|
Что такое package-lock.json?
|
Lock-файл фиксирует точные версии и integrity всего установленного dependency tree. Он делает installs воспроизводимыми. Ручное редактирование обычно не требуется. |
Почему lock-файл важно коммитить?
|
CI и разработчики получают одно и то же разрешенное дерево, а изменения dependencies видны в review. Без lock-файла compatible ranges могут установить разные transitive versions. Это усложняет debugging и supply-chain audit. |
Что делает npm install?
|
Разрешает dependencies, устанавливает их в |
Что делает npm ci?
|
Удаляет существующий |
Чем npm ci лучше для CI?
|
Дает чистую, воспроизводимую установку и быстро обнаруживает незакоммиченный lock update. Поведение меньше зависит от
предыдущего workspace state. Кеш npm downloads можно использовать отдельно от |
Как npm scripts используются во frontend-проектах?
|
Для |
Чем task runner отличается от package scripts?
|
Task runner вроде Gulp или Grunt описывает pipeline через отдельный инструмент и плагины. Package scripts запускают команды напрямую через npm, pnpm, Yarn или Bun. В современных frontend-проектах многие задачи закрываются framework CLI, bundler и package scripts, но legacy-проекты могут все еще использовать task runners для сборки assets или интеграции. |
Node.js для frontend tooling #
Junior #
Что такое dev server?
|
Локальный HTTP server для разработки с module transforms, source maps, watch и hot reload. Он оптимизирован для feedback, а не безопасности, кеширования и production traffic. Его нельзя использовать как production hosting. |
Middle #
Почему frontend-проекту нужен Node.js?
|
Node запускает package manager, compiler, linter, tests, dev server и production build. Результат затем выполняется в browser и может не зависеть от Node. SSR-приложение дополнительно использует Node во время runtime. |
Как Node.js используется в Angular CLI?
|
CLI запускается как Node program, читает workspace config и вызывает builders. TypeScript/Angular compiler, dev server и test runner также работают в Node. Поддерживаемая Node version зависит от Angular version. |
Как Node.js используется в Vite/Webpack/esbuild?
|
Он запускает bundler process, читает файлы, разрешает modules и обслуживает plugins. Vite предоставляет dev server, Webpack строит module graph, esbuild выполняет быстрые transforms/bundling. Production output предназначен для browser или server target. |
Чем dev server отличается от production build?
|
Dev server часто преобразует modules по запросу и хранит часть данных в памяти. Production build минифицирует, хеширует, оптимизирует и записывает deployable artifacts. Поведение окружения нужно проверять production build. |
Почему код, который работает в Node.js, может не работать в браузере?
|
Browser не предоставляет |
Почему код, который работает в браузере, может не работать в Node.js?
|
В Node обычно нет |
Middle+ or Senior #
Когда scaffolding tools полезны, а когда вредят?
|
Scaffolding tools полезны, когда создают повторяемую структуру components, features, libraries или tests по текущим командным conventions. Они вредят, если генерируют много непонятного boilerplate или закрепляют устаревшую архитектуру. Генератор должен отражать живую codebase, а не исторические привычки. |
Node.js observability и RPS monitoring #
Middle+ or Senior #
Что такое RPS?
|
RPS, или Requests Per Second, — количество запросов, которое сервер обрабатывает за секунду. Например, |
Что такое RPS monitor?
|
RPS monitor измеряет количество запросов за единицу времени. Он помогает увидеть текущую нагрузку, всплески трафика и связать их с деградацией производительности или доступности. |
Зачем frontend-разработчику понимать RPS?
|
Frontend-разработчик может работать с SSR, BFF, dev server, Node.js tooling и API-интеграциями. RPS помогает оценивать нагрузку на SSR, rate limits, кеширование, retry-логику и влияние frontend-кода на backend. |
Как может выглядеть простой RPS monitor в Node.js?
|
Этот учебный HTTP-сервер считает запросы за последнюю секунду и выводит результат в консоль:
|
Как проверить RPS monitor через curl?
|
После запуска сервера можно отправить несколько запросов вручную:
В следующем секундном интервале сервер выведет количество полученных запросов. |
Почему такой RPS monitor не production-ready?
|
Он хранит счетчик только в памяти одного процесса и теряет данные при перезапуске. Несколько процессов или containers будут считать RPS независимо. В production метрики агрегируют через Prometheus, OpenTelemetry, APM или другую систему observability и визуализируют, например, в Grafana. |
Какие метрики кроме RPS важны для Node.js сервера?
Метрики полезно связывать между собой: один RPS не объясняет состояние системы. |
Чем RPS отличается от latency?
|
RPS показывает количество обработанных запросов в секунду, а latency — время обработки отдельного запроса. Высокий RPS сам по себе не является проблемой, но рост latency и error rate вместе с ним может указывать на перегрузку. |
Что такое p95 и p99 latency?
|
|
Как event loop delay связан с производительностью Node.js?
|
JavaScript выполняется в основном потоке Node.js. CPU-bound работа и долгие синхронные операции блокируют event loop, из-за чего callbacks и обработчики запросов запускаются позже. Event loop delay измеряет эту задержку и помогает найти такие блокировки. |
Что может увеличить RPS capacity Node.js приложения?
Изменения нужно подтверждать нагрузочными тестами: увеличение RPS не должно ухудшать latency и error rate сверх SLO. |
Frontend tooling #
Middle #
Чем Babel, SWC, esbuild и TypeScript compiler отличаются в frontend toolchain?
|
TypeScript compiler умеет type checking и emit, но в современных frontend-сборках часто разделяют type checking и transpile. Babel трансформирует syntax через plugins, SWC и esbuild делают быстрые transforms на native-реализациях. Важно различать:
Angular CLI скрывает большую часть деталей, но разработчик должен понимать, где искать проблему: в
|
Как объяснить Vite, Webpack и Rollup на интервью?
|
Webpack - универсальный bundler с большим plugin ecosystem и исторически богатой настройкой. Rollup силен для libraries и tree shaking ES modules. Vite использует быстрый dev server на native ESM и собирает production через Rollup-пайплайн или framework-specific integration. Хороший ответ не сводится к “Vite быстрее”. Нужно объяснить dev server, HMR, module graph, code splitting, CSS/assets pipeline, source maps и то, как framework CLI ограничивает или расширяет доступ к настройкам.
|