简介:2020年兴业银行Java笔试题解析文档,面向准备银行技术岗Java笔试的求职者,也适合Java初中级开发者温习核心概念、检验基础功底。资料仅含1个docx文件,压缩包12KB,内容集中、便于打印或移动端阅读,无需额外资料即可完成一轮针对复习。全文档覆盖7道典型题目,既有最近对称数算法这类编程实现题,也有计算机存储系统分层、JDK辅助工具作用、InnoDB引擎理解、方法重载方式、DELETE与TRUNCATE区别、Java堆内存结构等基础理论问答题;每题均给出解析思路或代码示例,可帮助读者快速掌握兴业银行笔试的常见考点与作答口径。目前已有7306人学习下载,适合考前一周集中刷题和查漏补缺,也能作为Java面试知识梳理的参考资料。
1. 考点先看:这套银行Java笔试题不难,难在把七道题拆成考点
在某银行2020年的Java笔试里,七道题摆在一起:一道代码题、六道概念题。代码题是「输入正整数,输出距离它最近的对称数」,概念题从JVM堆、方法重载一路考到存储分层、InnoDB引擎、DELETE和TRUNCATE的差别。范围很传统,但拿高分的和失分的差距往往不在知识量,而在答题结构。
这套题的本质是:Java基础 + 内存模型 + 数据库 + JDK工具,四个模块全考记忆和理解。适合两类人——准备校招笔试的,想快速把银行这类笔试的考点收齐;准备面试的,用这套题当八股自查。我的建议是别用刷算法题的思路刷它,先把每个概念题的「定义—要点—为什么」三步框架背熟,再把代码题的两三种写法练到手稳,剩下的就是考场上的时间分配。
2. Java语法与内存:重载、堆、对称数,三道高频题踩过的坑
银行笔试的Java基础部分通常不碰框架,单考语言本身的语法和内存模型。这套题里代表就是方法重载、堆、最近对称数这三道。它们各有各的坑:重载和重写容易混、堆和栈容易混、对称数算法容易被样例带偏。逐个拆,拆完你就知道这三道题其实是送分的。
2.1 方法重载:参数列表是唯一裁判,返回类型不算数
考点落在Java对重载的定义:同一个类里,多个方法同名,但参数列表不同。参数列表不同分三种:参数类型不同、参数个数不同、参数类型顺序不同。这三种就是笔试里常让写的「几种方式」,按这个顺序背就不丢项。特别注意,返回类型不参与重载。原因很直接:Java方法调用在编译期按「方法名 + 参数类型列表」这个签名去找方法,两个同名同参数、只有返回类型不同的方法,编译器根本区分不开调用目标。
笔试题通常这么问:给出几组方法签名,判断哪些构成重载。下面这段代码可以作为答题时的标准判断逻辑:
public class OverloadDemo { public void show(int a) {} public void show(int a, String b) {} // 数量不同,重载合法 public void show(String b, int a) {} // 顺序不同,重载合法 public void show(Integer a) {} // 包装类型,类型不同,重载合法 // public int show(int a) { return a; } // 仅返回类型不同,编译报错 }最后一行如果写出来,IDE会直接标红:already defined,因为签名和第一个完全相同。这类判断题考的就是「返回类型不算」。和重写的区别也要顺手背一下:重写发生在父子类,方法签名一致,靠@Override标注;重载发生在同类里,签名不同,和继承无关。
答题模板:先答重载定义,再列三种方式,最后补一句「返回类型不参与」。面试官追问「自动装箱算重载吗」,答:参数类型从int变成Integer,类型不同,算重载,但调用时自动装箱可能让胜出方法变模糊,编译期按最精确匹配选择。
2.2 什么是堆:答「存对象」只能得一半分,把分代讲透才过关
堆是Java内存模型中最大的一块区域,线程共享,所有通过new创建的对象都在这。笔试题问「什么是堆」,直接背层次:堆内部分新生代和老年代。新生代又分一个Eden区和两个Survivor区(S0、S1),Java 8之后原来的永久代被移除,元空间改到本地内存,不再作为堆的一部分。所以「永久代在堆里」是过时说法,面试时说出来反而扣分。
对象在堆里怎么流动:新对象先进Eden,Eden满了触发Minor GC(新生代垃圾回收),存活对象进S0;下次Minor GC时S0的存活对象复制到S1,来回交换;每经过一次复制年龄加1,默认到15岁晋升老年代(对应参数MaxTenuringThreshold);大对象不走Eden,直接进老年代。老年代满了就触发Major GC或Full GC,也就是俗称的「Full GC卡顿」。
真题演练:笔试考「什么是堆」,标准答法是三步——堆是线程共享、存对象的运行时区域;内部按新生代和老年代划分;垃圾收集器主要工作在堆上,通过分代回收减少Full GC频率。追问场景:项目报OutOfMemoryError,优先怀疑哪里?答:看报错类型,如果是Java heap space,老年代嫌疑最大;如果是元空间不足,报MetaspaceError,那不归堆管。再追问堆内存怎么调,答-Xms设初始堆大小、-Xmx设最大堆大小,两个值相等可以避免运行期扩容抖动。
2.3 最近对称数:从「反转字符串」到「双向扩散」,伪算法题怎么做才稳
对称数就是回文数,从左往右读和从右往左读一样,比如121、1221。题说输入一个正整数,求离它最近的对称数。最容易想到的写法是把n转字符串再反转比大小,但这有个大坑,后面易错点章节会展开:反转出来的数可能离n十万八千里,拿一个巨大的差值去和「反转加1」比较,结果完全不对。比如n=18,反转得81,差63;可最近的对称数其实是22,差才4。
所以笔试里最稳妥的写法是「双向扩散」:从n开始向外延伸,分别找比n大的第一个对称数和比n小的第一个对称数,再看哪个差值小。
public int nearestPalindrome(int n) { int low = n, high = n; while (!isPalindrome(low)) low--; // 向下找最近的对称数 while (!isPalindrome(high)) high++; // 向上找最近的对称数 return Math.abs(n - low) <= Math.abs(high - n) ? low : high; } private boolean isPalindrome(int x) { String s = String.valueOf(x); int left = 0, right = s.length() - 1; while (left < right) { if (s.charAt(left) != s.charAt(right)) return false; left++; right--; } return true; }思路是双指针从两端向中间比,遇到不一致直接返回false,全部相等就是回文数;外层从n为中心向两边扩散,先碰到的那个对称数就是候选结果。两个候选里差值小的获胜,如果差值相同,上面代码返回较小的那个,题目没说清楚时这样写最安全。这段代码时间复杂度最坏是O(n*len),笔试数据在int范围内完全够用;如果题目把n给到10^18级别,再升级成用字符串构造对称数的写法,这里先不展开。
补充边界:n=9时最近对称数是9本身,两个方向都找到9,不会死循环;n=10时向下是9、向上是11,差都是1,代码返回9。答题时顺手提这两条边界,能加分。
3. 存储与数据库:分层存储、InnoDB、DELETE和TRUNCATE的答题模板
这套题里三分之一的分数在存储和数据库,而且都是闭卷背得住的题。注意答题逻辑不是把每道题默背一遍,而是「背层次 + 背差异 + 背场景」。打开方式正好是「分层存储怎么理解」→「InnoDB引擎的理解」→「DELETE和TRUNCATE差别」,一个比一个落地,从计算机组成原理一路落到SQL操作。
3.1 存储系统分几层:先背出五层,再说明白「为什么分层」
标准答法:计算机存储系统通常分五层——CPU寄存器、高速缓存(L1/L2/L3)、主内存(RAM)、磁盘存储、网络存储。越往里越靠近CPU,速度越快、容量越小、单位成本越高;越往外速度越慢、容量越大、成本越低。寄存器的访问速度是纳秒级,内存是几十到上百纳秒,磁盘就要毫秒级,网络存储更慢且受带宽限制。
题目问「你是如何理解分层存储的」,光背五层拿不全分。第二段要答「为什么这么设计」:没有一种存储介质能同时做到快、大、便宜,所以用层次换平衡。CPU频繁访问的数据放在寄存器或缓存,大部分冷数据放磁盘或远端,利用局部性原理把命中率做上去。这也能解释为什么数据库有缓冲池、操作系统有页缓存——都是同一套分层思想在不同层级的映射。
真题演练:如果被追问「分层的代价是什么」,答:一致性维护成本。同一份数据在不同层次可能有多个副本,缓存淘汰、写回磁盘、各级缓存同步都要处理,这也是缓存一致性问题的来源。这类延伸问题考的是真理解,不是背名词。答题节奏控制在三句:先层次,再取舍,最后代价。
3.2 InnoDB引擎:交易安全引擎的三层理解法
InnoDB是MySQL默认存储引擎,事务型引擎,支持ACID、行级锁定、外键约束。笔试问「谈谈你对InnoDB引擎的理解」,按三层递进答:
第一层是定位:MySQL里负责存储和检索数据的组件,默认就是InnoDB,适合事务要求高、并发写入多的业务系统。第二层是特性:事务ACID、行级锁、外键、MVCC多版本并发控制、redo log和undo log保证崩溃恢复与回滚。第三层是落地:数据按主键组织在B+树索引上,辅助索引存主键值,查询要回表;采用自适应哈希索引加速热点查找。
ACID四个字母怎么落到机制,是面试官最想听的细节:
原子性——事务里的操作要么全成功要么全回滚,靠undo log记录旧值,失败时回滚;持久性——提交前先写redo log,崩溃后重放日志恢复数据;隔离性——MVCC给读操作生成快照,行锁控制写操作并发;一致性——数据库约束在事务开始时成立,结束时仍成立,靠其他三条配合保证。这样答,比只报四个特性明显高一档。
对比记忆表常考,建议直接背:
| 对比项 | InnoDB | MyISAM |
|---|---|---|
| 事务 | 支持ACID | 不支持事务 |
| 锁粒度 | 行级锁 | 表级锁 |
| 外键 | 支持 | 不支持 |
| 崩溃恢复 | redo log恢复 | 无崩溃恢复,易损坏 |
| 默认引擎 | MySQL默认 | 旧版本默认 |
真题演练:考卷给「为什么银行这类系统倾向选InnoDB」,答:金融交易对数据一致性要求极高,需要事务保证要么全部成功、要么全部不生效;并发场景下行锁比表锁冲突少;外键让关联数据的完整性由数据库把关。反之只读报表场景用MyISAM在旧版本里有读性能优势,但现代MySQL下这个优势已经不明显。
3.3 DELETE与TRUNCATE:四大维度一张表记牢差异
DELETE是DML(数据操作语言),负责删除部分或全部行,能用WHERE筛条件,逐行删,速度慢,放进事务里未提交前可以回滚。TRUNCATE是DDL(数据定义语言),直接重置整张表的数据,不能用WHERE,速度快;在MySQL里执行时隐式提交,事务中基本无法回滚,还会把自增计数器重置。两者都不删除表结构本身——表还在,只是数据没了;DROP呢,是整个表和结构一起删掉。
| 对比项 | DELETE | TRUNCATE | DROP |
|---|---|---|---|
| 类别 | DML | DDL | DDL |
| WHERE | 支持 | 不支持 | 不支持 |
| 删除范围 | 指定行或全部行 | 全部行 | 整个表 |
| 速度 | 慢,逐行删除 | 快,直接重建数据页 | 极快,删表结构 |
| 回滚 | 事务内未提交可回滚 | MySQL隐式提交通常不能回滚 | 不能回滚 |
| 自增计数器 | 不重置 | 重置 | 表没了 |
真题通常会换个皮问:要清空一张日志表,还希望下一次插入从id=1开始,选哪个?答TRUNCATE。要删掉表中90%的数据、但想保留10%并让自增ID继续往下走,选哪个?答DELETE,带WHERE把要留的行先保好,再删剩下的。再问生产环境要不要备份,答:清表前先mysqldump备份,这种处置题里面试官听的就是「谨慎」两个字。
4. JDK辅助工具:监控与排查题这样答不丢分
JDK辅助工具题在银行笔试里出现频率不低,考察的是候选人离开IDE后,还知不知道命令行工具和大体排查手段。这套题把javac、javadoc、jar、jconsole、jmap、jstack、jvisualvm都点名了。答题策略是分两组背:第一组编译文档打包,第二组监控排查。别混在一起背,混了容易把作用记串。
4.1 三件套:javac、javadoc、jar谁负责什么
javac把.java源码编译成.class字节码,是日常「编译」动作的底层工具。javadoc从源代码注释中提取文档,生成类似API文档的HTML页面,写公开API的工程会配它;它只认特定格式的注释,常见标签有@param、@return、@author等。jar负责打包:把.class文件、资源、配置文件捆成jar包,还能解包和运行带Main-Class的jar包。
可以顺手扩充一个javap:javap -c能把.class反汇编出字节码,面试聊volatile、synchronized时用来「看证据」。如果题目没问就不展开,但答完主动提一句「排查问题我还会用javap看字节码」,能显出不是死背。
真题演练:问「JDK额外提供哪些辅助工具、分别是什么作用」,按用途分组答:
编译:javac;文档:javadoc;打包:jar;监控:jconsole、jvisualvm;排查:jmap(堆)、jstack(线程)。这样答结构清楚,评分点一一对上。
4.2 排查三件套:jmap、jstack、jconsole、jvisualvm怎么用
jconsole是图形化监控工具,连上本机或远端Java进程,实时看堆内存曲线、线程数量、类加载数,适合第一时间发现内存缓慢上涨或线程异常。jmap是内存工具,可以打印堆概要,也可以生成堆转储文件(dump),后续用jvisualvm分析哪个对象占用了大量内存——这是定位内存泄漏的第一步。jstack是线程工具,输出当前时刻线程堆栈,能看到每个线程执行到哪、锁等待在哪,排查死锁最直接的做法就是抓两次jstack,看线程状态是不是互相等待。
jvisualvm是集成的可视化工具,集成监控、线程分析、堆dump分析,把jmap导出的dump文件丢进去,可以看对象大小排行和引用链。记忆有个玄学:map和memory都是m开头,它管堆内存;stack和线程栈是一个词,它看线程;console看整体曲线;visualvm是图形前端,统一入口。笔试答题用一张表收尾:
| 工具 | 作用 | 典型使用场景 |
|---|---|---|
| jconsole | 监控JVM运行状态 | 看CPU、堆内存、线程数曲线 |
| jmap | 堆内存分析、生成dump | 怀疑内存泄漏时抓堆快照 |
| jstack | 线程堆栈分析 | 接口无响应,查死锁/BLOCKED |
| jvisualvm | 集成可视化分析 | 加载dump,看大对象排行 |
真题演练:考场景题——线上一个接口卡死,怀疑死锁,你要做什么?答:先jstack拿到线程堆栈,搜索deadlock或BLOCKED关键字,确认两个线程互相持锁等待;再定位代码里的加锁顺序,优先统一锁顺序或用更高层并发工具。追问内存持续涨怎么办:答先jmap -dump导出堆快照,再用jvisualvm打开,按对象大小排序,对照业务代码看哪些对象在无限累积。一套组合拳下来,场景分拿全。
5. 易错点:五类失分题,错在哪、为什么错、怎么答对
真正让你从「好像会」掉到「没答到点上」的,是下面五种。每条都按「错在哪→为什么错→怎么答对」过一遍,考前再看一眼就够。
5.1 对称数:拿反转字符串硬套,主位变化漏光
错在哪:看了样例n=121就以为「反转后取diff最小值」是对的,套上n=18,答案完全跑偏。
为什么错:反转字符串生成的数81和n的差是63,实际上最近的对称数是22,差才4。问题出在题目要找的是「数值上最近的对称数」,不是简单字符串反转能覆盖的,尤其当高位数发生变化(比如18变22、99变101)时,反转完全失效。
怎么答对:先做判断:只有输入本身已经是回文数,反转才等于自己也才成立;非回文数一律用双向扩散找上下两个候选,分别算差值取小。记住「向下找一个、向上找一个、比diff」这三个步骤,是这类题的不变式。
5.2 分层存储:背得出五层,答不出「为什么分层」
错在哪:答题只输出「寄存器→缓存→内存→磁盘→网络存储」五个名词,然后没下文了。
为什么错:题干写的是「你是如何理解分层存储的」,理解二字就是在追深层逻辑。只背层次等于把论述题答成填空题。面试官对这道题的期待是「快+大+便宜不可能一个介质全占,所以用层次去平衡」以及「局部性原理让分层方案成立」。
怎么答对:按三段走——先说层次结构,再说各层速度和容量变化趋势,最后落到设计动机和代价。代价这半句很加分:分层带来副本一致性和缓存同步开销,值得主动说。
5.3 InnoDB:报完三个特性就停,不问底层保障
错在哪:答「支持ACID、行级锁、外键」三个词就收笔。
为什么错:银行系统的核心诉求是数据不能错,面试官最想听的是ACID背后的机制。只报名词证明你背书,讲出「为什么能做到」才证明你理解。
怎么答对:补一条链「原子性靠undo log、持久性靠redo log、隔离性靠锁+MVCC、一致性靠前三者加约束共同维护」。回答收尾再补适用场景:事务密集、并发写多、强一致要求的系统选InnoDB。先特性后机制,再场景。
5.4 DELETE与TRUNCATE:把「能否回滚」当成唯一差异
错在哪:只答「DELETE能回滚,TRUNCATE不能回滚」,完全没提WHERE、速度、自增。
为什么错:能回滚是有条件的——DELETE得放在事务里且未提交,才谈得上回滚;一句话把差异压缩成回滚,既丢维度又暴露没实操过。TRUNCATE在MySQL里会隐式提交,所以常规事务里回滚无效,这和「执行即生效」的DDL本质一致。
怎么答对:列四个维度:DML vs DDL、WHERE、速度、自增计数器是否重置。回滚单独加前提:「默认情况下TRUNCATE在MySQL里隐式提交,事务内也无法回滚;DELETE未提交前可以ROLLBACK。」先把前提说出来,再下结论。
5.5 JDK工具:jmap和jstack记反,场景题直接翻车
错在哪:jmap默写成线程堆栈,jstack默写成内存转储,场景题一配就错。
为什么错:靠死记英文全称容易串位,关键没搞清这两个工具对应两个不同维度的分析对象。
怎么答对:用词根固定。map→memory,管堆内存、看对象;stack→线程栈,管线程状态、查死锁。再绑定场景:OOM找jmap,卡住找jstack。一次记牢,场景题不会再错。
6. 临场答题习惯与押题方向:价值分的拿法
先把这套题的答题顺序捋一遍:拿到卷子先扫一遍,把纯背诵题圈出来,比如重载、分层存储、InnoDB、JDK工具,这些题分好拿,优先做完;代码题单独留足时间,把对称数的双向扩散框架先写下来,再补边界。概念题全部按「定义→要点→为什么」三步走,宁可多写一个例子,也不要只丢关键词。
押题方向上,顺着这套题的出题风格再往后走两步。Java基础大概率围绕String对象、HashMap底层、ArrayList和LinkedList对比、单例模式;数据库方向大概率从InnoDB延伸出B+树索引、MVCC可见性、事务隔离级别;工具方向可能换成jstat看GC频率、jcmd作为jmap和jstack的替代。每类都准备一个「场景+工具+输出怎么看」的小故事,面试官一问就能讲出实战感。
我后来养成的习惯是:做银行类笔试前,先把考点按「Java语法/内存/数据库/工具」四栏画到草稿纸上,每栏只写三到五个关键词,答每道题前先扫一眼,宁可写慢一点也要把维度写全。那次笔试之后把这个方法用到了所有八股类笔试里,基本没再因为漏维度丢过场景题的分。这套题不难,难的是背全、答对、不跳步,希望帮到你。
本文还有配套的精品资源,点击获取