
互联网大厂Java面试实录JVM、Spring Boot、Redis、Kafka、Spring Cloud、MCP与RAG三轮拷打一、故事背景谢飞机最近混进了一家互联网大厂的面试现场岗位是高级Java开发工程师。这家公司主营业务很复杂既有求职招聘平台也有内容社区与UGC还在做AIGC简历优化、AI客服、企业知识库问答。系统架构从单体一路演进到微服务技术栈覆盖Spring Boot、Spring Cloud、Redis、Kafka、MyBatis、JVM、Docker、Kubernetes、Prometheus、ELK最近还在试点Spring AI、MCP、RAG、向量数据库。面试官姓李风格严肃说话像线上故障复盘。谢飞机表面稳如老狗内心慌得一批但他有个特点简单题会复杂题就开始云里雾里胡侃。二、第一轮面试招聘主链路的Java基础与系统设计业务背景用户在招聘平台投递简历系统需要完成职位展示、简历投递、推荐排序、消息通知等流程。面试官先从基础架构和后端核心能力开始问。问题1你先说说招聘平台为什么大多数后端还是以 Spring Boot 为主而不是一上来就 WebFlux面试官你做过招聘系统吧如果我们做一个职位投递平台为什么很多团队还是优先 Spring Boot Spring MVC而不是直接上 Spring WebFlux谢飞机这个我会。Spring Boot 开箱即用生态好和 Spring MVC、MyBatis、Spring Security、Redis 这些都很好集成。WebFlux 也挺好就是……它比较“响应式”适合那种特别高并发、I/O很多的场景。但我们大多数招聘系统其实很多地方还是数据库操作、业务校验、权限判断比较多所以 Spring MVC 更稳一点。面试官嗯回答得还行至少没把 WebFlux 说成前端框架。那你继续说什么时候会考虑 WebFlux谢飞机比如要接很多外部服务、长连接、流式返回、AI问答流式输出、WebSocket消息推送这种可以考虑。面试官不错继续。问题2JVM 调优你做过什么如果投递高峰时服务频繁 Full GC你怎么排查面试官周一早上九点校招投递高峰投递服务突然 RT 飙高Full GC 频繁。你怎么排查谢飞机这个也见过。先看监控比如 CPU、内存、GC 次数。然后……可以看 JVM 堆是不是太小或者对象太多。再看日志必要时 dump 一下。一般我会调大堆内存比如-Xms -Xmx然后用 G1 收集器。面试官这只能算“会背关键词”。你说具体点什么对象多为什么会多谢飞机呃……可能是简历列表查询查太大了一次查几千条放进内存了。也可能是 JSON 序列化对象太多或者缓存没用好。还有就是线程池堆积任务那个……对象一直释放不掉。面试官行勉强有点思路继续。问题3职位列表接口你会怎么做缓存Redis、Caffeine、Spring Cache 各怎么用面试官职位列表是高频读接口首页和搜索页流量大你怎么做缓存设计谢飞机这个简单。Redis 放分布式缓存多个服务都能用。Caffeine 放本地缓存速度快。Spring Cache 就是方便不想每次手写缓存逻辑时可以用注解。面试官你这回答像目录不像方案。实际怎么组合谢飞机可以二级缓存嘛。先查 Caffeine本地没有再查 RedisRedis 没有再查数据库。热点职位、热门搜索条件可以缓存。然后设置过期时间避免缓存雪崩。再加随机过期时间防止一起失效。面试官还行终于说到点子上了。问题4MyBatis、JPA、Hibernate 在这个招聘系统里你怎么选面试官你别只会背框架名。职位搜索、简历投递、用户画像这三类业务你会怎么选 ORM 层方案谢飞机我一般会选 MyBatis。SQL 可控复杂查询方便。JPA 和 Hibernate 适合那种增删改查比较标准的业务。比如用户基础信息、企业基础档案这些可以用 JPA。复杂搜索、报表统计、多表联查还是 MyBatis 更顺手。面试官嗯这个回答不错。那数据库变更怎么做版本管理谢飞机Flyway 或 Liquibase。每次建表、加索引、字段变更都要脚本化跟代码一起走发布流程。面试官可以至少干过活。三、第二轮面试微服务、消息队列与稳定性治理业务背景平台已经拆成多个服务用户服务、职位服务、投递服务、推荐服务、消息服务、风控服务。这一轮重点考察微服务拆分、异步化、容错治理。问题1简历投递成功后为什么不直接同步调用消息服务、推荐服务、风控服务面试官用户点击“投递简历”你要同步调用消息服务发通知、调用推荐服务更新画像、调用风控服务审查内容。你会全同步做吗谢飞机不会。因为同步调用太多链路会变长接口容易慢还容易一个服务挂了拖死全部。所以可以把部分流程异步化比如发 Kafka 或 RabbitMQ。面试官那哪些适合同步哪些适合异步谢飞机投递主流程里核心写库得同步比如投递记录必须先成功。通知、画像更新、埋点、统计这些可以异步。风控嘛……如果是强校验就同步如果是补充审核就异步。面试官这个回答不错有业务意识。问题2Kafka、RabbitMQ、Pulsar 你怎么选面试官你刚提了 MQ。那你说说在招聘平台里投递事件流、通知消息、AI处理任务这三类场景怎么选 Kafka、RabbitMQ、Pulsar谢飞机Kafka 吞吐高适合大数据日志流、埋点流、推荐事件流。RabbitMQ 比较适合业务消息路由灵活。Pulsar……也挺强存算分离功能比较全。如果公司已经有 Kafka就先用 Kafka。面试官这回答有点“见过 PPT”。再具体点。谢飞机比如投递行为流、推荐特征流用 Kafka短信、站内信、邮件通知用 RabbitMQAI 异步任务如果要求租户隔离强、积压处理灵活Pulsar 也可以考虑。面试官行至少比刚才强。问题3Spring Cloud 里 OpenFeign、Gateway、Resilience4j 分别怎么配合面试官一个微服务系统里用户服务调职位服务、推荐服务、AI服务链路复杂。你说说 OpenFeign、Gateway、Resilience4j 怎么用谢飞机Gateway 放最前面做统一路由、鉴权、限流。OpenFeign 是服务间调用。Resilience4j 用来做熔断、限流、重试、隔离。面试官那如果 AI 简历优化服务很慢经常超时怎么办谢飞机Feign 调用超时要设置合理一点别无限等。Resilience4j 可以做超时控制、熔断。还可以降级比如先返回“简历优化任务已提交请稍后查看结果”。面试官不错这个回答是在线上的。问题4注册中心你会选 Eureka 还是 ConsulDubbo 或 gRPC 又怎么插进来面试官你们老系统可能是 Netflix OSS新系统可能想上 Consul部分高性能内部调用还想上 Dubbo 或 gRPC。你怎么理解这几种组合谢飞机Eureka 以前用得多但现在很多团队会转向 Consul。Consul 功能更全一点服务发现、健康检查都比较好。Dubbo 适合 Java 内部高性能 RPC。gRPC 更适合跨语言。如果 AI 服务有 PythonJava 调 Python我觉得 gRPC 比较合适。面试官嗯这个方向对。那序列化怎么选谢飞机内部高性能一般 Protobuf普通 HTTP 接口还是 Jackson JSON 最方便。如果做日志或离线传输Avro 也有场景。面试官还行。四、第三轮面试AI、MCP、RAG、安全与可观测性业务背景公司要做一个“AI求职助手”支持简历优化、岗位问答、企业知识库问答、智能客服。要求接入企业内部知识库尽量减少大模型胡说八道还要能接工具。问题1你说说 MCP、RAG、Agent 在 AI 求职助手里分别是干什么的面试官别背概念放到业务里讲。我们要做 AI 求职助手MCP、RAG、Agent 各自负责什么谢飞机RAG 我知道是先检索资料再让大模型回答减少胡说。Agent 就是让模型自己规划步骤、调用工具。MCP……就是工具调用标准化像一个协议把模型和工具接起来。面试官嗯这个还算靠谱。那在求职助手里怎么落地谢飞机比如用户问“某岗位面试重点是什么”先通过 RAG 去检索岗位JD、题库、企业知识库。如果用户要“帮我优化简历并投递”那 Agent 可以拆步骤。MCP 就用来统一接简历解析工具、职位搜索工具、投递工具、通知工具这些。面试官不错这个回答值得加点分。问题2怎么减少 AI 幻觉只说“加 RAG”不够。面试官如果求职助手乱编公司福利、乱编岗位要求你怎么治理幻觉问题谢飞机这个……主要就是 RAG。把知识库喂给它。然后提示词写严谨一点让它不要乱说。面试官太泛了继续。谢飞机呃还可以做答案引用来源。检索不到就明确说“暂无依据”。再做召回排序比如向量检索加关键词检索一起上。还有就是模型输出后做一些规则校验。面试官这就好多了继续。问题3向量数据库、Embedding、语义检索怎么选型面试官企业知识库有岗位JD、面试题库、员工手册、培训文档怎么做语义检索谢飞机先把文档切块再做 Embedding向量化后存到 Milvus、Chroma 或 Redis 这种向量库里。用户提问时把问题也向量化然后做相似度检索。再把召回结果拼到 prompt 里给大模型。面试官那为什么有时候还要加 Elasticsearch谢飞机因为纯向量检索可能对关键词不敏感。像岗位名、城市名、薪资范围这种强过滤条件ES 做关键词和条件过滤更好。可以做混合检索。面试官不错这个回答是可以的。问题4这个 AI 系统怎么做安全和监控面试官AI求职助手要接用户简历、企业内部文档还要访问投递接口。安全和观测你怎么做谢飞机安全这块要做 Spring Security、JWT、OAuth2。内部统一身份可以对接 Keycloak。接口要做权限控制、审计日志、敏感字段脱敏。传输层走 HTTPS敏感数据加密必要时可以用 Bouncy Castle 做一些加密能力。面试官监控呢谢飞机Micrometer 打指标Prometheus 采集Grafana 看图。日志进 ELK。链路追踪用 Jaeger 或 Zipkin。AI 这边还要看模型响应耗时Token 消耗检索命中率幻觉反馈率工具调用成功率面试官这题答得不错终于像个干过 AI 项目的人了。五、面试结束面试官今天先到这里。你的基础还行部分问题有实战痕迹但复杂场景的深度还不够尤其是 JVM 细化分析、消息一致性、AI治理细节这块还要再补。你先回去等通知吧如果后面流程推进我们 HR 会联系你。谢飞机好的李老师我回去先把 JVM、Kafka、RAG 和工资期望一起复习一下。六、详细答案解析把业务场景和技术点讲透1. 为什么招聘平台常用 Spring Boot Spring MVC而不是直接上 WebFlux业务背景招聘平台的核心链路通常包括职位列表查询简历投递用户中心企业后台管理消息通知这类业务大量依赖数据库事务、权限校验、缓存访问、第三方接口调用。虽然并发高但很多瓶颈不一定在 Servlet 模型而是在数据库、缓存、下游依赖和系统治理。技术结论Spring Boot Spring MVC生态成熟与 MyBatis、JPA、Spring Security、Redis、Kafka 集成方便团队开发维护成本低Spring WebFlux更适合高 I/O、长连接、流式响应场景例如AI 对话流式输出WebSocket 消息流大量并发调用外部服务SSE 推送面试要点面试时不要说谁“绝对更先进”而是要强调业务类型团队能力生态成熟度系统瓶颈位置2. JVM 调优到底怎么排查 Full GC业务背景在投递高峰期短时间大量用户发起请求会导致对象创建量暴增JSON 序列化压力大大分页查询/大对象加载缓存未命中导致数据库回源线程池任务堆积这些都可能引发 Young GC 频繁进一步演变为 Full GC。排查路径先看监控CPU内存GC 次数GC 停顿时间堆使用趋势看 GC 日志是否老年代增长过快是否存在频繁晋升是否回收效果差看堆 Dump用 MAT、jmap 等工具分析大对象、可疑引用链排查是否有内存泄漏回到代码和业务是否一次查太多数据是否把简历全文、附件、富文本一次性加载进内存是否缓存设计不合理是否线程池队列堆积导致对象迟迟不释放常见优化手段合理设置-Xms -Xmx优先使用 G1Java 11/17 中常见避免大对象和超大分页优化 JSON 序列化与对象拷贝用 MapStruct 替代部分反射型转换热点数据走 Redis / Caffeine 缓存控制线程池大小和队列长度3. Redis、Caffeine、Spring Cache 应该怎么组合业务背景职位列表、热门职位、公司详情页、推荐标签这类接口通常读多写少非常适合做缓存。典型方案二级缓存一级缓存Caffeine本地缓存访问快适合热点高频数据二级缓存Redis分布式共享缓存多实例统一访问封装层Spring Cache通过注解降低模板代码量缓存问题治理缓存穿透查不到的数据也短暂缓存布隆过滤器辅助缓存雪崩过期时间加随机值热点数据预热缓存击穿热点 Key 加互斥锁/单飞机制使用逻辑过期面试加分点能说出“本地缓存 分布式缓存 注解封装 过期策略 一致性治理”就比只会说 Redis 强很多。4. MyBatis、JPA、Hibernate 怎么选选择思路MyBatis复杂 SQL、报表、多表联查、分页优化更灵活JPA / Hibernate标准 CRUD 开发效率高适合领域模型比较稳定的业务招聘系统中的建议用户基础资料、企业资料JPA/Hibernate 可考虑职位搜索、投递报表、推荐数据分析MyBatis 更实用数据版本管理Flyway / Liquibase连接池HikariCP 优先现代项目里比 C3P0 更常见5. 为什么投递主流程要拆同步和异步业务背景用户点击“投递简历”后可能涉及写投递记录校验岗位状态风控审核发送站内信/短信/邮件更新推荐系统画像埋点统计AI 生成投递建议如果全部同步执行会导致接口耗时长下游一挂全挂用户体验差拆分原则同步做核心异步做扩展同步投递记录写库关键业务校验强一致风控校验异步通知发送埋点统计推荐画像更新离线特征计算AI 后处理任务相关技术Kafka高吞吐事件流RabbitMQ灵活业务消息Pulsar多租户、存算分离场景JMS / ActiveMQ偏传统系统兼容场景6. OpenFeign、Gateway、Resilience4j 怎么配合典型职责Gateway统一入口路由、鉴权、限流、黑白名单OpenFeign服务间 HTTP 调用Resilience4j熔断、限流、重试、隔离、超时控制业务案例AI简历优化服务平均耗时 3 秒偶发超时 10 秒。如果投递服务直接同步等待就会拖慢整体链路。优化方式Feign 设置合理超时Resilience4j 设置timeoutretrycircuit breakerbulkhead降级响应“任务已提交稍后查看结果”面试亮点不是只说“用了熔断”而是说出哪类服务需要熔断哪类服务适合降级哪类服务不能重试防止重复写7. Kafka、RabbitMQ、Pulsar 怎么选对比思路Kafka适合用户行为日志推荐特征流埋点数据大数据消费链路特点高吞吐顺序分区适合流式处理Flink/SparkRabbitMQ适合站内信邮件短信业务通知灵活路由特点路由模型丰富业务消息友好Pulsar适合多租户大规模消息积压存算分离架构面试回答模板不要说“哪个好”要说“不同业务适合不同 MQ”。8. AI 场景里MCP、RAG、Agent 分别是什么RAG检索增强生成先从知识库中检索相关内容再把检索结果提供给模型回答适合岗位问答企业制度问答面试题解析简历优化建议Agent智能代理能理解目标能拆解步骤能调用工具能在复杂流程中执行多步任务适合帮用户做多轮求职任务如“分析简历 - 匹配岗位 - 生成投递建议 - 发送提醒”MCP模型上下文协议统一模型和工具之间的调用方式让模型通过标准协议访问外部能力适合调职位搜索工具调简历解析工具调通知工具调知识库检索工具9. 如何减少 AI 幻觉常见方法RAG 提供真实上下文混合检索向量检索 关键词检索结果引用输出答案时附来源检索不到就拒答不要强行编Prompt 约束明确“没有依据不要生成”输出后校验对薪资、地点、岗位要求等关键字段做规则校验人工反馈闭环收集错误答案优化知识库和检索链路面试亮点只说“加 RAG”是不够的必须说到检索质量召回排序拒答机制引用来源规则校验10. 向量数据库、Embedding、语义检索如何落地基本流程文档加载JD、题库、制度文档、FAQ、企业知识库文档切块按段落、主题、长度切分Embedding 向量化使用 OpenAI/Ollama 等 embedding 模型向量存储Milvus / Chroma / Redis 向量能力查询检索用户问题向量化做相似度召回结果增强拼接到 Prompt 中交给大模型为什么还要 Elasticsearch因为城市岗位名薪资范围公司名 这类字段更适合关键词和条件过滤。所以很多系统采用ES 做精确过滤向量库做语义召回再做混合排序11. AI 系统的安全与观测怎么做安全Spring Security认证授权基础框架JWT无状态认证OAuth2第三方授权体系Keycloak统一身份认证中心Bouncy Castle加密能力支持敏感字段脱敏手机号、身份证、邮箱、简历附件审计日志谁查了什么数据、谁调用了什么工具观测Micrometer埋业务与系统指标Prometheus采集指标Grafana可视化ELK日志分析Jaeger / Zipkin分布式链路追踪AI专项指标模型响应耗时首Token时间Token消耗检索召回率工具调用成功率幻觉反馈率用户追问率知识库命中率12. 其他技术栈怎么自然融入面试回答虽然文章主线不可能把用户列出的全部技术逐个展开但在真实面试中可以这样理解构建工具Maven 主流Gradle 在部分项目更灵活Ant 多见于遗留系统模板引擎Thymeleaf、FreeMarker、Velocity、JSP 多在后台管理或旧系统日志框架SLF4J 门面 Logback/Log4j2 实现序列化Jackson 常规 JSONProtobuf/gRPC 高性能Avro 偏数据链路CI/CDJenkins、GitLab CI、GitHub Actions容器化常配 Docker、Kubernetes大数据Kafka Flink/Spark Elasticsearch 常见于推荐、画像、日志分析测试JUnit5、Mockito、AssertJ 做单测Selenium/Cucumber 适合集成和行为测试工具库Guava、Apache Commons、Lombok、MapStruct 都是提效利器其他框架Dubbo 在 Java 内部 RPC 常见R2DBC 用于响应式数据库访问WebSocket 适合实时消息推送七、给小白的复习路线如果你是 Java 面试初学者可以按下面路线学Java基础 JVM内存结构、类加载、GC、常见排查Spring Boot WebMVC、参数绑定、拦截器、异常处理、Spring Security数据库与缓存MyBatis、索引、事务、Redis、缓存问题消息队列与微服务Kafka、RabbitMQ、OpenFeign、Gateway、熔断限流监控与运维Prometheus、Grafana、ELK、链路追踪AI融合能力RAG、MCP、Agent、向量检索、幻觉治理学到这里你就不只是“会写 CRUD”而是能把业务场景、系统设计、稳定性、AI扩展能力串起来回答。