Backend Flashcards
Що такеMiddleware?
Це функція, яка приймає як аргументи об’єкти request і response, а також callback-функцію next(). Вона може використати об’єкт response, щоб повернути статус і результат, або передати виконання наступному middleware. Також є middleware-обробники помилок. У цьому випадку першим аргументом додасться помилка.
Які бувають стріми?
Стрім — це інтерфейс для роботи з даними по частинам. Ми не маємо доступу до цих даних відразу, і вони не зберігаються в пам’яті. Завдяки цьому стріми зручно використовувати для роботи з великими файлами. При відправленні файлу в запиті, використовуючи stream.pipe(res), ми не засмічуємо пам’ять вмістом файлу та уникаємо зайвої операції зчитування файлу перед його відправленням.
Види стрімів:
- read (на читання)
- write (на запис)
- duplex - одночасно на читання та запис, наприклад, TCP-сокет
- transform - це duplex-стрім, який використовується для трансформації даних, наприклад, стиснення.
Що таке child process?
За допомогою модуля child process можна створювати дочірні процеси та запускати команди операційної системи.
exec — виконує команду в оболонці, результат у пам’яті (callback: stdout, stderr).
spawn — створює процес для команди з потоками stdout.on(‘data’), stderr.on(‘data’), on(‘close’).
execFile — напряму виконує файл без оболонки (callback: stdout, stderr).
fork — створює процес Node.js з IPC: on(‘message’), send().
Graphql Query vs Mutation
Якщо за один запит виконуємо кілька query, вони виконуються паралельно, а mutations — послідовно.
RabbitMQ exchange types
Direct — routing key має точно збігатися.
Fanout — будь-яка черга, прив’язана до exchange, отримуватиме повідомлення.
Topic — routing key має збігатися повністю або частково; * — будь-яке слово, # — будь-яка кількість слів.
Headers — при біндінгу черги вказуємо, повідомлення з яким header приймати.
Worker Threads in Node.js
Worker Threads дає можливість виконання CPU-інтенсивних задач без блокування основного потоку в окремих потоках. Вони мають доступ до спільної пам’яті через SharedArrayBuffer, що мінімізує накладні витрати на передачу даних. Спілкування відбувається через postMessage для надсилання даних і .on callback для отримання відповідей.
Async Hooks in Node.js
Async Hooks — це інструмент для відстеження асинхронних операцій: дозволяє логувати, моніторити продуктивність, і трасувати запити. В основі інтерфейсу події: init (створення ресурсу), before та after (початок і завершення виконання), destroy (видалення), promiseResolve (завершення промісу).