简介:2020年兴业数金Java在线笔试题知识点复盘,面向准备银行/金融科技类Java岗位笔试的求职者,可快速了解兴业数金笔试中Java核心基础、计算机存储、多线程、MySQL及算法等方向的出题风格。资源仅包含1个docx文档,压缩包约14KB,内容精炼,便于碎片化时间集中背诵与突击。文档以问答形式展开,覆盖方法重载、JDK辅助工具作用、存储系统三级层次与分层存储优势、线程同步互斥的用户/内核模式实现、InnoDB引擎特性、Delete与Truncate差异、堆的概念等高频考点,并给出“输入正整数输出最近对称数”编程题的解题思路,有助梳理答题要点、查漏补缺。目前已有8700余人学习浏览,适合作为笔试前一周的浓缩复习资料。
1. 考什么:这份Java在线笔试题的题型分布与拿分顺序
拿到这份Java在线笔试题,第一感是题量不大、范围很杂:一道对称数编程题,再加存储分层、多线程、InnoDB、重载、DELETE与TRUNCATE、堆、JDK工具七类简答,把Java后端笔试的高频模块一网打尽。
最反直觉的是"堆"这道题:参考答案写"左右子树高度差不超过1",其实是平衡二叉树的定义,照这个答上去,概念分直接丢一半——面试官想看的正是这种基本功。
我的建议是先做编程题保底,再按"存储分层→InnoDB→多线程"的顺序答简答。这份复盘适合两类人:准备Java后端笔面试的人,和想快速背熟高频简答模板的人。
2. 高频考点:存储系统分层与InnoDB引擎的作答框架
2.1 三级存储层次:Cache、主存、辅存怎么答才得分
这道题几乎出现在每份计算机基础笔试卷里,答法高度格式化,把结构背熟就能拿全分。标准答案先抛三个层次:高速缓冲存储器(Cache)在最顶层,主存储器(DRAM)居中,辅助存储器(磁盘或SSD)在最底层。从下往上看,容量逐层变小、速度逐层变快、成本逐层变高;每一层都不再是孤立设备,而是靠操作系统与辅助硬件统一调度的整体。
接着必须补出"两个子层次"这个得分点:Cache–主存层次,用贴近CPU速度的Cache缩小主存与CPU之间的速度差距;主存–辅存层次,用容量大、价格低的辅存把可寻址空间做大,让系统对外呈现一个大得多的存储整体。这两个层次一个管"快",一个管"大",回答时先分后合,阅卷人一眼就能抓到主干。
为什么分层能有效提高程序执行效率?关键话术是"速度、容量、价格"三对矛盾。单一存储器做不到又大、又快、又便宜:Cache快但贵,辅存便宜但慢。分层之后,热数据留在Cache层命中,冷数据沉到辅存层,每次访问都尽量命中最快的那一层,整体平均访问时间被拉低,平均价格也被辅存拉低。答题时把"高速缓存解决速度、辅助存储器解决容量"这句点出来,就是天然的收尾加分句。
2.2 InnoDB引擎:事务、行锁、崩溃恢复的三层理解
InnoDB是MySQL默认的存储引擎,这道题的核心考点有三个词:事务、行锁、崩溃恢复,再带一个加分项MVCC。阅卷最想看到的是一句话定位:InnoDB面向OLTP(在线事务处理)场景,以事务安全和高并发能力著称。
事务维度要答ACID。原子性靠undo log实现回滚,持久性靠redo log实现重放,隔离性靠锁和MVCC一起保证,一致性是前三者的结果。别只报缩写,每个字母对应什么机制要能展开一句。
锁维度要讲清楚"行级锁"的分量:InnoDB锁定的是索引记录,支持Record Lock(记录锁)、Gap Lock(间隙锁)、Next-Key Lock(临键锁),并发度高于表级锁的MyISAM。顺带提一句意向锁和自增锁,能体现你看过官方文档,而不是背的二手答案。
崩溃恢复维度:MySQL宕机后重启,InnoDB扫描redo log重放已提交但未落盘的事务,再用undo log回滚未提交的事务,保证数据库回到一致状态。这是InnoDB和MyISAM最大的生死差别——MyISAM崩了只能靠修复工具碰运气,InnoDB可以自己恢复。答题时把"redo重放已提交、undo回滚未提交"这组对照写出来,比背一百遍"支持崩溃恢复"都有说服力。
MVCC作为加分项:通过undo log版本链实现快照读,让读不阻塞写、写不阻塞读,配合四种隔离级别(读未提交、读已提交、可重复读、串行化)作答。默认隔离级别是可重复读,靠间隙锁解决幻读,这一句能让你从"背概念"升级到"懂原理"。
2.3 真题演练:存储分层与InnoDB的合并作答模板
在线笔试的简答没有时间让你长篇大论,标准写法是"定义+三个关键点+一句话收束"。拿存储分层举例,推荐这样组织答案:
"计算机存储系统通常采用三级层次结构,自上而下为Cache、主存、辅存,容量逐层增大、速度逐层降低、成本逐层减少。整体可视为两个层次:Cache–主存层次解决CPU与主存的速度差距,主存–辅存层次利用辅存的大容量与低价格扩大可寻址空间,使系统在速度上接近Cache、容量上接近辅存、平均成本上接近辅存。"
这段话不到150字,但"三级+两层次+三矛盾"全都踩中。InnoDB同理:
"InnoDB是MySQL默认存储引擎,核心能力包括:ACID事务,由undo log提供回滚、redo log提供持久化;行级锁配合MVCC实现高并发读写,默认隔离级别可重复读;崩溃恢复时用redo log重放已提交事务、用undo log回滚未提交事务,故适合OLTP场景。"
两道题合并在一道"你如何理解"的大题里时,把两段答案首尾相接,中间加一句"存储层决定数据落在哪,存储引擎决定数据怎么被安全地读写",整份答案的层次感就出来了。这种题不求奇思妙想,求的是关键词密度和逻辑顺序,每段第一句必须是结论,后面的句子都是给结论补证据。
3. 高频考点:多线程同步、重载与堆的答题要点
3.1 多线程同步互斥:用户态与内核态的四种实现
原题问的是"多线程同步和互斥有几种实现方法,都是什么",很多人在这一步就开始背Java的synchronized和Lock,但阅卷标准答案其实先讲定义再讲分类。同步是线程之间的制约关系:一个线程的执行依赖另一个线程的消息,没等到消息就阻塞等待;互斥是对共享资源的排他访问:任何时刻最多只有一个线程在使用该资源,其他线程等待。
分类维度是"用户模式"和"内核模式"两类。用户模式不需要切换内核态,只在用户态完成:原子操作(例如一个全局变量上的原子读写)和临界区。内核模式依赖系统内核对象的单一性,使用时要切换内核态与用户态:互斥量、信号量、事件。
四种经典手段各配一句用途:临界区通过对多线程串行化来访问公共资源或一段代码,速度快,适合控制数据访问;互斥量为协调多个线程对同一个共享资源的单独访问而设计;信号量为控制具有有限数量用户的共享资源而设计;事件用来通知线程某些事件已发生,从而启动后续任务。
最后要补一层Java的映射关系,这才符合Java笔试题的定位:synchronized关键字对应监视器锁(内置锁),ReentrantLock对应互斥量,Semaphore对应信号量,wait/notify对应事件通知,AtomicInteger对应原子操作。这样答,定义、分类、工具类型、Java对应物四要素齐全,阅卷想扣分都找不到口子。
3.2 Java重载:同名方法三种参数变化的考点
重载题表面简单,丢分点却不少。标准定义:在同一个类中定义多个同名方法,参数列表不同,从而用同一方法名实现不同功能。三种合法方式是参数个数不同、参数类型不同、参数顺序不同(前提是参数类型不同,否则只是形参名不同,编译照样报错)。
最容易错的点是返回值:仅返回值不同不构成重载,编译器无法仅靠返回值区分调用版本,会报告方法重复定义。重载发生在编译期,属于静态绑定,编译时根据实参的类型、个数、顺序确定调用哪个版本。
一道经典追问是"重载和重写有什么区别",这类题常跟在后半张卷子里暗示你对比。一句话模板:重载是同类内多版本方法,编译期绑定,参数列表必须不同;重写是子类覆盖父类方法,运行期动态绑定,方法名、参数列表、返回值必须与父类方法一致,权限不能收窄。回答时各举一个代码示例,比如print(int)与print(String)是重载,toString()的重实现是重写。
3.3 堆:完全二叉树与优先级关系,别写成平衡树
"什么是堆"这道题有个隐藏陷阱:原题参考答案里写的"对于任意节点,左子树和右子树的高度之差最多为1",这其实是平衡二叉树(AVL树)的定义,不是堆。如果照抄,概念题直接暴露基础不牢,这个坑很多人踩过,踩了就丢分。
堆的正确定义分两半:其一,它是一棵完全二叉树——除最后一层外每层都是满的,最后一层节点从左向右连续排;其二,满足堆序性——最大堆中任一父节点的值不小于子节点,根是最大值;最小堆中任一父节点的值不大于子节点,根是最小值。底层通常用数组存储,节点i的孩子是2i+1和2i+2,这个数组布局在Java的PriorityQueue里就是默认的最小堆。
应用场景要答三个:优先队列(优先级调度、任务队列)、堆排序(建堆O(n)级别、每次取根O(log n),整体O(n log n))、海量数据的TopK问题(维护一个容量为K的最小堆,遍历一遍数据,堆顶就是第K大的值)。答题模板是"定义+数组存储方式+两个应用",这样既避开了AVL陷阱,又把数据结构的实操价值讲出来了。
3.4 真题演练:多线程问答题的结构化作答
针对"多线程同步和互斥有几种实现方法"这种原题,推荐四段式作答,不要一气呵成写一整块。第一段给同步与互斥的定义;第二段按用户模式/内核模式二分;第三段逐个展开临界区、互斥量、信号量、事件的功能;第四段落到Java的synchronized、ReentrantLock、Semaphore、wait/notify。
示范答案如下:
"同步指线程之间的制约关系,一个线程依赖另一个线程的消息,未等到消息时阻塞等待;互斥指对共享资源的排他访问,任何时刻最多一个线程占用,是特殊的同步。实现分为用户模式与内核模式:用户模式包括原子操作与临界区,不需要内核态切换,速度快;内核模式包括事件、信号量、互斥量,依赖内核对象。临界区适合保护短代码段;互斥量适合保护单一共享资源;信号量控制有限数量的资源;事件用于线程间通知。Java中synchronized与ReentrantLock对应互斥量,Semaphore对应信号量,wait/notify对应事件。"
这样答的好处是每一行都是一个踩分点,即使题目只问"有几种方法",你把定义和分类放前面、实现放后面,也不会超纲,反而显得系统。笔试阅卷是关键词匹配,段首句用词越规范,命中率越高。
4. 失分点复盘:DELETE与TRUNCATE、JDK工具、对称数的易错题
4.1 DELETE与TRUNCATE:五个区别维度与一句话口诀
"Delete和truncate的差别"这道题在笔试卷子里出现频率极高,因为绝大多数考生能说出"一个能加条件一个不能",然后就没有然后了。要拿满分,至少要覆盖五个维度:语句类型、是否支持WHERE、事务回滚行为、自增列是否重置、触发器是否触发。
| 对比维度 | DELETE | TRUNCATE |
|---|---|---|
| 语句类型 | DML(逐行删除) | DDL(MySQL 8.0中近似DROP+CREATE) |
| WHERE条件 | 支持,可删指定行 | 不支持,整表清空 |
| 事务回滚 | 事务内可ROLLBACK恢复 | 隐式提交,默认无法回滚 |
| 自增列 | 不重置,继续累加 | 重置为初始值 |
| 触发器 | 触发DELETE触发器 | 不触发 |
| 执行速度 | 慢,逐行记录日志 | 快,直接释放数据页 |
丢分高发区是回滚那一行:很多人凭直觉写"TRUNCATE也能回滚",但在MySQL里TRUNCATE属于DDL,执行前会隐式提交当前事务,ROLLBACK之后数据不会回来。DELETE则不同,只要在事务里,删错了可以回滚,这是"后悔药"式的典型考点。
答题时给一句话口诀收尾:"DELETE一行一行删,能加条件能回滚,自增不归零;TRUNCATE整表清空,自增归零,速度快但救不回。"写对比题最忌讳只列名词不解释,每个差异点后面必须跟半句"为什么"或"所以"。
4.2 JDK辅助工具:javadoc、jar、jconsole怎么记不忘
原题问"JDK额外提供了哪些辅助工具,分别是什么作用",标准答案要先给知名度最高的三个:javadoc根据源代码生成API文档;jar负责把class文件和资源打包成jar包,也能解包查看;jconsole是Java监视与管理控制台,可以实时看堆内存、线程状态、类加载情况。
想拿加分,往后段补一组排障工具:jps列出当前Java进程及PID;jstack输出线程快照,排查死锁与阻塞;jmap生成堆转储文件,分析内存泄漏;jstat监控GC频率与耗时;javap反编译class字节码,查看类结构、方法签名、常量池。这一组工具按"找到进程→看线程→看堆→看GC"的排障路径串起来,记忆负担小,答题时还能体现实战经验。
记法口诀:javadoc写文档,jar打包分发,jconsole日常监控,jstack查死锁,jmap查内存,jstat查GC,javap反编译。按"写文档→打包→监控→排障→看字节码"的开发流水线排一遍,比死记命令名高效得多。如果笔试只让写三个,优先javadoc、jar、jconsole,这三个是JDK自带工具题的标准答案。
4.3 最近对称数:双向扩展怎么写、边界怎么处理
编程题"输入一个正整数,输出距离它最近的对称数",思路可以很朴素:从n出发,向下找一个对称数,向上也找一个对称数,谁先找到就返回谁。因为每一步距离都加1,两个方向同步扩展,最先命中的就是距离最近的。
// 判断一个数是否为对称数(回文数),用逐位反转的方式,避免字符串转换 public static boolean isPalindrome(long n) { long reversed = 0; long temp = n; while (temp > 0) { reversed = reversed * 10 + temp % 10; temp /= 10; } return reversed == n; } // 从n向两侧同步扩展,两侧距离都为1、2、3……,先命中的即最近 public static long nearestPalindrome(long n) { long low = n, high = n; while (true) { if (isPalindrome(low)) return low; // 下方先命中,直接返回 if (isPalindrome(high)) return high; // 上方命中,返回大数侧 low--; // 下方距离+1 high++; // 上方距离+1 } }注意几个细节:参数和返回值用long而不是int,因为笔试用例可能给到10亿以上,int会溢出;下方先查、上方后查的顺序决定了距离相等时返回哪一个,比如n等于10时,9和11距离都是1,这里先查low,所以返回9,如果你希望返回较小值,这个顺序刚好符合;n本身就是对称数时,第一次循环直接返回n,比如n=11。
注意:笔试环境通常没有IDE,方法名、变量名、循环条件都要手写。写完后把1、10、100、1999、12345这几个用例各跑一遍,重点看n=10时返回的是9还是11,确认与题目要求一致。
暴力法的复杂度是O(k·d),k是向外扩展的步数,d是数字位数。最坏情况当n附近很长一段没有对称数时步数会变大。如果笔试要求"写出思路"而不只写代码,建议补一句优化方向:取n的前半段,翻转生成候选回文,再对前半段加1、减1各生成一个候选,取三个候选中距离最小者,这样能把复杂度降到O(d)。先写暴力版保证AC,再把构造法作为加分答案写在注释里或旁边,是这类编程题最稳的答题策略。
4.4 易错题TOP5:错在哪、为什么错、怎么答对
第一题:把堆的定义写成"左右子树高度差不超过1"。错在哪:这描述的是平衡二叉树AVL,与堆完全不是一回事。为什么错:堆的核心是"完全二叉树+堆序性",高度差与堆无关,写在答案里会让阅卷人怀疑概念混淆。怎么答对:先写完全二叉树,再写父节点与子节点的大小关系,最后提数组存储与优先队列应用。
第二题:认为DELETE和TRUNCATE都能回滚。错在哪:不考虑语句类型直接下结论。为什么错:DELETE是DML,事务内可ROLLBACK;TRUNCATE是DDL,MySQL中执行前隐式提交,删了就删了。怎么答对:开头先区分DML与DDL,再补自增重置与触发器两条差异。
第三题:对称数边界丢分。错在哪:只测试了普通三位数、四位数。为什么错:n=10时左右两侧距离都为1,n=1时自身就是对称数,n=100时最近的是99与101,都容易出现答案不唯一或漏判。怎么答对:把个位数与10的幂边界写进测试用例,并在答案中说明"距离相等时取较小值"。
第四题:把"返回值不同"当成重载的合法方式。错在哪:误认为返回值参与方法签名。为什么错:Java方法签名由方法名加参数列表构成,返回值不在签名中,仅返回值不同会编译报错。怎么答对:重载只看参数个数、类型、顺序,重写才是运行时绑定。
第五题:把临界区写进内核模式。错在哪:把四种同步手段的归属搞混。为什么错:临界区和原子操作在用户态完成,不需要切换内核态与用户态,速度快;事件、信号量、互斥量需要内核对象。怎么答对:先背"用户态:原子+临界;内核态:事件+信号+互斥",再各自跟一句适用场景。
5. 答题技巧:考前一周背诵清单与做题顺序
考前如果只剩一周,别整套整套刷模拟题,按"框架→代码→易错"三层过三遍更省力。
第一遍(第1-2天)过框架:存储分层背"三级+两层次+三矛盾",InnoDB背"事务+行锁+崩溃恢复+MVCC",多线程背"用户态两类、内核态三类",重载背"参数三个不同、返回值不算",DELETE与TRUNCATE背五维对比表。每个框架在白纸上默写一遍,卡住才翻答案,用眼睛看十遍不如手写一遍。
第二遍(第3-5天)练代码:对称数这道编程题先手写暴力版(isPalindrome加双向扩展),再默写边界用例:1、10、100、1999、12345。笔试没有IDE提示,while(true)循环里low--与high++的顺序写反就是死循环,方法签名、循环条件都得靠肌肉记忆。写完暴力版,再在注释里补一句构造法优化思路,展示算法思维拿加分。
第三遍(第6-7天)刷易错清单:把TOP5错题重做一遍,重点检查自己是不是又写出了"堆=高度差不超过1""TRUNCATE能回滚""临界区属于内核模式"这类问题。易错题的特点是第一次错了以后容易惯性错,必须专门花时间对抗。
做题顺序给个参考:拿到卷子先扫一遍全卷,估算编程题耗时;第一题先做存储分层这种纯默写简答,快速进入状态;对称数编程题留足20到25分钟,先写暴力版保底再优化;多线程、重载、DELETE与TRUNCATE等概念题每题控制在5分钟以内;完全没思路的先跳过,简答题宁可写框架也不要留白。
从那次笔试之后,我每次考前都把"定义一句话+三个关键点+一个典型例子"的模板先列出来,再逐题对照检查,最后强制自己手写一遍编程题。这套流程帮我稳稳吃下了后面好几场机考里的高频原题。希望帮到你。
本文还有配套的精品资源,点击获取