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

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

Middle · 2–4 роки досвіду

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

Теми для підготовки

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

8 питань рівня Middle з відповідями

1

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

Відповідь

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

2

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

Відповідь

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

3

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

Відповідь

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

4

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

Відповідь

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

5

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

Відповідь

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

6

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

Відповідь

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

7

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

Відповідь

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

8

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

Відповідь

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

🦎

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

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

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

Інші рівні — Node.js Backend

Junior Node.js BackendSenior Node.js BackendУсі питання Node.js Backend

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

🔍Middle QA Manual🤖Middle QA AutomationMiddle Java Backend🐍Middle Python Backend🐘Middle PHP Backend🦫Middle Go Backend⚛️Middle React Frontend💚Middle Vue Frontend🅰️Middle Angular FrontendMiddle Next.js