acongm

XDR 系统(魔方大屏 + 报表)- NestJS 全栈 Hard-Mode 面试题

覆盖:NestJS 架构与 DI、Mongo/Mongoose 建模、定时任务可靠性、报表导出链路、实时大屏性能


1. NestJS 架构与工程设计

  1. Nest 的核心设计哲学是什么?你如何用它组织复杂业务?
    • 追问:Module 的边界怎么划分?怎么避免“巨型模块”?
  2. 依赖注入(DI)带来的收益与代价是什么?你在哪些场景会避免 DI?
    • 追问:循环依赖怎么处理?如何做可测试性设计?
  3. 中间件、守卫、拦截器、管道分别解决什么问题?你给出一个真实链路示例。
    • 追问:鉴权、限流、日志、trace id、错误处理分别放哪里更合理?

2. MongoDB/Mongoose:Schema 设计与性能

  1. 你在 Mongo 里如何建模:嵌入 vs 引用(populate)的取舍?
    • 追问:在报表/大屏场景下查询模式是什么?如何反推 schema?
  2. 索引怎么设计?你如何避免“索引很多但仍然慢”?
    • 追问:复合索引、覆盖索引、索引选择性、慢查询分析怎么做?
  3. 聚合管道(aggregation)用在什么场景?如何控制聚合的资源消耗?
    • 追问:$lookup 的代价是什么?有没有预计算/物化视图思路?

3. 定时任务:可靠性与可观测性

  1. 你用 @nestjs/schedule 做 cron:如何保证任务“不重复、不漏跑”?
    • 追问:多实例部署时如何做分布式锁?
  2. 为什么需要任务队列(Bull)?和 cron 直接跑相比解决了什么?
    • 追问:失败重试、幂等、延迟任务、死信队列怎么设计?
  3. 任务监控怎么做:你如何知道任务“慢了/堆积了/失败了”?
    • 追问:监控指标与告警阈值如何定?

4. 报表导出(PDF/PPT/DOCX):链路设计

  1. 导出为什么要异步?你如何设计“提交生成 → 查询进度 → 下载”的流程?
  • 追问:进度如何估算?失败如何补偿?
  1. 模板引擎怎么选?你如何保证模板可维护、可复用、可版本化?
  • 追问:模板升级如何兼容历史报表?
  1. puppeteer 类方案在服务端的稳定性问题怎么处理?
  • 追问:并发、内存、超时、字体、中文渲染、容器化依赖怎么治理?

5. 实时大屏(ECharts + WebSocket):性能与数据策略

  1. 实时数据推送:你如何设计消息结构与订阅粒度,避免带宽与渲染被打爆?
  • 追问:全量推 vs 增量推?采样/聚合怎么做?
  1. ECharts 动态更新的性能边界在哪里?你怎么避免频繁 setOption 卡顿?
  • 追问:节流、分片、数据窗口、离屏计算(worker)怎么组合?
  1. 你如何保证“数据正确性”与“实时性”的平衡?
  • 追问:乱序、重复、丢包如何处理?重连后如何追数据?

On this page