Java Spring Cloud Kafka Redis互联网大厂求职面试实录燕双非与严肃面试官场景互联网大厂 Java 求职面试人物严肃面试官、搞笑的水货程序员燕双非第一轮基础能力与项目落地面试官先从你最近做的订单服务说起。你们为什么选 Spring Boot MyBatis而不是一上来就微服务全家桶燕双非因为……单体先稳住嘛Spring Boot 启动快MyBatis 对 SQL 可控适合订单这种对查询性能和复杂报表有要求的场景。我们先把核心交易链路做扎实再拆服务不然容易一上来就“微”得找不到北。面试官回答得还可以。那你说说订单表频繁更新时如何避免并发下的超卖问题燕双非嗯……可以用数据库乐观锁比如 version 字段也可以在 Redis 里先扣库存再异步落库再不行就直接把锁加重一点……面试官思路有了但要说清楚主链路和兜底方案。面试官那你再讲讲 JVM 调优在这个场景里通常会关注什么燕双非堆内存、GC、线程池。订单高峰期如果对象创建太多可能 Full GC 频繁延迟就会上来。一般会看 Young GC 次数、晋升失败、GC 停顿时间还会结合日志和监控做定位。面试官这个方向对继续保持。面试官你们项目里怎么做接口文档和前后端联调燕双非Swagger/OpenAPI。接口定义、参数、返回值、示例一目了然前后端可以直接对齐字段少扯皮。第二轮中间件、缓存与可靠性面试官现在订单支付成功后要通知库存、积分、风控三个下游系统。你会怎么设计消息链路燕双非用 Kafka。支付服务发一条订单支付成功事件下游各自订阅。这样解耦削峰填谷还能做重试和补偿。面试官那你怎么保证消息不丢、不错、不过度重复燕双非不丢的话……生产者确认、事务消息、落库后再发不重的话消费端幂等比如订单号做唯一键重复消费直接忽略不错的话就是消息体规范一点别乱传。面试官可以。那 Redis 在这里除了库存预扣还能做什么燕双非热点商品缓存、用户会话、分布式锁、限流计数器、活动配置都能放。还可以用 Spring Cache 简化缓存注解。面试官如果缓存和数据库不一致你怎么处理燕双非常见是先更新数据库再删缓存或者延迟双删。对特别关键的数据可以用消息通知刷新缓存或者短 TTL 加兜底逻辑。面试官好能落地。你再说说 Spring Security 在支付场景里怎么做权限控制燕双非登录态校验、JWT 鉴权、接口按角色和权限点控制。比如退款接口只给客服和财务敏感操作再加二次验证。面试官继续。面试官如果上游调用库存服务超时了系统怎么保证整体可用燕双非Resilience4j 做熔断、限流、重试和隔离。调用失败时快速失败避免线程堆积拖垮整个系统。必要时降级返回“库存确认中”。第三轮云原生、观测与 AI 扩展面试官现在公司要把订单系统上云跑在 Kubernetes 里。你会关注哪些交付和运行问题燕双非Docker 打包镜像Kubernetes 部署、滚动更新、健康检查、资源限制。还要注意配置中心、环境变量、Pod 重启后无状态化以及发布期间流量平滑切换。面试官不错。那你怎么做链路追踪和指标监控燕双非Micrometer 暴露指标到 PrometheusGrafana 看面板链路追踪用 Zipkin 或 Jaeger查一次请求在各服务之间走了哪些步骤慢在哪里一眼能看出来。面试官对。那如果要在订单客服里加一个 AI 助手支持自然语言查订单、查物流、查退款进度你会怎么设计燕双非我会先做一个 Spring AI 的聊天入口然后把订单、物流、售后这些能力封装成工具调用。用户问“帮我查下昨天买的鞋到了没”先做意图识别再调用订单服务和物流服务。知识类问题可以做 RAG把企业文档、FAQ、售后规则做向量化和语义检索降低 AI 幻觉。面试官说得还行那如果客服知识很多、还要支持多轮追问呢燕双非要保存聊天会话内存不然它聊着聊着就失忆了。再配合工具执行框架和 Agent把“查询订单—判断异常—生成回复”串成复杂工作流。向量数据库可以用 Milvus 或 RedisEmbedding 模型负责把文本变成向量。面试官最后一个问题遇到线上故障怎么处理燕双非先止血再定位再复盘。看监控、日志、链路追踪必要时回滚、降级、切流量。嗯……如果是我我会先喝口水冷静一下。面试官行了今天先到这。你回家等通知吧。问题详解1. 为什么在订单系统先用 Spring Boot MyBatis而不是直接微服务化在互联网业务里很多系统并不是一开始就适合微服务。订单系统通常包含交易、库存、优惠、支付等核心链路早期更重要的是业务闭环、稳定性和快速迭代。Spring Boot 适合快速搭建应用MyBatis 对 SQL 可控便于实现复杂查询和报表。先把单体做稳再按领域边界拆分成服务是更务实的演进路线。2. 如何解决高并发下的超卖问题常见做法有三类