ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

大厂NODE.js高阶面试题和答案,重点难点攻克!

2022-03-30 17:34:38  阅读:108  来源: 互联网

标签:NODE Node 面试题 node 中间件 js 线程 集群


 

 

不论是前端开发还是后端开发,Node.js 这些内容都早已经是我们的必备技能,消化理解了整个人就变得通透了,几乎我们所有的程序开发人员日常开发中都会遇到这些难题了 !不过也不担心,是问题就总能解决的哈

目录

1、什么是线程池,Node.js 中哪个库处理它 ?
2、如何通过集群提高 Node.js 的性能 ?
3、worker 工作线程与集群有何不同 ?
4、Node.js 中的事件发射器是什么 ?
5、如何测量异步操作的持续时间 ?
6、如何衡量异步操作的性能 ?
7、对于 Node.js,为什么 Google 使用 V8 引擎 ?
8、为什么要把 Express 应用和服务器分开 ?
9、 解释 Node.js 中的Reactor反应器模式是什么 ?
10、什么是中间件 ?
11、什么是 node.js 缓冲区 ?
12、什么是node.js流 ?
13、我们如何在node.js中使用async await ?
14、如何在 Node.js 中创建一个返回 Hello World 的简单服务器?

 

1、什么是线程池,Node.js 中哪个库处理它 ?

 线程池由 libuv 库处理。libuv 是一个多平台 C 库,它支持基于异步 I/O 的操作,例如文件系统、网络和并发。

 

 

2、如何通过集群提高 Node.js 的性能 ?

Node.js 应用程序在单个处理器上运行,这意味着默认情况下它们不会利用多核系统。

集群模式用于启动多个 node.js 进程,从而拥有多个事件循环实例。

当我们开始在后台的 nodejs 应用程序中使用集群时,会创建多个 node.js 进程,但还有一个称为集群管理器的父进程,它负责监控我们应用程序各个实例的健康状况。

 

 

 3、工作线程与集群有何不同 ?

Cluster簇:

  • 每个 CPU 上都有一个进程与 IPC 进行通信。

  • 如果我们想让多个服务器通过单个端口接受 HTTP 请求,集群会很有帮助。

  • 这些进程在每个 CPU 中产生,因此将具有单独的内存和节点实例,这将进一步导致内存问题。

 工作线程:

  • 总共只有一个进程有多个线程。

  • 每个线程都有一个 Node 实例(一个事件循环,一个 JS 引擎),大多数 API 都可以访问。

  • 与其他线程共享内存(例如 SharedArrayBuffer)

  • 这可用于处理数据或访问文件系统等 CPU 密集型任务,因为 NodeJS 是单线程的,同步任务可以更有效地利用工作线程。

4、Node.js 中的事件发射器是什么 ?

EventEmitter是一个 Node.js 类,它包含所有基本上能够发出事件的对象。这可以通过使用 eventEmitter.on()函数附加由对象发出的命名事件来完成。因此,每当这个对象抛出一个甚至附加的函数时,都会同步调用。

 

 

 5、如何测量异步操作的持续时间 ?

 Performance API 为我们提供了找出必要性能指标的工具一个简单的例子是使用 async_hooks 和 perf_hooks

6、如何衡量异步操作的性能 ?

Performance API 为我们提供了找出必要性能指标的工具。

一个简单的例子

 

 

7、对于 Node.js,为什么 Google 使用 V8 引擎 ?

那么,还有其他选择吗?

是的,当然,我们有来自 Firefox 的Spidermonkey,来自 Edge 的 Chakra,但 Google 的 v8 是发展最快的(因为它是开源的,所以有一个巨大的社区帮助开发功能和修复错误)和最快的(因为它是用 c++ 编写的)

作为一个 JavaScript 和 WebAssembly 引擎。它可以移植到几乎所有已知的机器上。

 

8、为什么要把 Express 应用和服务器分开 ?

服务器负责初始化路由、中间件和其他应用程序逻辑,而应用程序具有所有业务逻辑,这些业务逻辑将由服务器启动的路由提供服务。

这确保了业务逻辑被封装并与应用程序逻辑解耦,从而使项目更具可读性和可维护性。

 

9、 解释 Node.js 中的Reactor反应器模式是什么 ?

Reactor 模式又是一种用于非阻塞 I/O 操作的模式,但总的来说,这用于任何事件驱动的架构。

这里面有两个组件: 1. Reactor 2. Handler。

Reactor:它的工作是将 I/O 事件分派给适当的处理程序 Handler:它的工作是实际处理这些事件

 

10、什么是中间件 ?

中间件介于您的请求和业务逻辑之间。

它主要用于捕获日志并启用速率限制、路由、身份验证,基本上是任何不属于业务逻辑的部分。

当然,还有第三方中间件,例如 body-parser,您可以为特定用例编写自己的中间件。

 

11、什么是 node.js 缓冲区?

通常,缓冲区是一个临时内存,主要由流使用以保留一些数据直到被消耗。

缓冲区是在 JavaScript 的 Unit8Array 以外的其他用例中引入的,主要用于表示固定长度的字节序列。

这也支持传统编码,如 ASCII、utf-8 等。它是 v8 之外的固定(不可调整大小)分配的内存。

 

12、什么是node.js流 ?

Streams 是 EventEmitter 的实例,可用于处理 Node.js 中的流数据。

它们可用于处理和操作网络上的流式大文件(视频、mp3 等)。他们使用缓冲区作为临时存储。

流主要有四种类型:

  • Writable:可以写入数据的流(例如,fs.createWriteStream())。
  • Readable:可以从中读取数据的流(例如,fs.createReadStream())。
  • Duplex:既可读又可写的流(例如,net.Socket)。
  • Transform:可以在写入和读取数据时修改或转换数据的双工流(例如,zlib.createDeflate())。

 

13、我们如何在node.js中使用async await ?

以下是使用 async-await 模式的示例

 

 

14、如何在 Node.js 中创建一个返回 Hello World 的简单服务器?

 

 

如果在学习前端方面遇见什么问题,可以关注私聊我们哦!

 

标签:NODE,Node,面试题,node,中间件,js,线程,集群
来源: https://www.cnblogs.com/icodingedu/p/16077959.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有