Node.js, инструмент для создания сценариев на стороне сервера, использует JavaScript - язык, популярный среди миллионов разработчиков по всему миру, - что обеспечивает гораздо более низкую кривую обучения даже для начинающих. Используя Node.js, можно с одинаковой легкостью создавать все, от простых программ командной строки до сложных веб-приложений корпоративного уровня. Вот почему в большинстве отраслей требуется сертифицированный разработчик Node.js для управления всей серверной частью. Node.js также открывает возможности для карьерного роста на разных уровнях. Если вы планируете участвовать в собеседовании по Node.js в ближайшем будущем, мы готовы помочь вам со списком из 50 лучших вопросов для собеседований по Node.js, которые вы должны подготовить в 2019 году.

В этой статье с вопросами на собеседовании по Node.js я разделил вопросы на 3 сегмента в зависимости от уровня сложности:

  • Вопросы на собеседовании по Node.js - начальный уровень
  • Вопросы на собеседовании по Node.js - средний уровень
  • Вопросы на собеседовании по Node.js - продвинутый уровень

Прежде чем я начну с этой статьи о вопросах для интервью по Node.js, позвольте мне обратиться с просьбой к читателям, которые могли посещать интервью по Node.js в недавнем прошлом. Итак, если вы сталкивались с такими вопросами, которые задавались в интервью, но отсутствуют в этой статье, не стесняйтесь задавать эти вопросы в разделе комментариев ниже. Мы постараемся ответить на них как можно раньше, чтобы другие также могли извлечь из этого пользу.

А теперь приступим.

Вопросы на собеседовании по Node.js - начальный уровень

1. Различия между JavaScript и Node.js.

Node.js - это мощный фреймворк, разработанный на движке JavaScript V8 в Chrome, который компилирует JavaScript непосредственно в собственный машинный код. Это облегченная структура, используемая для создания серверных веб-приложений и расширяющая API JavaScript, предлагая обычные функции на стороне сервера. Обычно он используется для разработки крупномасштабных приложений, особенно для сайтов потокового видео, одностраничных приложений и других веб-приложений.

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

Node.js - это мощный фреймворк, разработанный на движке JavaScript V8 в Chrome, который компилирует JavaScript непосредственно в собственный машинный код. Это облегченная структура, используемая для создания серверных веб-приложений и расширяющая API JavaScript, предлагая обычные функции на стороне сервера. Обычно он используется для разработки крупномасштабных приложений, особенно для сайтов потокового видео, одностраничных приложений и других веб-приложений.

3. Перечислите основные преимущества использования Node.js?

4. В чем разница между Angular и Node.js?

5. Почему Node.js однопоточный?

Node.js использует однопоточную модель для поддержки асинхронной обработки. Благодаря асинхронной обработке приложение может работать лучше и более масштабируемо при веб-нагрузках. Таким образом, Node.js использует подход однопоточной модели, а не типичную реализацию на основе потоков.

6. Как работает Node.js?

Node.js - это виртуальная машина, которая использует JavaScript в качестве языка сценариев и работает в среде v8. Он работает с однопоточным циклом обработки событий и неблокирующим вводом-выводом, который обеспечивает высокую скорость, поскольку может обрабатывать большее количество одновременных запросов. Кроме того, благодаря использованию модуля «HTTP» Node.js может работать на любом автономном веб-сервере.

7. Где можно использовать Node.js?

Node.js можно использовать для разработки:

  • Веб-приложения в реальном времени
  • Сетевые приложения
  • Распределенные системы
  • Приложения общего назначения

8. Сколько типов функций API есть в Node.js?

В Node.js есть два типа API-функций:

  • Асинхронные неблокирующие функции
  • Синхронные, блокирующие функции

9. В чем разница между асинхронным и неблокирующим режимом?

10. Что такое package.json?

Файл package.json в Node.js - это сердце всего приложения. По сути, это файл манифеста, содержащий метаданные проекта, в котором мы определяем свойства пакета.

11. Что вы понимаете под программированием, управляемым событиями?

Программирование, управляемое событиями, - это подход к программированию, который широко использует события для запуска различных функций. Событие может быть чем угодно, например щелчком мыши, нажатием клавиши и т. Д. Когда событие происходит, выполняется функция обратного вызова, которая уже зарегистрирована в элементе. Этот подход в основном следует шаблону публикации-подписки. Благодаря программированию, управляемому событиями, Node.js работает быстрее по сравнению с другими технологиями.

12. Что такое цикл событий в Node.js и как он работает?

Цикл событий в Node.js обрабатывает все асинхронные обратные вызовы в приложении. Это один из наиболее важных аспектов Node.js, и причина того, что Node.js имеет неблокирующий ввод-вывод. Поскольку Node.js - это язык, управляемый событиями, вы можете легко прикрепить слушателя к событию, а затем, когда событие произойдет, обратный вызов будет выполнен конкретным слушателем. Каждый раз, когда вызываются такие функции, как setTimeout, http.get и fs.readFile, Node.js выполняет цикл событий, а затем переходит к следующему коду, не дожидаясь вывода. После завершения всей операции Node.js получает результат и затем выполняет функцию обратного вызова. Вот почему все функции обратного вызова помещаются в очередь в цикле. После получения ответа они выполняются один за другим.

13. Объясните REPL в контексте Node.js.

REPL в Node.js означает R ead, E val, P rint и L oop. Он представляет собой компьютерную среду, такую ​​как оконная консоль или оболочка Unix / Linux, где можно ввести любую команду, а затем система может ответить выводом. Node.js по умолчанию поставляется в комплекте со средой REPL. REPL может выполнять следующие задачи:

  • Чтение: считывает вводимые пользователем данные, анализирует их в структуре данных JavaScript и затем сохраняет в памяти.
  • Eval: получает и оценивает структуру данных.
  • Печать: печать окончательного результата.
  • Цикл: повторяет указанную команду до тех пор, пока не будет дважды нажата CTRL + C.

14. Перечислите задачи, которые следует выполнять асинхронно с помощью цикла событий?

Ниже приведен список задач, которые необходимо выполнять асинхронно с использованием цикла событий:

  • Операции ввода / вывода
  • Тяжелые вычисления
  • Все, что требует блокировки

15. Перечислите шаги, с помощью которых «Поток управления» управляет вызовами функций в Node.js?

  1. Контроль за порядком исполнения
  2. Собирать информацию
  3. Ограничить параллелизм
  4. Назовите следующий шаг в программе

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

16. Что вы понимаете под тестовой пирамидой?

Пирамида тестирования в основном представляет собой диаграмму, которая описывает соотношение количества модульных тестов, интеграционных тестов и сквозных тестов, которые необходимо написать для успешной разработки проекта.

17. Что такое обратный вызов при первой ошибке в Node.js?

Обратные вызовы «сначала ошибка» в Node.js используются для передачи ошибок и данных. Самым первым параметром, который вам нужно передать этим функциям, должен быть объект ошибки, в то время как другие параметры представляют связанные данные. Таким образом, вы можете передать объект ошибки для проверки, если что-то не так, и обработать его. Если нет проблем, вы можете просто перейти к последующим аргументам.

var myPost = new Post({title: 'edureka'});
myPost.save(function(err,myInstance){
if(err){
//handle error and return
}
//go ahead with `myInstance`
});

18. Объясните назначение module.exports?

Модуль в Node.js используется для инкапсуляции всех связанных кодов в единый блок кода, который можно интерпретировать, сдвигая все связанные функции в один файл. Например, предположим, что у вас есть файл с именем greet.js, который содержит две функции, как показано ниже:

module.exports = {
greetInHindi: function(){
return "NAMASTE";
},
greetInKorean: function(){
return "ANNYEONGHASEYO";
}};

Как вы можете видеть, module.exports предоставляет две функции, которые можно импортировать в другой файл, используя приведенный ниже код:

var eduGreets = require ("./greet.js");
eduGreets.greetInHindi() //NAMASTE
eduGreets.greetInKorean() //ANNYEONGHASEYO

19. Что вы понимаете под Reactor Pattern в Node.js?

Шаблон Reactor в Node.js - это, по сути, концепция неблокирующих операций ввода-вывода. Этот шаблон предоставляет обработчик, связанный с каждой операцией ввода-вывода, и как только запрос ввода-вывода создается, он затем отправляется в демультиплексор. Этот демультиплексор представляет собой интерфейс уведомлений, способный обрабатывать параллелизм в неблокирующем режиме ввода-вывода. Это также помогает собирать каждый запрос в форме события, а затем помещать каждое событие в очередь. Таким образом, создается очередь событий. Одновременно у нас есть цикл событий, который повторяет события, присутствующие в очереди событий.

20. В чем разница между "внешней" и "внутренней" разработкой?

21. Что такое LTS-версии Node.js?

LTS представляет собой L T T поддерживающую версию Node.js, которая получает все критические исправления ошибок вместе с обновления безопасности и улучшения производительности. Эти версии поддерживаются не менее 18 месяцев и в основном ориентированы на стабильность и безопасность. Модификации, внесенные в версии LTS, ограничиваются исправлением ошибок, обновлением безопасности, обновлением npm и документации, улучшением производительности и т. Д.

22. Перечислите основные реализации безопасности в Node.js?

Основные реализации безопасности в Node.js:

  1. Аутентификации
  2. Обработка ошибок

23. Что вы понимаете под адом обратного вызова?

Обратный Ад также известен как Пирамида Судьбы. Это шаблон, вызванный интенсивно вложенными обратными вызовами, которые нечитаемы и громоздки. Обычно он содержит несколько вложенных функций обратного вызова, которые, в свою очередь, затрудняют чтение и отладку кода. Это вызвано неправильной реализацией асинхронной логики.

async_A(function(){
async_B(function(){
async_C(function(){
async_D(function(){
....
});
});
});
});

24. Объясните libuv.

Libuv - это многоплатформенная библиотека поддержки Node.js, которая в основном используется для асинхронного ввода-вывода. В первую очередь он был разработан для Node.js, но со временем он стал широко применяться в других системах, таких как Luvit, pyuv, Julia и т. Д. Libuv - это в основном абстракция вокруг libev / IOCP в зависимости от платформы, предоставляющая пользователям API на основе libev. Вот несколько важных особенностей libuv:

  • Поддержка полнофункционального цикла событий
  • События файловой системы
  • Асинхронные операции с файлами и файловой системой
  • Асинхронные сокеты TCP и UDP
  • Дочерние процессы

25. Объясните концепцию промежуточного программного обеспечения в Node.js?

В общем, промежуточное ПО - это функция, получающая объекты запроса и ответа. Другими словами, в цикле запроса-ответа приложения эти функции имеют доступ к различным объектам запроса и ответа вместе со следующей функцией цикла. Следующая функция промежуточного программного обеспечения представлена ​​с помощью переменной, обычно называемой next. Чаще всего функции промежуточного программного обеспечения выполняют следующие задачи:

  • Выполнить любой тип кода
  • Обновить или изменить объект запроса и ответа
  • Завершить цикл запрос-ответ
  • Вызвать следующее промежуточное ПО в стеке

26. Объясните концепцию модуля URL.

Модуль URL в Node.js предоставляет различные утилиты для разрешения и анализа URL. Это встроенный модуль, который помогает разделить веб-адрес в читаемый формат:

var url = require('url');

Например:

var url = require('url');
var adrs = 'https://localhost:8082/default.htm?year=2019&month=april';
var q = url.parse(adr, true);
console.log(q.host); //returns 'localhost:8082'
console.log(q.pathname); //returns '/default.htm'
console.log(q.search); //returns '?year=2019 and month=april'
var qdata = q.query; //returns an object: { year: 2019, month: 'april' }
console.log(qdata.month); //returns 'april'

27. Что вы понимаете под ESLint?

ESLint - это проект с открытым исходным кодом, изначально разработанный Николасом Закасом в 2013 году, целью которого является предоставление утилиты линтинга для JavaScript через плагин. Линтеры в Node.js - хорошие инструменты для поиска определенных классов ошибок, особенно тех, которые связаны с областью видимости переменных.

28. Почему для Node.js Google использует движок V8?

Google использует V8, поскольку это движок времени выполнения Chrome, который преобразует код JavaScript в собственный машинный код. Это, в свою очередь, ускоряет выполнение приложения и процесс ответа, а также обеспечивает быстрое выполнение приложения.

29. Объясните работу функции потока управления.

В Node.js функция потока управления - это в основном код, который выполняется между вызовами асинхронных функций. Ниже приведены шаги, которые необходимо выполнить для его выполнения:

  1. Во-первых, необходимо контролировать порядок исполнения.
  2. Затем необходимо собрать необходимые данные.
  3. Далее необходимо ограничить параллелизм.
  4. После этого необходимо вызвать следующий шаг программы.

30. Перечислите два аргумента, которые async.queue принимает в качестве входных данных?

Ниже приведены два аргумента, которые async.queue принимает в качестве входных данных:

  1. Задача Функция
  2. Ценность параллелизма

31. Чем отличаются методы spawn () и fork () в Node.js?

В Node.js spawn () используется для запуска нового процесса с предоставленным набором команд. Этот метод не создает новый экземпляр V8, и на процессоре активна только одна копия модуля узла. Когда ваш дочерний процесс возвращает большой объем данных в узел, вы можете вызвать этот метод.

Синтаксис:

child_process.spawn(command[, args][, options])

В то время как fork () в Node.js - это специальный экземпляр spawn (), который запускает новый экземпляр движка V8. Этот метод просто означает, что несколько рабочих процессов работают на одной базе кода узла для различных задач.

Синтаксис:

child_process.fork(modulePath[, args][, options])

32. Что вы понимаете под глобальными объектами в Node.js?

В Node.js глобальные объекты - это объекты, которые носят глобальный характер и доступны во всех модулях приложения. Вы можете использовать эти объекты непосредственно в своем приложении, вместо того, чтобы включать их явно. Глобальные объекты могут быть модулями, функциями, строками, объектами и т. Д. Более того, некоторые из этих объектов могут находиться в области видимости модуля, а не в глобальной области.

33. Объясните концепцию заглушки в Node.js.

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

34. Как assert работает в Node.js?

В Node.js assert используется для написания тестов. Он предоставляет обратную связь только тогда, когда какой-либо из запущенных тестовых примеров не работает. Этот модуль предоставляет вам набор тестов утверждения, которые затем используются для проверки инвариантов. Он в основном используется внутри Node.js, но с использованием кода require («assert») его можно использовать и в других приложениях.

var assert = require('assert');
function mul(a, b) {
return a * b;
}
var result = mul(1,2);
assert( result === 2, 'one multiplied by two is two');

35. Дайте определение концепции тестовой пирамиды. Объясните процесс их реализации в терминах HTTP API.

Тестовая пирамида - это концепция, разработанная Майком Коном. В соответствии с этим у вас должно быть больше низкоуровневых модульных тестов по сравнению с высокоуровневыми сквозными тестами, которые выполняются через графический интерфейс.

С точки зрения HTTP API это можно определить как:

  • Большее количество низкоуровневых модульных тестов для каждой модели
  • Меньшие интеграционные тесты для проверки взаимодействия моделей
  • Меньшие приемочные тесты для тестирования реальных конечных точек HTTP

36. Объясните назначение пакета ExpressJS?

Express.js - это платформа, построенная на основе Node.js, которая упрощает управление потоком данных между сервером и маршрутами в серверных приложениях. Это легкий и гибкий фреймворк, который предоставляет широкий спектр функций, необходимых для Интернета, а также для разработки мобильных приложений. Express.js разработан на основе промежуточного модуля Node.js. Модуль подключения также использует модуль http для связи с Node.js. Таким образом, если вы работаете с любым из модулей промежуточного программного обеспечения на основе подключения, вы можете легко интегрироваться с Express.js.

37. Чем отличаются process.nextTick () от setImmediate ()?

В Node.js process.nextTick () и setImmediate () являются функциями модуля Timers, которые помогают выполнять код по истечении заранее определенного периода времени. Но эти функции различаются по исполнению. Функция process.nextTick ожидает выполнения действия до следующего прохода в цикле событий или только после завершения цикла событий, она вызовет функцию обратного вызова. С другой стороны, setImmediate () используется для выполнения метода обратного вызова в следующем цикле цикла событий, который в конечном итоге возвращает его в цикл событий для выполнения операций ввода-вывода.

38. Объясните использование класса буфера в Node.js?

Класс буфера в Node.js используется для хранения необработанных данных аналогично массиву целых чисел. Но это соответствует выделению необработанной памяти, которая находится за пределами кучи V8. Это глобальный класс, к которому легко получить доступ в приложении без импорта буферного модуля. Класс Buffer используется потому, что чистый JavaScript несовместим с двоичными данными. Таким образом, при работе с потоками TCP или файловой системой необходимо обрабатывать потоки октетов.

39. Как Node.js обрабатывает дочерние потоки?

В общем, Node.js - это однопоточный процесс, который не предоставляет дочерние потоки или методы управления потоками. Но вы все равно можете использовать дочерние потоки с помощью spawn () для некоторых конкретных задач асинхронного ввода-вывода, которые выполняются в фоновом режиме и обычно не выполняют какой-либо JS-код или препятствуют выполнению основного цикла событий в приложении. Если вы по-прежнему хотите использовать концепцию потоковой передачи в своем приложении, вам необходимо явно включить модуль с именем ChildProcess.

40. Объясните поток в Node.js вместе с его различными типами.

Потоки в Node.js - это набор данных, похожих на массивы и строки. Это объекты, с помощью которых вы можете непрерывно читать данные из источника или записывать данные в место назначения. Он может быть недоступен сразу и не должен помещаться в памяти. Эти потоки особенно полезны для чтения и обработки большого набора данных. В Node.js есть четыре основных типа потоков:

  1. Читаемый: используется для чтения больших блоков данных из источника.
  2. Возможность записи. Используется для записи больших блоков данных в место назначения.
  3. Дуплекс: используется для обеих функций; прочти и напиши.
  4. Преобразование. Это дуплексный поток, который используется для изменения данных.

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

41. Какая польза от NODE_ENV?

Если проект находится на стадии производства, Node.js продвигает соглашение об использовании переменной NODE_ENV для его пометки. Это помогает принимать более взвешенные решения при разработке проектов. Кроме того, когда вы устанавливаете NODE_ENV в рабочий режим, ваше приложение имеет тенденцию работать в 3 раза быстрее.

42. Чем отличается readFile от createReadStream в Node.js?

Node.js предоставляет два способа чтения и выполнения файлов, использующих readFile и CreateStream. readFile () - это полностью буферизованный процесс, который возвращает ответ только тогда, когда весь файл помещается в буфер и читается. Это процесс с интенсивным использованием памяти, и в случае больших файлов обработка может быть очень медленной. В то время как createReadStream - это частично буферизованный объект, который обрабатывает весь процесс как серию событий. Весь файл разбивается на части, которые затем обрабатываются и отправляются обратно в качестве ответа один за другим. После этого они окончательно удаляются из буфера. В отличие от readFile, createReadStream действительно эффективен для обработки больших файлов.

43. Перечислите различные временные особенности Node.js.

Node.js предоставляет модуль таймеров, который содержит различные функции для выполнения кода по истечении заданного периода времени. Ниже я перечислил различные функции, предоставляемые этим модулем:

  • setTimeout / clearTimeout - используется для планирования выполнения кода через определенное количество миллисекунд.
  • setInterval / clearInterval - используется для многократного выполнения блока кода.
  • setImmediate / clearImmediate - используется для выполнения кода в конце текущего цикла цикла событий.
  • process.nextTick - используется для планирования функции обратного вызова, которую необходимо вызвать на следующей итерации цикла событий.

44. Объясните концепцию Punycode в Node.js?

В Node.js Punycode - это синтаксис кодирования, который используется для преобразования строки символов Unicode (UTF-8) в базовую строку символов ASCII. Это важно, поскольку имена хостов могут понимать только символы ASCII. Таким образом, Node.js версии 0.6.2 и более поздних версий был связан с пакетом Node по умолчанию. Если вы хотите использовать его с любыми предыдущими версиями, вы можете легко сделать это, используя следующий код.

Синтаксис:

punycode = require('punycode');

45. Чем отличаются Node.js от Ajax?

Основное различие между Node.js и Ajax в том, что Node.js - это серверный JavaScript, тогда как Ajax - это клиентская технология. Проще говоря, Ajax в основном используется для обновления или изменения содержимого веб-страницы без его обновления. С другой стороны, Node.js требуется для разработки серверного программного обеспечения, которое обычно выполняется серверами, а не веб-браузерами.

46. ​​Предоставляет ли Node.js отладчик?

Node.js предоставляет простой протокол на основе TCP и встроенный клиент отладки. Чтобы отладить файл JavaScript, вы можете использовать приведенный ниже аргумент отладки, за которым следует имя файла js, который вы хотите отладить.

Синтаксис:

node debug [script.js | -e "script" | <host> : <port> ]

47. Опишите коды выхода Node.js.

В Node.js коды выхода - это набор определенных кодов, которые используются для завершения определенного процесса. Эти процессы также могут включать в себя глобальный объект. Ниже приведены некоторые коды выхода, используемые в Node.js:

  • Неперехваченное фатальное исключение
  • Неиспользованный
  • Фатальная ошибка
  • Внутренний обработчик исключений Ошибка выполнения
  • Внутренняя ошибка оценки JavaScript

48. Что вы понимаете под эмиттером событий в Node.js?

EventEmitter - это класс Node.js, который включает все объекты, способные генерировать события. Эти объекты содержат функцию eventEmitter.on (), с помощью которой несколько функций могут быть присоединены к именованным событиям, генерируемым объектом. Каждый раз, когда объект EventEmitter генерирует событие, все функции, прикрепленные к этому конкретному событию, вызываются синхронно. Код ниже показывает, как использовать EventEmitter в вашем приложении:

const EventEmitter = require('events');
class MyEmitter extends EventEmitter { }
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log('an event occurred!');
});
myEmitter.emit('event');

49. Поддерживается ли в Node.js криптография?

Да, Node.js поддерживает криптографию через модуль Crypto. Этот модуль предоставляет различные криптографические функции, такие как функции шифрования, дешифрования, подписи и проверки, набор оболочек для открытого SSL-хэша HMAC и т. Д. Например:

Синтаксис:

const crypto = require'crypto');
const secret = 'akerude';
const hash = crypto.createHmac('swaEdu', secret).update('Welcome to Edureka').digest('hex');
console.log(hash);

50. Объясните причину, по которой Express «приложение» и «сервер» должны храниться отдельно.

Express ‘app’ и ‘server’ должны быть отделены друг от друга, поскольку при этом вы отделяете декларацию API от конфигурации, связанной с сетью, что дает следующие преимущества:

  • Это позволяет тестировать API в процессе без необходимости выполнять сетевые вызовы.
  • Более быстрое выполнение тестирования
  • Получение более широких показателей охвата кода
  • Позволяет развертывать один и тот же API в гибких и разных сетевых условиях
  • Лучшее разделение проблем и более чистый код

Объявление API должно находиться в app.js:

var app = express();
app.use(bodyParser.json());
app.use("/api/events", events.API);
app.use("/api/forms", forms);

Объявление сети сервера должно находиться в / bin / www:

var app = require('../app');
var http = require('http');
//Get port from environment and store in Express
var port = normalizePort(process.env.PORT || '8000');
app.set('port', port);
//Create HTTP server.
var server = http.createServer(app);

На этом мы подошли к концу данной статьи. Я надеюсь, что вы нашли его информативным и помогли пополнить ваши знания. Если вы хотите ознакомиться с другими статьями о самых популярных технологиях на рынке, таких как искусственный интеллект, Python, этический взлом, посетите официальный сайт Edureka.

Обязательно обратите внимание на другие статьи в этой серии, которые объяснят различные другие аспекты Node.js

1. Учебное пособие по NodeJS

2. Создайте приложение CRUD с использованием Node.js и MySQL

3. Создание приложения CRUD с использованием Node.JS и MongoDB

4. 3 лучших способа делать запросы на Node.js

5. Как докеризовать приложение Node.js?

6. Создайте REST API с помощью Node.js

7. Создайте Node.js с нуля

8. Основы Express.js

Первоначально опубликовано на https://www.edureka.co.