Запитання до позиції на співбесіду NodeJS фахівець

Node.js став однією з найпопулярніших технологій для веброзробки, і це не дивно. Його здатність виконувати JavaScript на сервері зробила його улюбленим вибором серед розробників по всьому світу. Окрім високої продуктивності та масштабованості, Node.js дозволяє створювати як прості, так і складні рішення для широкого спектру застосувань, від вебсервісів до великих застосунків в реальному часі.

Якщо ви готуєтесь до співбесіди на позицію Node.js розробника, важливо бути готовим до запитань різного рівня складності. У цій статті зібрано запитання, які покривають основи, середній рівень та глибше розуміння роботи з Node.js, які можуть бути задані під час співбесіди.

Структура запитань:

  • Junior Node.js Developer — для початківців.
  • Middle Node.js Developer — для розробників із середнім рівнем досвіду.
  • Senior Node.js Developer — для досвідчених розробників, які мають глибоке розуміння технологій і можуть приймати ключові технічні рішення.

Junior

  1. Що таке Node.js?
    • Node.js — це серверне середовище для запуску JavaScript, побудоване на движку V8 від Google Chrome, яке дозволяє виконувати JavaScript на сервері.
  2. Які основні переваги та недоліки використання Node.js?
    • Переваги: асинхронність, висока продуктивність, масштабованість.
    • Недоліки: не підходить для обчислювальних задач, може бути складним для розуміння у великих додатках.
  3. Для яких завдань Node.js не підходить?
    • Node.js не підходить для важких обчислювальних задач, таких як обробка великих даних або складні математичні операції.
  4. Які в Node.js головні компоненти?
    • Основні компоненти: ядро (V8), libuv (бібліотека для асинхронних I/O), модулі (npm), Event Loop.
  5. Яким чином Node.js сервер здатен обробляти одночасно багато паралельних запитів від клієнтів, маючи лише один thread?
    • Node.js обробляє запити асинхронно, використовуючи Event Loop і callback-функції, без блокування потоку.
  6. Чи можливо використовувати кілька потоків (threads)? За допомогою яких модулів це реалізовано?
    • Так, можна використовувати кілька потоків через модулі cluster або worker_threads.
  7. Node.js інтерпретує чи компілює код програми?
    • Node.js інтерпретує JavaScript код за допомогою двигуна V8, який компілює його в машинний код під час виконання.
  8. Як зчитувати великі файли за допомогою Node.js?
    • Використовувати потоки (streams) для зчитування великих файлів, щоб уникнути перевантаження пам’яті.
  9. Що таке libuv i V8? Яке їхнє призначення?
    • libuv — це бібліотека для асинхронних операцій вводу/виводу, а V8 — це JavaScript движок, який компілює JavaScript в машинний код.
  10. Яка різниця між microtasks і macrotasks? Наведіть приклади таких завдань.
    • Microtasks виконуються перед macrotasks і включають обіцянки (Promises). Macrotasks — це завдання, що виконуються через такі механізми, як таймери, I/O.
  11. Що таке стрим (stream)?
    • Stream — це абстракція для обробки даних, яка дозволяє працювати з великими обсягами даних по частинах, без потреби завантажувати їх усі в пам’ять одночасно.
  12. Які види стримів ви знаєте?
    • Readable, Writable, Duplex, Transform.
  13. Що таке event loop? З яких компонентів складається і як працює?
    • Event Loop обробляє асинхронні завдання в Node.js, складається з черги завдань (callback queue), мікрозавдань (microtask queue) та фази виконання.
  14. Що таке логування і моніторинг?
    • Логування — запис подій системи для аналізу, моніторинг — спостереження за станом системи в реальному часі.
  15. Чим відрізняється моноліт від мікросервісу?
    • Моноліт — це єдине, тісно інтегроване додаток, а мікросервіс — це набір незалежних сервісів, що взаємодіють через API.
  16. В чому різниця між такими ключовими словами мови, як string і String?
    • string — це примітивний тип даних, а String — це об’єкт, що надає методи для роботи з рядками.
  17. Для чого використовують middleware в Express.js?
    • Middleware обробляє HTTP-запити між отриманням запиту та відправкою відповіді.
  18. Як переходити з однієї middleware в іншу?
    • Використовують next() для переходу до наступної middleware.
  19. Як пріоритизувати middleware?
    • Пріоритет визначається порядком визначення middleware у коді.
  20. Як організувати error handler в Express?
    • Створити middleware, що приймає 4 параметри: (err, req, res, next).
  21. Що таке асинхронність і асинхронний код?
    • Асинхронність дозволяє не блокувати основний потік виконання, а виконувати завдання в фоновому режимі.
  22. Яка відмінність між var, let і const? Чому варто використовувати const, якщо змінна не буде змінюватися далі в коді?
    • var має функціональну область видимості, let — блочну, а const визначає константу, яка не може бути змінена після присвоєння.
  23. Як відкласти виконання функції на конкретний час?
    • Використовувати функцію setTimeout.
  24. Які ви знаєте способи оголошення функції?
    • Function declaration, function expression, arrow function.
  25. Що таке анонімна функція?
    • Анонімна функція — функція, що не має імені, зазвичай передається як параметр або викликається безпосередньо.
  26. Наведіть приклади функції, що самовикликається.
    • (function() { })();
  27. У чому різниця між function expression і function declaration?
    • Function declaration оголошується за межами виконання коду, тоді як function expression — це функція, що створюється під час виконання.
  28. Як з JS масиву чисел отримати інший масив, де залишаться тільки числа понад 10?
    • Використовувати метод filter(): arr.filter(num => num > 10).
  29. Як видалити елемент масиву та об’єкта?
    • Для масиву — використовуйте splice(), для об’єкта — delete.
  30. Для чого призначений тип void?
    • Тип void використовується для функцій, які не повертають значення.
  31. Де і для чого використовують super()?
    • Використовують для виклику конструктора батьківського класу в дочірньому класі.
  32. Для чого потрібен this і в яких випадках його використовувати?
    • this вказує на об’єкт, до якого прив’язана функція або метод.
  33. Що таке NaN і як його використати?
    • NaN (Not a Number) — спеціальне значення, яке вказує на помилку при обчисленнях.
  34. Що таке NPM? Які аналоги ви знаєте?
    • NPM — менеджер пакетів для JavaScript. Аналоги: Yarn, PNPM.
  35. В чому переваги і недоліки NPM проти Yarn/PNPM?
    • NPM є стандартним, але Yarn/PNPM можуть бути швидшими завдяки кешуванню та паралельному завантаженню пакетів.
  36. Які методи Promise API ви знаєте? Яка різниця між ними?
    • then(), catch(), finally() — обробка успіху/помилок, а також обов’язкове виконання після завершення.
  37. Наведіть структуру HTTP request/response.
    • Request: Метод, URL, заголовки, тіло.
    • Response: Статус, заголовки, тіло.
  38. Що таке new Set() і new Map()?
    • Set — колекція унікальних значень.
    • Map — колекція пар “ключ-значення”.
  39. Що таке логічний оператор && та || і чим відрізняються ці оператори від логічного оператора «??».
    • && — логічне “і”, || — логічне “або”, ?? — оператор nullish (повертає правий операнд, якщо лівий — null або undefined).
  40. Для чого потрібні бази даних у застосунках?
    • Бази даних зберігають і керують інформацією, забезпечуючи доступ до даних.
  41. Що таке ORM і для чого її використовують?
    • ORM (Object-Relational Mapping) дозволяє працювати з базами даних через об’єктно-орієнтовану модель.
  42. Що таке міграція даних? Для чого вона потрібна?
    • Міграція — це процес оновлення структури бази даних, зокрема змінення схем.
  43. Що таке транзакція?
    • Транзакція — це набір операцій, що виконуються як єдина одиниця, гарантуючи їх атомарність.
  44. Як оновити значення колонки в таблиці?
    • За допомогою SQL запиту UPDATE.
  45. За допомогою чого можна відфільтрувати таблицю Users за параметром віку?
    • Використовувати SQL запит з умовою WHERE age > 18.
  46. Що таке Cross-Origin Resource Sharing (CORS)? Де трапляється?
    • CORS — це механізм, який дозволяє веб-додаткам робити запити до ресурсів на інших доменах.
  47. Як отримати помилку CORS у консолі розробника?
    • Якщо сервер не дозволяє запити з іншого домену, браузер виведе помилку в консолі.
  48. Назвіть основні HTTP-методи RESTful або CRUD застосунків.
    • GET, POST, PUT, DELETE.
  49. Що таке DNS?
    • DNS (Domain Name System) — система, що перетворює доменні імена в IP-адреси.
  50. Які способи центрування елемента по горизонталі і вертикалі ви знаєте?
    • Flexbox, Grid, використання margin: auto, або position: absolute.
Node.JS as Backend: Know About this Popular Framework

Middle

  1. Назвіть переваги Node.js, якщо порівнювати з іншими технологіями для розробки серверних застосунків.
    • Node.js дозволяє швидко обробляти асинхронні запити, має високу продуктивність, завдяки V8 і події циклу.
  2. Для яких задач ви використали б кілька процесів/потоків (processes/threads)?
    • Для ресурсомістких операцій, таких як обробка великих файлів, виконання складних обчислень або багатозадачність.
  3. У чому полягає різниця паралельного та асинхронного програмування на прикладі серверних застосунків?
    • Паралельне програмування передбачає одночасне виконання кількох завдань, асинхронне — по черзі, але без блокування потоку виконання.
  4. Які типи асинхронних операцій здатен виконувати Node.js?
    • Операції з файловою системою, мережеві запити, обробка даних в пам’яті.
  5. Які модулі Node.js ви знаєте? Яке їхнє основне призначення?
    • fs (файлова система), http (мережеві запити), path (обробка шляхів), events (обробка подій).
  6. Яка різниця між операційними помилками та помилками програміста?
    • Операційні — це помилки, пов’язані з зовнішніми факторами (наприклад, неможливо відкрити файл), помилки програміста — це помилки в логіці коду.
  7. Які сервіси можна використати для моніторингу і логування?
    • Prometheus, Grafana, Loggly, ELK Stack (Elasticsearch, Logstash, Kibana).
  8. Що таке libuv? Назвіть його складові.
    • Libuv — це бібліотека, яка забезпечує асинхронний ввід/вивід. Містить підтримку подій, таймерів і потоків.
  9. Які існують шаблони розподілених транзакцій?
    • Шаблони охоплюють 2PC (двохфазний коміт), Saga Pattern, та Compensation.
  10. Чи можливо програмно контролювати виділення і звільнення пам’яті в Node.js програмі?
    • Ні, Node.js використовує автоматичний збір сміття (Garbage Collection).
  11. Поясніть, що таке Garbage Collector.
    • Garbage Collector — це автоматична система очищення пам’яті, яка звільняє непотрібні об’єкти.
  12. Що означає «витік пам’яті» процеса? Як цьому запобігти?
    • Витік пам’яті — це коли програма використовує пам’ять без можливості її звільнення. Запобігти можна оптимізуючи код, використовуючи слабкі посилання та вручну очищаючи ресурси.
  13. Як налагодити heap out of memory?
    • За допомогою флагів командного рядка, таких як --max-old-space-size, для збільшення ліміту пам’яті.
  14. Як налаштувати кешування?
    • Використовувати бібліотеки, такі як node-cache або Redis, для зберігання частих запитів і відповідей.
  15. Які є варіанти використання модулів child_process, worker_threads і cluster?
    • child_process для запуску нових процесів, worker_threads для багатопоточності, cluster для масштабування Node.js на кілька процесів.
  16. Яка різниця у використанні ES modules і CommonJS модулів?
    • ES Modules використовують синтаксис import/export, CommonJS — require/module.exports.
  17. Для чого і як використовують клас EventEmitter з базового модуля ‘node:events’?
    • EventEmitter використовується для створення об’єктів, які можуть видавати події та обробляти їх.
  18. Скільки ядер процесора залучені при виконанні Node.js програми за замовчуванням?
    • За замовчуванням Node.js використовує одне ядро, але можна використовувати кілька через кластеризацію.
  19. Що таке middleware? Якщо ми пишемо свій middleware, чому саме там, чому не в коді сервісу?
    • Middleware обробляє запити перед досягненням основного обробника. Це дозволяє зберігати код чистим і зручним для тестування.
  20. Що таке EventEmitter в Node.js?
    • Це клас, що дозволяє працювати з подіями та слухачами в Node.js.
  21. Яке призначення файлу package.json для Node.js проєктів?
    • Файл містить метадані про проєкт, залежності та скрипти для запуску.
  22. Як можна за допомогою Node.js app прочитати файл з логами із файлової системи? Як прочитати файл, який займає понад 300 мегабайтів?
    • Використовувати стрими або бібліотеки, такі як fs.createReadStream(), для обробки великих файлів.
  23. Поясніть цикл подій у Node.js.
    • Цикл подій обробляє асинхронні операції та викликає відповідні зворотні функції.
  24. Що таке і навіщо потрібен Thread Pool (Worker Pool)?
    • Це набір потоків, який дозволяє обробляти складні або блокуючі операції в окремих потоках.
  25. SIGTERM vs SIGINT: які їхні переваги та недоліки?
    • SIGTERM — це стандартний сигнал для зупинки програми, який дозволяє коректно завершити всі процеси. SIGINT — сигнал зупинки, який зазвичай генерується натисканням Ctrl+C.
  26. Що таке backpressure у контексті стримів? Як з цим боротись?
    • Backpressure — це ситуація, коли споживач не може обробити більше даних, ніж виробник може йому передати. Це можна обробити, регулюючи швидкість потоку.
  27. Для чого потрібні stream.PassThrough і pipe (pipeline)? Наведіть приклади використання.
    • PassThrough — дозволяє передавати дані без змін, pipe — автоматизує з’єднання потоків.
  28. Як використовувати події ‘data’, ‘end’, ‘error’, ‘finish’ у стримах Node.js?
    • ‘data’ — обробка даних, ‘end’ — завершення потоку, ‘error’ — обробка помилок, ‘finish’ — завершення запису.
  29. Як обробити помилки при роботі зі стримами в Node.js?
    • За допомогою обробників подій, таких як .on('error', handler).
  30. Наведіть приклади роботи зі стримами різних типів.
    • Читання файлів, запис у файли, мережеві запити.
  31. Чи працювали ви з pino?
    • Pino — це швидкий і легкий логер для Node.js.
  32. Як описати приєднання до бази даних?
    • Використовуючи бібліотеки, наприклад, sequelize для SQL або mongoose для MongoDB.
  33. Як реалізувати свій декоратор валідації?
    • Створити функцію, яка перевіряє введення і викликає відповідні методи для валідації.
  34. Чому в JavaScript не рекомендують робити довгих обчислень у runtime?
    • Вони можуть заблокувати цикл подій, що призведе до зупинки програми.
  35. Чи гарантовано setTimeout викличе функцію через заданий час? Від чого це залежить?
    • Ні, це залежить від того, чи є вільний час для виконання функції в черзі подій.
  36. Що таке Promises?
    • Об’єкт, що представляє результат асинхронної операції, яка може бути або виконана, або відхилена.
  37. Яка різниця між Promise.allSettled, Promise.race і Promise.any?
    • Promise.allSettled чекає на виконання всіх обіцянок, Promise.race чекає на першу завершену обіцянку, а Promise.any — на першу виконану обіцянку.
  38. Що таке callback у JavaScript?
    • Функція, яка передається як аргумент іншій функції для виконання після її завершення.
  39. Чи кращі Promises за callback підхід? Чому?
    • Так, оскільки Promises дозволяють працювати з асинхронним кодом без глибоких вкладених колбеків.
  40. Що таке замикання/closure?
    • Це функція, яка зберігає доступ до змінних свого лексичного оточення навіть після того, як батьківська функція завершила виконання.
  41. Поясніть переваги та недоліки використання «use strict».
    • use strict допомагає уникнути помилок, таких як використання неоголошених змінних, але може вимагати більш ретельного підходу до коду.
  42. Наведіть приклад блокування циклу подій.
    • Важкий цикл обчислень або синхронна операція, яка тримає цикл подій заблокованим, як, наприклад, безкінечний цикл.
  43. Яка різниця між abstract і interface?
    • abstract — це частково реалізований клас, interface — це контракт, що визначає методи, але без їхньої реалізації.
  44. Що таке Web Workers? Для чого їх використовують?
    • Web Workers дозволяють виконувати JavaScript в окремому потоці, не блокуючи основний потік.
  45. Які особливості передачі даними між worker’ами та основним потоком?
    • Дані передаються через повідомлення (Message Passing), оскільки кожен потік має свою пам’ять.
  46. Які обмеження накладаються на потік Web Workers?
    • Web Workers не мають доступу до DOM і можуть виконувати лише певні операції.
  47. Окрім використання оператора ‘return’, як ще можна повернути результат виконання з функції (процедури)?
    • Можна використовувати callback або проміси.
  48. Яка різниця між Monolith/SOA/Microservices?
    • Monolith — це одна монолітна система, SOA — архітектура з сервісами, Microservices — архітектура з малими, автономними сервісами.
  49. Назвіть переваги і недоліки мікросервісної архітектури.
    • Переваги: гнучкість, масштабованість. Недоліки: складність управління, комунікація між сервісами.
  50. Як забезпечити стійкість і можливість масштабування мікросервісів?
    • Використання оркестраторів, таких як Kubernetes, та правильне управління сесіями і збереженням стану.

Senior

Node.js

  1. Які найбільші проблеми платформи Node.js?
    • Основні проблеми охоплюють обмежену підтримку багатоядерних процесорів, складність масштабування для певних типів застосунків і можливі проблеми з управлінням пам’яттю.
  2. Скільки потоків Node.js використовує для роботи? Яким чином можна регулювати цю кількість?
    • За замовчуванням Node.js використовує один потік для виконання коду JavaScript. Кількість потоків можна змінити через модуль worker_threads або використовуючи кластеризацію.
  3. Чи є в Node.js можливість виконувати скрипти, написані іншими мовами?
    • Так, можна використовувати модулі, такі як child_process, для виконання скриптів, написаних іншими мовами (наприклад, Python, Bash).
  4. Чи є різниця у виконанні microtasks/macrotasks залежно від версій Node.js?
    • Різниця може бути через оптимізації та оновлення у кожній версії Node.js, але загальна логіка виконання microtasks і macrotasks залишатиметься однаковою.
  5. Як працювати із вбудованими Node.js функціями, реалізованими через callback інтерфейс в async/await стилі?
    • Використовуйте util.promisify для перетворення callback функцій в проміси, що дозволяє застосовувати async/await.
  6. У чому полягає різниця між require/module.exports і ES6-модулями?
    • require/module.exports — це система модулів CommonJS, яка синхронно імпортує та експортує. ES6 модулі працюють асинхронно та використовують import/export.
  7. З яких стадій складається цикл event loop в libuv?
    • Стадії: Timer, I/O callbacks, idle, prepare, poll, check, close callbacks.
  8. Яким чином бібліотека libuv досягає неблокуючого вводу і виводу?
    • libuv використовує асинхронні механізми введення/виведення, відправляючи запити операційній системі і обробляючи їх за допомогою callback функцій.
  9. Що таке гарантії доставки повідомлень та якими вони бувають?
    • Гарантії доставки містять: At most once, At least once, Exactly once — це різні рівні надійності доставки повідомлень у розподілених системах.
  10. У яких випадках ви застосували б асинхронний зв’язок між двома системами?
    • Для високонавантажених, віддалених або розподілених систем, де важливо не блокувати основний потік, а також для інтеграції з сторонніми сервісами.

Архітектура

  1. Які є способи масштабувати Node.js сервер?
    • За допомогою кластеризації, балансування навантаження між кількома екземплярами сервера, горизонтального масштабування та використання серверless архітектури.
  2. Які є переваги кластеризації Node.js застосунку? Які проблеми можуть виникнути?
    • Переваги: використання всіх ядер CPU, покращення продуктивності. Проблеми: складність у керуванні станом між процесами.
  3. У чому основна різниця чи схожість у роботі вебсерверів на Node.js або, наприклад, на Apache (PHP)?
    • Node.js використовує неблокуючий асинхронний підхід, тоді як Apache обробляє запити по черзі.
  4. Що таке методологія Twelve-Factor App?
    • Це набір найкращих практик для розробки програмного забезпечення, орієнтованого на хмару, що забезпечує легке масштабування та керування.
  5. Які показники моніторингу найважливіші?
    • Продуктивність (CPU, пам’ять), час відгуку, кількість запитів, помилки, затримки в обробці.
  6. Опишіть дизайн-паттерн SAGA. Яка різниця між транзакцією та операцією компенсації в SAGA, в SOA?
    • SAGA — це послідовність транзакцій, де кожна операція має зворотну компенсацію у разі помилки.
  7. Що таке авторизація та аутентифікація?
    • Аутентифікація визначає, хто ви є (перевірка ідентичності), а авторизація визначає, що ви можете робити (доступ до ресурсів).
  8. Express vs Nest.js: які переваги і недоліки кожного фреймворку? Коли який доцільніше використовувати?
    • Express: мінімалістичний, гнучкий. Nest.js: структурований, орієнтований на масштабованість. Nest.js краще для великих застосунків, Express — для малих і середніх.
  9. Що таке CLS і де варто його використовувати?
    • CLS (Continuation Local Storage) дозволяє зберігати контекст між асинхронними викликами, корисно для моніторингу та логування.
  10. Що таке graceful shutdown? Як його імплементувати?
    • Graceful shutdown — це коректне завершення роботи програми, закриття всіх підключень і очищення ресурсів перед вимкненням.

JavaScript

  1. З якою швидкістю витягуватимуться дані за ключем зі звичайного JavaScript об’єкта? Поясніть, що це за структура даних і як вона працює?
    • Операція займає практично сталий час O(1) завдяки використанню геш-таблиць.
  2. Чим JS відрізняється від багатопотокових мов?
    • JavaScript працює в одному потоці (одночасно), але підтримує асинхронність через callback-и, проміси та async/await.
  3. Що таке функції вищого порядку?
    • Функції, які приймають інші функції як аргументи або повертають функції.
  4. Назвіть об’єкти першого класу.
    • Функції, об’єкти, рядки, числа — всі є об’єктами першого класу в JavaScript, оскільки вони можуть бути передані, повернуті або збережені.
  5. Як зрозуміти, чи є у вашому коді/застосунку витоки пам’яті (memory leaks)?
    • Використання інструментів для моніторингу пам’яті, таких як профілювання в Chrome DevTools або інші інструменти для виявлення незвільнених об’єктів.
  6. Як працювати з асинхронною відповіддю?
    • Використовувати Promise або async/await для обробки асинхронних відповідей.
  7. Як можна отримати інкапсуляцію всередині класу без використання Typescript?
    • Використовувати закриті змінні через функції (замикання) або використовувати методи доступу (getter/setter).

Мікросервіси

  1. Розкажіть про ваш досвід роботи з мікросервісами в Node.js. Як ви забезпечували комунікацію між різними сервісами?
    • Комунікація між мікросервісами може бути здійснена через REST API, GraphQL, gRPC або за допомогою черг повідомлень.
  2. Як ви працювали з міграцією та покращенням сервісів в архітектурі мікросервісів?
    • Міграція та покращення можуть містити оновлення схем баз даних, обробку версій API, автоматизацію тестів та поступовий перехід.
  3. Як би ви підходили до тестування та дебагу застосунку з мікросервісною архітектурою у Node.js?
    • Використовувати інтеграційне тестування, моніторинг (наприклад, Prometheus, ELK stack), і дебагінг з допомогою інструментів типу Node.js Inspector.
  4. Як би ви впоралися зі збоями в розподіленій системі (Failed message processing, dead letter queue)?
    • Для обробки помилок використовувати черги повідомлень з мертвими листами (dead letter queues) для перехоплення невдалих повідомлень.
  5. Які патерни для побудови мікросервісної архітектури ви використовували?
    • Патерни охоплюють API Gateway, Circuit Breaker, Event Sourcing, Command Query Responsibility Segregation (CQRS).
  6. Як працює gateway?
    • API Gateway обробляє вхідні запити, направляє їх до відповідних мікросервісів, а також може виконувати аутентифікацію, авторизацію і моніторинг.
  7. Що таке CAP теорема?
    • Теорема стверджує, що розподілена система може одночасно забезпечувати лише два з трьох аспектів: консистентність, доступність і стійкість до розділення (Partition tolerance).
  8. Що краще: окремі бази даних для окремих мікросервісів чи одна база даних для всіх мікросервісів? Чому?
    • Окремі бази даних для кожного мікросервісу забезпечують більшу незалежність і дозволяють мікросервісам розвиватися незалежно.

Бази даних

  1. Які бувають рівні ізоляції транзакцій та чим вони відрізняються?
    • Рівні ізоляції: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE. Вони визначають, наскільки транзакції можуть бачити зміни в інших паралельних транзакціях.
  2. Навіщо існують рівні ізоляції транзакції? Наведіть приклади.
    • Для контролю доступу до даних у багатокористувацьких середовищах, щоб уникнути аномалій типу dirty reads або phantom reads.
  3. Що таке аномалії транзакцій (dirty read, dirty write, read skew, phantom read, lost update)?
    • Це різні ситуації, коли паралельні транзакції можуть призвести до непередбачених результатів, таких як використання несвоєчасно оновлених даних.
  4. У чому різниця нормалізованих і ненормалізованих даних? Наведіть приклад, коли які краще використовувати.
    • Нормалізовані дані зменшують дублювання і зберігають цілісність, ненормалізовані можуть бути ефективнішими для швидких запитів.
  5. У чому різниця між оптимістичним та песимістичним блокуванням?
    • Оптимістичне блокування припускає, що конфлікти будуть рідкими, і використовує перевірки на момент завершення. Песимістичне — завжди блокує ресурси для уникнення конфліктів.
  6. Навіщо потрібні індекси пошуку? Які мінуси в індексів?
    • Індекси прискорюють пошук, але можуть сповільнити операції вставки та оновлення через необхідність оновлення індексу.
  7. Що таке race condition? Можете навести приклад?
    • Race condition виникає, коли результат виконання залежить від порядку операцій, і це може призвести до непередбачених результатів.
  8. Що таке реплікація? Навіщо вона потрібна?
    • Реплікація — це процес створення копій даних на різних серверах для забезпечення надійності та доступності.
  9. Яка різниця між графом і деревом?
    • Граф може мати цикли, дерево — це спеціальний випадок графа без циклів, де один елемент є коренем.
  10. Чи доводилось вам робити оптимізацію перформансу за допомогою структур даних?
    • Так, наприклад, використання геш-таблиць для прискорення пошуку або дерев для швидких вставок і видалень.
  11. Наведіть плюси та мінуси Shared DB.
    • Плюси: спрощує управління транзакціями. Мінуси: важче масштабується, може бути проблеми з конкурентним доступом.
  12. Що таке foreign keys і constraints у SQL базах даних?
    • Foreign keys забезпечують цілісність даних, гарантують, що значення в одному полі відповідають значенням у іншому.
  13. Що таке масштабування баз даних? Як це робити?
    • Масштабування бази даних містить вертикальне (додавання ресурсів на одному сервері) та горизонтальне (додавання більше серверів).
  14. Що таке шардинг?
    • Шардинг — це техніка горизонтального масштабування бази даних, коли дані поділяються на частини, які зберігаються на різних серверах.
  15. Що таке concurrent locking в базі даних?
    • Це механізм блокування даних під час виконання транзакцій для запобігання конфліктам при одночасному доступі до тих самих даних.

Висновок

Стаття висвітлює важливі аспекти роботи з Node.js, зокрема його особливості, переваги та виклики при розробці серверних застосунків. Окрім того, обговорюються методи оптимізації продуктивності, управління мікросервісами та ефективна робота з асинхронним кодом і базами даних, що дозволяють створювати масштабовані та надійні рішення.