面试官,我是燕双非:互联网大厂 Java 面试实录(Spring Boot + Kafka + Redis + AI/RAG)
场景:互联网大厂 Java 求职者面试
面试官神情严肃,翻开简历,抬头看向坐在对面的燕双非。
面试官:我们今天聊一个内容社区 + AIGC 的业务场景。你负责一个“AI 帮用户生成帖子标题、摘要,并自动推荐标签”的后端服务。先从基础开始。
第一轮:Java 基础、JVM、构建与 Web
1.你在 Java 17 里,为什么很多大厂项目仍然会关注 Java 8/11 的兼容性?
2.线上接口偶发 Full GC,你会怎么从 JVM 角度定位是堆内存、元空间还是代码缓存问题?
3.你们这个 AIGC 标题生成服务,为什么会选 Spring Boot 而不是传统 Spring MVC + XML?
4.如果用户请求量突然上涨 10 倍,你会怎么结合 WebFlux 或普通线程池模型评估架构取舍?
燕双非:Java 8/11/17 都得看,因为很多业务系统升级节奏慢,尤其一些依赖库还没完全适配新版本。JVM 问题我一般先看 GC 日志,再看堆外内存、元空间和线程栈占用。Spring Boot 上手快,自动装配省事,适合这种快速迭代的 AI 服务。至于 WebFlux,我觉得如果是高并发 I/O 场景可以考虑,但要看团队是不是能驾驭得住。
面试官:回答得还算完整。说明你不是只会背八股,至少知道“选型要看业务”和“排查要看日志”。
面试官接着在白板上画出服务架构:API 网关、内容生成服务、标签服务、消息队列、缓存层。
5.这个服务如果要做灰度发布和快速回滚,你会怎么结合 Maven/Gradle 的构建产物管理来设计?
燕双非:构建工具主要保证产物一致性,Maven 更常见,Gradle 更灵活。灰度发布的话,我会保证版本号、依赖锁定和制品仓库可追踪,回滚时直接切回上一个稳定版本。
面试官:不错,至少知道构建不是“能打包就行”,而是发布治理的一部分。
第二轮:数据库、缓存、消息与一致性
1.用户发帖后,AI 生成摘要、标签、封面图都需要异步处理,你会用 Kafka 还是 RabbitMQ?为什么?
2.这个社区服务里,用户点击“立即发布”后要求 3 秒内页面可见,但标签推荐可以稍后补全。你怎么设计数据库写入和消息投递的一致性?
3.你会如何用 Redis 做热点内容缓存?如果热点文章突然被大量读取,怎么防止缓存击穿和雪崩?
4.订单式场景和内容式场景的缓存策略有什么区别?这里我们不卖货,但你可以类比说明。燕双非:Kafka 更适合这个场景吧,吞吐高,适合异步流水线;RabbitMQ 路由灵活,适合复杂规则。数据库一致性我会尽量用本地消息表或者事务消息,先落库再发消息,失败就补偿。Redis 热点缓存可以加随机过期时间,互斥锁防击穿,提前预热防雪崩。内容场景更偏读多写少,缓存命中率要高;订单场景更强调强一致和状态流转。
面试官:可以,知道“内容社区”和“交易系统”不是一回事,这点很重要。
面试官继续追问。
5.你会怎么用 MyBatis、JPA 或 Spring Data JDBC 处理内容表与标签表的关系?
燕双非:如果查询逻辑复杂、性能要求高,我更倾向 MyBatis;如果领域模型比较清晰,JPA 适合表达关系;Spring Data JDBC 简单直接,适合轻量场景。内容和标签一般是多对多,我会根据业务访问模式来决定是否拆读模型。
第三轮:微服务、安全、监控与 AI/RAG
1.如果这个 AI 生成服务要做成微服务集群,你会怎么用 Spring Cloud、OpenFeign 和 Resilience4j 设计调用链路?
2.用户输入可能包含敏感信息,AI 服务又会调用外部 embedding 模型和向量数据库。你会怎么用 Spring Security、JWT、OAuth2 做鉴权与权限控制?
3.现在业务要求“根据企业知识库生成帖子并自动回答评论”,你会怎么理解 RAG、Agent、工具调用标准化和向量检索?
4.如果线上出现“模型胡说八道”,你怎么从监控、日志和链路追踪角度定位是提示词问题、检索问题还是模型问题?
燕双非:Spring Cloud 负责服务治理,OpenFeign 方便调用,Resilience4j 做熔断降级和限流。安全方面 JWT 适合无状态认证,OAuth2 用于第三方授权或统一登录,Spring Security 负责整个访问控制链。RAG 就是先检索再生成,Agent 则是让模型能调用工具完成多步任务,向量检索和向量库主要做语义匹配。至于幻觉问题,我会看监控指标、请求日志、检索命中率、上下文长度和模型输出,再区分是召回不准还是提示词不够约束。
面试官:这轮明显比前面难,你答得有方向,但还缺少一些细节。比如工具调用的边界、检索召回策略、提示词模板控制这些还可以再展开。
面试官合上电脑,淡淡地说:
面试官:今天就到这里,你先回去等通知吧。
面试问题详细解答
1. Java 8/11/17 兼容性
大厂项目常常存在多版本并存的现实。Java 8 生态成熟,许多中间件和老业务依赖仍以它为基线;Java 11 是长期支持版本,适合稳步升级;Java 17 引入了更现代的语言特性和更好的性能表现。实际选型要看依赖兼容、团队升级成本、运行时稳定性以及运维环境统一性。
2. JVM 排查 Full GC
定位 Full GC 不能只看“GC 多不多”,要看是什么区域压力导致。若堆空间不足,常见表现是对象分配快、老年代晋升快;若元空间不足,常见于动态代理、类加载过多;若代码缓存压力大,可能与大量 JIT 编译相关。排查时建议结合 GC 日志、jstat、jmap、MAT、以及线上监控平台综合分析。
3. Spring Boot 选型原因
Spring Boot 的核心价值是快速开发、约定优于配置和生态整合。AIGC 或内容生成服务通常需要快速试错、频繁迭代,Boot 在自动配置、starter 依赖管理、Actuator 监控、外部配置化方面非常合适。相比传统 XML 配置,Boot 更易维护和标准化。
4. WebFlux 的适用场景
WebFlux 适合大量 I/O 等待、连接数高、响应链路长的场景,例如网关聚合、流式接口、SSE 或大规模长连接。它不是“性能一定更好”的万能药;如果团队更熟悉阻塞式模型、业务逻辑复杂且 CPU 密集,传统 Spring MVC 往往更稳妥。
5. Maven/Gradle 与灰度发布
构建工具不仅是打包工具,更关系到制品可追溯性、依赖一致性和发布流程。灰度发布要求每个版本可识别、可回滚、可审计。通常需要固定依赖版本、记录构建号、将制品上传到制品库,并在部署系统中按版本切流。Gradle 适合灵活构建,Maven 生态成熟,二者都可支撑规范化发布。
6. Kafka 与 RabbitMQ 选择
Kafka 适合高吞吐、事件流、日志采集、异步流水线,能很好支撑内容社区的“发帖后异步推荐标签、生成摘要、分析审核”等场景。RabbitMQ 更偏复杂路由、低延迟消息分发和业务规则灵活的场景。如果系统后续要做多消费者的数据管道,Kafka 通常更合适。
7. 数据库与消息一致性
常见目标是“业务不丢、消息不乱、可补偿”。可采用本地消息表、Outbox 模式、事务消息或可靠消息最终一致方案。核心原则是先保证主业务落库成功,再推动异步事件出站。消费端需要幂等设计,避免重复消费造成脏数据。
8. Redis 热点缓存治理
内容社区典型“读多写少”,Redis 非常适合热点文章、推荐列表、标签词典等场景。防击穿可以用互斥锁或单飞策略;防雪崩可以使用随机过期时间、分批预热、不同层级缓存;防穿透则可用布隆过滤器或空值缓存。缓存策略要结合内容热度分层设计,而不是所有数据一把梭。
9. MyBatis、JPA、Spring Data JDBC 选择
MyBatis 适合复杂 SQL、强性能控制和大量定制查询;JPA 适合领域模型清晰、关系映射明显的业务;Spring Data JDBC 则更轻量,适合简单 CRUD 和边界清晰的聚合设计。内容与标签这种多对多关系,若读取模式复杂,常会采用读写分离或专门的查询模型。
10. Spring Cloud、OpenFeign、Resilience4j
微服务场景下,OpenFeign 简化调用,Spring Cloud 提供配置、注册、负载均衡等基础能力,Resilience4j 负责熔断、限流、舱壁隔离、重试等韧性治理。对于 AI 服务链路,某一环节失败不应拖垮整条链路,必须有降级策略与兜底响应。
11. JWT、OAuth2、Spring Security
JWT 适合无状态认证,便于服务间传递身份信息;OAuth2 适合第三方授权、统一登录和授权委托;Spring Security 则负责认证、鉴权、权限模型和方法级安全控制。若系统要对企业用户、运营后台、第三方应用做权限隔离,安全体系必须分层设计。
12. RAG、Agent、工具调用
RAG 的核心是“先检索,再生成”,通过向量化、语义检索、文档切分和召回增强来提高回答准确性。Agent 则更进一步,允许模型按计划调用工具完成任务,例如查询知识库、调用业务 API、生成摘要、写入工单。工具调用标准化可以让模型更稳定地与外部系统交互,减少幻觉和格式错误。
13. AI 幻觉排查
AI 幻觉常见原因包括:检索召回质量差、上下文过长导致信息稀释、提示词约束不足、模型本身推理偏差、工具输出不稳定。定位时应结合日志、链路追踪、召回率、命中率、用户反馈与输出质量评估。工程上通常通过更强的检索、引用来源、结构化提示词、输出校验和人工兜底来降低风险。
感谢阅读,希望这篇互联网大厂 Java 面试实录能帮助你在技术面试中更有思路,也更能把知识点和真实业务场景联系起来。祝大家面试顺利,早日拿到满意的 offer!