
Java 面试实录Spring Cloud Kafka Redis AI RAG 在企业协同 SaaS 场景中的 3 轮追问场景某互联网大厂企业协同与 SaaS 业务线面试现场。人物严肃面试官、搞笑水货程序员燕双非。第一轮基础架构与业务模型面试官如果我们现在做一个企业协同 SaaS支持组织、成员、权限、审批流和通知你会先怎么设计 Java 服务端架构燕双非先把 Spring Boot 搭起来分成用户、组织、审批、通知几个模块数据库先 MySQL接口先 REST能跑起来再说。面试官思路是对的先拆核心域再逐步演进。那你为什么会选 Spring Boot而不是传统 Jakarta EE 或者 Struts燕双非Spring Boot 配置少启动快生态全。Struts 太老了Jakarta EE 也行但我怕我记配置怕到秃头。面试官哈哈配置少确实是 Boot 的优势。那在 Java 17 下你会特别关注哪些 JVM 或语言特性燕双非嗯……比如 record、switch 表达式、sealed class、还有垃圾回收我觉得应该更丝滑一点。面试官不错至少方向没跑偏。record 适合做 DTOsealed class 适合控制继承层次JVM 这块要关注 GC、内存和线程模型。面试官如果组织成员很多权限判断频繁你会怎么做缓存燕双非Redis 缓一下权限树热点成员信息也可以放 Caffeine双层缓存减少数据库压力。面试官回答得不错说明你知道本地缓存和分布式缓存的分工。第二轮消息通知、幂等与可观测性面试官审批通过后要发站内信、邮件和企业微信通知流量高峰时怎么保证消息不丢燕双非可以用 Kafka 做异步通知审批服务只负责发事件通知服务消费后再去发各渠道消息。面试官为什么不是同步直连通知服务燕双非同步的话审批链路会变长而且通知挂了会影响主流程。异步可以解耦用户体验也更稳。面试官如果 Kafka 重复消费了怎么办燕双非嗯……那就做幂等。可以用业务唯一键比如审批单号加通知类型落库前先查一下或者用 Redis setnx 先挡一下。面试官这个回答就比较像样了。你还知道哪些幂等方案燕双非消息消费记录表、分布式锁、数据库唯一索引都可以核心是业务上不能重复发。面试官很好。那如果我们要监控通知链路的延迟和失败率你会接什么组件燕双非Micrometer 采集指标Prometheus 抓取Grafana 看图日志用 SLF4J 配 Logback链路追踪可以接 Zipkin 或 Jaeger。面试官很不错已经有生产环境的味道了。那如果某个接口突然慢了你先看哪里燕双非先看日志和链路再看数据库慢查询、线程池、Redis 命中率还有 Kafka 堆积情况。面试官对排障要从业务入口一路往下看。第三轮AI 助手、搜索与复杂工作流面试官现在公司想加一个 AI 助手能回答员工“怎么走报销流程”“审批卡在哪了”“如何查制度”你会怎么做燕双非我会做一个企业文档问答系统先把制度、流程、FAQ 文档加载进来切分后做向量化存到 Milvus 或 Redis 向量能力里再做语义检索。面试官很好继续。燕双非然后用 RAG把检索到的上下文拼给大模型减少 AI 幻觉。Spring AI 可以封装模型调用后面还可以做 Agent让它自己决定查流程、查审批、查消息。面试官不错你已经提到了 Agentic RAG。那工具调用怎么标准化燕双非可以把查审批、查知识库、查工单都抽成工具通过统一的工具调用协议暴露给模型模型按需要编排执行。面试官如果用户问“我的报销为什么没过”系统需要串联审批、消息、权限和文档多个服务你怎么保证体验燕双非可以设计复杂工作流先查用户身份和权限再查审批节点和历史消息最后结合制度文档给出解释。长流程就异步化前台给进度后台继续查。面试官那如果 AI 回答错误怎么办燕双非加引用来源控制回答边界关键结论要能回溯原文高风险场景不让它直接拍脑袋必要时引导用户转人工。面试官这个方向是对的。今天先到这里你回去等通知吧。面试题详细解析1. 为什么企业协同 SaaS 适合用 Spring Boot 做服务端基础企业协同 SaaS 常见特点是模块多、变化快、交付频繁。Spring Boot 提供自动配置、Starter 依赖管理和内嵌容器适合快速搭建服务。在组织、成员、权限、审批、通知等模块中开发者可以专注业务而不是配置。相比传统 Jakarta EE 或 StrutsBoot 的工程化体验更好适合大厂持续迭代。2. Java 17 与 JVM 在面试中常被关注什么Java 17 是长期支持版本常见关注点包括 record、sealed class、pattern matching、switch 表达式等语言特性。record 适合承载不可变 DTO减少样板代码sealed class 可约束继承层级适合做状态机、权限类型等建模。JVM 层面则常问 GC、内存模型、线程池、类加载和 JIT 优化尤其是在高并发 SaaS 场景下如何避免 Full GC 和内存抖动。3. Redis 与 Caffeine 在权限缓存中如何配合权限判断是高频读场景适合