NestJS 中如何用 onModuleDestroy 等钩子实现数据库连接的优雅关闭?
围绕“NestJS 中如何用 onModuleDestroy 等钩子实现数据库连接的优雅关闭”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明销毁钩子触发条件、enableShutdownHooks 的必要性与倒序销毁。
程序员面试题库第 54 页,收录第 2651–2700 题,共 5000 道完整解析,覆盖前端、JavaScript、React、Vue、Node.js、AI Agent、网络、数据库与系统设计。
按稳定语义路径排序
围绕“NestJS 中如何用 onModuleDestroy 等钩子实现数据库连接的优雅关闭”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明销毁钩子触发条件、enableShutdownHooks 的必要性与倒序销毁。
围绕“NestJS 的 onModuleInit 和 onApplicationBootstrap 分别在什么时机触发”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分模块依赖解析完成后与应用完全启动后两个钩子的使用场景。
围绕“NestJS 中间件无法拿到路由处理器的哪些信息,导致应改用拦截器”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖指出中间件在路由匹配前后执行、缺少 handler/class 元数据这一关键限制。
解释NestJS中imports、providers、exports的协作规则:Provider默认私有,必须导出才能被其他模块注入。通过机制说明、具体场景和边界条件,帮助理解模块作用域与依赖可见性。
围绕“NestJS 中模块可以再导出另一个模块吗?这样做意味着什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明在 exports 中放模块等于转发其全部导出 Provider 的语义。
围绕“NestJS 的 ModuleRef 如何在运行时动态获取 Provider 实例”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 ModuleRef.get 与 resolve 的区别(含瞬态作用域)。
本文解释 NestJS @Optional() 装饰器的作用:依赖缺失时注入 undefined 而非抛错;说明其适用场景、判空要求,以及不能替代默认值或条件注入等边界。
围绕“NestJS 管道的验证与数据转换两类职责分别如何实现”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖区分 transform 阶段的类型转换与抛 BadRequest 的验证逻辑。
围绕“NestJS 支持属性注入吗?与构造函数注入相比应如何选择”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 @Inject() 属性注入的适用场景(如继承基类)及可测试性差异。
围绕“NestJS Provider 的 DEFAULT、REQUEST、TRANSIENT 三种作用域有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较三种作用域的实例化时机与性能影响。
围绕“为什么 NestJS 中请求作用域的 Provider 会影响整个依赖链的性能”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释作用域冒泡导致上游单例变请求作用域的机制及规避策略。
围绕“NestJS 如何用 Reflector 配合元数据实现基于角色的 RBAC 守卫”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要讲清清 @SetMetadata 自定义装饰器与守卫读取元数据的完整链路。
围绕“NestJS 测试中如何 overrideGuard 绕过认证以专注业务逻辑测试”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 overrideGuard().useValue({canActivate:()=>true}) 的用法与适用边界。
围绕“NestJS 单元测试中如何用 overrideProvider 替换掉真实的数据库服务”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出 Test.createTestingModule 加 overrideProvider().useValue() 的替换模式。
围绕“NestJS 请求作用域的 Provider 在测试中如何被 mock”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明用 overrideProvider 提供固定值及通过 resolve 获取实例的注意事项。
围绕“NestJS 单元测试与 E2E 测试在 TestingModule 搭建上有什么关键差异”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较只编译目标模块与创建完整应用实例(含 init 与 supertest)的区别。
围绕“NestJS 中的依赖注入机制是如何工作的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 NestJS 如何通过构造函数注入解析 Provider。
围绕“TLS 的 ALPN 扩展起什么作用,它和 HTTP/2 的协商有什么关系”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确握手期间协商应用层协议(h2/http1.1)避免额外往返的机制。
围绕“ALPN 和 SNI 都是 TLS ClientHello 的扩展,它们解决的问题有何本质区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分 SNI 选证书、ALPN 选协议这两个不同职责。
围绕“证书透明(Certificate Transparency)是什么,它如何帮助发现被错误签发的证书”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释公开可审计日志与浏览器要求 SCT 的机制。
本文解释DNS中A和CNAME在数据含义、查询过程和记录共存上的差异,并分析根域名不能使用CNAME的协议原因。提供实际场景对比,帮助判断何时用A、何时用CNAME,以及根域的特殊约束。
围绕“DNS 的 CAA 记录起什么作用,它如何降低证书被错误签发的风险”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明域名持有者限定可签发 CA 的机制及 CA 签发前强制检查的要求。
本题讲清 DNS 缓存的三个层级:浏览器内存缓存、操作系统缓存、递归解析器缓存的查询顺序、各自作用与 TTL 失效边界,并给出改 DNS 不生效时的逐层排查方法。
围绕“DNS 如何配合 CDN 实现按地理位置返回不同 IP,这种调度有什么局限”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释权威服务器基于来源 IP 返回就近节点的机制及用户用公共 DNS 导致调度不准的问题。
围绕“怀疑 DNS 被劫持或污染时,如何用 dig 等工具定位问题出在哪一环”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出对比公共解析器与本地解析器结果、追踪权威应答的诊断步骤。
围绕“网页加载中 DNS 查询会带来多少延迟,前端可以用哪些手段减少解析开销”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 dns-prefetch 与 preconnect 的适用场景和差异。
围绕“DNS 的否定缓存(negative caching)是什么,为什么查询不存在的域名也会被缓存”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释 NXDOMAIN/NODATA 响应如何被 SOA 记录的 TTL 控制缓存。
围绕“DNS over HTTPS(DoH)解决了什么问题,它和传统 DNS 查询在链路上有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 DoH 将 DNS 查询封装进 HTTPS 以防窃听与篡改,并指出其绕过本地解析策略的争议,不对比 DoT 的端口细节。
本文解释 DNS 记录修改后不会立即生效的真正原因是各级缓存 TTL 未过期,而非“全球传播”需要时间;给出提前降低 TTL、等待旧缓存过期、再变更记录的具体操作方法,并讨论 TTL 过短带来的查询压力与边界条件。
本题要求讲清 DNS 解析从本地缓存到根、顶级域、权威服务器的完整查询链路,并准确区分递归查询与迭代查询在责任划分上的本质差异,含工程场景与失败边界。
围绕“什么是 Split-horizon DNS(内外网分离解析),企业内网为什么要用它”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确同一域名对内对外返回不同结果的设计动机与安全考量。
围绕“DNS 的 MX 记录和 SRV 记录分别解决什么问题,与 A 记录的定位方式有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明按服务类型定位主机与端口、优先级的机制。
围绕“DNS 记录中的 TTL 起什么作用,TTL 设置过长或过短分别带来什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 TTL 如何决定缓存有效期,并给出变更 IP 前调低 TTL 的实战策略。
围绕“DNS 查询什么时候用 UDP、什么时候会切换到 TCP”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 512 字节截断与 TC 标志触发 TCP 重试的机制。
围绕“HSTS 解决了什么问题,max-age、includeSubDomains 和 preload 各自有什么作用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释强制 HTTPS 防 SSL 剥离及首次访问前的 preload 弥补方案。
围绕“把站点从 HTTP 迁移到 HTTPS 时,301 重定向和 HSTS 应如何配合设计,迁错会有什么后果”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出全站 301、证书覆盖所有子域、谨慎开启 preload 不可逆性的决策顺序。
围绕“线上出现间歇性 TLS 握手失败,如何用 openssl s_client 和抓包定位是证书、协议版本还是 SNI ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出查看握手阶段 alert、指定 -servername、强制协议版本对比的诊断路径。
围绕“用户首次访问一个 HTTPS 站点时,从输入域名到加密连接建立,DNS 与 TLS 各自发生在哪个阶段”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按时间线串起 DNS 解析、TCP 建连、TLS 握手(含 SNI/ALPN)、发送请求的顺序,不深入任一环节内部细节(另有专题)。
围绕“HTTPS 页面加载 HTTP 资源的混合内容问题是什么,浏览器对主动与被动混合内容分别如何处理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分脚本等主动内容被阻止与图片被动内容被降级/升级的策略。
围绕“明文 SNI 会泄露用户访问的域名,ECH(Encrypted Client Hello)如何缓解这个问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 ClientHello 敏感部分加密的思路及对外层 SNI 的依赖。
围绕“TLS 中的 SNI 是什么,没有 SNI 会导致一台服务器托管多个 HTTPS 站点时出现什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释 ClientHello 中携带域名使服务器在握手前选择正确证书,及旧客户端无 SNI 的兼容问题。
围绕“SSL 剥离攻击是如何实现的,为什么仅靠 301 跳转到 HTTPS 不足以防御”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释攻击者拦截首个 HTTP 请求代理降级的过程,并指出 HSTS 才是根治手段。
围绕“TLS 1.3 的 0-RTT 恢复为什么可能遭受重放攻击,什么请求适合用 0-RTT 发送”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释 early data 无法防重放的原因及仅限幂等请求的决策。
围绕“TLS 1.3 中基于 PSK 的会话恢复是如何实现的,相比 Session Ticket 有何变化”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 ticket 即 PSK、通过 NewSessionTicket 下发及与 0-RTT 的关系。
围绕“TLS 1.3 相比 TLS 1.2 在握手流程和安全性上做了哪些关键改进”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确握手轮次从 2-RTT 降为 1-RTT、移除不安全算法、前向保密强制化。
围绕“如何用 ACME 协议(如 Let's Encrypt)实现证书自动签发与续期,DNS-01 和 HTTP-01 挑”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须对比两种质询的验证方式及通配符证书只能用 DNS-01 的限制。
围绕“TLS 证书链是什么,浏览器如何从服务器证书验证到受信任的根证书”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明中间证书逐级签名到根 CA 的信任路径及服务器漏发中间证书的后果。
围绕“访问 https://example.com 时证书签发给 www.example.com 会怎样,证书中哪些字段参”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 SAN 优先于 CN 的现代校验规则及通配符证书的匹配范围。
围绕“证书私钥泄露后如何吊销证书,CRL 和 OCSP 各自有什么缺点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须对比吊销列表下载开销与 OCSP 在线查询的隐私、可用性问题,并提 OCSP stapling。
围绕“浏览器提示证书不受信任可能有哪几类原因,如何分别排查”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分过期、域名不匹配、链不完整、自签名、系统时间错误等类别及对应检查方法。