招银网络后端开发面经(一面/二面/HR 面)
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
9.15 一面
- 实习介绍
- Java 线程池介绍一下,实习的时候怎么用的?
- MySQL 默认引擎和存储结构
- 为什么用 B+ 树?
- 你的 agent 项目里你印象最深刻的挑战是什么?
- 上下文记忆怎么做的?
- 手撕:螺旋矩阵
9.21 线下二面
- 多个 AOP 的执行顺序
- 事务失效、没有回滚的原因?
- 数据库连接池
- Spring 怎么管理 bean 对象?单例还是多例?
- 你的 agent 怎么使用?有什么特点?
- 手写代码:阶乘和、回文数字
9.21 线下 HR 面
- 实习中最有成就感的事情?
- 担任班干部策划了什么活动?
- 遇到了什么问题、怎么解决?
- 聊聊家常
《参考解析》
- Spring AOP 的执行顺序:同一个切面内按
@Around→@Before→ 目标方法 →@Around后置 →@After→@AfterReturning/@AfterThrowing的顺序;多个切面之间默认按@Order排序,order 值越小越靠外(进入时先执行、退出时后执行)。不写@Order时顺序取决于 bean 的注册顺序,不稳定,线上排查「日志切面怎么跑到事务切面里面去了」这类问题基本都出在这里。 - 事务失效、不回滚的常见原因:同类内部方法自调用(没走代理);方法不是
public;异常被 catch 掉没有重新抛出;抛出的是受检异常而默认只对RuntimeException和Error回滚;数据库引擎本身不支持事务;多数据源下事务管理器没配对;以及@Transactional加在接口上而代理方式为 CGLIB 时配置丢失。排查顺序建议先确认代理有没有生效,再看异常类型和传播行为。 - Spring Bean 的作用域:默认是
singleton(容器内单例),另有prototype(每次 getBean 新建)以及 web 环境下的request/session/application。单例 bean 里注入 prototype bean 时,被注入的那个实例只在初始化时取一次,想让每次调用都拿到新对象需要@Lookup、ObjectFactory或ScopedProxyMode。 - 为什么 MySQL 用 B+ 树:InnoDB 的索引要落到磁盘上,核心指标是「查到一个叶子节点需要几次磁盘 IO」。B+ 树非叶子节点只存键、不存数据,单页能容纳的键远多于 B 树,同样数据量下树更矮,IO 次数更少;叶子节点之间用双向链表连起来,范围查询和
order by直接顺序扫描即可,不用回到上层做中序遍历。哈希索引虽然等值查询是 O(1),但没法做范围查询,也排不了序。 - 螺旋矩阵:按上、右、下、左四条边循环,每走完一条边就收缩对应边界(
top++/right--/bottom--/left++),边界相交时结束。要点是每条边遍历时用<=收口,并在收缩后立刻判断是否已经越界,避免最后剩一行或一列时重复写入。 - Agent 的上下文记忆:常见做法是把记忆拆成几层——当前对话的短期窗口、按会话持久化的历史摘要、以及跨会话的用户画像 / 长期事实。写入侧定期把旧轮次压缩成摘要,读取侧按相关性检索而不是全量塞进 prompt。工程上真正的难点是「什么该记、什么该忘」以及摘要丢信息之后的追溯能力,回答时结合自己项目里的取舍讲会比背概念更有说服力。