软通动力面试实录

阿辉 · 文章分享

软通动力 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 注入风险。一般能使用 #{} 就使用 #{},动态表名、字段名等特殊场景使用 ${} 时需要进行白名单校验。

九、面试题快速背诵版

  1. Agent 主要负责什么?

模型接入、工具调用、工作流编排、本地化部署以及 AI 应用开发。

  1. Agent 使用什么框架?

LangChain、LangGraph 等。

  1. 模型本地部署主要看什么配置?

主要看 GPU 型号和显存,同时考虑 CPU、内存、模型大小、量化方式和并发量。

  1. Java 有几个基本数据类型?

8 个:byte、short、int、long、float、double、char、boolean。

  1. 2 × 8 如何使用位运算?
2 << 3
  1. HashMap 和 Hashtable 的主要区别?

HashMap 线程不安全并允许 null;Hashtable 线程安全且不允许 null。现代并发场景一般使用 ConcurrentHashMap。

  1. Redis 经典五大数据类型?

String、Hash、List、Set、ZSet。

  1. Spring Boot 核心启动注解?
@SpringBootApplication
  1. Spring Cloud 经典五大组件?

Eureka、Ribbon、Feign、Hystrix、Zuul。

  1. MySQL 慢 SQL 怎么排查?

慢查询日志 → EXPLAIN → 索引和扫描情况 → 锁和事务 → 数据库连接 → CPU / 内存 / 磁盘 IO。

  1. InnoDB 为什么使用 B+ Tree?

树高低、磁盘 IO 少、范围查询效率高。

  1. 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 应用开发相关知识。