面灵AI→

农业银行信息科技岗面经合集(总行菁穗、研发中心软件研发与测开)

时间
2026-10
来源
牛客网

《面试题目》

总行本部·菁穗培训生(计算机类方向)

  1. 面试安排是怎样的?(综合面 60 分钟含无领导小组讨论,加业务面 60 分钟多对多按投递方向出题,通过后体检加 3-5 分钟 HR 面谈,面谈环节会刷人)

研发中心(西安)·软件研发岗

  1. Java SE 和 Java EE 的区别是什么?
  2. StringBuilder 和 StringBuffer 的区别是什么?
  3. 为什么要有内部类?
  4. SQL 里 in 和 exists 的区别是什么?
  5. MySQL 的约束有哪些?
  6. 事务的四大特性(ACID)是什么?
  7. Linux 下登录 MySQL 的命令是什么?
  8. 查看数据库下所有表的 SQL 语句怎么写?
  9. Spring 依赖注入的三种方式是什么?
  10. 黑盒测试和白盒测试的区别是什么?常用的黑盒测试方法有哪些?

研发中心(西安)·测试开发岗

  1. 你们是怎样搭建分布式 MySQL 的?
  2. 数据量大概多少?搭建分布式的时候有没有做调优?
  3. MySQL Cluster 怎样进行数据备份?
  4. static 关键字的作用是什么?
  5. 创建线程有哪些方式?
  6. MySQL 命令:查看表结构的命令、查看所有表的命令、查询某个字段中前三个字符是 123 的记录?
  7. 在美团实习做接口自动化测试用的是什么框架?TestNG 的数据驱动大概讲一下。
  8. 美团的泳道是怎么保证隔离的?

研发中心(北京)·软件开发岗(本科)

  1. 数据库的隔离级别有哪些?事务的四大特性是什么?
  2. JVM 的内存结构是怎样的?(原帖在此处截断)

《参考解析》

银行信息科技岗的流程本身就是一道题,先搞清楚每一轮在筛什么。 总行的菁穗培训生是「无领导小组讨论 + 业务面 + HR 面谈」三段式:无领导看重的是组织协调、归纳总结和表达条理,不是谁说得最多,稳妥的做法是主动承担一两个功能性角色(开场破题、计时推进、最后总结),并在别人发言时做一次归纳把讨论往前推;业务面按你投的方向出专业题、面试官逐条追简历,准备重点是把简历上写的每一项都能讲出细节;HR 面谈问的是薪酬预期、岗位与专业不对口怎么办、为什么来银行,这类问题提前想清楚一句自己的说法即可,薪酬按密薪制回答「以公司标准为准」不会出错。分行与研发中心的技术面则更短更快——西安研发中心是多人进大厅按编号进场、10-15 分钟一对一或多对一,北京研发中心是线上双机位匿名面试(自我介绍不能说姓名,用考生序号代替),节奏都在 10 分钟左右,所以答题要短、要直给,不会的可以主动跳过,别在一道题上耗掉整场时间。

Java 基础的高频题要答到「差异的根因」,不是背结论。 Java SE 是标准版,包含语言基础、集合、IO、并发这些核心 API;Java EE(现称 Jakarta EE)是在 SE 之上的一套企业级规范,定义了 Servlet、JSP、EJB、JMS、JPA 这些组件与容器标准,实现了「业务代码跑在容器里」的开发模式——Spring 生态后来在很多场景替代了传统 EJB 容器的角色,但规范本身仍然存在。StringBuilder 与 StringBuffer 的区别只有一条:线程安全。StringBuffer 的方法大多带 synchronized,因此单线程下 StringBuilder 更快;两者都表示可变字符序列,适用于循环里反复拼接的场景,而不涉及修改的字符串常量拼接会被编译器优化,不需要手动替换。内部类的价值主要是封装与组织:静态内部类可以不依赖外部实例、常用于 Builder 和工具类的分组;非静态内部类天然持有外部实例的引用,方便访问外部状态;局部与匿名内部类让「只为某一处使用」的实现就地声明,这在回调与事件处理里很常见;它还能让一个类同时实现多个接口的变体,避免为每个小实现单独建文件。

MySQL 这一块,银行面试爱问的是「命令 + 原理」的组合。 in 与 exists 的差别在于执行顺序与适用场景:in 先算出子查询的结果集再做匹配,适合子查询结果集小、外层表大的情况;exists 是相关子查询,对外层的每一行去子查询里判断是否存在,适合子查询表大但外层过滤后行数少的情况。MySQL 的约束有主键、唯一、非空、默认值、外键、检查(8.0 起真正生效)。事务的 ACID 是原子性、一致性、隔离性、持久性,其中隔离性由隔离级别实现——读未提交、读已提交、可重复读(MySQL 默认)、串行化,各级别对应脏读、不可重复读、幻读三类问题,InnoDB 在可重复读级别下用 MVCC 加间隙锁来抑制幻读。常用命令要能默写:登录是 mysql -u 用户名 -p;查看当前库下所有表是 show tables;(跨库用 show tables from 库名;);查看表结构是 desc 表名; 或 show create table 表名;;查前三个字符是 123 的记录用 where 字段 like '123%' 或者 where substring(字段,1,3) = '123'。至于分布式 MySQL,常见方案是分库分表中间件(ShardingSphere 一类)或 MySQL Cluster(NDB 引擎);备份手段包括 mysqldump 逻辑备份、xtrabackup 物理热备、主从复制加 binlog 做时间点恢复,Cluster 场景下还要考虑 NDB 的数据节点冗余与管理节点的配置备份。答题时把「业务量决定选型、备份要能恢复到时间点」这两句带上,比只报产品名扎实。

Spring 依赖注入要能说清三种方式的取舍。 构造器注入通过构造函数参数传入依赖,对象创建完就处于可用状态、依赖不可变、也便于暴露循环依赖问题,是官方推荐的方式;setter 注入通过 setter 方法在对象创建后设置依赖,适合可选依赖,但对象可能处于依赖未装配的中间状态;字段注入(@Autowired 直接标注在字段上)写起来最短,但绕过了构造函数、不利于测试和不变性,一般不建议在新代码里用。原理层面还要能接上一句:容器扫描带注解的类,把它们注册成 Bean 定义,再按类型或名称解析依赖并完成装配,@Component/@Service/@Repository 是注册手段,@Configuration + @Bean 是显式声明手段,三级缓存解决的是单例 Bean 之间的循环依赖。

测试开发岗的问题集中在「框架 + 隔离」两个词上。 黑盒测试只关注输入输出、不关心内部实现,常用的方法有等价类划分、边界值分析、判定表与因果图、正交实验、错误推测和场景法;白盒测试看代码结构,包含语句覆盖、判定覆盖、条件覆盖、路径覆盖,还有代码走查与静态分析。接口自动化用 TestNG 时,被追问最多的是数据驱动:把测试数据与用例逻辑分离,用 @DataProvider 提供一组或多组参数,测试方法按参数执行,配合 testng.xml 控制分组、依赖与并行,失败重跑和报告交给它自带的能力处理。至于「泳道怎么保证隔离」,泳道是把一次线上变更的全链路(入口、服务、数据库、缓存、消息)打上同一个标签,让带标签的流量只走带标签的实例与数据,从而在不影响正式流量的前提下做全链路验证;隔离一般靠流量染色(网关按请求头打标)、路由规则(注册中心按标签选实例)、数据隔离(独立库表或按标签分片)三层实现,配套的还有开关与一键回滚。

这类面试的共同节奏是「短问快答」,答题模板比知识深度更重要。 十分钟要过十几道题,每道题给 30 到 60 秒就够:先用一句话给结论,再补一到两句关键差异或原理,不主动展开成三分钟的长篇。遇到确实不会的,直接说「这块我没有深入做过,我了解的是……」并给一个相邻知识点的回答,比硬撑着绕圈更好;面试官明确说过「不会的可以跳」,跳过并不影响后面题目的分数。