为什么 for await 遍历 Node.js Readable 时提前 break 会自动销毁流,这替代不了哪种显式错误处理?
围绕“为什么 for await 遍历 Node.js Readable 时提前 break 会自动销毁流,这替代不了哪种”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明异步迭代消费触发读并在提前退出时销毁流,但仍需捕获迭代抛出的上游错误。
流与二进制专题面试题第 1 页,显示第 1–47 题,共找到 47 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“为什么 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,漏调会挂起写入。
围绕“Node.js 用 Transform 解析 NDJSON 时,最后一块没有换行也应产出一条记录,应放在哪里处理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖实现时要设计按行缓存,flush 把剩余缓冲作为最后记录并处理空行。
围绕“多个 Node.js Readable 同时 pipe 到同一个 Writable 时,如何避免 chunk 交错导”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答默认并发写会交错,需串行 pipeline 或自定义合流按边界帧化。
围绕“Node.js 流的 objectMode 改变了 highWaterMark 和 chunk 的什么计量方式”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答对象模式按条数而非字节计数、push 非 Buffer 对象的约束。
围绕“用 Node.js PassThrough 给上传流统计字节数时,它是否改变数据内容,又如何避免自身成为背压死角”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明 PassThrough 原样透传但仍是独立缓冲环节,统计需放在 _transform 并让下游控制流速。
围绕“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 net.Socket 作为 Duplex 出现 EAGAIN 或写返回 false 时,应用层应暂停”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要指出 Socket 写端缓冲满应停推上游待 drain,读端 pause 控制入流量。
围绕“Node.js 把一个上传流同时写磁盘和转发到远端时,复制成两个 PassThrough 为什么会放大背压”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明任一分支变慢都会要求源端暂停,需按最慢消费者限速或落盘缓冲解耦。
围绕“Node.js Transform 按行切分文本时,换行符被拆到两个 chunk 应如何保留状态而不丢行”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖实现时要设计内部残留缓冲区,仅在遇到完整分隔符时 push,结束在 flush 处理最后半行。
围绕“Node.js Transform 的 _transform 与 _flush 分别适合处理哪类边界,GZIP 收尾”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要区分逐块转换与流结束前补尾部状态,给出跨 chunk 数据需要在 flush 输出残量。
围绕“Node.js 流式按 chunk 解码 UTF-8 时,为什么不能直接对每个 Buffer 调 toString ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明多字节字符可能落在 chunk 边界,需 StringDecoder.write/end 保留未完成序列。
围绕“Node.js Worker 返回 ArrayBuffer 结果时,共享 SharedArrayBuffer 与 p”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要比较共享内存需 Atomics 同步而拷贝隔离更简单,按是否并发读写选择。
围绕“Node.js zlib 变换流在高压缩比数据上输出突增时,背压如何沿 pipeline 反向传到文件读端”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要解释写端 false 逐段停上游,压缩器内部缓冲也会受 highWaterMark 限制。