面灵AI

招银网络科技后端开发一面面经

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. Java 线程池有哪些核心参数?提交任务后的完整流程是什么?
  2. 线程池有哪些常见拒绝策略?
  3. 数据库事务的 ACID 特性是什么?
  4. MySQL 有哪些事务隔离级别?InnoDB 默认是哪一种?
  5. @Transactional 的实现原理、属性和失效场景是什么?
  6. Spring 有哪些事务传播行为?REQUIRED、REQUIRES_NEW、NESTED 有什么区别?
  7. MyBatis 一级缓存和二级缓存有什么区别?
  8. MyBatis 中 #{}${} 有什么区别?为什么 ${} 有 SQL 注入风险?
  9. Mapper 接口和 Mapper XML 如何关联?
  10. 如何设计数据权限体系?
  11. 飞书单点登录中的 State 和 Ticket 如何组成双重一次性令牌?
  12. 如何反转链表指定区间 [left, right]

《参考解析》

  1. 事务传播:REQUIRED 加入现有事务、没有则新建;REQUIRES_NEW 挂起外层并单独提交;NESTED 在同一事务中使用保存点。选择时应先明确内外层失败是否需要一起回滚。
  2. MyBatis 参数#{} 通过预编译参数绑定,能避免把值拼进 SQL;${} 进行字符串替换,适合少数受控标识符场景,输入不可信时会产生注入风险。
  3. 单点登录令牌:State 用于绑定登录请求并防 CSRF,Ticket 是服务端一次性凭证。两者都应具备短时有效期、随机性和服务端消费标记,回调时校验绑定关系后立即作废。
  4. 区间反转:先找到 left 前驱,把区间首节点与前驱断开后逐个头插到前驱之后,最后重新连接尾部。整个过程保持未反转部分链表可达,时间复杂度 O(n)、额外空间 O(1)。