Node.js 中 Buffer 分配的内存归谁管理,为什么大量 Buffer 可能导致 RSS 高但堆不大?
围绕“Node.js 中 Buffer 分配的内存归谁管理,为什么大量 Buffer 可能导致 RSS 高但堆不大”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 Buffer 走 V8 堆外分配与回收时机,及对内存容量规划的影响。
Node.js · 服务端工程面试题第 1 页,显示第 1–42 题,共找到 42 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“Node.js 中 Buffer 分配的内存归谁管理,为什么大量 Buffer 可能导致 RSS 高但堆不大”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 Buffer 走 V8 堆外分配与回收时机,及对内存容量规划的影响。
围绕“Node.js 长驻服务中 setInterval 定时任务在模块重建或关闭时不清理会造成什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明重复注册导致任务叠加与内存增长,以及关闭路径统一清理的设计。
区分 HTTP 解析层 clientError、服务器 error 和业务异常,说明监听器接管连接清理、400 与 431、重复触发及原始报文日志边界,并给出受控原始连接测试方法。
围绕“Node.js 服务支持配置热更新时,哪些配置项可以安全热更、哪些必须重启进程”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分运行期可变配置(阈值、开关)与启动期固化资源(端口、池大小)的边界。
围绕“在 Node.js 中为什么数据库访问必须使用连接池而不是每请求新建连接,池大小如何确定”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出建连成本与数据库承载上限两方面的权衡及池大小估算思路,不绑定具体某个池库 API。
围绕“Node.js 生产服务中大量使用 console.log 可能带来哪些性能问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 stdout 为管道/TTY 时的同步写行为与高并发下的阻塞风险。
围绕“Node.js 服务 CPU 飙高时,如何不重启进程通过 inspector 信号或 --cpu-prof 采集 C”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明采集入口(CLI 参数、SIGUSR1 触发 inspector)与火焰图分析思路。
围绕“Node.js 的 diagnostics_channel 模块如何用于在不侵入业务代码的情况下做请求链路埋点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 channel 发布/订阅模型及内置模块已埋点的利用方式。
围绕“Node.js 的 domain 模块为什么被废弃,现在用什么机制做请求级错误上下文传播”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须指出 domain 的缺陷及 AsyncLocalStorage/AsyncHooks 作为替代的定位。
围绕“Node.js 服务的配置为什么推荐通过环境变量注入,如何用 process.env 做带校验与默认值的配置加载”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明配置与代码分离的理由及启动期 fail-fast 校验设计。
围绕“Node.js 的 MaxListenersExceededWarning 警告出现说明什么,真的是内存泄漏吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明默认 10 个监听器的提示性质与真正泄漏的甄别方法。
围绕“Node.js 如何度量事件循环延迟(event loop lag),该指标升高说明服务出了什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出 setInterval 偏差或 monitorEventLoopDelay 的度量方式及升高的含义(同步阻塞/GC)。
围绕“Node.js 服务进程退出码(0/1 及 process.exitCode 与 process.exit())应该”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明设置 exitCode 让事件循环自然排空优于立即 exit()(避免截断异步写)。
围绕“在 Express 4 中如何为所有异步路由统一建立错误边界而不漏掉 Promise 拒绝”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出包装函数或路由层统一 catch 转 next(err) 的模式及漏包后果。
围绕“Express 的错误处理中间件为什么必须是四个参数,异步路由抛错为何不会自动进入它”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明按函数长度识别错误中间件及 Express 4 不捕获 Promise 拒绝的边界(注明版本)。
按停止接流量、排空请求、停止后台任务和关闭资源设计 Node.js 停机流程,说明 SIGTERM 监听责任、重复信号、长连接与硬截止时间,避免承诺无条件不丢请求。
围绕“Node.js 进程句柄(handle)泄漏导致无法退出,如何用 process._getActiveHandles”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明活动句柄/请求阻止事件循环退出的机制与定位手段。
围绕“Node.js 服务的 liveness 与 readiness 健康检查接口应该分别检查什么,为什么不能混用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分进程存活与可接流量(依赖就绪)的语义及失败时的不同后果。
围绕“Node.js 出站 HTTP 请求如何通过 http.Agent 的 keepAlive 与 maxSockets”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 Agent 池化参数对下游服务并发的约束作用及默认值含义。
按响应后空闲、请求头接收和完整请求接收区分 Node.js HTTP 超时,解释代理连接池复用竞态及 keepAliveTimeoutBuffer 的版本边界,给出逐跳排查与验证方法。
围绕“Node.js 实现静态资源服务时如何正确响应 Range 请求头(206/416)”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出 Range 解析、206 与 416 状态及对应头部设置规则。
解释请求体应在读取时累计真实字节,区分 Content-Length 提前拒绝、分块传输、UTF-8 字节数和解压上限,提供可测试预算函数,并说明 413 与 socket 关闭的协调。
按监听器、空闲连接、活动请求和升级协议比较三个 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 核数定池容及结构化克隆消息开销的权衡。