Питання на співбесіді з Node.js (Senior) з відповідями
75 запитань для співбесіди з теми Node.js (Senior) - з правильними відповідями, поясненнями й посиланнями на документацію.
Пройти цей тест- 1.Як організована купа V8 для збирання сміття?
- 2.Контейнер має 2 ГБ пам'яті, але процес Node.js падає з «JavaScript heap out of memory» десь на 1,4 ГБ. Що перевірити?
- 3.Який шаблон - класична причина витоку пам'яті в Node.js-сервері?
- 4.Як знайти, що саме витікає в процесі Node.js?
- 5.Чому замикання може несподівано утримувати пам'ять?
- 6.Що таке приховані класи (shapes) у V8 і чому вони важливі?
- 7.Що
process.memoryUsage()повідомляє якrss? - 8.Для чого
WeakRefіFinalizationRegistryНЕ підходять? - 9.Як знайти функції, що найбільше навантажують CPU, в умовах, близьких до продакшену?
- 10.p99 затримки висока, а середнє навантаження CPU низьке. Що може бути причиною?
- 11.Що зазвичай змушує повільний регулярний вираз блокувати Node.js-сервер (ReDoS)?
- 12.Чому
JSON.stringifyвеликої відповіді може стати вузьким місцем і що допомагає? - 13.Коли збільшення
UV_THREADPOOL_SIZEсправді допомагає? - 14.Чому
dns.lookupможе бути прихованим вузьким місцем для вихідних HTTP-запитів? - 15.Як добре передати великі двійкові дані між worker threads без копіювання?
- 16.Чому сервер має використовувати пул worker threads, а не створювати новий воркер на кожен запит?
- 17.За балансувальником (наприклад, AWS ALB з idle timeout 60 с) клієнти іноді отримують 502. Яка поширена причина?
- 18.Чому
server.close()може не завершитися під час graceful shutdown? - 19.Як сервер має обмежувати розмір тіла вхідних запитів?
- 20.Від чого захищає
server.requestTimeout? - 21.Що змінює HTTP/2 для Node.js API, яким користуються браузери?
- 22.Що таке
undiciу Node.js? - 23.Що дає асинхронний генератор у
pipeline? - 24.Що контролює
highWaterMark? - 25.Як стріми Node.js взаємодіють із Web Streams (
ReadableStream)? - 26.Обробляючи стрім завантаження, ви викликаєте асинхронну функцію для кожного шматка, не чекаючи її. Який ризик?
- 27.Що таке prototype pollution?
- 28.Як безпечно віддати файл, який користувач запитує з каталогу
uploads? - 29.Ваш API завантажує URL, який надав користувач (наприклад, для прев'ю посилань). Від якої атаки треба захиститися?
- 30.Що робить модель дозволів Node.js (
--permission)? - 31.Що найбільше допомагає проти шкідливих версій пакетів (атак на ланцюжок постачання)?
- 32.Чому
eval(абоnew Function) на даних користувача небезпечний навіть у «пісочниці» на кшталтvm? - 33.Від якої проблеми рівня HTTP, окрім багів застосунку, треба захищати Node.js API?
- 34.Чому процес Node.js у контейнері має працювати не від root?
- 35.Навіщо додавати випадковий jitter до експоненційного backoff при повторах невдалих викликів?
- 36.Що робить circuit breaker?
- 37.Яку проблему розв'язує шаблон transactional outbox?
- 38.Черга повідомлень доставляє повідомлення «щонайменше один раз». Що мають робити споживачі?
- 39.Що таке cache stampede і як йому запобігти?
- 40.Який алгоритм обмеження частоти дозволяє короткі сплески, зберігаючи середню швидкість?
- 41.Чому довгу або CPU-важку роботу варто винести зі шляху HTTP-запиту?
- 42.Як не дати повільній залежності покласти весь сервіс (шаблон bulkhead)?
- 43.Чому команда може обрати модульний моноліт замість мікросервісів для нового Node.js-продукту?
- 44.Що OpenTelemetry дає Node.js-сервісам?
- 45.Які метрики складають метод RED для моніторингу сервісу?
- 46.Для чого
diagnostics_channel? - 47.Що таке діагностичний звіт (
--report-on-fatalerror,process.report.writeReport())? - 48.Процес Node.js не завершується після закінчення головного скрипта. Яка зазвичай причина?
- 49.Чому
uncaughtException+ «залогувати й працювати далі» - поганий шаблон? - 50.Що дозволяють хуки кастомізації модулів (
module.register,registerHooks)? - 51.Що таке «dual package hazard»?
- 52.Що таке Node-API (N-API)?
- 53.Що таке Single Executable Applications (SEA) у Node.js?
- 54.Що дає Node.js-коду оголошення
using(explicit resource management)? - 55.Як Node.js обробляє
enumіnamespace, коли запускає TypeScript з вирізанням типів? - 56.Чому ізоляція тестів важлива в
node --testі як вона працює за замовчуванням? - 57.Для чого корисний запуск зі знімка (
--build-snapshot)? - 58.Запускаючи Node.js у Kubernetes, чи варто використовувати модуль
clusterусередині кожного пода? - 59.Чому горизонтально масштабований Node.js-сервіс має бути stateless?
- 60.Який головний компроміс між round-robin у
clusterі розподілом з'єднань силами ОС? - 61.Як не дати одному тенанту чи клієнту вичерпати спільний Node.js API?
- 62.Сервіс на кожен запит викликає три API і може пережити збій одного. Який підхід доречний?
- 63.Як DataLoader розв'язує проблему N+1 у GraphQL-сервері?
- 64.Коли gRPC доречніший за REST/JSON?
- 65.Як ключі ідемпотентності роблять POST-запити безпечними для повторів?
- 66.Як розвивати публічний API, не ламаючи наявних клієнтів?
- 67.Чому процесу Node.js потрібна стратегія для
SIGINT/SIGTERM, коли він працює як PID 1 у контейнері? - 68.Як розумно запускати задачі за розкладом (cron) у Node.js-сервісі з кількома інстансами?
- 69.Чому
AsyncLocalStorageможе втрачати контекст усередині деяких бібліотек і що це виправляє? - 70.Клієнт від'єднується, поки ваш обробник виконує повільний запит до бази. Як не витрачати роботу даремно?
- 71.Ви масштабуєтеся до 40 інстансів, кожен із пулом на 20 з'єднань, і PostgreSQL починає відхиляти з'єднання. Що допоможе?
- 72.Два запити одночасно читають запис, змінюють і зберігають його, і одне оновлення губиться. Як цьому запобігає оптимістичне блокування?
- 73.Що означає load shedding для перевантаженого Node.js-сервісу?
- 74.Як розгорнути нову версію Node.js API, не втрачаючи запитів?
- 75.Сервіс виконує важку обробку зображень чи відео. Який підхід найрозумніший у Node.js-стеку?