Node.js 知识体系
🎯 设计理念: 从运行时原理到生产实践,构建完整的 Node.js 后端知识体系。每篇都有真实案例和可运行代码。
┌────────────────────────────────────────────────────────────────────────┐
│ Node.js 知识体系 │
├────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 核心篇 │ │ 运行时篇 │ │ 框架篇 │ │
│ │ (运行机制) │───▶│ (V8/进程) │───▶│ (Web开发) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ Event Loop 内存/GC 中间件机制 │
│ Stream/Buffer 多进程/Worker 数据库操作 │
│ 模块机制 │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 工程篇 │ │ 进阶篇 │ │
│ │ (生产实践) │───▶│ (深度扩展) │ │
│ └─────────────┘ └─────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ 性能调优 Native Addon │
│ 稳定性/高可用 FFI/WASM │
│ 安全/分布式锁 │
│ │
└────────────────────────────────────────────────────────────────────────┘📚 目录结构
一、核心篇:运行机制
| 文件 | 主题 | 核心内容 | 真实案例 |
|---|---|---|---|
| 01-core-event-loop.md 🔥 | Event Loop 原理 | 六个阶段、微任务、定时器 | setTimeout vs setImmediate |
| 02-core-stream-buffer.md 🔥 | Stream 与 Buffer | 背压机制、Slab 分配 | 流式文件拷贝 |
| 03-core-module.md | 模块机制 | CJS vs ESM、循环依赖 | 模块解析算法 |
二、运行时篇:V8 与进程
| 文件 | 主题 | 核心内容 | 真实案例 |
|---|---|---|---|
| 04-runtime-memory-gc.md ⭐⭐ | 内存管理与 V8 GC | OOM 排查、Scavenge/Mark-Sweep | 堆快照分析 |
| 05-runtime-cluster-worker.md ⭐ | 多进程与 Worker | Cluster 负载均衡、SharedArrayBuffer | Worker 线程池 |
三、框架篇:Web 开发
| 文件 | 主题 | 核心内容 | 真实案例 |
|---|---|---|---|
| 06-framework-middleware.md ⭐ | 中间件机制 | Koa 洋葱模型、compose 实现 | 请求耗时统计 |
| 07-framework-database.md ⭐ | 数据库操作 | 连接池、ORM 选型、事务 | Prisma/TypeORM 实战 |
| 14-practice-koa.md 🆕 | Koa 框架 | 洋葱模型、路由、中间件 | RESTful API 开发 |
| 15-practice-express.md 🆕 | Express 框架 | 路由、中间件、错误处理 | 企业级应用架构 |
| 16-practice-redis.md 🆕 | Redis 缓存 | 数据类型、分布式锁、管道 | 缓存服务封装 |
| 17-practice-mongodb.md 🆕 | MongoDB | 数据模型、聚合查询、索引 | Mongoose 实战 |
| 18-practice-rabbitmq.md 🆕 | RabbitMQ | AMQP、消息模式、死信队列 | 消息队列实践 |
| 19-practice-kafka.md 🆕 | Kafka | 分区、副本、流处理 | 大数据消息队列 |
四、工程篇:生产实践
| 文件 | 主题 | 核心内容 | 真实案例 |
|---|---|---|---|
| 08-engineering-performance.md ⭐ | 性能分析与调优 | 火焰图、"平顶"现象、libuv 线程池 | CPU 密集型排查 |
| 09-engineering-stability.md ⭐⭐ | 稳定性与高可用 | 优雅退出、健康检查、限流熔断 | K8s 优雅重启 |
| 10-engineering-security.md ⭐ | 安全防护 | 原型链污染原理与防御 | RCE 漏洞分析 |
| 11-engineering-distributed.md ⭐⭐ | 分布式锁 | Redis 原子锁、Lua 脚本、Redlock | 库存防超卖 |
五、进阶篇:深度扩展
| 文件 | 主题 | 核心内容 | 真实案例 |
|---|---|---|---|
| 12-advanced-native-addon.md ⭐ | Native Addon | N-API vs WebAssembly vs FFI | Sharp 图片处理 |
🗺️ 学习路线图
学习路径建议
│
┌───────────────────────────┼───────────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ 初级后端 │ │ 中级后端 │ │ 高级后端 │
│ 0-1 年经验 │ │ 1-3 年经验 │ │ 3+ 年经验 │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
▼ ▼ ▼
01 → 02 → 03 04 → 05 → 06 08 → 09 → 11
Event Loop 内存管理 性能调优
Stream 原理 多进程架构 稳定性设计
模块机制 中间件机制 分布式锁
│ │ │
▼ ▼ ▼
06 → 07 07 → 08 → 09 10 → 12
中间件基础 数据库操作 安全防护
数据库入门 性能优化 Native Addon
稳定性方案💡 核心亮点
1. V8 内存分代回收 (04-runtime-memory-gc.md)
┌─────────────────────────────────────────────────────┐
│ V8 Heap │
├─────────────────────┬───────────────────────────────┤
│ 新生代 │ 老生代 │
│ (New Space) │ (Old Space) │
│ │ │
│ ┌───────┬───────┐ │ │
│ │ From │ To │ │ │
│ │ Space │ Space │ │ │
│ └───────┴───────┘ │ │
│ │ │
│ 对象存活率: 低 │ 对象存活率: 高 │
│ 算法: Scavenge │ 算法: Mark-Sweep/Compact │
└─────────────────────┴───────────────────────────────┘2. Koa 洋葱模型 (06-framework-middleware.md)
┌─────────────────────────────────┐
│ Middleware A │
│ ┌─────────────────────────┐ │
│ │ Middleware B │ │
│ │ ┌─────────────────┐ │ │
Request │ │ │ Middleware C │ │ │ Response
───────▶│ │ │ │ │ │────────▶
│ │ │ │ │ │
│ │ └─────────────────┘ │ │
│ └─────────────────────────┘ │
└─────────────────────────────────┘3. 熔断器状态机 (09-engineering-stability.md)
┌────────────┐ 失败次数超阈值 ┌────────────┐
│ CLOSED │ ─────────────────────▶ │ OPEN │
│ (正常) │ │ (熔断) │
└────────────┘ └─────┬──────┘
▲ │
│ 连续成功 ≥ 3 次 │ 超时后
│ ▼
│ ┌────────────┐
└───────────────────────────── │ HALF_OPEN │
│ (半开) │
└────────────┘4. Redlock 分布式锁 (11-engineering-distributed.md)
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ Redis 1 │ │ Redis 2 │ │ Redis 3 │ │ Redis 4 │ │ Redis 5 │
│ ✓ │ │ ✓ │ │ ✓ │ │ ✗ │ │ ✗ │
└─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘
获取成功: 3 个 > 5/2 + 1 = 3 个 ✓ 获取锁成功📁 代码示例
examples/
├── stream-copy.js # 流式文件拷贝
├── middleware.js # Koa 洋葱模型实现
└── worker-demo.js # Worker 线程池 Demo ⭐🔥 面试高频专题
Event Loop 与异步
- [ ] Node.js Event Loop 六个阶段分别是什么?
- [ ] setTimeout vs setImmediate 执行顺序?
- [ ] process.nextTick vs Promise.then 优先级?
内存与性能
- [ ] 如何排查 Node.js 内存泄漏?
- [ ] V8 新生代和老生代的 GC 算法区别?
- [ ] 火焰图"平顶"现象说明什么问题?
进程与并发
- [ ] Cluster 模块如何实现多进程共享端口?
- [ ] Worker Threads 和 Cluster 的区别?
- [ ] 如何避免阻塞 Event Loop?
生产实践
- [ ] Node.js 如何实现优雅退出?Keep-Alive 连接问题怎么处理?
- [ ] 限流和熔断的区别?分别在什么场景使用?
- [ ] 分布式锁解锁时为什么要用 Lua 脚本?
安全
- [ ] 什么是原型链污染?如何防御?
- [ ] 如何防止 SQL 注入?
📖 推荐阅读顺序
日常开发必读 (按重要性排序):
- 🔥 01-core-event-loop.md - Event Loop 原理
- 🔥 09-engineering-stability.md - 稳定性与高可用
- 🔥 07-framework-database.md - 数据库操作
- 🔥 06-framework-middleware.md - 中间件机制
性能优化:
- ⭐ 04-runtime-memory-gc.md - 内存管理
- ⭐ 08-engineering-performance.md - 性能调优
- 05-runtime-cluster-worker.md - 多进程与 Worker
面试深度准备:
- ⭐ 11-engineering-distributed.md - 分布式锁
- ⭐ 10-engineering-security.md - 安全防护
- 12-advanced-native-addon.md - Native Addon