大厂Java面试实战:从Spring Boot单体到Spring Cloud微服务,再到AI RAG智能客服的完整场景解析
面试官与搞笑候选人小Y:从单体到微服务再到 AI RAG 的 Java 实战面试全解析
场景:某互联网大厂在线教育事业部,招聘 Java 开发工程师。
业务方向:在线教育 + 内容社区 + AI 辅助学习搜索。
人物:
- 面试官(I):业务技术双栈,语气严肃,追问很细。
- 候选人小Y(Y):典型“面试造火箭,入职拧螺丝”型,简单题还能答,复杂题就开始打太极和扯淡。
一、第一轮:从单体 Spring Boot 到基础持久化
背景:团队有一套老的在线课程系统,之前是一个 Spring Boot 单体应用,主要功能是课程管理、用户注册登录、下单支付。准备重构前,先考考小Y对单体应用与基础 Java 技术栈的掌握情况。
1.1 Java 基础与 JVM
I1: 你之前做在线教育或电商类似项目时,后端主要用的是哪个 Java 版本?为什么?
Y: 一般都是 Java 8 吧,比较稳…有时候也会用 11,那个,性能更好一点,嗯,社区也比较活跃…反正公司用啥我就用啥。
I 点评: Java 版本能说出 8/11 的理由是基本要求,最好能提到 LTS 版本、新特性(如 Stream、Optional、var)以及 JVM 调优经验。
I2: 线上单体项目内存频繁飙高,你会怎么排查?从 JVM 角度简单说说思路和涉及哪些工具?
Y: 这个…一般就是先重启一下…呃不是,我是说先看监控,看看堆是不是满了,然后用 jmap 之类的,dump 一下,看有没有内存泄漏吧。然后…再调一调 JVM 参数。
I 点评: 思路是有一点,但明显不扎实,也没提到 JVM 内存结构、GC 日志分析、工具链(jmap/jstack/VisualVM/Arthas)。后面解析里会补全。
1.2 Spring Boot + Web 层
I3: 现在这个在线教育单体系统,用 Spring Boot + Spring MVC 提供课程查询接口。你会怎么设计一个课程详情的 REST API?大致讲讲 URL 设计、返回结构以及如何使用 Swagger/OpenAPI。
Y: 课程详情就 GET /courses/{id} 呗,返回个 JSON,里面有标题、价格啥的。Swagger 就加个注解,那个 @ApiOperation 啥的,扫一下包就出来文档了。
I 点评: 基本没问题,但比较浅。可以进一步谈 统一响应结构、错误码设计、接口幂等性、Swagger/OpenAPI3 配置等。
1.3 数据库与 ORM
I4: 课程信息存 MySQL,用 Spring Data JPA 或 MyBatis 都可以。你之前更习惯哪个?在在线教育这种场景下会怎么建课程表?说几个关键字段。
Y: 我一般用 MyBatis,写 SQL 比较自由。课程表嘛,有 id、name、price、teacher_id、status 这些。再加个创建时间更新时间,差不多。
I 点评: 方向对,但没提到 索引设计、逻辑删除、多维度查询字段(类目、标签、难度等级) 等。
1.4 测试与基础 DevOps
I5: 你会怎么给 GET /courses/{id} 这个接口写自动化测试?用什么测试框架比较多?
Y: 就用 JUnit 5 吧,或者 TestNG 也行。Spring Boot 有那个 MockMvc,可以造个请求,测一下返回是不是 200,body 里是不是有数据。
I 点评: 基础测试意识 OK,但没提到 单元测试 vs 集成测试 的区分、Mockito/AssertJ 等工具链。
二、第二轮:从单体拆到微服务 + 消息队列 + 缓存
背景:业务发展很快,在线教育平台要扩展出:
- 内容社区与 UGC(用户发帖、评论、点赞);
- 支付与订单独立结算;
- 后续还会接入本地生活、线下课程和共享教室等服务。
团队决定把单体拆成若干 Spring Cloud 微服务:
- 用户服务、课程服务、订单服务、支付服务、内容社区服务等;
- 使用 Spring Cloud + OpenFeign + Eureka/Consul + Gateway;
- 消息队列引入 Kafka,缓存用 Redis。
2.1 微服务拆分与调用
I6: 如果我们把课程服务、订单服务、用户服务拆成三个微服务,你会怎么用 Spring Cloud 或其他框架实现它们之间的调用和注册发现?
Y: 嗯…Spring Cloud 一般就 Eureka 啊,或者 Consul,服务启动的时候注册一下。服务间调用就用 OpenFeign,写个接口,加个 @FeignClient,然后像本地方法一样调就好了。
I 点评: 这是合格答案的“骨架”,还可以进一步谈:
- 配置中心(Spring Cloud Config 或 Nacos);
- 网关(Spring Cloud Gateway)做统一入口;
- 服务发现的健康检查与熔断。
2.2 消息队列:Kafka 场景
I7: 现在用户下单购买课程后,需要:
- 生成订单记录;
- 通知支付服务;
- 同时给用户发送站内信和短信;
- 内容社区那边需要记录“学习动态”。
如果用 Kafka,你会怎么设计 Topic?在 Java 里使用 Kafka 的生产者与消费者时要注意什么?
Y: Topic 就一个订单主题?比如 order-events,然后里面发下单、支付成功这些消息。Java 生产者就是用 KafkaTemplate 发消息,消费者就 @KafkaListener 收一下。注意…注意别丢消息吧。
I 点评: 回答明显过于含糊,没有提到:
- 事件类型与 Topic/Partition 规划;
- 消息有序性、幂等消费;
- 消费失败重试与死信队列;
- Spring Kafka 的 offset 提交策略等。
2.3 Redis 缓存与热点课程
I8: 平台有热门课程,经常被反复访问。你会如何用 Redis 做缓存?
涉及:
- Key 设计;
- 缓存雪崩、击穿、穿透的处理;
- 在 Java 里如何集成(Spring Cache 或 Redisson 等)。
Y: 嗯,热门课程就放 Redis 呗,key 可以叫 course:{id},设置个过期时间。雪崩就是别一起过期,击穿就是加个锁,穿透就缓存空值…大概这样吧。
I 点评: 这是经典八股文,但没谈到:
- 具体用哪些 Redis 数据结构;
- 热点 Key 的预热与异步刷新;
- 实现分布式锁的细节(原子性、续约)。
2.4 链路追踪与日志
I9: 微服务拆分之后,一个用户下单请求会经过:网关 → 用户服务 → 课程服务 → 订单服务 → 支付服务 → 消息队列 → 通知服务。你会如何用 日志和链路追踪来排查一次请求的完整链路?
可选技术栈:SLF4J + Logback/Log4j2、ELK、Jaeger、Zipkin、Micrometer、Prometheus、Grafana。
Y: 呃…这个就用 TraceId 啊,在日志里打出来。然后…ELK 可以搜日志,Zipkin 可以看调用链路吧。Prometheus 和 Grafana 画个监控图呗。
I 点评: 只说到了名字,没讲出体系化做法,比如:
- Sleuth 或 Micrometer Tracing 集成;
- 日志规范(日志级别、字段);
- 延迟报警与错误告警策略。
2.5 安全与认证
I10: 用户登录之后,需要访问课程与订单服务。我们计划使用 JWT + Spring Security 做统一认证。你会怎么设计登录与鉴权流程?
Y: 登录的时候,校验用户名密码,生成一个 JWT,客户端带着这个 token 调接口。Spring Security 里面写个过滤器,把 token 解析一下,就知道用户是谁,可以放行或者拦截。
I 点评: 方向对,但没提到:
- Token 过期与刷新机制;
- 如何避免 JWT 被盗用(https、签名算法、黑名单);
- 权限粒度设计(接口级、数据级)。
三、第三轮:AI 搜索、RAG 与智能客服
背景:在线教育平台为了提升用户体验,要做:
- AI 智能问答:用户用自然语言提问,例如“我想系统学 Java 微服务,从入门到精通推荐课程”;
- 语义搜索:根据用户问题检索课程、文章、UGC 内容;
- 智能客服:处理退款、课程权限、发票等问题。
技术方向:RAG(检索增强生成)、向量数据库、Spring AI、Agentic RAG、企业文档问答。
3.1 AI 语义检索基本方案
I11: 如果我们要实现一个“智能课程搜索”,用户可以用自然语言搜索,比如“想学 Spring Cloud 微服务”的时候,不只是关键词匹配,而是语义理解。你会怎么设计?简单讲讲 RAG 的思路。
Y: RAG…就是先检索再生成吧。那个,先把课程简介都向量化,存到向量库,然后用户的问题也向量化,算相似度,找几个相关的课程,再丢给大模型总结一下就完了。
I 点评: 这属于面试八股水平:
- 知道“检索 + 大模型生成”的基本套路,但没说清楚 向量库选型、Embedding 模型、召回策略 等。
3.2 向量数据库与 Embedding
I12: 在我们的系统中,如果选用 Milvus 或 Redis 向量数据库 来存储课程与 UGC 文本的向量,你觉得在 Java 里如何落地?涉及哪些组件?
Y: 这个…Java 里就调它们的客户端 SDK 吧。Embedding 模型可以用 OpenAI 的,也可以自己部署个啥的。然后算完向量就写到 Milvus 里面…大概是这样?
I 点评: 回答非常模糊,没有提:
- Milvus/Redis 的索引与分片;
- 批量写入、更新策略;
- 向量维度、模型版本管理等工程问题。
3.3 Spring AI 与 Agentic RAG
I13: 我们打算在 Java 侧使用 Spring AI,并构建一个简单的 Agent,可以:
- 接入多个工具(课程检索、订单查询、退款规则文档加载);
- 根据用户会话上下文进行多轮对话;
- 尽量减少 AI 幻觉。
你觉得整体架构上,Java 服务要做哪些事?
Y: 呃…Spring AI 就封装了一些大模型接口吧,可以写个 Agent,然后…工具的话,用 RAG 去查文档,再把结果给模型。为了减少幻觉,可以多让它引用文档原文?然后…会话内存…就把上下文带上。
I 点评: 概念堆得挺多,但结构不清晰:
- 没有说明工具执行框架、对话记忆的实现方式;
- 没有提到模型调用限流与监控;
- 对 Agentic RAG 的“任务分解、工具选择”没讲清。
3.4 AI 幻觉与企业风控
I14: 在智能客服场景中,如果 AI 回答了错误的退款规则信息,可能造成经济损失。你认为如何在 工程层面降低 AI 幻觉带来的风险?
Y: 这个…就加个免责声明?咳咳…我是说可以做检索增强,尽量让它只根据文档回答。还有就是,重要问题让人工审核一下。再不行,就把模型调得稳一点?
I 点评: 方向没错,但还是太泛:
- 可以做 答案来源展示、置信度阈值、关键流程人工兜底 等更具体办法;
- 接入安全风控系统,记录每次 AI 响应的审计日志。
3.5 复杂工作流与企业集成
I15: 假设我们要做一个“从用户发起退款 → AI 智能判断 → 自动创建工单 → 推送到客服系统 → 通知用户”的复杂工作流。后端 Java 系统要串联:
- 订单服务;
- AI 服务(RAG/Agent);
- 工单系统(可能是 SaaS,如企业协同平台);
- 消息通知服务(短信/站内信/邮件)。
你会选择什么样的技术栈和架构来实现?
Y: 这个…可以用个工作流引擎吧,比如…呃,Activiti 或者 Flowable?或者用 Spring Cloud 事件驱动一下,反正就是微服务之间发消息。AI 那边就是一个独立服务,订单啥的就用 Feign 调一下。工单系统…看它有没有 API,有就调用,没有就…想办法。
I 点评: 回答有点“嘴上架构师”的味道:
- 没有给出清晰的事件流与状态机;
- 没有提幂等性、重试、失败补偿等关键点。
四、面试结束
I: 好,今天就先到这里。你基础还可以,但经验有些零碎。我们会综合考虑,回去等通知吧。
Y: 啊?那能不能先给个答复…好吧,那我先回去再把 Spring AI 和微服务那块好好补一补…
五、详细解析:业务场景 + 技术点一网打尽(含小白向讲解)
下面是按三个阶段,把上面问到的技术点系统梳理一遍,方便你按图索骥去学习。
5.1 阶段一:单体 Spring Boot 在线教育系统
5.1.1 Java 版本与 JVM 基础
- Java 8:目前很多大厂仍在大量使用。
- 核心特性:Lambda、Stream、Optional、日期时间 API、默认接口方法等。
- 丰富的生态支持(大部分框架首选)。
- Java 11/17(LTS):
- var 局部变量类型推断、性能与 GC 优化、更长的 LTS 支持周期。
JVM 排查内存问题的一般步骤:
- 观察指标:堆内存、GC 次数和耗时、Full GC 频率。
- 工具链:
jmap:导出堆 dump。jstack:查看线程堆栈,排查死锁、卡顿。- VisualVM / JMC / Arthas:交互式分析热点对象、方法、线程状态。
- 分析:
- 判断是否内存泄漏(某类对象数量持续增长);
- 检查缓存/集合是否无限膨胀;
- 优化代码或调整 JVM 参数(堆大小、GC 算法等)。
5.1.2 Spring Boot + Spring MVC 设计 REST API
以“课程详情接口”为例:
- URL 设计:
GET /api/v1/courses/{courseId}:查询课程详情。- 建议使用版本号
/api/v1/方便灰度与升级。
- 返回结构(统一响应):
{ "code": 0, "message": "success", "data": { "id": 1001, "title": "Java 微服务实战", "price": 199, "teacherName": "张三", "status": "ON_SHELF" } } - Swagger / OpenAPI 集成:
- 使用
springdoc-openapi或 Swagger 3; - 在 Controller 上添加注解:
@Operation(summary = "获取课程详情") @GetMapping("/courses/{id}") public ApiResponse<CourseDto> getCourse(@PathVariable Long id) { ... } - 启动后自动生成交互式 API 文档(/swagger-ui.html 或 /swagger-ui/index.html)。
- 使用
5.1.3 数据库与 ORM:MyBatis / JPA
1)表结构设计示例(课程表):
CREATE TABLE course (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
sub_title VARCHAR(255),
category_id BIGINT NOT NULL,
level TINYINT NOT NULL COMMENT '难度:1-入门 2-中级 3-高级',
price DECIMAL(10,2) NOT NULL,
teacher_id BIGINT NOT NULL,
status TINYINT NOT NULL COMMENT '0-下架 1-上架',
is_deleted TINYINT NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL,
KEY idx_category_level (category_id, level),
KEY idx_teacher (teacher_id)
);
- 注意:
- 逻辑删除字段
is_deleted,避免直接物理删除影响统计; - 针对查询频繁的字段建索引;
- 记录创建与更新时间,方便审计与排序。
- 逻辑删除字段
2)ORM 选择:
- MyBatis:适合复杂 SQL、多表联查、灵活控制性能。
- JPA/Hibernate/Spring Data JPA:开发效率高,适合 CRUD 场景。
5.1.4 测试:JUnit 5 + Mockito + Spring Boot Test
- 单元测试:
- 只测 Service、工具类等,不依赖外部资源(数据库、MQ);
- 使用 Mockito 模拟依赖,AssertJ 断言。
- 集成测试:
- 使用
@SpringBootTest启动部分或完整 Spring 上下文; - 用 MockMvc 或 TestRestTemplate 调用 HTTP 接口;
- 可以连接测试库或使用内存数据库(H2)。
- 使用
示例:
@SpringBootTest
@AutoConfigureMockMvc
class CourseControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void testGetCourse() throws Exception {
mockMvc.perform(get("/api/v1/courses/1001"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.code").value(0));
}
}
5.2 阶段二:微服务、消息队列与缓存
5.2.1 微服务拆分与 Spring Cloud 体系
典型拆分:
- 用户服务(user-service);
- 课程服务(course-service);
- 订单服务(order-service);
- 支付服务(payment-service);
- 内容社区服务(ugc-service);
- 网关服务(api-gateway)。
技术栈:
- 服务注册发现:Eureka / Consul / Nacos;
- 配置中心:Spring Cloud Config / Nacos Config;
- 服务调用:OpenFeign / gRPC;
- 网关:Spring Cloud Gateway / Nginx + 自研网关;
- 熔断限流:Resilience4j / Sentinel。
调用示意:
- 客户端请求 → 网关 → 订单服务;
- 订单服务通过 Feign 调用课程服务查询课程信息;
- 订单服务调用用户服务查询优惠与用户身份;
- 订单创建成功后发送消息到 Kafka 通知支付与其他异步流程。
5.2.2 Kafka 在订单与通知场景中的用法
1)Topic 设计:
order-events:订单相关事件(创建、支付成功、取消)。- key:
orderId,便于同一订单的消息落在同一 partition,保证顺序; - value:JSON 或 Avro,包含订单状态、时间等。
- key:
user-notifications:用户通知事件。
2)事件驱动流程:
- 订单服务创建订单 → 发送
OrderCreated事件到order-events; - 支付服务消费
OrderCreated,生成支付二维码或链接; - 支付成功回调 → 支付服务发送
OrderPaid事件; - 通知服务消费
OrderPaid,给用户发短信/站内信; - UGC 服务消费
OrderPaid,记录“加入课程”动态。
3)Java 使用 Kafka 注意点(以 Spring Kafka 为例):
- 生产者:
kafkaTemplate.send("order-events", orderId, eventJson);- 配置重试、超时、消息大小限制;
- 消费者:
@KafkaListener(topics = "order-events", groupId = "payment-service") public void onMessage(ConsumerRecord<String, String> record) { ... }- 手动提交 offset:避免未处理成功就提交;
- 幂等性:为每条消息加唯一 ID,在数据库中记录处理状态。
5.2.3 Redis 缓存与热点课程
1)Key 设计:
- 单个课程详情:
course:detail:{id}; - 课程列表缓存:
course:list:category:{categoryId}:page:{pageNo}; - 热门课程排行榜:使用 zset,如
course:hot:rank,按访问量/购买量排序。
2)缓存问题与解决:
- 缓存雪崩:大量 key 同时过期导致后端被打崩。
- 解决:给过期时间加随机值、热门数据永不过期+后台刷新、分片过期等。
- 缓存击穿:某个热点 key 过期瞬间大量请求同时打到 DB。
- 解决:互斥锁(如 Redisson 分布式锁)、“永不过期+异步更新”。
- 缓存穿透:大量请求访问不存在的数据(恶意攻击或脏数据)。
- 解决:缓存空值(短 TTL)、参数校验、布隆过滤器。
3)Spring Cache 简单用法:
@Cacheable(cacheNames = "course", key = "#id")
public CourseDto getCourseById(Long id) { ... }
5.2.4 日志、监控与链路追踪
1)日志框架:
- SLF4J + Logback/Log4j2:统一日志接口与实现;
- 规范日志格式:时间、TraceId、SpanId、服务名、方法、耗时、错误堆栈。
2)链路追踪:
- 使用 Spring Cloud Sleuth 或 Micrometer Tracing:
- 自动在请求链路中传递 TraceId/SpanId;
- 集成 Zipkin/Jaeger 可视化调用链;
- 通过过滤器/拦截器在入站请求时生成 TraceId 或从上游传入。
3)指标与监控:
- Micrometer 把应用指标(QPS、RT、错误率、JVM 状态)上报到 Prometheus;
- Grafana 对指标做可视化与告警:
- 如订单服务 5 分钟错误率 > 5% 时报警。
5.2.5 安全:Spring Security + JWT + OAuth2/Keycloak
1)登录与认证流程:
- 用户调用
/auth/login,提交用户名和密码; - 后端验证通过后生成 JWT,写入响应;
- 客户端后续调用接口时,把 JWT 放在
Authorization: Bearer xxx头里; - 网关或服务端过滤器解析 JWT,校验签名与过期时间;
- 把用户信息(UserDetails)写到 SecurityContext,用于后续权限判断。
2)关键点:
- 使用非对称加密(如 RSA)签名,私钥在认证中心,公钥在各服务;
- 短有效期 + 刷新 token;
- 敏感操作(支付、提现)可以附加二次校验。
3)高级玩法:
- 使用 OAuth2.1 / Keycloak 做统一认证中心;
- 支持 SSO、多端登录、企业身份(企业协同/SaaS 场景)。
5.3 阶段三:AI 语义搜索、RAG 与智能客服
5.3.1 从关键词匹配到语义检索
传统搜索:
- 基于 MySQL
LIKE或 Elasticsearch 关键词匹配; - 无法理解“学微服务”与“Spring Cloud 课程”之间的语义关系。
语义检索核心:
- 用 Embedding 模型 将文本(课程标题、简介、UGC)转换为向量;
- 查询问题也向量化,计算相似度(如余弦相似度);
- 使用向量数据库(Milvus、Redis、Chroma)存储与高效检索。
RAG(Retrieval-Augmented Generation)的流程:
- 用户提问:
- “我想从零开始学 Java 微服务,有没有系统课程推荐?”
- 检索阶段:
- 使用 Embedding 模型(如 OpenAI、Ollama)把问题转成向量;
- 在向量库中检索最相近的课程、文章、UGC;
- 生成阶段:
- 把检索到的内容作为“知识上下文”拼接到 Prompt 中;
- 调用大模型生成回答(推荐课程清单+学习路径);
- 返回结果时可附带来源链接,提升可信度。
5.3.2 向量数据库实战:Milvus / Redis
1)Milvus:
- 优点:为向量搜索优化,支持大规模、高维向量,索引类型丰富(IVF、HNSW 等)。
- Java 集成:
- 使用官方 Java SDK(gRPC);
- 设计 collection(类似表):字段包括
id、vector、title、tags等; - 定义索引类型、分片策略;
- 支持批量插入、删除、更新。
2)Redis 向量索引(Redis Stack):
- 利用
VECTOR类型 + RediSearch 实现向量检索; - 优点:与现有 Redis 集群融合,降低运维复杂度;
- 适合向量规模相对较小、实时性要求高的场景。
3)工程实践:
- 向量维度与模型版本要记录下来:
- 否则升级 Embedding 模型后维度不一致会导致检索报错;
- 定期重建索引与清理数据;
- 对向量库访问做限流与缓存,避免直接被高并发打崩。
5.3.3 Spring AI 与 Agent 架构
Spring AI 的定位:
- 类似 Spring Data、Spring Cloud,对于 AI 模型访问做“统一抽象”;
- 支持多家模型提供商(OpenAI、Azure、Ollama 等);
- 提供统一接口调用、Prompt 模板、对话管理等能力。
一个简单的 Agentic RAG 架构:
- 对话入口服务(Java + Spring Boot + Spring AI):
- 接收用户请求(聊天、搜索、客服问题);
- 管理会话上下文(聊天会话内存,可用 Redis/H2 存储历史消息);
- 工具执行框架:
- 定义多个工具(Tool):
- 课程检索工具:调用向量库 + 课程服务;
- 订单查询工具:调用订单微服务或 Dubbo 接口;
- 退款规则工具:加载企业内部文档(Doc Loader + RAG);
- Agent 根据模型输出或预设策略选择调用哪个工具;
- 定义多个工具(Tool):
- RAG 管道:
- 文档加载:课程大纲、帮助中心、退款规则等;
- 向量化:使用 Embedding 模型;
- 存储:Milvus/Chroma/Redis;
- 检索:根据用户问题召回相关片段;
- 生成与响应:
- 将检索结果 + 用户问题 + 会话历史 拼接成 Prompt;
- 调用大模型生成答案;
- 记录日志与审计信息(问题、检索结果、回答、模型版本)。
5.3.4 减少 AI 幻觉与风控
在企业场景(尤其是退款、金融、医疗等高风险领域)下,AI 的策略:
- 答案来源展示:
- 在回答中附带引用的文档片段和链接;
- 明确哪些内容是依据文档,哪些是模型推理。
- 置信度阈值:
- 如果检索结果的相似度/覆盖度过低,则:
- 提示“目前没有足够信息”;
- 或强制转人工客服。
- 如果检索结果的相似度/覆盖度过低,则:
- 规则和模板约束:
- 对于重要流程,采用“强模板化”回答:
- 如退款条件、额度、时间,固定文案字段;
- 大模型只负责选择模板、填入参数,不自由发挥。
- 对于重要流程,采用“强模板化”回答:
- 人工审核与兜底:
- 复杂或金额较大的请求需要人工确认;
- 支持“AI 草稿 + 人工编辑后发送”。
- 安全与审计日志:
- 每次 AI 回复都记录问题、检索内容、回答、模型 ID;
- 便于出现问题时追踪和追责。
5.3.5 复杂工作流与微服务编排
“退款流程”的通用设计思路:
- 状态机:
- 状态:用户发起 → AI 预审 → 人工审核 → 退款执行 → 完成/拒绝;
- 工作流引擎:
- 使用 Activiti/Flowable/Camunda/Temporal 等;
- 每个节点对应一个 Service 调用或消息处理;
- 事件驱动:
- 每个状态变化发送事件到 MQ(Kafka/RabbitMQ);
- 下游服务(财务系统、通知服务)订阅对应事件;
- 幂等与补偿:
- 每次执行前检查当前状态,防止重复执行;
- 失败时通过补偿动作(如退款失败回滚订单状态)恢复一致性。
5.4 小白学习路线建议
结合本文场景,如果你是 Java 初中级,可以按下面顺序学习:
- Java 核心与 JVM:
- Java 8/11 特性、集合、多线程;
- JVM 内存结构、GC、基本调优;
- Spring Boot + Web 开发:
- REST API、参数校验、全局异常处理;
- Swagger/OpenAPI 文档;
- 数据库与 ORM:
- MySQL 基础、索引;
- MyBatis / JPA / Spring Data;
- 测试与工程实践:
- JUnit 5、Mockito、集成测试;
- Git、Maven、Gradle;
- 微服务与中间件:
- Spring Cloud、OpenFeign、Eureka/Consul;
- Kafka/RabbitMQ、Redis 缓存;
- 日志、链路追踪(ELK、Zipkin、Jaeger)、监控(Prometheus+Grafana);
- 安全与认证:
- Spring Security、JWT、OAuth2/Keycloak;
- AI 与 RAG 实战:
- Embedding、向量数据库(Milvus/Chroma/Redis);
- Spring AI、RAG 管道、Agent 工具调用框架;
- 企业文档问答、智能客服系统。
掌握这些内容后,再回过头看本文的面试场景,你就能比小Y回答得更扎实、更体系化——从单体 CRUD 程序员,逐步成长为真正能顶住大厂后端生产环境的工程师。
更多推荐



所有评论(0)