竹笋

首页 » 问答 » 灌水 » 大厂nodejs高级面试题和答案,来一
TUhjnbcbe - 2023/3/25 19:18:00

不论是前端开发还是后端开发,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中使用asyncawait?14、如何在Node.js中创建一个返回HelloWorld的简单服务器?

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、如何测量异步操作的持续时间?

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

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

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

一个简单的例子

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

那么,还有其他选择吗?

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

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

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

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

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

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

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

这里面有两个组件:1.Reactor2.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中使用asyncawait?

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

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

如果在学习前端方面遇见什么问题,可以

1
查看完整版本: 大厂nodejs高级面试题和答案,来一