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 面试官系列



