该内容主要整理关于 Node 模块的相关面试题,其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。
Node模块精选篇
- 1. package.json版本号规则
- 2. package.json 与 package-lock.json 的关
- 3. npm 模块安装机制
- 4. 模块化的差异 AMD CMD COMMONJS ESMODUL
- 5. Node 的 Event Loop: 6个阶
- 6. Koa相关
- 7. Express、koa实现原理以及对比
- 8. 请介绍一下 require 的模块加载机制
- 9. exports.xxx=xxx 和 Module.exports={}有什么区别
- 10. Node 的异步 I/O
- 11. V8 的垃圾回收机制
- 12. Buffer 模块
- 13. webSocket
- 14. https
- 15. 进程通信
1. package.json版本号规则
major.minor.patch
- 主版本号.次版本号.修补版本号(
major.minor.patch
)
major
:新的架构调整,不兼容老版本
minor
:新增功能,兼容老版本
patch
:修复bug,兼容老版本
~和^的区别
~
会匹配最近的小版本依赖包,比如 ~1.2.3
会匹配所有 1.2.x
版本,但是不包括 1.3.0
^
会匹配最新的大版本依赖包,比如 ^1.2.3
会匹配所有 1.x.x
的包,包括1.3.0
,但是不包括2.0.0
*
安装最新版本的依赖包,比如 *1.2.3
会匹配 x.x.x
那么该如何选择呢?当然你可以指定特定的版本号,直接写 1.2.3
,前面什么前缀都没有,这样固然没问题,但是如果依赖包发布新版本修复了一些小bug,那么需要手动修改 package.json
文件;~
和 ^
则可以解决这个问题
- 但是需要注意
^
版本更新可能比较大,会造成项目代码错误,所以 建议使用 ~
来标记版本号,这样可以保证项目不会出现大的问题,也能保证包中的小bug可以得到修复
- 版本号写
*
,这意味着安装最新版本的依赖包,但缺点同上,可能会造成版本不兼容,慎用
例子
- 假设我们中安装了 vue, 当我们运行安装
npm install vue -save
的时候,在项目中的 package.json
的 vue版本是 vue: ^3.0.0
, 我们电脑安装的vue版本就是 3.0.0
版本,我们把项目代码提交后,过了一段时间,vue 发布了新版本 3.0.1
,这时新来一个同事,从新 git clone
克隆项目,执行 npm install
安装的时候,在他电脑的vue版本就是 3.0.1
了,因为^
只是锁了主要版本,这样我们电脑中的vue版本就会不一样,从理论上讲(大家都遵循语义版本控制的话),它们应该仍然是兼容的,但也许 bugfix 会影响我们正在使用的功能,而且当使用vue版本 3.0.0
和 3.0.1
运行时,我们的应用程序会产生不同的结果。
- 请思考,这样的话,不同人电脑安装的依赖版项目,是不是都有可能不一样,就会导致每个人电脑运行的应用程序产生不同的结果。就会存在bug的隐患。
- 那么我们在
package.json
上面锁死依赖包的版本号不就可以了? 直接写 vue: 3.0.0
锁死,这样大家安装vue的版本都是3.0.0
版本了。
- 这个想法固然是不错的,但是你只能控制你自己的项目锁死版本号,那你项目中依赖包的依赖包呢?你怎么控制限制别人锁死版本号呢?
- 为了解决这个不同人电脑安装的所有依赖版本都是一致的,确保项目代码在安装所执行的运行结果都一样,这时
package-lock.json
就应运而生
2. package.json 与 package-lock.json 的关
3. npm 模块安装机制
4. 模块化的差异 AMD CMD COMMONJS ESMODUL
5. Node 的 Event Loop: 6个阶
6. Koa相关
- koa洋葱模型怎么实
- 如果中间件中的next()方法报错了怎么
- co的原理是怎样的
7. Express、koa实现原理以及对比
8. 请介绍一下 require 的模块加载机制
9. exports.xxx=xxx 和 Module.exports={}有什么区别
10. Node 的异步 I/O
- 请介绍一下 Node 事件循环的流程
- 在每个 tick 的过程中,如何判断是否有事件需要处理呢
- 描述一下整个异步 I/O 的流
11. V8 的垃圾回收机制
- 如何查看 V8 的内存使用情
- V8 的内存限制是多少,为什么 V8 这样设
- V8 的内存分代和回收算法请简单讲一讲
12. Buffer 模块
- 新建 Buffer 会占用 V8 分配的内存
- Buffer.alloc 和 Buffer.allocUnsafe 的区
- Buffer 的内存分配机制
- Buffer 乱码问题
13. webSocket
- webSocket 与传统的 http 有什么优势
- webSocket 协议升级简述一下
14. https
- https 用哪些端口进行通信,这些端口分别有什么用
- 身份验证过程中会涉及到密钥,对称加密,非对称加密,摘要的概念,请解释一下
- 为什么需要 CA 机构对证书签名
- https 验证身份也就是 TSL/SSL 身份验证的过程
15. 进程通信
- 请简述一下 node 的多进程架构
- 请问创建子进程的方法有哪些,简单说一下它们的区别
- 实现一个 node 子进程被杀死,然后自动重启代码的思路