面灵AI→

招商银行秋招后端笔试(0921)

轮次
笔试
时间
2026-09
来源
牛客网

《面试题目》

  1. 选择题(15 道):涉及后端设计模式、云原生组件、QKV 关系、SQL 索引、数据结构等。
  2. 编程题一:KMP 算法的代码补全,共 4~5 个空,填 next 数组与核心匹配逻辑。
  3. 编程题二:输入一个带百分号和括号的计算式,例如 2.5%*(1.2%*2),返回类型为 double。
  4. 编程题三:AOP 补全,问在 order 给定的情况下 pre 与 after 的执行顺序。

《参考解析》

KMP 代码补全要点:KMP 的核心是 next(或 pi)数组——next[i] 表示 p[0..i] 的最长相等前后缀长度,用来在失配时把模式串指针回退到「已经匹配好的前缀之后」,从而让主串指针不回退。求 next 的代码骨架是「自己匹配自己」:j = next[i-1](前一位的前缀长度),如果 p[i] == p[j] 则 next[i] = j + 1;否则 j = next[j-1] 继续回退,直到 j == 0 时 next[i] = (p[i] == p[0] ? 1 : 0)。匹配阶段的骨架:j 是模式串已匹配长度,s[i] == p[j] 就 j++,j == m 时找到一次出现(返回 i - m + 1 或继续 j = next[j-1] 找下一次),失配且 j > 0 时 j = next[j-1],j == 0 时 i++。填空常考的三个点是:回退语句、相等时的自增、以及 next 的下标基准是 0 还是 1(写之前先看清题目给的 next[0] 初始值是 -1 还是 0,两种约定不能混)。复杂度 O(n+m)。

表达式求值(带百分号与括号):百分号等价于「除以 100」,最省事的处理方式是预处理:把 2.5% 直接替换成 (2.5/100),或者更简单——在词法阶段遇到 % 就输出 0.01 作为操作数(% 是后缀一元运算符,只作用于紧邻的前一个数字/右括号)。求值本体用经典双栈法:一个栈存操作数,一个栈存运算符;扫到数字入数栈,扫到 ( 入符号栈,扫到 ) 则不断弹运算符计算直到遇到 (;扫到运算符时,只要栈顶运算符优先级不低于当前运算符就先计算(注意区分左结合,- 和 / 遇到同级也要先算),最后把当前运算符入栈;扫描结束把符号栈算空。涉及浮点返回,注意用 double 累加并处理除零(返回错误或 NaN,先确认题目要求)。另一个等价做法是中缀转后缀(调度场算法)再求值,代价是多一次遍历,但代码更清晰。边界:负数(一元负号,可在词法阶段与二元减号区分)、多位数与小数点、空格、括号不匹配、% 出现在表达式开头等非法输入。

AOP 的 order 与 pre/after 顺序:Spring AOP 中,多个切面作用在同一个方法上时,执行顺序由 @Order(或 Ordered 接口)决定,规则是「order 值越小,优先级越高」。前置通知(@Before)按优先级从高到低(order 小 → 大)执行,后置类通知(@After、@AfterReturning、@AfterThrowing)则反向执行,也就是像洋葱一样包起来:order=1 的 @Before → order=2 的 @Before → 目标方法 → order=2 的 @After → order=1 的 @After。@Around 更直观:优先级高的在外层,proceed() 之前的部分先执行、之后的部分后执行。同一 order 值时的顺序不保证(取决于 Bean 的注册顺序,不要依赖)。另外注意 @AfterReturning 与 @AfterThrowing 互斥,@After 无论如何都执行(等价于 finally)。答题时把「先入后出、先执行的后收尾」这句话点出来,再补一句「order 相同不保证顺序」。

笔试复习建议:这场笔试整体偏简单(原帖作者反馈「给我涨了自信」)。选择题里几类高频考点值得过一遍:设计模式(单例的线程安全写法、工厂与策略的区别、代理模式,因为 AOP 本身就是动态代理);云原生组件(K8s 的 Pod/Deployment/Service/Ingress 各自职责,Docker 镜像分层)——注意这次前后端考同一套卷,前端也会考云原生和 SQL,说明银行技术岗笔试越来越统一;SQL 索引(最左前缀、覆盖索引、回表、EXPLAIN 的 type 与 key、索引失效的常见写法如函数包裹列、like '%x'、隐式类型转换);数据结构与复杂度(排序稳定性、哈希冲突处理、栈与队列的应用)。编程题的复习重点是模板默写:KMP、双栈表达式求值、二分、并查集、快排,考试里代码补全比从零写更常见,把模板写熟就不会卡。

面试复盘:笔试在 9 月 21 日进行,题量是 15 选择 + 3 编程,其中两道是「补全」形式(KMP、AOP),一道是完整实现(表达式求值)。准备银行/国企类后端笔试时,除了算法还要专门看 Java 生态(Spring 的 AOP/IOC/事务)、数据库和云原生,这些是选择题的主要来源。