Node.js став однією з найпопулярніших технологій для веброзробки, і це не дивно. Його здатність виконувати JavaScript на сервері зробила його улюбленим вибором серед розробників по всьому світу. Окрім високої продуктивності та масштабованості, Node.js дозволяє створювати як прості, так і складні рішення для широкого спектру застосувань, від вебсервісів до великих застосунків в реальному часі.
Якщо ви готуєтесь до співбесіди на позицію Node.js розробника, важливо бути готовим до запитань різного рівня складності. У цій статті зібрано запитання, які покривають основи, середній рівень та глибше розуміння роботи з Node.js, які можуть бути задані під час співбесіди.
Структура запитань:
- Junior Node.js Developer — для початківців.
- Middle Node.js Developer — для розробників із середнім рівнем досвіду.
- Senior Node.js Developer — для досвідчених розробників, які мають глибоке розуміння технологій і можуть приймати ключові технічні рішення.
Junior
- Що таке Node.js?
- Node.js — це серверне середовище для запуску JavaScript, побудоване на движку V8 від Google Chrome, яке дозволяє виконувати JavaScript на сервері.
- Які основні переваги та недоліки використання Node.js?
- Переваги: асинхронність, висока продуктивність, масштабованість.
- Недоліки: не підходить для обчислювальних задач, може бути складним для розуміння у великих додатках.
- Для яких завдань Node.js не підходить?
- Node.js не підходить для важких обчислювальних задач, таких як обробка великих даних або складні математичні операції.
- Які в Node.js головні компоненти?
- Основні компоненти: ядро (V8), libuv (бібліотека для асинхронних I/O), модулі (npm), Event Loop.
- Яким чином Node.js сервер здатен обробляти одночасно багато паралельних запитів від клієнтів, маючи лише один thread?
- Node.js обробляє запити асинхронно, використовуючи Event Loop і callback-функції, без блокування потоку.
- Чи можливо використовувати кілька потоків (threads)? За допомогою яких модулів це реалізовано?
- Так, можна використовувати кілька потоків через модулі cluster або worker_threads.
- Node.js інтерпретує чи компілює код програми?
- Node.js інтерпретує JavaScript код за допомогою двигуна V8, який компілює його в машинний код під час виконання.
- Як зчитувати великі файли за допомогою Node.js?
- Використовувати потоки (streams) для зчитування великих файлів, щоб уникнути перевантаження пам’яті.
- Що таке libuv i V8? Яке їхнє призначення?
- libuv — це бібліотека для асинхронних операцій вводу/виводу, а V8 — це JavaScript движок, який компілює JavaScript в машинний код.
- Яка різниця між microtasks і macrotasks? Наведіть приклади таких завдань.
- Microtasks виконуються перед macrotasks і включають обіцянки (Promises). Macrotasks — це завдання, що виконуються через такі механізми, як таймери, I/O.
- Що таке стрим (stream)?
- Stream — це абстракція для обробки даних, яка дозволяє працювати з великими обсягами даних по частинах, без потреби завантажувати їх усі в пам’ять одночасно.
- Які види стримів ви знаєте?
- Readable, Writable, Duplex, Transform.
- Що таке event loop? З яких компонентів складається і як працює?
- Event Loop обробляє асинхронні завдання в Node.js, складається з черги завдань (callback queue), мікрозавдань (microtask queue) та фази виконання.
- Що таке логування і моніторинг?
- Логування — запис подій системи для аналізу, моніторинг — спостереження за станом системи в реальному часі.
- Чим відрізняється моноліт від мікросервісу?
- Моноліт — це єдине, тісно інтегроване додаток, а мікросервіс — це набір незалежних сервісів, що взаємодіють через API.
- В чому різниця між такими ключовими словами мови, як string і String?
- string — це примітивний тип даних, а String — це об’єкт, що надає методи для роботи з рядками.
- Для чого використовують middleware в Express.js?
- Middleware обробляє HTTP-запити між отриманням запиту та відправкою відповіді.
- Як переходити з однієї middleware в іншу?
- Використовують next() для переходу до наступної middleware.
- Як пріоритизувати middleware?
- Пріоритет визначається порядком визначення middleware у коді.
- Як організувати error handler в Express?
- Створити middleware, що приймає 4 параметри: (err, req, res, next).
- Що таке асинхронність і асинхронний код?
- Асинхронність дозволяє не блокувати основний потік виконання, а виконувати завдання в фоновому режимі.
- Яка відмінність між var, let і const? Чому варто використовувати const, якщо змінна не буде змінюватися далі в коді?
- var має функціональну область видимості, let — блочну, а const визначає константу, яка не може бути змінена після присвоєння.
- Як відкласти виконання функції на конкретний час?
- Використовувати функцію setTimeout.
- Які ви знаєте способи оголошення функції?
- Function declaration, function expression, arrow function.
- Що таке анонімна функція?
- Анонімна функція — функція, що не має імені, зазвичай передається як параметр або викликається безпосередньо.
- Наведіть приклади функції, що самовикликається.
- (function() { })();
- У чому різниця між function expression і function declaration?
- Function declaration оголошується за межами виконання коду, тоді як function expression — це функція, що створюється під час виконання.
- Як з JS масиву чисел отримати інший масив, де залишаться тільки числа понад 10?
- Використовувати метод filter(): arr.filter(num => num > 10).
- Як видалити елемент масиву та об’єкта?
- Для масиву — використовуйте splice(), для об’єкта — delete.
- Для чого призначений тип void?
- Тип void використовується для функцій, які не повертають значення.
- Де і для чого використовують super()?
- Використовують для виклику конструктора батьківського класу в дочірньому класі.
- Для чого потрібен this і в яких випадках його використовувати?
- this вказує на об’єкт, до якого прив’язана функція або метод.
- Що таке NaN і як його використати?
- NaN (Not a Number) — спеціальне значення, яке вказує на помилку при обчисленнях.
- Що таке NPM? Які аналоги ви знаєте?
- NPM — менеджер пакетів для JavaScript. Аналоги: Yarn, PNPM.
- В чому переваги і недоліки NPM проти Yarn/PNPM?
- NPM є стандартним, але Yarn/PNPM можуть бути швидшими завдяки кешуванню та паралельному завантаженню пакетів.
- Які методи Promise API ви знаєте? Яка різниця між ними?
- then(), catch(), finally() — обробка успіху/помилок, а також обов’язкове виконання після завершення.
- Наведіть структуру HTTP request/response.
- Request: Метод, URL, заголовки, тіло.
- Response: Статус, заголовки, тіло.
- Що таке new Set() і new Map()?
- Set — колекція унікальних значень.
- Map — колекція пар “ключ-значення”.
- Що таке логічний оператор && та || і чим відрізняються ці оператори від логічного оператора «??».
- && — логічне “і”, || — логічне “або”, ?? — оператор nullish (повертає правий операнд, якщо лівий — null або undefined).
- Для чого потрібні бази даних у застосунках?
- Бази даних зберігають і керують інформацією, забезпечуючи доступ до даних.
- Що таке ORM і для чого її використовують?
- ORM (Object-Relational Mapping) дозволяє працювати з базами даних через об’єктно-орієнтовану модель.
- Що таке міграція даних? Для чого вона потрібна?
- Міграція — це процес оновлення структури бази даних, зокрема змінення схем.
- Що таке транзакція?
- Транзакція — це набір операцій, що виконуються як єдина одиниця, гарантуючи їх атомарність.
- Як оновити значення колонки в таблиці?
- За допомогою SQL запиту UPDATE.
- За допомогою чого можна відфільтрувати таблицю Users за параметром віку?
- Використовувати SQL запит з умовою WHERE age > 18.
- Що таке Cross-Origin Resource Sharing (CORS)? Де трапляється?
- CORS — це механізм, який дозволяє веб-додаткам робити запити до ресурсів на інших доменах.
- Як отримати помилку CORS у консолі розробника?
- Якщо сервер не дозволяє запити з іншого домену, браузер виведе помилку в консолі.
- Назвіть основні HTTP-методи RESTful або CRUD застосунків.
- GET, POST, PUT, DELETE.
- Що таке DNS?
- DNS (Domain Name System) — система, що перетворює доменні імена в IP-адреси.
- Які способи центрування елемента по горизонталі і вертикалі ви знаєте?
- Flexbox, Grid, використання margin: auto, або position: absolute.

Middle
- Назвіть переваги Node.js, якщо порівнювати з іншими технологіями для розробки серверних застосунків.
- Node.js дозволяє швидко обробляти асинхронні запити, має високу продуктивність, завдяки V8 і події циклу.
- Для яких задач ви використали б кілька процесів/потоків (processes/threads)?
- Для ресурсомістких операцій, таких як обробка великих файлів, виконання складних обчислень або багатозадачність.
- У чому полягає різниця паралельного та асинхронного програмування на прикладі серверних застосунків?
- Паралельне програмування передбачає одночасне виконання кількох завдань, асинхронне — по черзі, але без блокування потоку виконання.
- Які типи асинхронних операцій здатен виконувати Node.js?
- Операції з файловою системою, мережеві запити, обробка даних в пам’яті.
- Які модулі Node.js ви знаєте? Яке їхнє основне призначення?
fs
(файлова система),http
(мережеві запити),path
(обробка шляхів),events
(обробка подій).
- Яка різниця між операційними помилками та помилками програміста?
- Операційні — це помилки, пов’язані з зовнішніми факторами (наприклад, неможливо відкрити файл), помилки програміста — це помилки в логіці коду.
- Які сервіси можна використати для моніторингу і логування?
- Prometheus, Grafana, Loggly, ELK Stack (Elasticsearch, Logstash, Kibana).
- Що таке libuv? Назвіть його складові.
- Libuv — це бібліотека, яка забезпечує асинхронний ввід/вивід. Містить підтримку подій, таймерів і потоків.
- Які існують шаблони розподілених транзакцій?
- Шаблони охоплюють 2PC (двохфазний коміт), Saga Pattern, та Compensation.
- Чи можливо програмно контролювати виділення і звільнення пам’яті в Node.js програмі?
- Ні, Node.js використовує автоматичний збір сміття (Garbage Collection).
- Поясніть, що таке Garbage Collector.
- Garbage Collector — це автоматична система очищення пам’яті, яка звільняє непотрібні об’єкти.
- Що означає «витік пам’яті» процеса? Як цьому запобігти?
- Витік пам’яті — це коли програма використовує пам’ять без можливості її звільнення. Запобігти можна оптимізуючи код, використовуючи слабкі посилання та вручну очищаючи ресурси.
- Як налагодити heap out of memory?
- За допомогою флагів командного рядка, таких як
--max-old-space-size
, для збільшення ліміту пам’яті.
- За допомогою флагів командного рядка, таких як
- Як налаштувати кешування?
- Використовувати бібліотеки, такі як
node-cache
або Redis, для зберігання частих запитів і відповідей.
- Використовувати бібліотеки, такі як
- Які є варіанти використання модулів child_process, worker_threads і cluster?
child_process
для запуску нових процесів,worker_threads
для багатопоточності,cluster
для масштабування Node.js на кілька процесів.
- Яка різниця у використанні ES modules і CommonJS модулів?
- ES Modules використовують синтаксис
import/export
, CommonJS —require/module.exports
.
- ES Modules використовують синтаксис
- Для чого і як використовують клас EventEmitter з базового модуля ‘node:events’?
- EventEmitter використовується для створення об’єктів, які можуть видавати події та обробляти їх.
- Скільки ядер процесора залучені при виконанні Node.js програми за замовчуванням?
- За замовчуванням Node.js використовує одне ядро, але можна використовувати кілька через кластеризацію.
- Що таке middleware? Якщо ми пишемо свій middleware, чому саме там, чому не в коді сервісу?
- Middleware обробляє запити перед досягненням основного обробника. Це дозволяє зберігати код чистим і зручним для тестування.
- Що таке EventEmitter в Node.js?
- Це клас, що дозволяє працювати з подіями та слухачами в Node.js.
- Яке призначення файлу package.json для Node.js проєктів?
- Файл містить метадані про проєкт, залежності та скрипти для запуску.
- Як можна за допомогою Node.js app прочитати файл з логами із файлової системи? Як прочитати файл, який займає понад 300 мегабайтів?
- Використовувати стрими або бібліотеки, такі як
fs.createReadStream()
, для обробки великих файлів.
- Використовувати стрими або бібліотеки, такі як
- Поясніть цикл подій у Node.js.
- Цикл подій обробляє асинхронні операції та викликає відповідні зворотні функції.
- Що таке і навіщо потрібен Thread Pool (Worker Pool)?
- Це набір потоків, який дозволяє обробляти складні або блокуючі операції в окремих потоках.
- SIGTERM vs SIGINT: які їхні переваги та недоліки?
SIGTERM
— це стандартний сигнал для зупинки програми, який дозволяє коректно завершити всі процеси.SIGINT
— сигнал зупинки, який зазвичай генерується натисканням Ctrl+C.
- Що таке backpressure у контексті стримів? Як з цим боротись?
- Backpressure — це ситуація, коли споживач не може обробити більше даних, ніж виробник може йому передати. Це можна обробити, регулюючи швидкість потоку.
- Для чого потрібні stream.PassThrough і pipe (pipeline)? Наведіть приклади використання.
PassThrough
— дозволяє передавати дані без змін,pipe
— автоматизує з’єднання потоків.
- Як використовувати події ‘data’, ‘end’, ‘error’, ‘finish’ у стримах Node.js?
- ‘data’ — обробка даних, ‘end’ — завершення потоку, ‘error’ — обробка помилок, ‘finish’ — завершення запису.
- Як обробити помилки при роботі зі стримами в Node.js?
- За допомогою обробників подій, таких як
.on('error', handler)
.
- За допомогою обробників подій, таких як
- Наведіть приклади роботи зі стримами різних типів.
- Читання файлів, запис у файли, мережеві запити.
- Чи працювали ви з pino?
- Pino — це швидкий і легкий логер для Node.js.
- Як описати приєднання до бази даних?
- Використовуючи бібліотеки, наприклад,
sequelize
для SQL абоmongoose
для MongoDB.
- Використовуючи бібліотеки, наприклад,
- Як реалізувати свій декоратор валідації?
- Створити функцію, яка перевіряє введення і викликає відповідні методи для валідації.
- Чому в JavaScript не рекомендують робити довгих обчислень у runtime?
- Вони можуть заблокувати цикл подій, що призведе до зупинки програми.
- Чи гарантовано setTimeout викличе функцію через заданий час? Від чого це залежить?
- Ні, це залежить від того, чи є вільний час для виконання функції в черзі подій.
- Що таке Promises?
- Об’єкт, що представляє результат асинхронної операції, яка може бути або виконана, або відхилена.
- Яка різниця між Promise.allSettled, Promise.race і Promise.any?
Promise.allSettled
чекає на виконання всіх обіцянок,Promise.race
чекає на першу завершену обіцянку, аPromise.any
— на першу виконану обіцянку.
- Що таке callback у JavaScript?
- Функція, яка передається як аргумент іншій функції для виконання після її завершення.
- Чи кращі Promises за callback підхід? Чому?
- Так, оскільки Promises дозволяють працювати з асинхронним кодом без глибоких вкладених колбеків.
- Що таке замикання/closure?
- Це функція, яка зберігає доступ до змінних свого лексичного оточення навіть після того, як батьківська функція завершила виконання.
- Поясніть переваги та недоліки використання «use strict».
use strict
допомагає уникнути помилок, таких як використання неоголошених змінних, але може вимагати більш ретельного підходу до коду.
- Наведіть приклад блокування циклу подій.
- Важкий цикл обчислень або синхронна операція, яка тримає цикл подій заблокованим, як, наприклад, безкінечний цикл.
- Яка різниця між abstract і interface?
abstract
— це частково реалізований клас,interface
— це контракт, що визначає методи, але без їхньої реалізації.
- Що таке Web Workers? Для чого їх використовують?
- Web Workers дозволяють виконувати JavaScript в окремому потоці, не блокуючи основний потік.
- Які особливості передачі даними між worker’ами та основним потоком?
- Дані передаються через повідомлення (Message Passing), оскільки кожен потік має свою пам’ять.
- Які обмеження накладаються на потік Web Workers?
- Web Workers не мають доступу до DOM і можуть виконувати лише певні операції.
- Окрім використання оператора ‘return’, як ще можна повернути результат виконання з функції (процедури)?
- Можна використовувати callback або проміси.
- Яка різниця між Monolith/SOA/Microservices?
- Monolith — це одна монолітна система, SOA — архітектура з сервісами, Microservices — архітектура з малими, автономними сервісами.
- Назвіть переваги і недоліки мікросервісної архітектури.
- Переваги: гнучкість, масштабованість. Недоліки: складність управління, комунікація між сервісами.
- Як забезпечити стійкість і можливість масштабування мікросервісів?
- Використання оркестраторів, таких як Kubernetes, та правильне управління сесіями і збереженням стану.

Senior
Node.js
- Які найбільші проблеми платформи Node.js?
- Основні проблеми охоплюють обмежену підтримку багатоядерних процесорів, складність масштабування для певних типів застосунків і можливі проблеми з управлінням пам’яттю.
- Скільки потоків Node.js використовує для роботи? Яким чином можна регулювати цю кількість?
- За замовчуванням Node.js використовує один потік для виконання коду JavaScript. Кількість потоків можна змінити через модуль
worker_threads
або використовуючи кластеризацію.
- За замовчуванням Node.js використовує один потік для виконання коду JavaScript. Кількість потоків можна змінити через модуль
- Чи є в Node.js можливість виконувати скрипти, написані іншими мовами?
- Так, можна використовувати модулі, такі як
child_process
, для виконання скриптів, написаних іншими мовами (наприклад, Python, Bash).
- Так, можна використовувати модулі, такі як
- Чи є різниця у виконанні microtasks/macrotasks залежно від версій Node.js?
- Різниця може бути через оптимізації та оновлення у кожній версії Node.js, але загальна логіка виконання microtasks і macrotasks залишатиметься однаковою.
- Як працювати із вбудованими Node.js функціями, реалізованими через callback інтерфейс в async/await стилі?
- Використовуйте
util.promisify
для перетворення callback функцій в проміси, що дозволяє застосовуватиasync/await
.
- Використовуйте
- У чому полягає різниця між require/module.exports і ES6-модулями?
require/module.exports
— це система модулів CommonJS, яка синхронно імпортує та експортує. ES6 модулі працюють асинхронно та використовуютьimport
/export
.
- З яких стадій складається цикл event loop в libuv?
- Стадії: Timer, I/O callbacks, idle, prepare, poll, check, close callbacks.
- Яким чином бібліотека libuv досягає неблокуючого вводу і виводу?
- libuv використовує асинхронні механізми введення/виведення, відправляючи запити операційній системі і обробляючи їх за допомогою callback функцій.
- Що таке гарантії доставки повідомлень та якими вони бувають?
- Гарантії доставки містять: At most once, At least once, Exactly once — це різні рівні надійності доставки повідомлень у розподілених системах.
- У яких випадках ви застосували б асинхронний зв’язок між двома системами?
- Для високонавантажених, віддалених або розподілених систем, де важливо не блокувати основний потік, а також для інтеграції з сторонніми сервісами.
Архітектура
- Які є способи масштабувати Node.js сервер?
- За допомогою кластеризації, балансування навантаження між кількома екземплярами сервера, горизонтального масштабування та використання серверless архітектури.
- Які є переваги кластеризації Node.js застосунку? Які проблеми можуть виникнути?
- Переваги: використання всіх ядер CPU, покращення продуктивності. Проблеми: складність у керуванні станом між процесами.
- У чому основна різниця чи схожість у роботі вебсерверів на Node.js або, наприклад, на Apache (PHP)?
- Node.js використовує неблокуючий асинхронний підхід, тоді як Apache обробляє запити по черзі.
- Що таке методологія Twelve-Factor App?
- Це набір найкращих практик для розробки програмного забезпечення, орієнтованого на хмару, що забезпечує легке масштабування та керування.
- Які показники моніторингу найважливіші?
- Продуктивність (CPU, пам’ять), час відгуку, кількість запитів, помилки, затримки в обробці.
- Опишіть дизайн-паттерн SAGA. Яка різниця між транзакцією та операцією компенсації в SAGA, в SOA?
- SAGA — це послідовність транзакцій, де кожна операція має зворотну компенсацію у разі помилки.
- Що таке авторизація та аутентифікація?
- Аутентифікація визначає, хто ви є (перевірка ідентичності), а авторизація визначає, що ви можете робити (доступ до ресурсів).
- Express vs Nest.js: які переваги і недоліки кожного фреймворку? Коли який доцільніше використовувати?
- Express: мінімалістичний, гнучкий. Nest.js: структурований, орієнтований на масштабованість. Nest.js краще для великих застосунків, Express — для малих і середніх.
- Що таке CLS і де варто його використовувати?
- CLS (Continuation Local Storage) дозволяє зберігати контекст між асинхронними викликами, корисно для моніторингу та логування.
- Що таке graceful shutdown? Як його імплементувати?
- Graceful shutdown — це коректне завершення роботи програми, закриття всіх підключень і очищення ресурсів перед вимкненням.
JavaScript
- З якою швидкістю витягуватимуться дані за ключем зі звичайного JavaScript об’єкта? Поясніть, що це за структура даних і як вона працює?
- Операція займає практично сталий час O(1) завдяки використанню геш-таблиць.
- Чим JS відрізняється від багатопотокових мов?
- JavaScript працює в одному потоці (одночасно), але підтримує асинхронність через callback-и, проміси та async/await.
- Що таке функції вищого порядку?
- Функції, які приймають інші функції як аргументи або повертають функції.
- Назвіть об’єкти першого класу.
- Функції, об’єкти, рядки, числа — всі є об’єктами першого класу в JavaScript, оскільки вони можуть бути передані, повернуті або збережені.
- Як зрозуміти, чи є у вашому коді/застосунку витоки пам’яті (memory leaks)?
- Використання інструментів для моніторингу пам’яті, таких як профілювання в Chrome DevTools або інші інструменти для виявлення незвільнених об’єктів.
- Як працювати з асинхронною відповіддю?
- Використовувати
Promise
абоasync/await
для обробки асинхронних відповідей.
- Використовувати
- Як можна отримати інкапсуляцію всередині класу без використання Typescript?
- Використовувати закриті змінні через функції (замикання) або використовувати методи доступу (getter/setter).
Мікросервіси
- Розкажіть про ваш досвід роботи з мікросервісами в Node.js. Як ви забезпечували комунікацію між різними сервісами?
- Комунікація між мікросервісами може бути здійснена через REST API, GraphQL, gRPC або за допомогою черг повідомлень.
- Як ви працювали з міграцією та покращенням сервісів в архітектурі мікросервісів?
- Міграція та покращення можуть містити оновлення схем баз даних, обробку версій API, автоматизацію тестів та поступовий перехід.
- Як би ви підходили до тестування та дебагу застосунку з мікросервісною архітектурою у Node.js?
- Використовувати інтеграційне тестування, моніторинг (наприклад, Prometheus, ELK stack), і дебагінг з допомогою інструментів типу Node.js Inspector.
- Як би ви впоралися зі збоями в розподіленій системі (Failed message processing, dead letter queue)?
- Для обробки помилок використовувати черги повідомлень з мертвими листами (dead letter queues) для перехоплення невдалих повідомлень.
- Які патерни для побудови мікросервісної архітектури ви використовували?
- Патерни охоплюють API Gateway, Circuit Breaker, Event Sourcing, Command Query Responsibility Segregation (CQRS).
- Як працює gateway?
- API Gateway обробляє вхідні запити, направляє їх до відповідних мікросервісів, а також може виконувати аутентифікацію, авторизацію і моніторинг.
- Що таке CAP теорема?
- Теорема стверджує, що розподілена система може одночасно забезпечувати лише два з трьох аспектів: консистентність, доступність і стійкість до розділення (Partition tolerance).
- Що краще: окремі бази даних для окремих мікросервісів чи одна база даних для всіх мікросервісів? Чому?
- Окремі бази даних для кожного мікросервісу забезпечують більшу незалежність і дозволяють мікросервісам розвиватися незалежно.
Бази даних
- Які бувають рівні ізоляції транзакцій та чим вони відрізняються?
- Рівні ізоляції: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE. Вони визначають, наскільки транзакції можуть бачити зміни в інших паралельних транзакціях.
- Навіщо існують рівні ізоляції транзакції? Наведіть приклади.
- Для контролю доступу до даних у багатокористувацьких середовищах, щоб уникнути аномалій типу dirty reads або phantom reads.
- Що таке аномалії транзакцій (dirty read, dirty write, read skew, phantom read, lost update)?
- Це різні ситуації, коли паралельні транзакції можуть призвести до непередбачених результатів, таких як використання несвоєчасно оновлених даних.
- У чому різниця нормалізованих і ненормалізованих даних? Наведіть приклад, коли які краще використовувати.
- Нормалізовані дані зменшують дублювання і зберігають цілісність, ненормалізовані можуть бути ефективнішими для швидких запитів.
- У чому різниця між оптимістичним та песимістичним блокуванням?
- Оптимістичне блокування припускає, що конфлікти будуть рідкими, і використовує перевірки на момент завершення. Песимістичне — завжди блокує ресурси для уникнення конфліктів.
- Навіщо потрібні індекси пошуку? Які мінуси в індексів?
- Індекси прискорюють пошук, але можуть сповільнити операції вставки та оновлення через необхідність оновлення індексу.
- Що таке race condition? Можете навести приклад?
- Race condition виникає, коли результат виконання залежить від порядку операцій, і це може призвести до непередбачених результатів.
- Що таке реплікація? Навіщо вона потрібна?
- Реплікація — це процес створення копій даних на різних серверах для забезпечення надійності та доступності.
- Яка різниця між графом і деревом?
- Граф може мати цикли, дерево — це спеціальний випадок графа без циклів, де один елемент є коренем.
- Чи доводилось вам робити оптимізацію перформансу за допомогою структур даних?
- Так, наприклад, використання геш-таблиць для прискорення пошуку або дерев для швидких вставок і видалень.
- Наведіть плюси та мінуси Shared DB.
- Плюси: спрощує управління транзакціями. Мінуси: важче масштабується, може бути проблеми з конкурентним доступом.
- Що таке foreign keys і constraints у SQL базах даних?
- Foreign keys забезпечують цілісність даних, гарантують, що значення в одному полі відповідають значенням у іншому.
- Що таке масштабування баз даних? Як це робити?
- Масштабування бази даних містить вертикальне (додавання ресурсів на одному сервері) та горизонтальне (додавання більше серверів).
- Що таке шардинг?
- Шардинг — це техніка горизонтального масштабування бази даних, коли дані поділяються на частини, які зберігаються на різних серверах.
- Що таке concurrent locking в базі даних?
- Це механізм блокування даних під час виконання транзакцій для запобігання конфліктам при одночасному доступі до тих самих даних.
Висновок
Стаття висвітлює важливі аспекти роботи з Node.js, зокрема його особливості, переваги та виклики при розробці серверних застосунків. Окрім того, обговорюються методи оптимізації продуктивності, управління мікросервісами та ефективна робота з асинхронним кодом і базами даних, що дозволяють створювати масштабовані та надійні рішення.