互联网大厂 Java 面试实录:Spring Cloud + Kafka + Redis + JPA + Spring Security + MCP
互联网大厂 Java 面试实录:Spring Cloud + Kafka + Redis + JPA + Spring Security + MCP
场景:一家互联网大厂正在招聘高级 Java 开发,业务方向是“本地生活服务 + 智能客服系统 + 订单履约”。面试官严肃且专业,候选人是外号“燕双非”的水货程序员,擅长把简单问题讲明白,遇到复杂问题就开始含糊其辞。
第一轮:基础与项目背景
面试官:先说说你负责过的本地生活服务下单系统,整体技术架构是怎样的?
燕双非:我们是 Spring Boot 做服务入口,下面拆成订单、商家、库存、支付几个模块,内部接口用 REST 风格,异步消息用 Kafka,缓存用 Redis,数据库主要是 MySQL,DAO 层用了 MyBatis 和 JPA 混着来。
面试官:为什么缓存和数据库都要一起用?
燕双非:因为……数据库慢嘛。热点商家信息、活动配置、库存读多写少,先放 Redis,能减少数据库压力,提升响应速度。比如用户打开团购页,先读缓存,缓存没有再查库并回填。
面试官:那缓存一致性怎么保证?
燕双非:这个……一般就是先更新数据库,再删缓存,或者用消息通知别的服务同步一下,避免缓存和数据库长期不一致。
面试官:思路对,先查缓存、后回源这个方向是对的,继续。
面试官:你们的支付结果通知是怎么设计的?
燕双非:支付回调先落库,再发 Kafka 事件给订单服务和营销服务,订单服务改状态,营销服务发券或者做核销。这样可以解耦,避免一个接口里做太多事。
第二轮:中间件与稳定性
面试官:Kafka 事件重复消费怎么办?
燕双非:我一般会做幂等,比如每条消息带唯一业务单号,消费前先查处理记录,处理过就直接跳过。数据库里也可以加唯一索引,双保险。
面试官:如果订单高峰期接口延迟飙升,你会先看哪里?
燕双非:先看 Prometheus 指标和 Grafana 面板,看看是 CPU、GC、线程池、还是下游慢。再结合日志和链路追踪,比如 Jaeger 或 Zipkin,定位是 Redis、数据库还是远程调用拖慢了。
面试官:说得不错。那你们做过熔断限流吗?
燕双非:做过,Spring Cloud 里配 Resilience4j。比如商家推荐服务挂了,不能把主流程也拖死,可以快速失败,返回兜底文案;抢购接口再配个限流,避免被流量打爆。
面试官:如果你要把外部支付网关接入系统,接口协议不统一怎么办?
燕双非:这个可以做一层适配器,内部统一成我们自己的支付 SDK 接口。序列化上一般用 Jackson,跨团队或者跨语言的部分可能会用 Protobuf。再加上 OpenAPI 文档,方便联调。
面试官:继续。你提到过智能客服系统,怎么把 AI 接进来?
燕双非:可以用 Spring AI 把大模型接成一个服务,先把用户问题做向量化,去向量数据库里做语义检索,找企业知识库和历史工单,再把检索结果塞进提示词里,让模型回答。复杂问题还可以走 Agent,调用工单、订单、物流这些工具。
面试官:那如果模型胡说八道呢?
燕双非:这个……就得做 RAG,尽量让回答基于企业文档;另外对高风险问题加规则校验,回答前后做事实核对,必要时转人工。
面试官:思路可以,至少知道不能让模型乱编。
第三轮:安全、数据与工程化
面试官:你们系统怎么做认证和授权?
燕双非:前端登录后拿 JWT,网关做统一鉴权,Spring Security 负责权限控制,接口按角色和资源粒度判断。第三方接入的话,可以走 OAuth2。
面试官:JWT 这么方便,有什么坑?
燕双非:主要是不好主动失效,泄露了也麻烦,所以要控制过期时间,配合刷新令牌、黑名单或者版本号校验。敏感接口还可以二次验证。
面试官:如果订单数据要做报表分析,怎么接入离线和实时链路?
燕双非:实时部分可以把订单事件进 Kafka,再给 Flink 做流处理;离线部分同步到 Hadoop 或 Spark 做统计分析。搜索场景可以接 Elasticsearch,像商家检索、订单查询都能用。
面试官:很好。最后问你一个工程化问题:你们怎么保证发布质量?
燕双非:我们有 Jenkins 和 GitHub Actions 做 CI/CD,单测用 JUnit 5 和 Mockito,接口测试和回归测试会跑自动化。上线前先灰度,配合监控看指标,出问题就回滚。
面试官:整体还可以,今天就先到这儿,你回家等通知吧。
详细解答:面试题逐题拆解
1. 本地生活服务系统为什么常用 Spring Boot、Redis、Kafka、MyBatis/JPA 组合?
本地生活服务通常有高并发读、订单状态变化频繁、异步通知多的特点。Spring Boot 便于快速搭建服务;Redis 适合承接热点数据和短时状态;Kafka 负责解耦下单、支付、营销等流程;MyBatis 适合复杂 SQL 和精细控制,JPA 适合简单 CRUD。实际业务里经常组合使用,而不是单一框架一把梭。
2. 缓存一致性如何处理?
常见策略是 Cache Aside:先查缓存,未命中查数据库并回填;更新时先写数据库,再删除缓存。核心目标不是“绝对一致”,而是在可接受范围内把不一致窗口降到最低。高并发场景可结合消息通知、延迟双删、版本号、分布式锁等进一步增强一致性。
3. Kafka 消息重复消费如何保证幂等?
幂等的核心是“同一业务请求无论执行多少次,结果都一样”。实现方式包括:业务单号唯一约束、消费表记录处理状态、幂等键去重、状态机推进校验等。比如订单支付成功事件重复投递,订单状态只能从“待支付”变成“已支付”,重复消息不会导致重复扣库存或重复发券。
4. 如何用监控体系定位慢接口?
先看基础监控:CPU、内存、GC、线程池、连接池、QPS、RT、错误率;再看链路追踪:一次请求经过哪些服务、每段耗时多少;最后结合日志确认异常点。Prometheus 负责采集指标,Grafana 负责展示,Jaeger/Zipkin 负责链路追踪,ELK 负责日志检索。
5. Resilience4j 在业务里主要解决什么问题?
它解决的是下游不稳定时的“故障扩散”问题。常见能力包括熔断、限流、隔离、重试、降级。比如推荐服务、地图服务、短信服务短暂异常时,主订单流程仍然要能返回一个可用结果,而不是全部超时。
6. AI 客服为什么要做 RAG 和 Agent?
RAG 解决的是“模型不知道企业私有知识”的问题:先从文档、工单、FAQ 中检索,再让模型基于检索结果回答。Agent 则适合“回答之外还要执行动作”的场景,比如查询订单、创建工单、催发货、升级人工。RAG 偏知识增强,Agent 偏工具执行,二者可组合成更完整的企业智能助手。
7. JWT 和 OAuth2 怎么配合使用?
OAuth2 解决授权流程,JWT 适合承载访问令牌。实际系统中,用户通过 OAuth2 完成授权后拿到 JWT,网关和服务端根据 JWT 中的用户身份、角色、权限进行校验。要注意 JWT 不易主动失效,因此常配合短过期时间、刷新令牌和黑名单机制。
8. 大数据链路如何服务订单分析?
订单事件先进入 Kafka,实时链路用 Flink 做窗口聚合、漏斗分析、异常检测;离线链路把数据落到 Hadoop/Spark 做日、周、月报表和经营分析。若需要检索能力,如商品、商家、订单全文搜索,可将数据同步到 Elasticsearch。
9. CI/CD 为什么对 Java 大厂项目重要?
因为系统复杂、团队多人协作,手工发布容易引入不可控风险。CI/CD 通过自动化测试、静态扫描、构建打包、镜像制作、灰度发布和回滚机制,能显著降低发布事故概率。Jenkins、GitHub Actions、Docker、Kubernetes 是常见组合。
10. 本文面试题背后的通用答题思路是什么?
先回答“是什么”,再回答“为什么”,最后回答“怎么落地”。面试官最看重的是你是否能把技术点放进真实业务里:高并发怎么抗、稳定性怎么保、数据怎么一致、系统怎么演进、AI 怎么可控。
感谢阅读,希望这篇互联网大厂 Java 面试实录能帮助你把技术点和业务场景真正串起来,祝大家面试顺利,拿到心仪的 offer!
更多推荐


所有评论(0)