Node.js 高频追问 Q&A
A: 单线程事件循环 + 非阻塞 I/O,能高效处理大量并发请求。(深入阅读:Node.js 的非阻塞 I/O 与适用场景)
约 2 分钟
Node.js 高频追问 Q&A
1. Q: Node.js 为什么适合 I/O 密集?
A: 单线程事件循环 + 非阻塞 I/O,能高效处理大量并发请求。(深入阅读:Node.js 的非阻塞 I/O 与适用场景)
2. Q: Node.js 是单线程吗?
A: JS 主线程单线程,但底层线程池会处理部分异步任务。(深入阅读:JavaScript 主线程、libuv 与线程池)
3. Q: process.nextTick 和 setImmediate 区别?
A: nextTick 优先级更高,会在当前阶段结束后先执行。(深入阅读:process.nextTick、setImmediate 与事件循环)
4. Q: Stream 的价值是什么?
A: 边读边处理,降低内存峰值。(深入阅读:Stream、管道与背压)
5. Q: 常见性能优化点?
A: 连接复用、缓存、减少同步阻塞、合理使用 cluster/pm2。(深入阅读:Node.js 性能分析与优化)
6. Q: 大文件为什么优先使用 Stream?
A: 流可以边读边处理并形成背压,避免 readFile 一次性把完整文件放进内存。更多边界见 Node.js 面试真题补充。(深入阅读:大文件处理与 Stream)
7. Q: Buffer.from('10') 和 Buffer.from([10]) 一样吗?
A: 不一样,前者编码两个字符,后者创建一个值为 10 的字节;Buffer 长度按字节而不是字符计数。(深入阅读:Buffer、字节与字符编码)
8. Q: EventEmitter 的监听器为什么要保存函数引用?
A: off/removeListener 需要同一个函数对象,重新创建“长得一样”的函数不能解除原监听。(深入阅读:EventEmitter 的监听与移除语义)
9. Q: JWT 的 payload 能直接当作机密数据吗?
A: 不能。payload 只是 Base64URL 编码,服务端仍需验证签名、过期时间和权限;敏感内容不要直接放入其中。(深入阅读:JWT 结构、验证与安全边界)