今天为大家输出Node.js相关面试题和相关答案,温故而知新可以为师矣,一起加油加油加油!
目录
1、什么是JavaScript中的一等函数 ?
2、Node.js 如何工作的 ?
3、Node.js 比其他最流行的框架好在哪里 ?
4、Node.js如何克服I/O操作阻塞的问题 ?
5、为什么Node.js是单线程的 ?
6、如果 Node.js 是单线程的,那么它如何处理并发 ?
7、Node.js 中有多少种 API 函数 ?
8、你是如何管理 Node.js 项目中的包 ?
9、Node.js 有哪些常用的计时特性 ?
10、使用 Promise 代替回调有什么好处 ?
11、Node.js中的fork是什么 ?
12、module.exports 的用途是什么 ?
13、可以使用哪些工具来确保代码风格一致 ?
14、你对回调地狱的理解是什么 ?
15、Node.JS 中的事件循环是什么 ?
累积的力量,每天进步一点点
1、什么是JavaScript中的一等函数 ?
当函数可以像任何其他变量一样对待时
,这些函数就是一等函数
。还有许多其他编程语言,例如 scala、Haskell 等,包括 JS。
现在因为这个函数可以
作为参数传递给另一个函数(回调
),或者一个函数可以返回另一个函数
(高阶函数)。map() 和 filter() 是常用的高阶函数。
2、Node.js 如何工作的 ?
Node.js 是一个
使用 JavaScript 作为其脚本语言
并运行 Chrome 的 V8 JavaScript 引擎的虚拟机
。基本上,
Node.js 基于事件驱动的架构,其中 I/O 异步运行
,使其轻量且高效。它也被用于开发桌面应用程序以及一个名为 electron 的流行框架,因为它提供了 API 来访问 OS 级别的功能,例如文件系统、网络等。
3、Node.js 比其他最流行的框架好在哪里 ?
- Node.js 提供了简单的开发,因为它的
非阻塞 I/O 和基于偶数的模型导致较短的响应时间和并发处理
,这与开发人员必须使用线程管理的其他框架不同。- 它
运行在 chrome v8 引擎上
,该引擎是用 c++ 编写
的,并且具有不断改进的高性能。- 此外,由于我们将在前端和后端都使用 Javascript,因此开发速度会快得多。
- 最后,
还有充足的
库,这样我们就不需要重新发明轮子了
4、Node.js如何克服I/O操作阻塞的问题 ?
由于节点有一个
事件循环
,可用于以异步方式处理所有 I/O 操
作,而不会阻塞 main 函数
。因此,例如,如果需要进行一些网络调用,它将被安排在事件循环中,而不是主线程(单线程)中。
如果有多个这样的 I/O 调用,每个调用都会
相应地排队分别执行
(除了主线程)。因此,
即使我们有单线程 JS,I/O 操作也是以非阻塞方式处理的
。
4、为什么Node.js是单线程的 ?
Node.js 是作为
异步处理
的实验显式创建的。这是为了尝试一种新的理论,即
在单个线程上进行异步处理
,而不是通过不同框架进行缩放的现有基于线程的实现。
5、如果 Node.js 是单线程的,那么它如何处理并发?
主循环是单线程的,所有异步调用都由 libuv 库管理。
6、Node.js 中有多少种 API 函数 ?
有两种类型的 API 函数:
- 异步、非阻塞函数:主要是 I/O 操作,可以从主循环中分叉出来。
- 同步的、阻塞的函数 :主要是影响在主循环中运行的进程的操作。
7、你是如何管理 Node.js 项目中的包 ?
它可以由许多软件包安装程序及其相应的配置文件进行管理。
其中大多使用
npm 或 yarn
。两者都提供了几乎所有的 javascript 库,具有控制特定环境配置的扩展功能。为了维护项目中安装的库版本,我们使用
package.json 和 package-lock.json
以便将该应用程序移植到不同的环境中没有问题。
8、Node.js 有哪些常用的计时特性 ?
setTimeout/clearTimeout
这用于实现代码执行的延迟。
setInterval/clearInterval
这用于多次运行代码块。
setImmediate/clearImmediate
process.nextTick
9、使用 Promise 代替回调有什么好处 ?
使用 Promise 的主要优点是您可以获得一个对象来决定异步任务完成后需要采取的操作。
这提供了更易于管理的代码并避免了回调地狱。
10、Node.js中的fork是什么 ?
通常,fork 用于生成子进程。
在 node 中,它用于创建一个新的 v8 引擎实例来运行多个 worker 来执行代码。
11、module.exports 的用途是什么 ?
这用于公开要在项目其他地方使用的特定模块或文件的功能。这可用于将所有类似功能封装在一个文件中,从而进一步改进项目结构。
例如,您有一个包含所有 utils 函数的文件,使用 util 来获取问题陈述的不同编程语言的解决方案。
因此使用 module.exports 我们可以在其他文件中使用这些函数:
12、可以使用哪些工具来确保代码风格一致 ?
ESLint 可以与任何 IDE 一起使用,以确保一致的编码风格,这进一步有助于维护代码库。
13、你对回调地狱的理解是什么 ?
对于上面的示例,我们正在传递回调函数,它使代码不可读且不可维护。
因此我们应该更改异步逻辑以避免这种情况。
14、Node.JS 中的事件循环是什么 ?
无论是异步的,都由事件循环使用队列和侦听器进行管理。我们可以使用下图得到这个想法:
因此,当需要执行异步函数(或 I/O)时,主线程将其发送到不同的线程,从而允许 v8 继续执行主代码。
事件循环涉及具有特定任务的不同阶段,例如计时器、挂起的回调、空闲或准备、轮询、检查、关闭具有不同 FIFO 队列的回调。
同样在迭代之间,它会检查异步 I/O 或计时器,如果没有则干净地关闭。