1382 просмотра
от 4 июня 2024
Node.js

Вопросы и ответы с собеседований по Node.js

Вопросы и ответы с собеседований Node.js-разработчиков. Что такое EventEmitter, как устроен цикл событий (Event Loop), зачем нужна библиотека LibUV, чем полезна многопоточность, в чём разница между exports и module.exports и другое.

1

Что такое Node.js?

Node.js - это среда выполнения JavaScript с открытым кодом, работающая на стороне сервера на основе ядра JavaScript V8 (Chrome). Она была создана Райаном Далем (Ryan Dahl) и выпущена в 2009 г. Node.js использует событийно-ориентированную модель и неблокирующую ввод / вывод архитектуру, что делает его легковесным и эффективным. Это не фреймворк, и не библиотека, это среда выполнения JavaScript. Node.js особенно полезен при создании веб-приложений, где скорость и простота имеют первостепенное значение, а задача производить тяжеловесные вычисления не стоит. Вся прелесть в том, что Node.js использует неблокирующие ввод/вывод операции, Например, обработчик события, запускаемый в момент инициации события, может установить соединения с базой данных и назначить коллбек-функцию, которая должна выполниться, когда из БД будут получены данные. Node.js не ставит всё на паузу в ожидании результата от БД, а продолжает выполнять другие операции. Когда данные будут готовы, назначенный для их обработки коллбек будет выполнен. То, что Node.js не заблокировал все происходящие процессы ради ожидания выполнения функции, и является принципом неблокирующих операций.

Комментарии
0/3000
2

Что такое npm?

NPM (Node Package Manager) - это менеджер пакетов для среды выполнения JavaScript - Node.js. NPM устанавливается автоматически при установке Node.js.

Комментарии
0/3000
3

Что такое EventEmitter?

const Emitter = require("events"); let emitter = new Emitter(); let eventName = "greet"; emitter.on(eventName, function(){ console.log("Hello all!"); }); emitter.on(eventName, function(){ console.log("Привет!"); }); emitter.emit(eventName); // Hello all! // Привет! EventEmitter - это класс, предоставляющий своим экземплярам API для генерации и обработки событий. Подавляющее большинство функционала Node.js применяет асинхронную событийную архитектуру, которая использует специальные объекты - эмиттеры для генерации и обработки различных событий. Все объекты, которые генерируют события, представляют экземпляры класса EventEmitter. С помощью функции eventEmitter.on() к определенному событию по имени цепляется функция-обработчик. Причем для одного события можно указать множество обработчиков. Когда объект EventEmitter генерирует событие, происходит выполнение всех этих обработчиков.

Комментарии
0/3000
4

Что такое цикл событий?

Цикл событий - это цикл, лежащий в основе Node.js, управляющий порядком исполнения пользовательского кода (коллбеков). Цикл событий содержит структуры, похожие на очереди, но он не обрабатывает весь стек последовательно. Цикл событий представляет собой процесс, состоящий из этапов (групп задач), которые выполняются по очереди. Вот эти этапы: 1. Timers - выполняется код, инициированный через setTimeout() или setInterval(). 2. Callbacks - выполняются пользовательские коллбеки (большая часть пользовательского кода). 3. Polling - опрос новых событий, которые будут обработаны в следующем тике цикла. 4. Set Immediate - выполняются функции, зарегистрированные через setImmediate(). 5. Close - выполняются все колбеки для событий on(‘close’).

Комментарии
0/3000
5

Что такое LibUV?

LibUV - это библиотека, написанная на "C" и встроенная в Node.js, обеспечивающая кроссплатформенные операции ввода/вывода и цикл событий.

Комментарии
0/3000
6

Расскажите про многопоточность и Node.js

Node.js работает в одном потоке. Однако, он позволяет выполнять некие действия параллельно, но для этого программисту не нужно создавать потоки или синхронизировать их. Платформа Node.js и операционная система выполняют параллельные операции ввода/вывода своими средствами, а когда приходит время обработки данных средствами нашего JavaScript-кода, он работает в однопоточном режиме. Другими словами, всё, кроме нашего JS-кода работает параллельно. В синхронных блоках JavaScript-кода команды всегда выполняются по одной, в том порядке, в котором они представлены в исходном коде.

Комментарии
0/3000
7

В чем разница между exports и module.exports?

module.exports.g = ... // Ok exports.g = ... // Ok module.exports = ... // Ok exports = ... // Совсем не Ok Команда exports — это просто ссылка, псевдоним для конструкции module.exports. Когда вы пытаетесь записать что-нибудь непосредственно в exports, вы меняете ссылку, которая там хранится. Как результат, при последующих обращениях к exports вы уже не работаете с тем, на что эта переменная ссылается в официальном API (а это — module.exports). Записав что-нибудь в exports, вы превращаете это ключевое слово в локальную переменную, находящуюся в области видимости модуля.

Комментарии
0/3000
8

Расскажите про синхронную работу с файлами

Каждый асинхронный метод объекта fs в Node имеет синхронную версию. Зачем пользоваться синхронными методами вместо асинхронных? Иногда в синхронных методах нет ничего плохого. Например, они могут пригодиться на этапе инициализации, при загрузке сервера. Часто ими так и пользуются, когда всё, что делается после инициализации, зависит от загруженных на этапе инициализации данных. Вместо того, чтобы заниматься конструированием кода, основанного на коллбэках, в подобных ситуациях, когда выполняется единоразовая загрузка каких-либо данных, вполне приемлемы синхронные методы. Однако, если вы пользуетесь синхронными методами внутри обработчиков неких событий, вроде коллбэка HTTP-сервера, отвечающего за обработку запросов, то это, без вариантов, совершенно неправильно. Делать так настоятельно не рекомендуется.

Комментарии
0/3000
9

Что такое демультиплексор?

Неблокирующий ввод/вывод стал возможным благодаря современным операционным системам, которые предоставляют данный механизм — демультиплексор событий. Демультиплексор — это механизм, который принимает от приложения запрос, регистрирует его и выполняет. Например, нужно осуществить чтение файла. Для этого делается запрос в демультиплексор событий, сюда отправляется ресурс (ссылка на файл), нужная операция и callback. Демультиплексор событий регистрирует этот запрос и возвращает управление непосредственно приложению — таким образом, оно не блокируется. Затем он выполняет операции над файлом, и после этого, когда файл будет прочитан, callback регистрируется в очереди на выполнение в цикле событий.

Комментарии
0/3000
10

Что такое Streams?

Stream (поток) — это концепция, реализуя которую можно обрабатывать данные небольшими частями, что позволяет задействовать небольшой объем оперативной памяти. Мы можем разбить обработку каждой части на независимые друг от друга модули (функции либо классы). Например, мы можем сразу сжать часть данных, потом зашифровать и записать в файл. Основная идея в том, чтобы не работать с данными целиком, а поочередно обрабатывать часть данных. В Node js есть 4 вида стримов: 1. Readable — чтение 2. Writable — запись 3. Duplex — чтение и запись 4. Transform — вид Duplex потока, который может изменять данные

Комментарии
0/3000
Вопросники по Node.js
Node.js
10 вопросов
Вопросы и ответы с собеседований по Node.js
1381 просмотр
Node.js
12 вопросов
Вопросы и ответы с собеседований по Express.js
725 просмотров
Хотите заработать на создании вопросников?
Стать редактором
Смежные категории
Базы данных
10 вопросов
Вопросы с собеседований о репликации баз данных
1407 просмотров
Computer Science
15 вопросов
Вопросы и ответы с собеседований по DDD
1445 просмотров
Computer Science
12 вопросов
Вопросы с собеседований про операционные системы
1018 просмотров
JavaScript
58 вопросов
Вопросы и ответы с собеседований по JavaScript
5779 просмотров
Computer Science
11 вопросов
Вопросы и ответы про интернет-протоколы
1359 просмотров
Computer Science
28 вопросов
Объяснение паттернов проектирования с примерами
1341 просмотр
Рекомендуем
Базы данных
60 вопросов
Вопросы и ответы с собеседований по SQL
2193 просмотра
Computer Science
11 вопросов
Вопросы и ответы про интернет-протоколы
1359 просмотров
Git
20 вопросов
Вопросы и ответы с собеседований по Git
1727 просмотров
Computer Science
13 вопросов
Вопросы и ответы с собеседований про ООП
1133 просмотра
Computer Science
15 вопросов
Вопросы и ответы с собеседований по DDD
1445 просмотров
Computer Science
28 вопросов
Объяснение паттернов проектирования с примерами
1341 просмотр
Другие разделы

Лента

Активность пользователей Девстанции

Перейти к ленте

Лидеры

Рейтинг самых результативных пользователей сообщества

Перейти к лидерам

Треды

Общение по интересам и связь с разработчиками

Перейти к тредам

Задачи

Решение алгоритмических задач с собеседований

Перейти к задачам

Вопросы

Ответы на вопросы с технических собеседований

Вы находитесь здесь

Викторины

Интерактивные викторины по вопросам с собеседований

Перейти к викторинам
Мы в Telegram
Новости проекта, общение с разработчиками, общение по интересам - присоединяйтесь!