AI
prepair.app
Пройти інтерв'ю →
EnglishРусскийУкраїнська
🟢

питання на співбесіді Node.js

Співбесіда Node.js крутиться навколо event loop, асинхронних патернів, Express або NestJS і наслідків однопотокового рантайму. Нижче — найчастіші питання з еталонними відповідями.

Junior · без досвіду / до 1 рокуMiddle · 2–4 роки досвідуSenior · 5+ років досвіду

Що запитують

Event loop та його фази
Проміси й async/await
Streams і buffers
Express / NestJS
Middleware та обробка помилок
JWT і автентифікація

10 реальних питань з відповідями

До кожного питання — еталонна відповідь, з якою можна порівняти свою.

1

Поясніть event loop у Node.js. Які в нього фази?

Відповідь

Event loop по колу обробляє черги завершених операцій за фазами: таймери для setTimeout і setInterval, відкладені колбеки, poll для вхідного I/O, check для setImmediate і колбеки закриття. Між кожною фазою Node вичерпує чергу мікрозадач — спершу process.nextTick, потім колбеки промісів. Саме тому довга синхронна функція блокує всі запити на сервері: доки вона не поверне, не виконається нічого.

2

У чому різниця між process.nextTick() і setImmediate()?

Відповідь

process.nextTick ставить колбек у чергу до переходу event loop на наступну фазу, поперед мікрозадач промісів. setImmediate планує колбек на фазу check наступної ітерації. Тому nextTick завжди спрацьовує раніше, а рекурсивні виклики nextTick можуть повністю заморити event loop — через що setImmediate безпечніший як дефолт для відкладання роботи.

3

Що таке Promise? Поясніть різницю між Promise.all і Promise.allSettled.

Відповідь

Promise представляє значення, яке зʼявиться пізніше, і перебуває у стані pending, fulfilled або rejected. Promise.all резолвиться, коли завершилися всі вхідні проміси, але реджектиться одразу на першій відмові, відкидаючи решту результатів — це підходить, коли для продовження потрібні всі. Promise.allSettled завжди резолвиться, віддаючи статус і значення по кожному елементу, що годиться для незалежних операцій, де одна помилка не має скасовувати решту.

4

Як обробляти помилки в async/await? Що станеться при unhandled rejection?

Відповідь

Очікувані виклики загортають у try/catch або вішають .catch на повернений проміс. В Express помилка, кинута всередині async-обробника, не перехоплюється фреймворком, якщо її не передати в next(), тому зазвичай використовують обгортку або express-async-errors. Необроблений реджект у сучасних версіях Node за замовчуванням завершує процес, і це усвідомлена поведінка — стан процесу невідомий, його треба перезапустити.

5

Що таке streams і коли їх використовувати замість читання файлу цілком?

Відповідь

Streams обробляють дані порціями, тому витрата памʼяті не залежить від розміру корисного навантаження, а перший байт можна віддати до того, як прочитано останній. Читання двогігабайтного файлу в Buffer зʼїдає памʼять і затримує відповідь; при використанні pipe той самий файл тече прямо клієнту. Ще streams композуються через pipe або pipeline, дозволяючи вибудувати ланцюжок розпакування, перетворення та виводу з автоматичною обробкою backpressure.

6

Що таке middleware в Express? Як працює next()?

Відповідь

Middleware — це функція, що приймає запит, відповідь і next, яка виконується в порядку реєстрації й утворює конвеєр. Виклик next() передає керування наступному middleware; якщо його не викликати й не надіслати відповідь, запит зависне. Передача аргументу в next() перестрибує до обробника помилок, який розпізнається за наявністю чотирьох параметрів.

7

Як Node обробляє CPU-інтенсивні задачі? Що таке worker threads?

Відповідь

Оскільки JavaScript виконується в одному потоці, важке обчислення блокує всі очікуючі запити. Worker threads виконують JavaScript у паралельних потоках усередині того ж процесу, обмінюючись повідомленнями та спільними буферами, що підходить для хешування, обробки зображень або парсингу. Альтернативи — винести роботу в окремий сервіс або чергу задач; кластеризація лише додає процеси й не пришвидшує один запит.

8

Що таке JWT? Де його зберігати і які є ризики?

Відповідь

JWT — це підписаний токен із набором тверджень, що дозволяє серверу автентифікувати запит без походу за сесією. Зберігання в localStorage робить його вразливим до XSS; зберігання в куці з httpOnly, Secure і SameSite закриває XSS, але потребує захисту від CSRF. Глибший компроміс — відкликання: stateless-токен дійсний до завершення терміну, тому в чутливих системах використовують короткоживучі access-токени з refresh-токенами та серверним списком відкликаних.

9

У чому різниця між require і import? Що таке CommonJS і ESM?

Відповідь

CommonJS require синхронний, розвʼязується в рантаймі й може викликатися умовно всередині функції. ESM import статичний, піднімається вгору й аналізується до виконання, що відкриває tree shaking і top-level await. Формат пакета задається через "type": "module" або розширення .mjs і .cjs; ESM може імпортувати CommonJS, а зворотне потребує динамічного import(), бо require не вміє завантажувати асинхронний граф модулів.

10

Як реалізувати graceful shutdown?

Відповідь

За SIGTERM перестають приймати нові зʼєднання через server.close(), дають завершитися поточним запитам, а потім закривають пули БД, консьюмерів черг і таймери перед виходом. Таймаут примусово завершує процес, якщо щось зависло, щоб контейнер не застрягав. Без цього деплой рве запити на середині й може лишити транзакції або повідомлення черги в неузгодженому стані.

🦎

Прочитати відповіді недостатньо

На співбесіді ти говориш вголос під тиском. Кем поставить ті самі питання, оцінить кожну відповідь і покаже, що саме підтягнути.

Пройти інтерв'ю Node.js Backend →
Безкоштовно · 3 інтерв'ю на місяць

Інші спеціалізації

🔍QA Manual🤖QA AutomationJava Backend🐍Python Backend🐘PHP Backend🦫Go Backend⚛️React Frontend💚Vue Frontend🅰️Angular FrontendNext.js📈Business Analyst🎯Product Manager📋Project Manager🎨UI/UX Designer📣Marketing