Q1. Что такое Node.js? Для чего это используется?

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

Node.js можно использовать для создания различных типов приложений, таких как веб-приложение, чат-приложение в реальном времени, сервер REST API и т. Д. Однако он в основном используется для создания сетевых программ, таких как веб-серверы, похожие на PHP, Java или ASP. .СЕТЬ. Node.js был разработан Райаном Далем в 2009 году.

Q2. Что такое событийное программирование?

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

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

Q3. Что такое цикл событий в работе Node.js? И как это работает?

Цикл событий обрабатывает все асинхронные обратные вызовы. Node.js (или JavaScript) - это однопоточный язык, управляемый событиями. Это означает, что мы можем прикреплять слушателей к событиям, и когда указанное событие срабатывает, слушатель выполняет предоставленный нами обратный вызов.

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

Таким образом, все функции обратного вызова помещаются в очередь в цикле и будут выполняться одна за другой после получения ответа.

Q4. Что такое REPL в Node.js?

REPL означает цикл чтения-оценки-печати. Это виртуальная среда, входящая в состав Node.js. Мы можем быстро протестировать наш код JavaScript в среде REPL Node.js.

Чтобы запустить REPL в Node.js, просто откройте командную строку и введите node. Это изменит подсказку на > в Windows и MAC.

Теперь мы можем легко набирать и запускать наш JavaScript. Например, если мы введем 10 + 20, в следующей строке будет напечатано 30.

Q5. Какова цель module.exports в Node.js?

Модуль инкапсулирует связанный код в одну единицу кода. Это можно интерпретировать как перемещение всех связанных функций в файл. Представьте, что мы создали файл с именем greetings.js, который содержит следующие две функции:

В приведенном выше коде module.exports предоставляет две функции внешнему миру. Мы можем импортировать их в другой файл следующим образом:

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

Асинхронный буквально означает несинхронный. Мы выполняем асинхронные HTTP-запросы, что означает, что мы не ждем ответа сервера. Мы продолжаем с другого блока и отвечаем на ответ сервера, когда мы его получили.

Термин «неблокирующий» широко используется для ввода-вывода. Например, неблокирующие вызовы чтения / записи возвращаются со всем, что они могут сделать, и ожидают, что вызывающий абонент выполнит вызов снова. Чтение будет ждать, пока не соберет некоторые данные, и переведет вызывающий поток в спящий режим.

Q7. Что такое трассировка в Node.js?

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

Набор категорий, для которых записываются трассировки, можно указать с помощью флага --trace-event-categories, за которым следует список имен категорий, разделенных запятыми. По умолчанию категории node и v8 включены.

Запуск Node.js с включенной трассировкой приведет к созданию файлов журнала, которые можно открыть на вкладке chrome://tracing Chrome.

Q8. Как вы будете отлаживать приложение в Node.js?

Node.js включает утилиту отладки под названием debugger. Чтобы включить его, запустите Node.js с аргументом debug, за которым следует путь к сценарию для отладки.

Вставка оператора debugger; в исходный код скрипта активирует точку останова в этой позиции в коде:

Q9. Разница между setImmediate() и setTimeout()

setImmediate() и setTimeout() похожи, но ведут себя по-разному в зависимости от того, когда они вызываются.

  • setImmediate() предназначен для выполнения сценария после завершения текущей фазы опроса (цикла событий).
  • setTimeout() планирует запуск сценария по истечении минимального порогового значения в мс.

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

Q10. Что такое process.nextTick()

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

Таким образом, каждый раз, когда вы вызываете process.nextTick () в данной фазе, все обратные вызовы, переданные в process.nextTick (), будут разрешены до продолжения цикла событий.

Q11. Что такое package.json? Для чего это используется?

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

Вот некоторые из полей: name, name, description, author и dependencies.

Когда кто-то устанавливает наш проект через npm, все перечисленные зависимости также будут установлены. Кроме того, если кто-то запустит npm install в корневом каталоге нашего проекта, он установит все зависимости в ./node_modules каталог.

В12. Что такое libuv?

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

Когда проект node.js начался в 2009 году как среда JavaScript, отделенная от браузера, он использовал Google V8 и libev Марка Леманна, node.js объединил модель ввода-вывода - с учетом событий - с языком, который хорошо подходил для стиль программирования; из-за того, как он был сформирован браузерами. По мере роста популярности node.js было важно заставить его работать в Windows, но libev работала только в Unix. libuv был абстракцией от libev или IOCP в зависимости от платформы, предоставляя пользователям API на основе libev. В node-v0.9.0 версия libuv libev была удалена.

Некоторые особенности libuv:

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

Q13. Какие модули Node.js самые популярные?

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

  • выражать
  • асинхронный
  • просматривать
  • socket.io
  • беседка
  • глоток
  • хрюкать

Q14. Что такое EventEmitter в Node.js?

Все объекты, излучающие события, являются экземплярами класса EventEmitter. Эти объекты предоставляют eventEmitter.on() функцию, которая позволяет одной или нескольким функциям быть прикрепленными к именованным событиям, испускаемым объектом.

Когда объект EventEmitter генерирует событие, все функции, связанные с этим конкретным событием, вызываются синхронно.

Q15. Что такое Streams в Node.js?

Потоки - это каналы, которые позволяют легко считывать данные из источника и передавать их в пункт назначения. Проще говоря, поток - это не что иное, как EventEmitter и реализует некоторые специальные методы. В зависимости от реализованных методов поток становится доступным для чтения, записи или дуплексного режима (как для чтения, так и для записи).

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

Типы потоков: читаемые, записываемые, двусторонние и преобразованные.

Q16. В чем разница между readFile и createReadStream в Node.js?

readFile - для асинхронного чтения всего содержимого файла. Он полностью прочитает файл в память перед тем, как сделать его доступным для пользователя. readFileSync - синхронная версия readFile.

createReadStream - он будет читать файл по частям размером по умолчанию 64 КБ, который указан заранее.

Q17. Что такое crypto в Node.js? Как вы шифруете защищенную информацию в Node.js?

Модуль crypto в Node.js предоставляет криптографические функции, которые включают набор оболочек для функций хэша OpenSSL, HMAC, шифрования, дешифрования, подписи и проверки.

Q18. Какая польза от таймеров в Node.js?

Модуль Timers в Node.js содержит функции, которые выполняют код по истечении заданного периода времени. Таймеры не нужно импортировать через require(), поскольку все методы доступны во всем мире для эмуляции JavaScript API браузера.

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

Node.js Timer предоставляет setTimeout(), setImmediate() и setInterval.

Q19. Какая польза от модуля DNS в Node.js?

dns модуль, обеспечивающий разрешение имен базовой системы и средства поиска DNS. Модуль DNS состоит из асинхронной сетевой оболочки.

Наиболее часто используемые функции в модуле DNS:

  • dns.lookup(adress, options, callback) - Метод поиска DNS принимает любой адрес веб-сайта в качестве первого параметра и возвращает соответствующую первую запись IPV4 или IPV6. Параметр options может быть целым числом или объектом. Если параметры не указаны, допустимы входы IPV4 и IPV6. Третий параметр - это функции обратного вызова.
  • dns.lookupservice(address, port, callback) - Эта функция преобразует любой физический адрес, например «www.knowledgehills.com», в массив типов записей. Типы записей указываются вторым параметром «rrbyte». Наконец, третий метод - это функция обратного вызова.
  • dns.getServers() - Эта функция возвращает массив строк IP-адресов, отформатированных в соответствии с rfc5952, которые в настоящее время настроены для разрешения DNS. Строка будет включать раздел порта, если используется настраиваемый порт.
  • dns.setServers() - эта функция устанавливает IP-адрес и порт серверов, которые будут использоваться при выполнении разрешения DNS. Метод dns.setServers() нельзя вызывать во время выполнения запроса DNS.

Q20. Что такое функция обратного вызова в Node.js?

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

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

Q21. Какие механизмы безопасности доступны в Node.js?

Мы можем защитить наше приложение Node.js следующими способами:

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

Обработка ошибок. Обычно сообщение об ошибке содержит объяснение того, что на самом деле пошло не так, чтобы пользователь мог понять причину. В то же время, когда ошибка связана с синтаксисом кода приложения, можно настроить отображение всего содержимого журнала во внешнем интерфейсе. Для опытного хакера содержимое журнала может раскрыть много конфиденциальной внутренней информации о структуре кода приложения и инструментах, используемых в программном обеспечении.

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

Инструменты безопасности и передовой опыт Node.js. Мы можем использовать такие инструменты, как шлем (защищает наше приложение, устанавливая заголовки HTTP), csurf (проверяет токены во входящих запросах и отклоняет недопустимые), ограничитель скорости узла (контролирует частоту повторных запросов. Эта функция может защитить вас от атак грубой силы) и cors (включает перекрестные -origin совместное использование ресурсов).

Q22. Что такое паспорт в Node.js?

Passport.js - это простое и ненавязчивое промежуточное программное обеспечение аутентификации Node.js для Node.js. Passport.js можно добавить в любое веб-приложение на основе Express.js.

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

По умолчанию, если аутентификация не удалась, Passport ответит статусом 401 Unauthorized, и никакие дополнительные обработчики маршрута не будут вызваны. Если аутентификация прошла успешно, будет вызван обработчик next, и свойство req.user будет установлено для аутентифицированного пользователя.

Чтобы получить больше вопросов и ответов на собеседование по Node JS, установите наше приложение для Android:



или посетите наш блог:

Http://blog.vigowebs.com/post/2017/nodejs-interview-questions/