Node.js 的 close、closeIdleConnections 和 closeAllConnections 有何区别?
按监听器、空闲连接、活动请求和升级协议比较三个 HTTP 关闭接口,说明 Node 19 的行为变化、先停止监听再强制清理的顺序,以及排空测试应观察的完成条件。
Node.js面试题第 4 页,显示第 151–200 题,共找到 217 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
按监听器、空闲连接、活动请求和升级协议比较三个 HTTP 关闭接口,说明 Node 19 的行为变化、先停止监听再强制清理的顺序,以及排空测试应观察的完成条件。
区分 listen 参数同步异常与异步 server error,解释 EADDRINUSE、EACCES 的启动处理、就绪状态、退出码及有限重试,提供能真实复现端口占用的验证步骤。
围绕“Node.js HTTP 服务器的 timeout、requestTimeout 设置为 0 与有限值分别意味着什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分 socket 空闲超时与整个请求超时的语义及生产取值建议。
围绕“Node.js 中 http2 模块与 http/1.1 服务在多路复用与连接管理上有哪些工程差异,什么时候选 HT”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明单连接多流对连接池与超时设计的影响及适用条件。
围绕“Node.js 通过 server.maxHeadersCount 或 --max-http-header-size”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明头部洪泛防护机制与放宽限制的内存风险。
围绕“Node.js 的 --max-old-space-size 应该根据什么设定,容器内存限制下为什么要显式配置”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 V8 老生代上限默认值来源与容器环境下 OOM Kill 前的调优原则。
围绕“Node.js 服务内存持续上涨时,如何借助 --heapsnapshot-signal 或 heapdump 对比”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出多次快照对比与 retainer 分析的方法论。
围绕“Node.js 中 NODE_ENV=production 到底改变了什么,框架与依赖库据此做了哪些不同行为”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须澄清 Node 核心本身不读 NODE_ENV、行为差异来自生态库(如视图缓存、错误详情隐藏)。
围绕“Node.js 服务出现请求排队但 CPU 很低,如何判断是数据库连接池耗尽并处理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出通过池指标(等待队列、活跃连接数)定位及超时/扩容的处置。
本题给出 Node.js 对关键信号的默认行为:SIGINT、SIGTERM、SIGHUP 默认终止但可监听,SIGKILL、SIGSTOP 不可捕获;并区分可捕获与强制信号的工程边界。
本文说明Node.js HTTP请求处理中必须同时监听req和res的'error'事件的原因:漏监听会造成未处理异常并导致进程崩溃。区分两路错误的典型来源,给出具体处理和安全边界,防止服务因单请求异常退出。
围绕“Node.js 服务返回大文件时为什么不能 readFile 进内存再 res.end,正确做法是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须对比整读与流式响应的内存差异及 fs.createReadStream 配合 pipe/pipeline 的做法。
围绕“Node.js 的 process.memoryUsage() 中 rss、heapTotal、heapUsed、e”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分四类指标并指出 external(如 Buffer)增长易被忽略的场景。
围绕“Node.js 服务管理密钥(数据库密码等)时为什么不能写进代码或镜像,推荐的注入与访问方式是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出密钥注入途径与防泄漏要点(日志脱敏、不随错误上报)。
围绕“Node.js 中 socket.end() 与 socket.destroy() 的区别是什么,回收连接时该用哪个”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分半关闭优雅结束与立即销毁的语义及对对端的影响。
围绕“Node.js 中为什么推荐用 stream.pipeline 串联流而不是手工 pipe,背压在服务端防内存暴涨中”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明背压传导机制及 pipeline 的错误清理优势。
围绕“Node.js 服务端为什么应输出结构化 JSON 日志而不是拼字符串,关键字段有哪些”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明可检索性与字段规范(level、msg、traceId、err 序列化)。
解释未捕获异常为何可能留下部分修改状态,区分业务错误边界、uncaughtException 和只观察的 Monitor,给出独立崩溃示例及外部重启、最小同步诊断的处理原则。
逐项解释未处理 Promise 拒绝的五种 Node.js 模式,区分 throw 与 strict 的事件顺序、警告与退出码,以及监听器对行为的影响,提供独立进程验证方法。
围绕“Node.js 的 worker_threads 池大小应该如何确定,线程间通信成本如何影响设计”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出按 CPU 核数定池容及结构化克隆消息开销的权衡。
围绕“为什么 for await 遍历 Node.js Readable 时提前 break 会自动销毁流,这替代不了哪种”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明异步迭代消费触发读并在提前退出时销毁流,但仍需捕获迭代抛出的上游错误。
解释 write 返回 false 是停止继续生产的背压信号,说明当前数据已进入写入流程、不能重写同一块,并用慢速对象流示例验证顺序、drain 等待和正常结束。
围绕“Node.js 把大文件流式转成 Base64 时按任意字节块 encode 为什么会得到错误结果”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答 Base64 以 3 字节为一组,需缓存余量在流尾补 padding,不能每块独立编码。
围绕“Node.js Buffer.alloc 与 Buffer.allocUnsafe 的安全边界是什么,复用未清零内存”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要比较清零成本与性能、allocUnsafe 可能暴露旧堆内存,写满前不得外发。
围绕“Node.js 中字符串长度与 Buffer.byteLength 不一致时,HTTP Content-Length”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要指出 Content-Length 是字节数须用 Buffer.byteLength(编码后),多字节字符不能用 length。
围绕“Node.js 收集流数据用数组拼接字符串与 Buffer.concat 在内存峰值上有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答重复字符串拼接产生中间副本,累计数组最后 concat 一次更低峰值但仍需全量内存。
围绕“Node.js Buffer.from 拷贝与 Buffer.allocUnsafe 的小 Buffer 池化机制在”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明小于 poolSize 的分配可能来自共享池,切片写入可能互相影响。
围绕“Node.js Buffer.slice 共享内存而 Buffer.from(buffer) 拷贝,这一差异如何影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明 slice 视图会钉住原大 Buffer 导致无法回收,长期保存应拷贝或 subarray 后复制。
围绕“Node.js 把 Buffer 转成 ArrayBuffer 时为什么直接用 buffer.buffer 可能带出”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答需按 byteOffset/byteLength 精确切片或拷贝,因小 Buffer 常共享池。
围绕“Node.js Buffer 与 Uint8Array、DataView 在读取网络二进制包头时应如何分工”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答 Buffer 是 Uint8Array 子类适合 I/O,DataView 可显式端序读字段,避免用字符串解析二进制。
解释 cork 暂存写入与 uncork 释放的关系,使用 writev 示例验证小写入批量交付,并说明嵌套调用计数、end 的处理、背压等待死锁与无批处理实现时的成本。
围绕“Node.js 用 crypto Hash 对流式下载做校验时,update 顺序和最终 digest 时机有哪些坑”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答必须按 chunk 到达顺序 update,end 后才能 digest,且校验失败需销毁已写文件。
区分停止继续生产并完成已有写入与立即进入销毁流程,说明错误、finish、close 和 destroyed 标志的边界,以及已发生外部副作用、双工两侧和自定义清理的责任。
围绕“Node.js 流处理内存持续上涨时,如何区分是未遵守背压、Buffer 视图钉住大内存还是对象模式堆积”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要给出检查 write 返回值/drain、slice/subarray 引用链、objectMode 队列计数三类定位路径。
围绕“Node.js Duplex 与 Transform 的差别是否只是名字不同,哪些 I/O 场景必须用 Duplex”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要指出 Transform 输出依赖输入,Duplex 读写两侧可独立如 socket。
围绕“Node.js 读取未知编码文本流时,latin1 与 utf8 混用会怎样破坏字节,何时应先探测 BOM”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答 latin1 是字节到单字符映射不还原 UTF-8,BOM 只能提示常见编码且不能可靠识别全部。
围绕“Node.js Writable 在 end 之后再 write 会触发什么错误,为什么不能靠 try/catch ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明状态机拒绝 end 后写入并异步报 error,应用需监听 error 或用 promises API。
区分可读耗尽、可写完成和资源关闭,说明 finished 如何组合成功与异常结束、双工流的等待范围和 cleanup 选项,并用 PassThrough 示例验证写入完成后仍有可读数据。
区分自动推送的 flowing 模式和主动 read 的 paused 模式,解释 readableFlowing 三种状态、data 与 readable 的使用方式、暂停恢复及混用消费接口造成的理解偏差。
从消费者视角区分可读流、可写流、双工流和转换流,说明网络 socket 与压缩转换的差异、两侧缓冲和结束状态,以及 objectMode、chunk 边界和背压的共同约束。
围绕“Node.js 顺序读取超大文件为什么流式加背压比 readFile 全量读入更适合,何时 readFile 反而更”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要比较常驻内存与 GC 压力,指出小配置或需随机访问时 readFile 可接受。
围绕“Node.js fs.createReadStream 打开失败时错误发生在哪一步,调用方如何避免把 open 错误”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答路径错误异步触发 error/close,pipeline 可统一捕获,重试策略需区分 ENOENT 与读中 EIO。
围绕“Node.js fs.createReadStream 的 start、end 选项如何实现 HTTP Range ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要给出闭区间字节的 start/end 映射与 416/206 处理边界,end 不能超过文件大小。
围绕“Node.js 将文件流压缩后发给 HTTP 客户端时,为什么 Content-Length 通常不可预知,应改用什”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明压缩输出长度依赖内容,流式场景用 chunked 或省略长度而非预读全量。
围绕“Node.js Buffer.from(str, 'hex') 遇到奇数长度或非法字符时行为如何,校验责任在哪”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明 hex 解码遇非法输入会截断而非总抛错,协议入口应先校验长度和字符集。
说明 highWaterMark 是背压阈值而非严格内存上限,区分字节流、对象模式和字符串编码,分析大阈值的吞吐收益与内存、排队延迟代价,并给出按实际负载测量的步骤。
围绕“Node.js 服务端用 fs.createReadStream 经 pipeline 写 HTTP 响应时,客户端”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明响应流 error/close 与 request aborted/close 的传播,需停止读文件并不再写头。
围绕“Node.js 接收 HTTP 上传流时如何用背压限制落盘速度,超限请求应在哪一层截断”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答 req 是 Readable,写文件 false/drain 控制节奏,字节超限应 destroy 输入并清理临时文件。
围绕“实现 Node.js 自定义 Readable 时 _read(size) 内 push() 返回 false 应如”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明 push 返回 false 表示消费侧缓冲已满应暂停拉取上游,push(null) 表示结束。
围绕“实现 Node.js 自定义 Writable 时 _write 的 callback 应何时调用,延迟调用会引发什”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答每次 _write 必须恰一次回调以推进队列和触发 drain,漏调会挂起写入。