Node.js 八股文 / 经典面试题汇总

本篇用于汇总 Node.js 高频面试题与典型答案,便于在面试前快速复习。下面整理的内容覆盖:模块与包管理、事件循环、异步 I/O、进程与线程、内存与垃圾回收、网络与流、常用框架等核心主题。

补充:本篇为 Node.js 面试题总览,建议结合本目录内其他笔记(如 worker_threads、cluster、child_process、流、缓存机制等)一起复习;以下要点按"概念 + 简短示例"形式列出。

1. 模块系统

  • CommonJS 仍然是 Node.js 默认的模块规范(require / module.exports),ESM 从 Node 12+ 起逐步稳定,13.2.0 起对 ESM 支持已可用于生产。
  • 模块在首次加载后会被缓存到 require.cache,二次 require 直接返回缓存对象,不再重新执行。
  • 文件模块查找顺序:核心模块 → 相对/绝对路径 → node_modules 逐级向上。

2. 事件循环(Event Loop)

  • Node 事件循环分 6 个阶段:timers → pending callbacks → idle, prepare → poll → check → close callbacks。
  • process.nextTick 和 Promise.then 属于微任务,会在每个宏任务后清空;process.nextTick 优先级高于 Promise。

3. 异步控制

  • 回调 → Promise → async/await 是渐进式改进,避免回调地狱。
  • util.promisify 可将符合 err-first 风格的回调函数快速转成 Promise 版本。

4. 进程与线程

  • 默认是单进程单线程(事件循环 + 工作线程池)。
  • child_process 用于启动外部命令或脚本;worker_threads 用于跑 CPU 密集型任务;cluster 基于 child_process.fork 实现多进程共享端口。

5. 流(Stream)

  • 四类基础流:Readable / Writable / Duplex / Transform。
  • 大文件、日志、HTTP body 等场景优先使用流,避免一次性读入内存;处理背压(drain 事件)是稳定性的关键。

6. 缓存与全局对象

  • global 类似浏览器中的 window;process 提供环境变量、退出码、工作目录等系统级能力。
  • Redis 常作为外部缓存层,搭配 ioredis / node-redis 使用。

来源整理自:vue3js.cn 面试官系列