exec 或 execFile 报 maxBuffer exceeded,应该如何处理?
解释 exec 与 execFile 收集 stdout、stderr 的缓冲限制,使用中文输出示例区分字符数与字节数,并比较调整有界预算、spawn 流式消费、文件输出和保留有效诊断的处理方式。
Node.js · 流处理面试题第 1 页,显示第 1–32 题,共找到 32 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
解释 exec 与 execFile 收集 stdout、stderr 的缓冲限制,使用中文输出示例区分字符数与字节数,并比较调整有界预算、spawn 流式消费、文件输出和保留有效诊断的处理方式。
围绕“如何实现 Node.js 子进程之间类似 shell 管道 a | b 的数据流转”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出将一个子进程的 stdout pipe 到另一个的 stdin 及错误传播处理。
从 shell 解析、参数传递、输出消费和进程生命周期比较 spawn 与 exec,说明 execFile 的位置、大输出与长任务的选择,以及异步创建进程为什么仍需要处理背压和错误。
围绕“JSON.parse 一个超大请求体为什么也会阻塞 Node.js 事件循环,有哪些缓解方式”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须指出 JSON 解析是同步 CPU 操作且给出流式解析或限制体积等方案。
围绕“Node.js 服务返回大文件时为什么不能 readFile 进内存再 res.end,正确做法是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须对比整读与流式响应的内存差异及 fs.createReadStream 配合 pipe/pipeline 的做法。
围绕“Node.js 中为什么推荐用 stream.pipeline 串联流而不是手工 pipe,背压在服务端防内存暴涨中”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明背压传导机制及 pipeline 的错误清理优势。
围绕“为什么 for await 遍历 Node.js Readable 时提前 break 会自动销毁流,这替代不了哪种”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明异步迭代消费触发读并在提前退出时销毁流,但仍需捕获迭代抛出的上游错误。
解释 write 返回 false 是停止继续生产的背压信号,说明当前数据已进入写入流程、不能重写同一块,并用慢速对象流示例验证顺序、drain 等待和正常结束。
围绕“Node.js 把大文件流式转成 Base64 时按任意字节块 encode 为什么会得到错误结果”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答 Base64 以 3 字节为一组,需缓存余量在流尾补 padding,不能每块独立编码。
解释 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 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 将文件流压缩后发给 HTTP 客户端时,为什么 Content-Length 通常不可预知,应改用什”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明压缩输出长度依赖内容,流式场景用 chunked 或省略长度而非预读全量。
说明 highWaterMark 是背压阈值而非严格内存上限,区分字节流、对象模式和字符串编码,分析大阈值的吞吐收益与内存、排队延迟代价,并给出按实际负载测量的步骤。
围绕“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,漏调会挂起写入。
围绕“多个 Node.js Readable 同时 pipe 到同一个 Writable 时,如何避免 chunk 交错导”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答默认并发写会交错,需串行 pipeline 或自定义合流按边界帧化。
围绕“Node.js 流的 objectMode 改变了 highWaterMark 和 chunk 的什么计量方式”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答对象模式按条数而非字节计数、push 非 Buffer 对象的约束。
围绕“Node.js 用 pause/resume 对 Readable 做限速时,为什么不能保证精确速率,还要配合什么机”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答 pause 只停止事件投递不撤销已缓冲数据,精确限流需令牌桶并尊重 drain。
比较 pipe 的连接与背压能力和 pipeline 的整链完成、错误及销毁管理,用对象转换示例验证成功与中途失败,并说明 HTTP 响应销毁后无法补写错误页及流外资源的清理责任。
围绕“Node.js stream/promises 的 pipeline 与 finished 相比事件回调写法解决了哪”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答 Promise 化便于 await 完成或失败并统一清理,但仍不替代业务状态码处理。
解释 read 返回 null 的多种情况,区分生产方 push(null)、缓冲读完和 end 事件,并用可控 Readable 示例验证暂时无数据、随后到达的数据以及 readableEnded 的变化。
围绕“消费方对 Node.js Readable 调用 destroy 后,底层定时器或数据库游标为什么不一定自动释放”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答自定义流需实现 _destroy 释放外部资源,destroy 只保证流生命周期回调。
围绕“Node.js Readable.from 把数组或异步迭代器转成流时,背压是否自动生效”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答 Readable.from 按拉取节奏消费迭代器并支持对象模式,但仍受下游 write/drain 制约。
围绕“Node.js 流式按 chunk 解码 UTF-8 时,为什么不能直接对每个 Buffer 调 toString ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明多字节字符可能落在 chunk 边界,需 StringDecoder.write/end 保留未完成序列。