本篇文章跟着《深入浅出 nodejs》这本书整理一下,关于 node 的面试题目,总所周知,这本书是一个很经典的,很多大佬都推荐的学习 node 的书,可以通过下面的链接获取电子版。
链接: https://pan.baidu.com/s/1x8qKck7KxnceSuK3f6i67A 提取码: q979
但是这篇文章还是主要整理面试题为主,通过面试题目,你会发现原来有些内容在《深入浅出 nodejs 》这本书里面都有提到!
不瞒你说, 我在买了这本书之后看过一次,但是完全看不懂,就是一直处于一种似懂非懂的状态,直到有了一些项目经验,又重新看了一遍,才有点理解了。【虽然还是不全面】
本篇文章主要目的是自我总结和学习,可能内容有疏漏或者错误,欢迎指出,多多见谅!
一、基础知识
1.1 认识 node
首先在开始之前,针对新手小白,一定要先弄懂 node 是什么,请看这篇文章。
1.2 安装 node
书里面貌似没有告诉你怎么使用 node,可以参考这篇文章,使用 nvm 工具来安装和管理node
可以说,现在基本上所有的前端开发都是基于 node 进行的,更多实践的项目可以参考我的这个专栏《前端工程化系统教程》,有详细的讲解。
二、面试题目
我个人任务 node 相关的面试题目主要还是以理论知识为主,也就是传说中的八股文,代码相关有一个重点就是事件循环。
我们来看一下《深入浅出nodejs》的目录,主要分为下面几点,我把我认为比较重要的标红强调了一下,但是不完全准确,仅供参考
- 模块机制【第二章】
- 事件循环【第三章】
- 发布订阅【第四章】
- 垃圾回收【第五章】
- Buffer【第六章】
- 网络编程【第七章】
- web应用【第八章】
- 进程相关【第九章】
- 测试相关【第十章】
- 前端工程化【第十一章】
下面,我们跟着个目录来依次总结一下对应的面试题目,争取一网打尽!!我会先总结重要的章节,剩余的持续补充中
我承认有的时候我的网织得太稀疏了~~~
2.1 模块机制
书中提到 commonjs 是一个规范,并详细说明了指定这个规范的原因(13页)。
所以我们需要知道其实不管是 commonjs 还是 esm 都是一个规范,他不是隶属于 node 的,node 是对 commonjs 规范进行了实现,虽然面试题我给他归类到 node 里面了,但是这点不要混淆,也可以把他归类到 js 相关的里面。
2.1.1 commonjs 和 es module 的区别是什么?
2.1.2 node 的文件路径分析和查找策略
2.1.3 node 中的常用的核心模块都有哪些,对应的有哪些常用的方法
2.1.4 npm 是什么
2.1.5 node 中的全局对象有哪些
2.2 事件循环
2.2.1 node / 浏览器中的事件循环机制
2.2.2 微任务队列的优先级
2.2.3 node 中的 nextTick 和 vue 中的 nextTick 的区别
2.3 发布订阅
在《深入浅出nodejs》的第三章提到了高阶函数,这就不的不提到一个很重要的面试题,函数的柯里化。
高阶函数:把函数作为参数,或者函数作为返回值的函数就是高阶函数
柯里化:可以被视为一种特殊形式的高阶函数,因为它接受一个函数作为输入,并返回一个函数作为输出。
2.3.1 函数柯里化
2.3.2 实现发布/订阅模式
还有一个和发布订阅,容易搞混的就是观察者模式,所以要注意区分
2.3.3 实现观察者模式
2.3.3 发布订阅模式和观察者模式的区别
2.4 垃圾回收
首先看需要垃圾回收的原因,是因为有内存泄漏
2.4.1 会造成内存泄漏的原因
关于内存泄漏的一个原因就是闭包,所以就不得不巩固一下闭包的知识。
2.4.2 什么是闭包
2.4.3 v8 引擎的垃圾回收机制
还有一个尾调用优化,没错我在面试过程中确实遇到过这个问题
2.4.4 什么是尾调用优化
2.5 Buffer
【待更新】
2.6 网络编程
这块主要还是计算机网络相关的知识,请参考这篇《一网打尽计算机网络/浏览器工作原理》
2.7 web应用
2.7.1 说说你对 restful 规范的理解
2.8 进程相关
2.8.1 进程和线程的区别
提到进程就不得不提到浏览器的多进程模型
2.8.2 浏览器的多进程模型
2.9 测试相关
2.10 前端测试的方法和工具
2.10 前端工程化
2.10.1 说说你对前端工程化的了解
一提到前端工程化的问题,关于 webpack 的问题一定是必须问的,同样的和 webpack 类似的打包工具也必须要知道,详细的整理,请看这篇文章。一定要看!!特别是关于 webpack 和 vite 的。
总结
内容持续更新中,内容较多难免疏漏,有不对的欢迎指正,有遗漏的部分会陆续补充。
欢迎关注我的专栏《一网打尽所有面试题》