今天为大家输出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的V8JavaScript引擎的虚拟机。基本上,Node.js基于事件驱动的架构,其中I/O异步运行,使其轻量且高效。它也被用于开发桌面应用程序以及一个名为electron的流行框架,因为它提供了API来访问OS级别的功能,例如文件系统、网络等。
3、Node.js比其他最流行的框架好在哪里?
Node.js提供了简单的开发,因为它的非阻塞I/O和基于偶数的模型导致较短的响应时间和并发处理,这与开发人员必须使用线程管理的其他框架不同。
它运行在chromev8引擎上,该引擎是用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作为setImmediate()参数传递的任何函数都是在事件循环的下一次迭代中执行的回调。
process.nextTicksetImmediate和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或计时器,如果没有则干净地关