软通动力面试实录
阿辉 · 文章分享
软通动力 Java / AI Agent 开发面试题(2026年9月7日)
本文整理的是 2026 年 9 月 7 日软通动力 Java / AI Agent 相关岗位面试中涉及的技术问题,主要覆盖 AI Agent、Java 基础、HashMap、Redis、Spring Boot、Spring Cloud、MySQL、MyBatis 等知识点。
以下根据实际面试问题进行整理,并对部分答案进行了补充和修正,方便后续复习。
一、AI Agent / 大模型
1. 你在 Agent 项目中主要负责哪些工作?
答:
参与整个 Agent 工作流的开发和落地,包括业务需求梳理、工作流设计、模型接入、工具调用、流程编排、本地化部署、系统调试,以及 AI Web 应用开发等工作。
2. 你负责的是整个 Agent 工作流,还是其中一部分?
答:
参与的是完整 Agent 工作流的开发和落地,不只是负责其中某一个独立模块。
从业务需求分析、Agent 流程设计,到模型和工具接入、工作流编排以及最终部署都有参与。
3. Agent 使用了什么框架?
答:
可以使用 LangChain、LangGraph 等 Agent 开发框架。
LangChain 主要用于大模型、Prompt、Tool、Retriever 等能力的集成。
LangGraph 更适合复杂 Agent 的工作流编排、状态管理、多步骤执行等场景。
注意:实际面试时应该根据自己项目真正使用过的技术回答。
4. 大模型本地化部署使用了多少台服务器?
答:
服务器数量没有固定标准,需要根据模型规模、并发量以及整体系统架构决定。
例如一个中小型 AI 应用项目可能使用 3~5 台服务器,分别承担:
- 大模型推理服务
- Agent 服务
- Web / 后端业务服务
- MySQL、Redis 等基础服务
实际项目中也可能将多个服务部署在同一台服务器上。
5. 模型推理服务器需要多少 CPU 和内存?
答:
大模型推理服务器的配置需要根据模型参数量、模型精度、量化方式、上下文长度以及并发量决定。
例如中小模型部署可能使用:
- CPU:16~32 核
- 内存:64~128GB
但是对于大模型推理来说,更重要的通常是 GPU 型号以及显存容量。
因此不能只根据 CPU 和内存判断一台服务器是否能够部署某个大模型。
二、Java 基础
6. 如何高效计算 2 × 8?
如果面试官主要考察位运算,可以写:
2 << 3
结果为:
16
因为左移 3 位相当于乘以 2 的 3 次方:
2 << 3
= 2 × 2³
= 2 × 8
= 16
不过在实际 Java 业务开发中,直接写:
2 * 8
即可。
现代编译器和 JIT 会进行相关优化,没有必要单纯为了性能而将普通乘法手动改成位运算,可读性通常更加重要。
7. Java 有哪些基本数据类型?
Java 一共有 8 种基本数据类型:
byte
short
int
long
float
double
char
boolean
可以分为:
整数类型:
byte、short、int、long
浮点类型:
float、double
字符类型:
char
布尔类型:
boolean
如果面试官问的是数值相关基本类型,则通常不包含 boolean。
三、HashMap / Hashtable
8. HashMap 和 Hashtable 有什么区别?
主要区别如下:
HashMap:
- 线程不安全
- 性能通常更好
- 允许一个 null key
- 允许多个 null value
Hashtable:
- 线程安全
- 很多方法通过 synchronized 实现同步
- 不允许 null key
- 不允许 null value
- 属于比较早期的 Java 集合类
现代 Java 项目如果存在并发访问 Map 的需求,一般优先考虑:
ConcurrentHashMap
而不是 Hashtable。
面试一句话总结:
HashMap 线程不安全但性能通常更好,并且允许 null;Hashtable 是线程安全的,不允许 null。现代并发场景一般使用 ConcurrentHashMap。
四、Redis
9. Redis 常见的数据类型有哪些?
Redis 最经典的五种数据类型:
String
Hash
List
Set
ZSet(Sorted Set)
此外还有:
Bitmap
HyperLogLog
Geo
Stream
常见应用场景:
String:缓存、计数器、分布式锁等。
Hash:存储对象属性。
List:消息列表、简单队列等。
Set:数据去重、共同好友、共同关注等。
ZSet:排行榜、按照分数排序的数据。
Bitmap:签到、用户状态统计。
HyperLogLog:UV 等基数统计。
Geo:地理位置信息。
Stream:消息流、消息队列等场景。
五、Spring Boot
10. Spring Boot 启动类的核心注解是什么?
答:
@SpringBootApplication
@SpringBootApplication 是一个组合注解,核心组合了:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
其中:
@SpringBootConfiguration
表示 Spring Boot 配置类。
@EnableAutoConfiguration
开启 Spring Boot 自动配置。
@ComponentScan
进行组件扫描。
面试一句话总结:
Spring Boot 的核心启动注解是 @SpringBootApplication,它主要组合了配置类、自动配置和组件扫描三个能力。
六、Spring Cloud
11. Spring Cloud 经典五大组件是什么?
传统 Spring Cloud 面试题通常回答:
Eureka
Ribbon
Feign
Hystrix
Zuul
分别对应:
Eureka:服务注册与发现。
Ribbon:客户端负载均衡。
Feign:声明式服务调用。
Hystrix:服务熔断、降级。
Zuul:API 网关。
可以简单记忆:
注册 → 负载 → 调用 → 熔断 → 网关
需要注意的是,这属于经典的老一代 Spring Cloud Netflix 技术栈。
现代项目中已经出现了很多新的替代方案,例如:
Nacos
OpenFeign
Spring Cloud LoadBalancer
Sentinel
Spring Cloud Gateway
国内 Java 微服务项目中也经常使用 Spring Cloud Alibaba 相关组件。
七、MySQL
12. MySQL 查询性能突然变慢,应该怎么排查?
答:
首先通过慢查询日志定位执行时间较长的 SQL。
找到慢 SQL 后,可以使用:
EXPLAIN
分析 SQL 的执行计划。
重点关注:
- 是否正确使用索引
- 索引类型
- 扫描行数
- 是否存在全表扫描
- 表连接方式
- 是否存在额外排序
- 是否使用临时表
如果 SQL 和索引本身没有明显问题,再进一步排查:
- 锁等待
- 长事务
- 数据库连接数
- CPU 使用率
- 内存使用情况
- 磁盘 IO
整体排查思路:
慢查询日志
↓
定位慢 SQL
↓
EXPLAIN 分析执行计划
↓
检查索引和扫描情况
↓
检查锁和事务
↓
检查数据库连接
↓
检查 CPU / 内存 / 磁盘 IO
面试一句话总结:
先通过慢查询日志定位慢 SQL,再通过 EXPLAIN 分析执行计划,重点检查索引和扫描情况,然后继续排查锁、事务、连接数以及 CPU、内存、磁盘 IO 等系统资源。
13. MySQL InnoDB 索引为什么使用 B+ Tree?
答:
B+ Tree 非叶子节点主要保存索引信息,因此单个节点可以存储更多索引项,使整棵树的高度比较低。
树的高度越低,查询过程中通常需要进行的磁盘 IO 次数就越少。
同时 B+ Tree 的数据集中在叶子节点,并且叶子节点之间按照顺序连接,因此非常适合范围查询。
核心优势可以记成:
树高低
磁盘 IO 少
范围查询效率高
InnoDB 中还需要注意:
主键索引属于聚簇索引,叶子节点保存完整的行数据。
普通二级索引的叶子节点主要保存索引列以及对应的主键值。
因此通过普通二级索引查询其他字段时,某些情况下还需要根据主键再次查询聚簇索引,这个过程通常称为“回表”。
八、MyBatis
14. MyBatis 中 #{} 和 ${} 有什么区别?
这是 MyBatis 非常经典的一道面试题。
#{} 的作用
例如:
SELECT *
FROM user
WHERE id = #{id}
底层执行时类似:
SELECT *
FROM user
WHERE id = ?
然后通过 PreparedStatement 对参数进行绑定。
因此 #{} 的主要特点是:
- 参数占位
- 参数绑定
- 使用 PreparedStatement
- 能够有效防止 SQL 注入
${} 的作用
例如:
SELECT *
FROM user
ORDER BY ${column}
${} 会进行字符串替换,将内容直接拼接到 SQL 中。
例如:
column = create_time
最终 SQL 类似:
SELECT *
FROM user
ORDER BY create_time
因为属于直接字符串替换,所以如果参数来源不可信,就可能产生 SQL 注入风险。
为什么还需要 ${}?
因为某些 SQL 结构本身不能使用普通参数占位符,例如动态:
表名
字段名
排序字段
例如:
ORDER BY ${column}
这种情况下可以使用 ${},但是必须对允许传入的字段进行白名单校验,不能直接将用户输入拼接到 SQL 中。
面试一句话总结:
#{} 是参数占位,底层通过 PreparedStatement 进行参数绑定,可以有效防止 SQL 注入;${} 是字符串直接替换,会直接拼接 SQL,存在 SQL 注入风险。一般能使用 #{} 就使用 #{},动态表名、字段名等特殊场景使用 ${} 时需要进行白名单校验。
九、面试题快速背诵版
- Agent 主要负责什么?
模型接入、工具调用、工作流编排、本地化部署以及 AI 应用开发。
- Agent 使用什么框架?
LangChain、LangGraph 等。
- 模型本地部署主要看什么配置?
主要看 GPU 型号和显存,同时考虑 CPU、内存、模型大小、量化方式和并发量。
- Java 有几个基本数据类型?
8 个:byte、short、int、long、float、double、char、boolean。
- 2 × 8 如何使用位运算?
2 << 3
- HashMap 和 Hashtable 的主要区别?
HashMap 线程不安全并允许 null;Hashtable 线程安全且不允许 null。现代并发场景一般使用 ConcurrentHashMap。
- Redis 经典五大数据类型?
String、Hash、List、Set、ZSet。
- Spring Boot 核心启动注解?
@SpringBootApplication
- Spring Cloud 经典五大组件?
Eureka、Ribbon、Feign、Hystrix、Zuul。
- MySQL 慢 SQL 怎么排查?
慢查询日志 → EXPLAIN → 索引和扫描情况 → 锁和事务 → 数据库连接 → CPU / 内存 / 磁盘 IO。
- InnoDB 为什么使用 B+ Tree?
树高低、磁盘 IO 少、范围查询效率高。
- MyBatis #{} 和 ${} 的区别?
#{} 使用参数绑定,可以有效防止 SQL 注入;${} 是字符串直接替换,存在 SQL 注入风险。
十、本次面试涉及的技术栈
本次软通动力面试涉及的技术方向主要包括:
AI Agent
大模型本地化部署
LangChain / LangGraph
Java 基础
Java 集合
HashMap / Hashtable / ConcurrentHashMap
Redis
Spring Boot
Spring Cloud
MySQL
InnoDB
B+ Tree
MyBatis
SQL 优化
微服务
整体来看,这次面试并不是只考传统 Java 后端知识,而是将 Java 后端、微服务、数据库与 AI Agent、大模型应用开发结合起来进行考察。
对于 Java + AI 应用开发方向的岗位,除了 Java、Spring Boot、MySQL、Redis 等传统后端技术之外,还需要重点准备 Agent 工作流、模型接入、工具调用、本地化模型部署等 AI 应用开发相关知识。