Nodejs系列:汇总 面试题(带答案)

499 阅读4分钟

面试题:

1.为什么要使用Nodejs? 好处是什么?

  • Nodejs是一个基于chrome V8引擎的JS运行环境,所以可以前后端都使用JS,语言统一
  • Nodejs 特点是 事件驱动,高效的I/O处理,处理大量并发I/O请求时表现出色,不会阻塞线程
  • 生态系统丰富:可以通过npm方便的安装和管理各种包;快速搭建应用
  • Nodejs是单线程, 并且也可以通过cluster模块来利用多核cpu
  • V8引擎的优化:
    • V8引擎在执行js代码时,会将代码编译成机器码,这个编辑过程有即时编译JIT技术。
      • 现将js代码解析成抽象语法树AST
      • 然后根据代码执行频率和性能瓶颈等因素,动态的将一些关键的js代码编译成机器码
        • 对于一个频繁调用的函数,V8引擎会对其进行JIT编译、优化,以减少执行时间
  1. Nodejs 的运行机制是什么?

    • 事件循环机制
    • 模块加载机制
    • 异步I/O机制
    • V8引擎交互机制:V8引擎通过JIT即时编译负责解析、编译和执行代码
  2. Nodejs 异常捕获 怎么做的?

    • try catch
    • 全局异常捕获:process.uncaughtException 事件
  3. process.nextTick setImmediate 有什么区别?

    • nextTick类似微任务,在当前执行栈完成后执行(在微任务之前,在各个阶段完成后)
    • setImmediate 执行时机更靠后,在检查阶段
  4. yarn 和npm 的区别 ?为什建议使用yarn?

    • yarn 更快,因为有更高效的缓存机制(npm也有缓存机制)
    • (并行安装,npm旧版本是同步,但新版本也是异步的了)
    • 依赖版本有冲突的时候,yarn策略更稳定(npm也有依赖冲突解决策略)
    • yarn 工作区功能更强大(npm也有类似功能)但yarn更灵活
  5. 怎么查看V8引擎的使用情况

    • process.memoryUsage()
    • Chrome开发者工具
    • 专门的Nodejs性能分析工具:node-profiler
  6. node 中两种导出方式的区别是什么?

    • module.exports 是原始的
    • exports 对module.exports 的引用
  7. Nodejs 的老生代和新生代 是什么?算法机制?

    • v8垃圾回收机制,根据对象的存活的生命周期不同分为老生代和新生代
      • 新生代:Scavenge算法:等大区域 from-to空间 标记复制
      • 老生代:标记清除 和整理算法结合
  8. 哪些情况会造成V8引擎的内存泄漏

    • 全局变量,闭包,定时器,重复的事件监听,监听事件没有移除
  9. 线程和进程有什么区别

    • 一个进程可以有多个线程,线程是资源执行的最小单位; 线程可以共享,进程有独立的内存
  10. Nodejs中怎么检测异步操作的时间

  • console.time() + console.timeEnd()
  • process.hrtime() 高精度时间
  1. NODE_ENV 是什么?

环境变量: 应用程序运行的环境,有development、production、testing 一般通过全局变量process.env 上挂载变量来表示当前环境:process.env.NODE_ENV

  1. process.argv 是什么 ?

通过终端执行命令时,可以通过argv获取到传入的命令行参数;返回值是一个数组

  1. Node 怎么通过集群提高性能的

    利用多核处理器提高性能

  2. Nodejs中怎么开启多核处理器

    cluster 模块创建工作进程 和 worker_threads 模块创建线程

  3. Node 中怎么创建子进程

    child_process 和 cluster模块

  4. EventEmitter 事件机制

    发布订阅模式

  5. fs模块 readFile

    异步读取文件

  6. require 模块加载机制是什么

    先从文件缓存区,再从原生模块,再绝对、相对、目录、第三方等查找,找到后缓存

  7. 和浏览器事件循环的区别?

    nodejs有6个阶段,微任务的执行时机不同;Nodejs有线程池处理I/O操作

  8. Nodejs中间件是什么

就是在应用程序和系统软件之间的一类软件;主要是为了扩展功能,在nodejs中主要指封装HTTP请求;比如body-parser用于解析传入的post请求的请求体数据;还有一些日志记录的中间件等、解析cookie头的中间件;

  1. Nodejs缓冲区