Java 17 + Spring Boot + MyBatis + Redis + Kafka + Spring AI:互联网大厂面试官和水货程序员小Y的三轮过招 📅 2026/7/23 3:39:10 Java 17 Spring Boot MyBatis Redis Kafka Spring AI互联网大厂面试官和水货程序员小Y的三轮过招场景某互联网大厂 Java 岗终面。面试官严肃、追问连续候选人小Y嘴上很稳脑子有时掉线但简单题还能接住复杂题开始含糊其辞。第一轮基础功和项目底盘面试官你先别急着讲业务先说说你们项目的 Java 版本为什么从 8 升到 17小Y因为 17 更新一点代码更高级大家看起来更专业……而且性能也会更好。面试官方向没错但太空了。那你说说具体收益。小Y哦比如switch表达式、更简洁的record、var、更强的封装还有更好的垃圾回收和 JVM 优化。我们在订单服务里把 DTO 和只读对象改成record之后样板代码少了很多。面试官这次答得像个干活的人。那 Maven 和 Gradle 你们怎么选小Y大部分主线项目还是 Maven规范、稳定、生态成熟Gradle 更灵活适合一些构建复杂、插件化强的场景。我们团队一般先考虑统一构建和可维护性。面试官好。Spring Boot 启动一个接口请求从入口到控制器大概怎么走小Y浏览器发请求后先到 Tomcat然后 Spring MVC 的DispatcherServlet接住接着找HandlerMapping、HandlerAdapter最后调用Controller里的方法返回ModelAndView或 JSON。面试官基本链路对了。那如果是Spring WebFlux呢小Y它是响应式的主要适合高并发 I/O 场景底层会用非阻塞模型比如 Netty。它不是简单把线程开更多而是减少阻塞等待。面试官行基础还算稳。最后一个你怎么理解 JVM小YJVM 是 Java 程序运行的虚拟机负责类加载、内存管理、执行字节码、垃圾回收。线上如果出现 CPU 飙高、Full GC 频繁很多时候就得结合 GC 日志、线程栈和对象分配情况去看。面试官这轮可以别急着飘。第二轮业务落地和中间件串联面试官假设你在做一个电商秒杀系统库存扣减怎么设计先说数据层。小Y一般会先把商品信息和库存分开库存表做乐观锁或者先在 Redis 里预扣减再异步落库减少数据库压力。面试官为什么不直接数据库扣小Y因为秒杀流量高数据库扛不住。先用 Redis 做限流、预热库存、原子扣减再通过消息队列异步写库能把峰值流量削平。面试官那如果 Redis 和数据库不一致怎么办小Y这……一般要做补偿吧。比如通过消息可靠投递、失败重试、对账任务还有幂等设计最终让数据趋于一致。面试官还行知道不是“写完就完了”。MyBatis 和 Hibernate 你怎么选小YMyBatis 更适合复杂 SQL、强控制、业务报表类场景Hibernate/JPA 更适合领域模型清晰、CRUD 占比高的场景。电商订单这种查询复杂、优化空间大的很多团队会偏 MyBatis。面试官连接池呢为什么很多项目选 HikariCP小YHikariCP 轻量、性能好、配置简单尤其在高并发下表现不错。连接池要重点看最大连接数、超时、泄漏检测不然线程会在拿连接时排队。面试官好。现在给你一个消息队列场景下单后发券、发短信、积分入账怎么保证稳定小Y用 Kafka 或 RabbitMQ 解耦主链路。订单服务只负责发事件优惠券、短信、积分各自消费。要做消息幂等、重试、死信队列消费者处理要可重复执行。面试官如果某个消费者重复消费了两次呢小Y就要靠业务幂等比如用订单号做唯一键消费前先查状态或者用数据库唯一约束、防重表、Redis 去重。面试官再来个安全题如果这个下单接口要接入登录态你会怎么做小Y常见做法是 Spring Security JWT 或 OAuth2。前端拿 token请求头带过去网关或服务端校验签名和过期时间结合权限模型控制接口访问。面试官这轮开始像样了。第三轮微服务、可观测性和 AI 升级面试官现在公司要把订单、库存、营销拆成微服务你会先解决什么问题小Y服务拆分后最先要解决服务发现、配置管理、调用治理和容错。以前可能用 Spring Cloud Eureka/Feign现在也可能上 Consul、Kubernetes 服务发现调用失败要配合 Resilience4j 做熔断和限流。面试官继续。服务之间调用RPC 和 HTTP 怎么选小Y内部高频调用可以考虑 gRPC性能更好、IDL 明确对外开放接口一般还是 REST 更通用。要看团队技术栈、接口复杂度和治理成本。面试官那系统上线后你怎么监控小Y指标、日志、链路追踪三件套。Prometheus 抓指标Grafana 看图日志用 Logback 或 Log4j2链路追踪可以接 Jaeger 或 Zipkin再通过 Micrometer 统一埋点。面试官如果线上接口突然变慢你怎么排查小Y先看 QPS、P99、错误率再看是否数据库慢查询、Redis 抖动、MQ 堆积、线程池满了最后结合链路追踪定位慢在哪一跳。不能一上来就重启。面试官说得对重启是最后的玄学。最后一个加分题如果让你给这个订单系统加一个 AI 客服你会怎么做小Y可以用 Spring AI 接大模型再结合 RAG。先把订单规则、售后政策、商品知识文档做文档加载和向量化存到向量数据库里。用户提问时先语义检索再把检索结果和问题一起喂给模型这样能减少幻觉。面试官那 Agent 呢小YAgent 更像一个会调用工具的智能体比如查订单、查物流、发工单、转人工。它不是只会聊天而是能根据用户意图决定调用哪个工具形成复杂工作流。面试官你对“工具执行框架”和“提示填充”有什么理解小Y工具执行框架就是把外部能力标准化比如查库、查接口、查知识库。提示填充就是把上下文、用户历史、业务规则拼进提示词里但要控制长度避免把无关信息塞太多。面试官最后一个问题如果 AI 回答错了怎么办小Y先别让它瞎编。要做权限控制、引用来源、答案兜底和人工接管高风险场景还要加规则校验、灰度发布和评测集。重要的业务场景不能只靠模型“感觉”。面试官行了今天就到这。你回去等通知吧。答案解析把每个问题讲透1. 为什么 Java 17 常被大厂青睐Java 17 是长期支持版本兼顾稳定和新特性。相比 Java 8它有更现代的语法、更好的 GC 选择和更成熟的运行时优化。对业务来说升级的核心价值不是“看起来新”而是减少样板代码、提升可维护性、获得更好的性能和安全性。2. Maven、Gradle、Ant 怎么理解Maven约定优于配置适合大多数企业项目依赖和生命周期管理清晰。Gradle更灵活适合复杂构建、插件化和多模块场景。Ant偏老脚本化强但缺少统一约定维护成本高。3. Spring MVC 请求链路是什么请求进入容器后由DispatcherServlet统一分发再通过映射器找到具体控制器适配器执行方法最后把结果渲染为页面或 JSON。面试中常考的是它体现了“前端控制器模式”。4. Spring WebFlux 为什么适合高并发 I/O它走非阻塞和响应式编程模型重点是提升 I/O 等待期间的资源利用率而不是无限加线程。适合链路中存在大量外部调用、流式处理、实时推送的场景。5. 秒杀系统为什么常用 Redis MQ秒杀的难点是流量突刺和库存一致性。Redis 负责快速拦截和原子扣减MQ 负责削峰填谷和异步落库。这样主链路更轻数据库压力更小。6. Redis 和数据库不一致怎么处理通常用“最终一致性”思路解决消息可靠投递、失败重试、补偿任务、幂等消费、对账修正。核心不是强行一步到位而是让系统可恢复、可追踪。7. MyBatis 和 Hibernate/JPA 怎么选MyBatisSQL 可控适合复杂查询、性能优化、报表和高定制业务。Hibernate/JPA开发效率高适合 CRUD 和领域模型明确的场景。 大厂里经常是“核心交易链路偏 MyBatis简单业务偏 JPA”。8. 为什么 HikariCP 常见因为它轻量、快、默认配置合理。连接池的重点不是“有就行”而是要关注最大连接数、最小空闲、连接泄漏、超时和数据库承载能力。9. 消息队列解决什么问题它解决的是解耦、削峰、异步和广播。订单支付成功后券、短信、积分、风控都可以变成独立消费者让主流程更稳定。10. MQ 消费幂等怎么做常见做法有业务唯一键、状态机校验、唯一约束、防重表、Redis 去重、消费日志表。面试时要强调幂等不是某个组件天生提供的而是业务和技术一起设计的。11. Spring Security JWT/OAuth2 是什么关系Spring Security 负责认证授权框架JWT 常用于无状态令牌OAuth2 更像授权协议框架常和单点登录、第三方接入配合。企业里常见组合是登录后签发 JWT网关或资源服务校验 token 和权限。12. 微服务拆分后最重要的治理问题是什么服务发现、配置管理、容错、限流、链路追踪、灰度发布。拆服务不难难的是拆完还能稳定运行、快速定位问题。13. gRPC 和 REST 怎么选gRPC内部服务调用、高性能、强类型、IDL 清晰。REST对外开放接口、生态广、调试方便。 面试里要说清楚“不是谁更高级而是适用场景不同”。14. 监控体系为什么要分指标、日志、链路追踪指标看趋势和健康度。日志看细节和上下文。链路追踪看一次请求跨服务的耗时和瓶颈。 三者结合才能定位复杂故障。15. AI 客服为什么推荐 RAG 而不是直接裸调用大模型因为企业场景最怕幻觉。RAG 会先从企业文档、知识库、订单规则中检索相关内容再让模型基于检索结果回答准确率更高也更容易控制和审计。16. Agent 和普通聊天机器人有什么区别普通聊天机器人更偏“回答问题”Agent 更偏“完成任务”。它能调用工具、拆解步骤、执行工作流比如查订单、改地址、发工单、转人工。17. 提示填充为什么重要模型的回答质量很依赖上下文。把角色、目标、约束、业务规则、用户历史合理组织进提示词可以明显提升答案一致性但也要防止上下文过长、信息污染。18. 如何控制 AI 幻觉强制引用知识来源限制回答边界高风险问题走规则引擎或人工建立评测集和离线回归对重要输出做二次校验19. 这个故事里的“面试官为什么夸小Y”因为小Y在简单题上能说对关键点在业务题上能把技术和场景连起来。虽然复杂题细节不够完整但至少方向正确说明不是只背名词。20. 真正的大厂面试想看什么不是死记硬背技术名词而是看你能不能把“业务目标、系统设计、技术选型、风险控制”串成一个闭环。能讲清楚这条线的人才更像可培养的工程师。