Java大厂面试真题:Spring Boot+微服务+AI智能客服三轮技术拷问实录(七)
Java大厂面试真题:Spring Boot+微服务+AI智能客服三轮技术拷问实录
面试官(推了推眼镜,面无表情):请进。
战五渣(紧张地搓手):您好!我是来面试Java开发岗的,三年经验,主攻Spring Boot……
面试官:嗯,我们是做智慧医疗+AI智能客服系统的,用的是Spring Cloud Alibaba + Spring AI + 向量数据库。先从基础开始吧。
🟢 第一轮:核心框架与Web技术(电商场景衔接)
Q1:Spring Boot自动装配原理是什么?
战五渣:这个我知道!就是通过@SpringBootApplication注解,它包含了@EnableAutoConfiguration,会扫描META-INF/spring/org.springframework.boot.autoconfigure.package文件里的配置类,然后根据条件注解比如@ConditionalOnClass来决定是否加载Bean。
面试官(点头):不错,理解到位。那如果我想自定义一个starter,该怎么写?
战五渣:要新建一个Maven项目,引入spring-boot-autoconfigure,然后写一个Configuration类,加上条件注解,最后在META-INF/spring.factories里注册……哦不对,现在是META-INF/spring/org.springframework.boot.autoconfigure.autoconfiguration.imports了!
面试官:很好,跟上了版本变化。继续——你们项目里用Redis缓存商品信息,怎么避免缓存穿透?
战五渣:用布隆过滤器!先把所有合法key放进去,查询前先判断是否存在。或者缓存空值,设置短过期时间。
面试官:如果缓存雪崩呢?
战五渣:给不同key加随机过期时间,比如原本8小时,加个±1小时的偏移;再配合多级缓存和限流降级……
面试官:还行。那用过RabbitMQ吗?
战五渣:用过!发短信验证码的时候用的,生产者发送,消费者异步处理,保证最终一致性。
🟡 第二轮:微服务与云原生(智慧医疗场景延伸)
Q1:你们服务之间是怎么鉴权的?
战五渣:呃……我们用JWT,在网关校验token……
面试官:JWT存在哪些安全风险?
战五渣:啊?不是挺安全的吗……
面试官:比如没有刷新机制、容易被窃取、无法主动注销。你们有没有结合OAuth2?
战五渣:啊……我们没用那么复杂,就自己生成token……
面试官(皱眉):那Eureka和Nacos有什么区别?
战五渣:Eureka是Netflix的,Nacos是阿里的……Eureka不更新了?
面试官:对,停更了。Zookeeper呢?CP还是AP?
战五渣:ZooKeeper是CP系统,强调一致性……但网络分区时可能不可用……
面试官:那Consul呢?
战五渣:好像是AP?不对……等等,我记混了……
面试官(打断):Consul支持多种模式,默认是CP。下一个——你们日志怎么收集的?
战五渣:用ELK,Logback输出到Filebeat,传到ES,Kibana查……
面试官:有没有做过链路追踪?
战五渣:Zipkin?我们项目没集成……但我知道它是靠TraceID串联请求的!
🔴 第三轮:AI融合架构(企业智能客服场景)
Q1:了解RAG吗?
战五渣:知道知道!Retrieval-Augmented Generation,先检索再生成,避免幻觉!
面试官:具体流程?
战五渣:用户提问 → 向量化 → 在向量数据库查相似文档 → 拼成Prompt → 给大模型生成答案。
面试官:用过哪些向量数据库?
战五渣:Redis也能做向量搜索!还有Milvus、Chroma……
面试官:Embedding模型用哪个?
战五渣:OpenAI的text-embedding-ada-002……本地的话可以用Ollama跑BGE……
面试官:Agentic RAG和普通RAG有什么区别?
战五渣:呃……就是多了个Agent?能自己决策要不要查资料?
面试官:工具执行框架了解吗?比如Spring AI的Tool Calling?
战五渣:这个……好像可以调外部API?但我没实战过……
面试官:如果AI回答错误医疗建议,怎么办?
战五渣:加审核?提示词里写不准瞎说?
面试官(叹气):要有兜底知识库、人工复核流程、责任边界划分……好了,今天就到这里。
战五渣(松口气):谢谢老师!
面试官:你先回去等通知吧。
✅ 真题解析:从小白到高手的技术跃迁
一、第一轮技术点详解
1. Spring Boot自动装配
- 原理:基于
spring.factories或autoconfiguration.imports加载配置类 - 条件装配:
@ConditionalOnClass,@ConditionalOnMissingBean等 - 自定义Starter:命名规范为
xxx-spring-boot-starter
2. 缓存三大问题
| 问题 | 解决方案 |
|---|---|
| 穿透 | 布隆过滤器、缓存空值 |
| 雪崩 | 随机TTL、多级缓存、熔断 |
| 击穿 | 热点数据永不过期 + 异步更新 |
3. RabbitMQ应用场景
- 异步解耦:订单→短信、邮件通知
- 流量削峰:秒杀系统中缓冲请求
- 可靠投递:confirm机制+手动ACK
二、第二轮深度剖析
1. 微服务安全
- JWT缺陷:无法主动失效、需配合黑名单或短期Token
- 推荐方案:OAuth2 + JWT + Opaque Token + Gateway鉴权
2. 注册中心对比
| 工具 | 一致性模型 | 特点 |
|---|---|---|
| Eureka | AP | 自治,适合高可用 |
| Zookeeper | CP | 强一致,选举耗时 |
| Nacos | 支持AP/CP | 动态切换,国产首选 |
| Consul | CP为主 | 多数据中心支持 |
3. 分布式追踪
- 实现方式:Sleuth生成TraceID → Zipkin/Jeager收集 → Grafana展示
- 核心字段:TraceID, SpanID, ParentSpanID
三、AI融合系统设计
1. RAG全流程
User Query → Embedding Model → Vector DB Search → Context Augmentation → LLM → Response
- 关键组件:向量化模型、语义检索、Prompt工程
2. 向量数据库选型
- Milvus:高性能,适合大规模
- Chroma:轻量级,Python友好
- Redis:已有的Redis可扩展模块,节省成本
3. 防止AI幻觉
- 方法:
- 上下文约束(Contextual Grounding)
- 置信度阈值过滤
- 人工审核通道
- 提示词中明确“不知道就说不知道”
4. Agentic RAG
- 不只是检索→生成,而是让Agent自主决策:
- 是否需要查资料?
- 查几次?
- 调用哪个工具?
- 典型框架:LangChain, Semantic Kernel, Spring AI
四、业务场景串联
我们以【智慧医疗AI客服】为例:
- 用户问:“高血压吃什么药?”
- 系统使用BGE模型将问题向量化
- 在Milvus中检索《中国高血压防治指南》相关段落
- 拼接成Prompt,调用通义千问生成回答
- 加上免责声明:“本回答仅供参考,具体请咨询医生”
- 日志上报ELK,链路追踪记录全过程
这样既发挥了AI的语言能力,又规避了医疗风险。
💡 总结建议:
- 基础要牢:Spring Boot、JVM、MySQL、Redis必须扎实
- 微服务要懂治理:注册发现、配置中心、熔断限流
- AI不是噱头:要能落地到真实业务,解决幻觉、可控性问题
- 架构思维:能讲清楚为什么选A而不是B
祝各位早日拿下大厂Offer!
更多推荐
所有评论(0)