面试|Node篇

118 阅读2分钟

一、Node是什么?

Node.js是一个基于Chrome V8引擎的JS运行环境。

二、Node解决了哪些问题?

Node在处理高并发,I/O密集场景有明显性能优势。

  • 高并发,是指在同一时间并发访问服务器
  • I/O密集指的是文件操作、网络操作、数据库,相对的有CPU密集,CPU密集指的是逻辑处理运算、压缩、解压、加密、解密。

三、Node模块化规范

3.1 什么是模块化?模块化有什么好处?

  1. 什么叫模块化?
    一个js文件可以引入另外一个js文件中的数据,这种开发方式叫做模块化开发。
  2. 模块化开发的好处?
  • 将功能分离出来,一个js文件只处理一个功能,这样做业务逻辑清晰,便于维护。
  • 按需导入
    用哪个功能就导入哪个文件。
  • 避免变量污染
    一个js文件,都是一个独立的作用域。互不干扰,不用考虑变量名冲突问题。

3.2 CommonJS规范

  1. 模块导入必须用require()导入
  2. 模块导出需要用module.exports导出
    exports与module.exports区别

3.3 模块缓存机制

  1. 当一个模块第一次加载时,nodejs会执行里面的js代码,并且导出模块
  2. nodejs会将导出的模块放入缓存中
  3. 当重复导入一个模块时,nodejs会先从缓存中读取模块。如果缓存中有,就从缓存读取。缓存没有重复步骤1

3.4 nodejs三种模块及require()加载原理

3.4.1 node 三个模块

  1. 核心模块、内置模块
    例如:fs、path、http都是核心模块,这些模块会随着nodejs安装一起安装。
  2. 第三方模块
    npm官网上的模块,需要下载后使用
  3. 自定义模块

3.4.2 require('文件路径')加载原理

  • (1)自定义模块:必须要写文件路径, require()会得到这个模块里面的 module.exports 对象

  • (2)第三方模块 :写模块名。 nodejs会自动从你的node_module文件夹里面去找这个模块的名字,然后执行模块里面的index.js代码,得到里面的module.exports

    • 如果当前目录没有module.exports就会从上级目录找,以此类推。一直找到你的磁盘根目录。 还找不到就会报错提示 模块不存在(有点类似于变量作用域就近原则)
  • (3)核心模块:写模块名。 nodejs会自动从你的node安装包路径里面去找。