农业银行信息科技岗面经合集(总行菁穗、研发中心软件研发与测开)
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
总行本部·菁穗培训生(计算机类方向)
- 面试安排是怎样的?(综合面 60 分钟含无领导小组讨论,加业务面 60 分钟多对多按投递方向出题,通过后体检加 3-5 分钟 HR 面谈,面谈环节会刷人)
研发中心(西安)·软件研发岗
- Java SE 和 Java EE 的区别是什么?
- StringBuilder 和 StringBuffer 的区别是什么?
- 为什么要有内部类?
- SQL 里 in 和 exists 的区别是什么?
- MySQL 的约束有哪些?
- 事务的四大特性(ACID)是什么?
- Linux 下登录 MySQL 的命令是什么?
- 查看数据库下所有表的 SQL 语句怎么写?
- Spring 依赖注入的三种方式是什么?
- 黑盒测试和白盒测试的区别是什么?常用的黑盒测试方法有哪些?
研发中心(西安)·测试开发岗
- 你们是怎样搭建分布式 MySQL 的?
- 数据量大概多少?搭建分布式的时候有没有做调优?
- MySQL Cluster 怎样进行数据备份?
- static 关键字的作用是什么?
- 创建线程有哪些方式?
- MySQL 命令:查看表结构的命令、查看所有表的命令、查询某个字段中前三个字符是
123的记录? - 在美团实习做接口自动化测试用的是什么框架?TestNG 的数据驱动大概讲一下。
- 美团的泳道是怎么保证隔离的?
研发中心(北京)·软件开发岗(本科)
- 数据库的隔离级别有哪些?事务的四大特性是什么?
- 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 秒就够:先用一句话给结论,再补一到两句关键差异或原理,不主动展开成三分钟的长篇。遇到确实不会的,直接说「这块我没有深入做过,我了解的是……」并给一个相邻知识点的回答,比硬撑着绕圈更好;面试官明确说过「不会的可以跳」,跳过并不影响后面题目的分数。