2022 年你需要知道的 41 个 Node.Js 面试问题和答案

已发表: 2021-01-08

参加Node.js 面试并想知道您将经历哪些问题和讨论? 在参加 Node.js 面试之前,最好先了解会被问到的Node.js 面试问题的类型,以便在心理上为这些问题准备答案。

Node.js 是一个使用 JavaScript 的简单但非常流行的服务器端脚本工具。 您可以使用 Node.js 创建像命令行程序这样简单的东西,甚至可以创建复杂的企业级 Web 应用程序。 您会注意到很多公司都需要经过认证的 Node.js 开发人员,以便处理整个服务器端。 您可以在职业生涯的各个阶段找到对 Node.js 的需求。

目录

2020 年 Node.js 面试问答

让我们将文章分为三个部分:

  1. 基础级别 Node.js 面试问题和答案
  2. 中级 Node.js 面试问答
  3. 专家级 Node.js 面试问题和答案

1. 基础级 Node.js 面试问答

Q.1) Node.js 和 JavaScript 有什么区别?

Node.js 是 JavaScript 的解释器和环境,主要用于访问或执行任何操作系统的任何非阻塞操作。 这里的运行引擎是谷歌浏览器。

而 JavaScript 是一种编程语言,可用于 Web 应用程序的任何客户端活动。 这里的运行引擎是 Firefox、Safari、Google Chrome 等。

Q.2) 什么是 Node.js?

Node.js 是基于Chrome 的 JavaScript 引擎开发的轻量级但功能强大的框架 它将 JavaScript 直接编译为本机机器代码。 它用于构建服务器端 Web 应用程序并扩展 JavaScript API 以提供通常的服务器端功能。 人们将此框架用于大型应用程序构建,例如单页应用程序、视频流站点和其他基于 Web 的应用程序。

Q.3) 列出使用 Node.js 的一些优势

  • 它速度很快,因为它是在 Chrome JavaScript 引擎上创建的,这使得它的库在执行代码时更快。
  • 它是异步的,因为它从不等待 API 返回数据。
  • 它是可扩展的,因为它的事件机制使服务器能够以非阻塞方式响应。
  • 它是一个开源的,提供了一个令人难以置信的开源社区,它创建了一些很棒的模块,为 Node.js 应用程序增加了更多的功能。
  • Node.js 从不缓冲数据,因为输出是分块的。

Q.4) 列出 Angular 和 Node.js 之间的区别?

Angular 是用于 Web 应用程序的开源软件,而 Node.js基本上是应用程序的跨平台运行时环境。

Angular 是用 TypeScript 编写的,而 Node.js 是用 C、C++ 和 JavaScript 等语言编写的。

Angular 主要用于创建单页客户端 Web 应用程序,而 Node.js 主要用于创建可扩展且快速的服务器端网络应用程序。

Angular 是一个 Web 应用程序框架,Node.js 有几个不同的框架,如 Partial.js、Sails.js 和 Express.js 等。

Angular 最适合用于创建高度活跃和交互式的 Web 应用程序,而 Node.js 最适合用于开发较小的项目

Angular有助于将应用程序拆分为 MVC 组件,而 Node.js 有助于创建数据库查询

Angular 很好地用于创建实时应用程序,而 Node.js 很好地用于需要更快和更具可扩展性的情况

Q.5) 为什么 Node.js 是单线程的?

它适用于单线程模型,而不是典型的基于线程的实现,以帮助异步处理。 使用异步处理,应用程序可以更好地执行并且在 Web 负载下更具可扩展性。

Q.6) Node.js 是如何工作的?

Node.js 是一个在 v8 环境中运行的虚拟机,使用 JavaScript 作为其脚本语言。 它适用于单线程模型和非阻塞 I/O,由于它可以处理大量同时请求,因此提供了很高的速率。 因为它使用 HTTP 模块,所以它可以在任何独立的 Web 服务器上运行。

Q.7) 我们可以在哪里使用 Node.js?

Node.js 可用于创建:

  • 网络应用
  • 实时网络应用
  • 通用应用
  • 分布式系统

Q.8) Node.js 有多少种 API 函数?

您可以在 Node.js 中找到两种类型的 API 函数,即同步的阻塞函数和异步的非阻塞函数。

Q.9) 异步和非阻塞函数有什么区别?

异步(非同步)函数是我们可以用来发出不等待服务器响应的异步 HTTP 请求的函数。 这些函数继续返回它已经收到服务器响应的请求。

非阻塞函数用于 I/O 操作。 他们快速响应任何可用数据,并根据请求继续运行。 如果没有返回答案,API 会迅速返回错误。

Q.10) 解释事件驱动编程

它是一种主要使用事件来触发多个功能的编程方法。 事件可以是按键、鼠标点击等。当事件被触发时,将执行与元素预先注册的回调函数。 该方法主要使用发布-订阅模式。 正是由于这种方法,Node.js 比其他技术更快。

Q.11) 在 Node.js 的上下文中,解释 REPL

Node.js 中的 REPL 表示读取、评估、打印和循环。 它描述了计算机设置,例如 Unix/Linux shell 或窗口控制台,或者可以注册任何命令的位置,然后系统可以用输出进行回复。 Node.js 默认包含一个 REPL 环境。 REPL 可以执行以下任务:

  • 读取:它读取用户的输入,将其转换为 JavaScript 数据结构,然后将其存储在内存中。
  • Eval:它接收和评估数据结构。
  • 打印:打印最终结果。
  • 循环:循环给定命令,直到按两次CTRL+C

Q.12) 列出应该使用事件循环异步完成的作业?

  • 输入输出操作
  • 繁重的计算
  • 任何需要阻塞的东西

Q13) 为什么 Google 为 Node.js 使用 V8 引擎?

V8 运行时引擎将 JavaScript 代码转换为本机机器代码,从而实现快速运行的应用程序。 这个 Chrome 引擎显着加快了执行和响应过程。

Q14) 使用 Node.js 有什么好处?

正如我们之前讨论的,Node.js 建立在 V8 引擎之上,这使得它的库可以快速执行代码。 基于 Node.js 的服务器不等待 API 返回数据,这意味着它是异步的。 此外,Node.js 具有高度可扩展性,因为它的事件机制以非阻塞方式响应。

Node.js 应用程序中也没有缓冲。 多年来,已经出现了一个相当大的开源社区,贡献了优秀的模块并为 Node.js 应用程序提供了额外的功能。

2. 中级 Node.js 面试问答

Q.15) 什么是测试金字塔?

解释为成功构建项目需要编写多少单元测试、集成测试和端到端测试的比率的图表称为测试金字塔。

Q16) Express.js 包的作用是什么?

Express.js 是一个帮助管理服务器端应用程序中的服务器和路由之间的数据流的框架。 这个灵活的框架建立在 Node.js 之上,特别是在名为 connect 的中间件模块上。 反过来,connect 模块使用 HTTP 模块与 Node.js 通信。 因此,如果您使用任何基于 connect 的中间件模块,与 Express.js 的集成变得容易。

Q17)断言模块在 Node.js 中的作用是什么?

Assert 允许您编写测试。 在 Node.js 中,它是一个内部模块,提供一组用于检查不变量的断言测试。 您可以将 require('assert') 代码用于其他应用程序。

Q.18) Node.js 中的错误优先回调是什么?

Node.js 中的错误优先回调用于传递错误和数据。 传递这些函数的第一个参数必须是一个错误对象。 其他参数表示的是附加数据。 如果没有错误或问题,您可以继续使用后续参数。

var myPost = new Post({title: 'Myexample'});

myPost.save(函数(错误,myInstance){

如果(错误)

{

//处理错误并返回

}

//继续使用`myInstance`

});

Q19) package.json 文件的用途是什么?

Node.js 中的 package.json 文件包含项目的元数据。 它是应用程序的核心,您可以在其中定义包的属性。 文件的元数据可以进一步分为以下几类:

  • 项目名称、许可证、作者、当前模块版本、项目描述等属性。
  • 您还可以通过将项目直接写入 package.json 文件来包含有关项目的必要信息。

Q.20) module.exports 有什么用?

要将所有相似的代码混合成一个代码单元,可以通过将所有相关函数移动到特定文件来执行,我们需要在 Node.js 中使用 module.exports。 例如,您有一个名为 greet.js 的文件,其中包含两个函数,如下所示:

模块.exports = {

greetInHindi:函数(){

返回“NAMASTE”;

},

greetInEnglish: 函数(){

返回“你好”;

}};

module.exports 提供了两个函数,可以使用以下代码在单独的文件中导入:

var myGreets = 要求(“./greet.js”);

myGreets.greetInHindi() //NAMASTE

myGreets.greetInEnglish() //你好

Q.21) Node.js 中的反应器模式是什么?

Node.js 中的反应器模式是一种非阻塞 I/O 操作的理论。 该模式提供了一个与每个 I/O 操作连接的处理程序,并且一旦创建了 I/O 请求,它就会被提交给解复用器 这个解复用器是一个通知接口,能够在非阻塞 I/O 模式下处理并发。

它还有助于以事件的形式处理每个请求,然后将每个事件排成一行。 因此,它导致了事件队列的生成。 同时,我们有我们的事件循环,它重复出现在事件队列中的事件。

Q.22) Node.js 的 LTS 版本是什么?

LTS 意味着 Node.js 的长期支持版本,它通过安全更新和性能增强来修复所有重要的错误。 所有这些版本的有效期至少为 18 个月,主要关注安全和稳定性问题。 对 LTS 版本所做的更改仅限于修复错误、npm、安全升级、文档和性能加速。

Q.23) 你如何理解回调地狱?

回调地狱也被称为末日金字塔。 这是由于不可读的极端嵌套回调而发生的模式。 它通常包含多个嵌套的回调函数,使代码难以阅读或调试。 这主要是由于异步逻辑实现不当造成的。

async_A(函数(){

async_B(函数(){

async_C(函数(){

async_D(函数(){

……

});

});

});

});

Q24)列出 async.queue 的输入参数。

在 Node.js 中,async.queue 将两个参数作为输入。 这些包括任务功能和并发值。

Q.25) 什么是 libuv?

它是一个 Node.js 多平台支持库,主要用于异步 I/O。 它最初是为 Node.js 开发的,但现在它也用于我们的系统,如 pyuv、Luvit、Julia 等。Libuv 基本上是基于平台的 libev/IOCP 的抽象,为用户提供基于 libev 的 API。 libuv 的一些关键特性是:

  • 文件系统事件
  • 支持全功能事件循环
  • 异步 TCP 和 UDP 套接字
  • 异步文件和文件系统操作
  • 子进程

Q.26) Node.js 中的流

Streams 使您能够在 Node.js 中读取和处理大型数据集。 这些对象是类似于字符串和数组的数据集合。 它们允许您连续地从源读取数据或写入目标。 在 Node.js 中,存在四种基本类型的流——可读、可写、双工和转换。

Q.27) 你如何在 Node.js 中读取和执行文件?

在 Node.js 中,有两种读取和执行文件的方法——readFile 和 createReadStream。 两者的主要区别在于 readFile 是完全缓冲的,而 createReadStream 是部分缓冲的。 readFile() 仅在将整个文件推入缓冲区时才返回响应,从而减慢处理时间。

相比之下,createReadStream 将流程视为事件系列,将文件拆分为块并一一发回响应。 因此,它提供了一种处理大型数据文件的有效方法。

Q.28) Node.js 中有哪些安全实现?

身份验证和错误处理是 Node.js 中的两个主要安全实现。

Q.29) Node.js 中如何处理子线程?

你会认为 Node.js 是单线程的,你不能使用子线程。 虽然进程一般不会暴露子线程,但您仍然可以使用 spawn() 在后台执行某些异步 I/O 任务。 这样,应用程序的主事件循环就不会受到阻碍。 您还可以包含 ChildProcess 模块以显式使用此线程概念。

3.专家级Node.js面试问答

Q.30) NODE_ENV 有什么用?

如果您的项目处于生产级别,Node.js 提倡使用 NODE_ENV 变量来标记它的约定。 这有助于在创建项目时做出更好的决策。 此外,当您将 NODE_ENV 设置为生产环境时,您的应用程序的运行速度确实快了大约三倍。

Q.31) 在 Node.js 中,createReadStream 和 readFile 有什么区别

Node.js 提供了两种使用 readFile 和 CreateStream 读取和操作文件的方法。 readFile() 是一个完全缓冲的进程,只有当整个文件被推入缓冲区并被读取时才会响应。 这是一个内存密集型过程,对于较大的文件会变得非常慢。

而在 createReadStream 的情况下,它是部分缓冲的,它将整个过程作为一个事件系列。 该文件被分成大块,然后被处理并作为响应一次发送回。 一旦完成,它们就会从缓冲区中删除,从而更有效地处理更大的文件。

Q.32)解释 Node.js 中缓冲区类的用法

Node.js 中的 Buffer 类将原始数据存储为整数数组。 它对应于 V8 领域之外的内存分配,这意味着它是一个全局类。 无需在 Node.js 中导入缓冲区模块即可访问该类。 之所以需要缓冲区类,是因为 JavaScript 与二进制数据不兼容。

Q.33)区分 spawn() 和 fork()

您使用 Node.js 中的 spawn() 来启动一个新进程。 使用提供的命令集,此过程仅激活处理器上节点模块的一个副本。 由于没有创建新的 V8 实例,因此当您的子进程返回大量数据时,spawn() 变得特别有用。

相反,fork() 方法执行 V8 引擎的新实例。 这意味着多个工作人员在一个基于节点的代码上运行各种任务。

Q.34)前后端开发

前端开发基于异步请求和 AJAX,而后端开发基于服务器架构。 前者使用标记和网络语言(如 HTML、JavaScript、CSS 等)用于 SEO 目的。 而后者利用编程语言 Python、Ruby 和其他语言进行备份。 与后端开发相比,前端开发更易于访问。

Q.35)列出使用控制流功能的步骤。

Node.js 中异步函数调用之间执行的代码是控制流函数。 该功能的工作可以通过以下步骤进行解释:

  • 一、控制执行顺序
  • 然后,收集所需的数据
  • 接下来,限制并发
  • 最后,调用程序的下一步

Q.36) 命名 Node.js 的计时特性。

Node.js 提供了一个 Timers 模块,它包含在给定时间段后运行代码的各种函数。 该模块提供的各种功能:

setTimeout/clearTimeout – 用于在几毫秒后编程代码执行

setInterval/clearInterval - 用于多次执行一段代码

setImmediate/clearImmediate – 用于在当前事件循环周期结束时运行代码

process.nextTick - 用于编写需要在事件循环的下一次迭代中触发的回调函数

Q.37) 告诉我们关于 Node.js 中 Punycode 的理论?

Punycode 是一种编码语法。 它用于将 Unicode (UTF-8) 字符串转换为基本的 ASCII 字符串。 这是必需的,因为主机名只能识别 ASCII 字符。 0.6.2 之后的所有版本都默认使用它。 但是,如果您希望将其用于旧版本,您可以使用以下语法:

punycode = 要求('punycode');

Q.38) 区分 Node.js 和 Ajax?

Node.js 是一种服务器端 JavaScript,而 Ajax 是一种客户端技术。 Ajax 主要是更新或编辑网页,甚至不需要刷新页面。 然而,需要 Node.js 来开发通常由服务器而不是 Web 浏览器执行的服务器软件。

Q.39) Node.js 是否提供任何调试器?

Node.js 确实提供了一个简单的基于 TCP 的协议以及一个内置的调试客户端。 如果你想调试你的 JavaScript 文件,你可以使用参数 node debug [script.js | -e “脚本” | <host>: <port> ],后跟要调试的js文件名。

Q.40)什么是全局对象?

您可以在 Node.js 中使用全局对象,而无需显式包含它们。 这些可以是应用程序模块范围内可用的模块函数、字符串等。 有时,您可能会在全局范围内找到它们。

Q.41) 解释 Node.js 的退出代码。

退出代码是一组用于完成特定过程的不同代码。 它也可以包括全局对象。 以下是 Node.js 中使用的退出代码的一些示例:

  • 没用过
  • 未捕获的致命异常
  • 内部异常处理程序运行时失败
  • 致命错误
  • 内部 JavaScript 评估失败

从世界顶级大学在线学习软件工程课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

结论

在我们收集的一些最常见的Node.js 面试问题和答案即将结束时,我们希望您发现它们很有价值,并且能够通过正确回答来打动您的面试官。

如果您有兴趣了解有关大数据的更多信息,请查看 upGrad 和 IIITB 的全栈软件开发执行 PG 计划,该计划专为工作专业人士设计,提供 500 多个小时的严格培训、9 个以上的项目和作业,IIIT-B校友身份、实用的实践顶点项目和顶级公司的工作协助。

什么是 Node.js?

Nodejs 是一个服务器端的 JavaScript 环境。 它是事件驱动的、非阻塞的和高度可扩展的。 Nodejs 也是开源的,因此是免费的。 Node.js 用于开发可扩展的网络程序。 Node.js 独立于平台,适用于各种操作系统 (OS),可以部署在 Linux、Solaris、Windows 和 Mac 上。 Node.js 被 LinkedIn、PayPal、IBM、Microsoft 等公司使用。Node.js 是一个 JavaScript 运行时,用于创建快速、可扩展的网络应用程序。 此运行时旨在构建可以处理数千个同时连接的高度并发应用程序。

什么是打字稿?

Typescript 是由 Microsoft 创建的 JavaScript 语言的超集。 Typescript 为 JavaScript 带来了一些最先进的编程语言特性。 开发人员可以将他们现有的 java 服务器端编程技能实施到 JavaScript。 Typescript 在开发大型 Web 应用程序时特别有用。 TypeScript 是由 Microsoft 开发和维护的一种免费的开源编程语言。 它是 JavaScript 的严格超集,并为该语言添加了可选的静态类型和基于类的面向对象编程。 它是一种用于应用程序级 JavaScript 开发的语言。

什么是 MongoDB?