
互联网大厂 Java 面试实录Spring Boot Kafka Redis Spring Security RAG 一把梭场景某互联网大厂电商与营销平台 Java 岗位面试。面试官神情严肃候选人燕双非坐姿端正嘴角带着一点“我都懂”的自信。第一轮订单链路与接口设计面试官你先说说电商下单接口从 Spring Boot 到数据库落库整体链路怎么设计燕双非先 Controller 接请求Service 里校验参数然后调用 MyBatis 或 JPA 落库最后返回成功。加上事务基本就稳了。面试官嗯回答得还可以。那如果你们用 Flyway 做表结构管理怎么避免线上环境版本不一致燕双非这个……应该就是每次发版前先把 SQL 放进去Flyway 自动跑。版本不一致的话……再回滚面试官思路有点方向但还不够完整。继续说如果下单成功后要发 Kafka 消息通知库存和优惠券系统你怎么保证消息和订单数据一致燕双非可以先发消息再写库或者先写库再发消息反正都行吧……如果失败就重试一下。面试官重试不是万能的。那请你说说本地消息表、事务消息、Outbox 方案各自适合什么场景燕双非嗯……本地消息表就是先记个日志Outbox 应该也是个表事务消息是 MQ 自己帮忙搞一致性……细节我得回去再看看。面试官你至少知道方向了说明不是完全没做过。那我再追问一句为什么高并发下单时要特别关注连接池比如 HikariCP燕双非因为……数据库连接很贵嘛HikariCP 快一点性能更好超时也能控制。对大概就这样。第二轮营销活动与缓存、限流、容错面试官现在假设大促活动页面用 Spring Cache Redis 做缓存如何设计缓存策略燕双非热点商品详情可以缓存过期时间别太长防止脏数据。空值也可以缓存避免缓存穿透。面试官不错能讲到穿透。那缓存击穿和雪崩怎么处理燕双非击穿可以加互斥锁雪崩就设置不同过期时间或者……多加几个 Redis 节点面试官方向基本对。那如果你们用 Resilience4j 做限流、熔断、重试为什么不能把重试次数设置得很大燕双非因为会把下游打挂吧……尤其是库存服务挂了还一直重试雪上加霜。面试官对。那如果促销活动要对外开放 OpenAPI如何结合 Spring Security JWT 做鉴权燕双非客户端登录后拿 JWT调用接口带 token服务端校验签名和过期时间再根据角色权限放行。面试官不错。那如果你们还接了第三方渠道用 OAuth2 做授权你会怎么理解 access token 和 refresh token燕双非access token 短一点refresh token 长一点。access 负责调用接口refresh 负责续期。这个我还是记得的。面试官可以起码没混。再问一个实战点你会怎么用 Micrometer Prometheus Grafana 观测活动链路的延迟和失败率燕双非埋点指标暴露到 Prometheus然后 Grafana 看图表延迟高了就报警。链路追踪还能接 Jaeger 或 Zipkin。这个我写过一点。面试官嗯回答得比刚才扎实。继续保持。第三轮AI 营销助手与复杂业务编排面试官现在公司想做一个营销 AI 助手用户可以用自然语言问“给我推荐适合 5 月母亲节的促销方案”。你会怎么设计燕双非可以用 Spring AI 接一个大模型然后把商品、活动、历史投放数据做向量化存到向量数据库里用户提问后做语义检索再把结果喂给模型生成答案。面试官不错已经接近方案了。那如果要做 Agent让它能调用“查询活动”“生成海报文案”“创建优惠券”这些工具你怎么避免模型乱调用燕双非嗯……需要工具调用标准化吧先做权限控制限定它只能调用白名单工具。再把参数校验做好不然它可能瞎填。面试官对这就是工具执行框架的关键。那 RAG 场景里如何减少 AI 幻觉燕双非让模型少胡说多查资料。具体来说就是检索更准一点提示词里要求“仅根据资料回答”必要时返回“不知道”。面试官还行。那如果营销知识库里有 PDF、Word、网页和数据库记录你会怎么做文档加载与切分燕双非先做文档加载把不同格式统一成文本再按语义或段落切分保留标题和上下文。这样检索效果会好些。面试官最后一个问题如果这个系统还要支持 WebSocket 实时推送活动建议你会注意什么燕双非要考虑长连接管理、心跳、断线重连还有并发下的消息广播。别一股脑把所有用户都塞进一个线程里。面试官行了今天先到这儿。你回去等通知吧。问题详解1. 电商下单链路如何设计典型链路是Controller 接收请求参数校验后进入 Service 层执行业务逻辑再通过 MyBatis/JPA 等持久层落库必要时使用事务保证订单、库存、支付状态一致。若存在多表写入或跨系统通知还需要考虑消息一致性。2. Flyway 如何管理数据库版本Flyway 通过版本化 SQL 脚本管理数据库演进启动时自动校验并执行未应用的脚本。生产环境建议严格控制脚本顺序避免手工改表导致版本漂移多环境部署前要保证脚本在测试环境先验证通过。3. 订单与 Kafka 消息如何保证一致性常见方案包括本地消息表、Outbox、事务消息。- 本地消息表业务数据和消息记录同库同事务提交再由后台任务投递 MQ。- Outbox本质上是业务侧统一写出站表再异步转发。- 事务消息依赖 MQ 或中间件提供的事务能力。核心目标是避免“库成功、消息失败”或“消息成功、库失败”。4. 为什么 HikariCP 常用于高并发场景HikariCP 以轻量、快速、低开销著称适合互联网高并发业务。连接池能复用数据库连接减少频繁创建连接的成本。参数上要关注最大连接数、最小空闲、超时时间避免连接池被慢 SQL 占满。5. Redis 缓存策略如何设计常见做法是热点数据缓存、空值缓存防穿透、互斥锁或逻辑过期防击穿、随机过期时间防雪崩。对于大促商品页可以将静态内容和变化频率低的数据优先缓存动态数据则短 TTL 或异步刷新。6. Resilience4j 的限流、熔断、重试如何配合限流用于保护系统入口熔断用于在下游持续失败时快速失败重试用于处理短暂抖动。重试次数不能太大否则可能放大故障。通常要设置退避时间并对幂等接口才启用重试。7. JWT 与 OAuth2 的区别是什么JWT 是一种令牌格式适合无状态认证OAuth2 是一种授权协议定义了第三方授权流程。实际项目中OAuth2 可能使用 JWT 作为 access token。access token 用于调用资源接口refresh token 用于续期二者生命周期不同。8. Micrometer、Prometheus、Grafana 如何组成观测链路Micrometer 在应用内统一暴露指标Prometheus 定时拉取并存储指标数据Grafana 用于可视化展示。常用指标包括请求耗时、QPS、错误率、线程池、连接池状态等。若要做链路追踪可搭配 Jaeger 或 Zipkin。9. Spring AI RAG 如何做营销助手Spring AI 负责接入模型与编排提示词RAG 负责先检索后生成。业务上通常先把活动规则、商品信息、FAQ、历史案例做向量化再通过语义检索召回相关内容最后让模型基于召回内容生成建议从而降低幻觉。10. Agent 如何避免乱调用工具要做工具白名单、参数校验、权限控制和调用审计。工具描述要标准化输入输出要明确必要时引入人工确认步骤。对于高风险操作比如“发券”“改价”“上线活动”建议设置审批流。11. 如何减少 AI 幻觉关键手段包括提高检索召回质量、优化切分策略、在提示词中明确回答边界、让模型引用来源、对不确定内容返回“不知道”。同时要尽量让模型基于企业知识库而不是仅靠参数记忆。12. 文档加载和切分为什么重要因为不同格式文档结构差异很大。若切分过碎上下文丢失切分过大检索命中不准。实际应结合标题、段落、表格、QA 结构进行分块并保留元信息提升召回与生成质量。13. WebSocket 在实时推送中要注意什么要关注连接生命周期、心跳保活、断线重连、消息幂等、广播风暴和线程模型。高并发下建议使用事件驱动或异步架构避免每个连接占用大量线程资源。感谢阅读希望这篇互联网大厂 Java 面试实录能帮助大家更系统地理解高频技术点并在真实面试中更从容地表达自己的思路。