AI+Java中级开发面试题库
生成时间:2026-05-24 21:02
【面试题】1. 什么是注意力机制?为什么Transformer架构中的Self-Attention比RNN更适合处理长序列?
【标准答案】注意力机制本质上是一种权重分配策略,让模型在处理每个位置时能动态关注到输入中最相关的部分。
Transformer的Self-Attention相比RNN有几个关键优势:
- 并行计算:RNN必须序列处理,Transformer所有位置同时计算,训练效率高出数量级
- 长距离依赖:RNN的长距离信息会衰减,Self-Attention任意两个位置直接相连,距离为1,不存在梯度消失问题
- 全局视野:每个token都能直接看到整个序列,不存在信息瓶颈
实际项目中,我用BERT处理长文档分类,RNN这类任务根本跑不通。这就是为什么现在大模型基本都用Transformer架构。
【面试题】2. Spring Boot的自动装配原理是什么?如何自定义Starter?
【标准答案】Spring Boot自动装配核心是@EnableAutoConfiguration注解,它通过@Import导入AutoConfigurationImportSelector,这个类会扫描所有jar包下的META-INF/spring.factories文件,把里面配置的自动配置类加载到IOC容器。
但不是所有配置类都会生效,每个配置类上有条件注解,比如@ConditionalOnClass、@ConditionalOnMissingBean,只有满足条件才装配。
自定义Starter的步骤:
- 创建一个模块,命名规范是
xxx-spring-boot-starter - 写一个配置类,用
@Configuration标注 - 在
resources/META-INF/spring.factories里配置EnableAutoConfiguration=你的配置类 - 如果需要配置属性,创建一个
@ConfigurationProperties类
我们项目里自定义过Redis分布式锁的Starter,业务方引入依赖就能直接用@DistributedLock注解。
【面试题】3. RAG中的Chunking策略有哪些?如何选择合适的分块大小?
【标准答案】RAG分块策略主要有几种:
按固定长度切分:简单粗暴,比如每500字符一块,但容易切断语义。
按段落/句子切分:保持语义完整性,比如用换行符或句号分割,但块大小不均匀。
滑动窗口切分:有重叠区域,比如每块500字符,重叠100字符,保证上下文连贯性。
语义切分:用embedding计算句子相似度,语义相近的放一起,效果最好但计算成本高。
递归切分:先按大单位(章节)切,太大再按小单位(段落)切,逐级细化。
选择策略的原则:
- 文档结构规整的,用段落切分
- 问答场景,块可以小一点(200-500字符)
- 需要完整上下文的(法律文档),块要大(1000-2000字符)
- 预算允许,用语义切分效果最好
我们项目用的滑动窗口+语义切分的混合方案,召回率提升了15%。
【面试题】4. ConcurrentHashMap在JDK 1.8相比1.7有什么重大改进?为什么性能更好?
【标准答案】JDK 1.7的ConcurrentHashMap用分段锁(Segment),每个Segment继承ReentrantLock,相当于把大锁拆成多个小锁。默认16个Segment,并发度上限就是16。
JDK 1.8做了重大改进:
- 取消Segment,改用CAS+synchronized锁单个Node:并发度理论上是Node的数量,大幅提升
- 数据结构改用数组+链表+红黑树:链表超过8转红黑树,查询从O(n)变成O(log n)
- 锁粒度更细:只锁头节点,不影响其他位置的读写
性能更好的原因:
- 并发度不再受Segment数量限制
- CAS无锁操作替代部分加锁场景
- 红黑树解决长链表性能问题
- synchronized在JDK 1.6后有大量优化,比ReentrantLock轻量
实际压测中,高并发写入场景,1.8比1.7性能提升30%以上。
【面试题】5. 如何设计一个高可用的AI Agent架构?关键组件有哪些?
【标准答案】一个生产级的AI Agent架构,核心组件包括:
规划模块:负责任务分解和执行顺序规划,可以用ReAct或Plan-and-Execute模式。
记忆模块:短期记忆放对话上下文,长期记忆用向量数据库存储,需要检索时做RAG。
工具层:封装各种外部能力,API调用、数据库操作、代码执行等,要有统一的工具注册和调用机制。
执行引擎:协调规划、记忆、工具的交互流程,处理重试、回退、异常。
监控与反馈:记录每一步决策和结果,方便调试优化,也支持人类反馈介入(Human-in-the-loop)。
高可用设计要点:
- 每个组件都支持降级,比如LLM调用失败有缓存兜底
- 关键操作幂等设计,支持重试
- 状态持久化,支持断点续跑
- 工具调用加超时和熔断
我们项目用LangChain搭建Agent,遇到过LLM响应超时导致任务hang住,后来给每步加了超时熔断机制。
【面试题】6. MySQL的索引下推(ICP)是什么?什么场景下能提升性能?
【标准答案】索引下推(Index Condition Pushdown)是MySQL 5.6引入的优化。简单说,就是把WHERE条件的过滤下推到存储引擎层,而不是在Server层过滤。
举个例子,有索引idx_name_age(name, age),执行SELECT * FROM user WHERE name LIKE '张%' AND age = 30:
没有ICP:存储引擎用索引找到所有name LIKE '张%'的记录,返回Server层,Server层再过滤age = 30。
有ICP:存储引擎在索引遍历时就同时检查age = 30,不满足的记录根本不返回Server层。
性能提升的关键是减少了存储引擎和Server层之间的数据传输。
适用场景:
- 联合索引,但WHERE条件包含索引的前缀和后缀列
- LIKE前缀匹配配合其他索引列条件
- 不是所有条件都能下推,比如条件涉及非索引列
我们有个查询从800ms优化到50ms,就是利用了ICP特性,关键是联合索引的列顺序要设计好。
【面试题】7. 向量数据库的HNSW索引原理是什么?为什么适合高维向量检索?
【标准答案】HNSW全称Hierarchical Navigable Small World,是一种基于图的近似最近邻搜索算法。
核心思想是构建多层图结构:
- 顶层稀疏:节点少,连接远距离节点,快速跳跃
- 底层稠密:节点多,连接近距离节点,精确定位
- 搜索过程:从顶层入口开始,逐层向下逼近,最后在底层找到最近邻
为什么比传统方法好:
- 高维效率:暴力搜索O(n),树结构在高维会退化,HNSW能保持O(log n)
- 召回率高:相比IVF这类聚类方法,HNSW召回率更高,95%以上召回率下性能仍优异
- 支持增量更新:Milvus这类向量库支持实时写入
实际选型时:
- 数据量小(<100万)用FLAT暴力搜索,精度最高
- 数据量中等用IVF,平衡性能和精度
- 数据量大、实时性要求高用HNSW
我们项目中2亿向量检索,用HNSW 10ms内返回Top10,召回率92%。
【面试题】8. Spring Cloud Gateway的过滤器链是如何工作的?如何实现限流?
【标准答案】Spring Cloud Gateway基于WebFlux,核心是Filter Chain模式。请求进来会依次经过:
- GlobalFilter(全局过滤器)
- GatewayFilter(路由级过滤器)
- 最后转发到下游服务
过滤器有pre和post两个阶段:pre在请求转发前执行,post在响应返回后执行。
实现限流的几种方式:
内置RequestRateLimiter:
spring:
cloud:
gateway:
routes:
- id: myroute
uri: lb://myservice
predicates:
- Path=/api/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 10
redis-rate-limiter.burstCapacity: 20
key-resolver: "#{@userKeyResolver}"基于Redis令牌桶,支持分布式。
自定义过滤器限流:实现GatewayFilterFactory,在pre阶段检查计数器,超过阈值返回429。
结合Sentinel:Spring Cloud Alibaba整合,支持QPS限流、线程池限流、熔断降级。
我们项目用Redis+Lua脚本实现滑动窗口限流,QPS精确控制,网关层统一拦截。
【面试题】9. Prompt Engineering中,什么是Few-shot提示?和Zero-shot、CoT的区别是什么?
【标准答案】三种提示策略各有适用场景:
Zero-shot(零样本):直接给任务描述,不给示例。
将以下句子翻译成英文:
今天天气很好优点是简单,但对复杂任务效果不稳定。
Few-shot(少样本):给几个示例再让模型完成任务。
将以下句子翻译成英文:
示例1:你好 → Hello
示例2:谢谢 → Thank you
今天天气很好通过示例教会模型任务模式,效果提升明显,是实际项目中最常用的策略。
CoT(Chain of Thought,思维链):让模型一步步推理。
问题:小明有5个苹果,吃了2个,又买了3个,还剩几个?
请一步步思考:模型会输出推理过程,适合数学推理、逻辑判断。
实际选择:
- 简单任务用Zero-shot
- 有明确模式用Few-shot,2-5个示例性价比最高
- 复杂推理用CoT,或Few-shot+CoT组合
- 示例质量比数量重要,覆盖边界情况效果更好
我们项目做意图识别,Zero-shot准确率70%,加了Few-shot提升到92%,关键是示例要覆盖典型case。
【面试题】10. 如何处理分布式事务?Seata的AT模式原理是什么?
【标准答案】分布式事务的解决方案主要有:
2PC/XA:强一致性,两阶段提交,但同步阻塞、性能差,适合数据库层面。
TCC:Try-Confirm-Cancel,业务层面实现,性能好但开发成本高。
Saga:长事务拆成多个本地事务,每个有补偿动作,适合业务流程长的场景。
本地消息表/事务消息:最终一致性,通过消息队列解耦,适合高并发场景。
Seata的AT模式是最常用的,原理是:
- 一阶段提交:本地事务直接提交,记录undolog(回滚日志)
- 二阶段提交/回滚:
- 提交:异步删除undolog
- 回滚:根据undolog反向生成SQL恢复数据
核心优势:
- 无侵入:业务代码不需要改,只需加
@GlobalTransactional注解 - 性能好:一阶段直接提交,不阻塞
- 支持多数据源:MySQL、PostgreSQL等都支持
注意事项:
- 要加全局锁,防止脏写,性能有损耗
- 只支持ACID数据库
- undolog表要定期清理
我们项目跨库下单场景,用Seata AT模式,TPS从单库的2000降到跨库的800,但一致性有保障。
本轮题库统计:
- AI方向:5题(大模型原理、RAG、向量数据库、Agent架构、Prompt Engineering)
- Java方向:5题(Spring Boot、ConcurrentHashMap、MySQL索引、Spring Cloud Gateway、分布式事务)
- 涵盖:技术基础、架构设计、场景实操、性能优化