面灵AI→

招银网络后端开发面经(一面/二面/HR 面)

时间
2026-09
来源
牛客网

《面试题目》

9.15 一面

  1. 实习介绍
  2. Java 线程池介绍一下,实习的时候怎么用的?
  3. MySQL 默认引擎和存储结构
  4. 为什么用 B+ 树?
  5. 你的 agent 项目里你印象最深刻的挑战是什么?
  6. 上下文记忆怎么做的?
  7. 手撕:螺旋矩阵

9.21 线下二面

  1. 多个 AOP 的执行顺序
  2. 事务失效、没有回滚的原因?
  3. 数据库连接池
  4. Spring 怎么管理 bean 对象?单例还是多例?
  5. 你的 agent 怎么使用?有什么特点?
  6. 手写代码:阶乘和、回文数字

9.21 线下 HR 面

  1. 实习中最有成就感的事情?
  2. 担任班干部策划了什么活动?
  3. 遇到了什么问题、怎么解决?
  4. 聊聊家常

《参考解析》

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