2019年秋招季,我投了招商银行信用卡中心的开发岗,走的是第一批IT笔试。说实话,在投之前我以为这种银行系的笔试会以行测和英语为主,结果卷子一发下来就发现想简单了。整套题对计算机基础、数据结构和算法、数据库、网络这些硬功夫考察得很细,编程题也不是那种送分题,需要真正能写、能调、能算出复杂度的水平。这篇文章就把我当时踩过的坑、总结的考点和复盘过程完整写出来。不论是准备银行系技术岗笔试,还是想摸底一套真实的大厂/国企开发笔试题是什么质感,都可以参考一下。麻烦开个门,我把考点拆细一点说。
1. 项目背景:银行系IT笔试到底在考什么
1.1 为什么说招行信用卡中心的笔试值得单独复盘
招商银行信用卡中心是招行体系里科技属性最强的板块之一,很多核心系统的自研程度都相当高,移动端、风控、账务、支付、数据仓库这些链路基本都是自建团队。所以它招开发岗,笔试环节不会像传统总行科技岗那样搞一堆偏行政的通用能力测试,而是真的按互联网公司校招笔试的标准来出题,这在国内银行里属于比较少见但也越来越主流的方向。
2019秋招第一批开发岗笔试,客观来说题目难度属于中上。和互联网公司笔试相比,它的平均难度不算顶尖,但覆盖面比较宽:计算机基础(网络、操作系统、数据库)、Java/C++语法细节、数据结构与算法、逻辑与智力题、程序填空与代码输出题,以及一道在线编程大题。你要把它当互联网大厂的卷子来复习,大概率能覆盖得上;但如果只背行测或刷银行题库,那会死得比较惨。
1.2 这套笔试面向的人群和考察目标
第一批开发方向的笔试主要面向2020届应届生,以计算机、软件工程、信息管理、自动化等专业为主。它的核心目标是想在短时间内筛出三类人:
第一类是基础扎实的人。网络分层、TCP握手、进程线程区别、数据库索引原理这类题,看似都在考背诵,但背诵和真正理解是有本质区别的。银行系统的面试官很清楚,没理解清楚的人,在实际工程里遇到瓶颈根本没法往前推进。
第二类是代码能力过关的人。在线编程题的输入输出处理、边界条件、时间和空间复杂度,这些都是刷过算法题的人才能拿稳的分数。对银行系IT团队来说,写代码是基本盘,笔试环节不可能像部分国企那样只考概念不考手写。
第三类是逻辑和抗压能力达标的候选人。笔试有时间限制,题目类型跨度大,前后切换频繁,很多人在这种高压环境下会出现时间分配失误。特别是前面的选择题容易纠结太久,导致最后编程题没时间写,这个在银行系笔试里其实非常常见。
理解这套笔试的意图之后再复习,就不会盲目一头扎进题库里。它不是一个“背就能过”的考试,而是一个值得认真拆解的标准化筛选模型。
2. 笔试的核心考点与题型拆解
2.1 计算机基础部分:分值占比大,考得很细
整张试卷里,计算机基础部分的题量占比能到三分之一以上。这部分的风格和互联网公司笔试高度一致,基本覆盖计算机网络、操作系统、数据库、设计模式这些科目。
网络部分是重头戏。TCP三次握手和四次挥手的具体细节几乎是必考,会问到为什么连接是三次、断开是四次,TIME_WAIT状态出现在哪一端,2MSL的意义是什么。还有HTTP和HTTPS的区别,TCP与UDP的使用场景,DNS解析过程和CDN加速的基本原理。这些都是非常经典的基础题,但银行系可能会在选项里设置很多容易混淆的陷阱,比如“TCP可以保证传输顺序而UDP不可以”这种描述,很多人觉得对,但它并不准确,UDP不保证顺序,但TCP保证的是字节流的顺序,这些细节抠得很细。
操作系统方面的题目集中在进程线程对比、上下文切换、死锁的四个必要条件、虚拟内存和分页机制、进程调度算法。笔试里喜欢考一些让你计算吞吐量和平均等待时间的题,比如给定一组进程的到达时间和服务时间,用SJF或RR算法计算平均周转时间。这种题型千万别只记结论,一定要手动推演几遍。
数据库是另一个大块。索引是高频考点:B+树索引和哈希索引的适用场景,聚集索引与非聚集索引的区别,覆盖索引如何优化查询,最左前缀原则在联合索引里的应用。还有一套必考的就是范式,第一范式、第二范式、第三范式、BCNF,给你一张表让你判断它达到了第几范式。事务的ACID特性、隔离级别与脏读/不可重复读/幻读之间的关系也几乎每年都出现,MyISAM和InnoDB的区别更是老生常谈。
2.2 编程语言细节:Java和C++二选一,但语法坑不少
开发方向笔试通常会有语言方向的侧重。招行信用卡中心的技术栈以Java为主,所以Java相关题目占多数,但同时也涉及C++基础语法题。准备的时候可以二选一,但无论你选哪门,都要把语言特有的细节抠清楚。
Java方面,高频考点包括HashMap的底层实现和扩容机制、ConcurrentHashMap的分段锁和CAS、ArrayList和LinkedList的优劣、String/StringBuilder/StringBuffer的区别、JVM内存区域划分、GC回收算法、类加载过程、反射和注解的基本原理。特别是HashMap,从Java 7到Java 8的改动,什么情况下链表会转红黑树,为什么加载因子是0.75,这些细节在选择题里很容易被拿来做文章。
多线程也是个必考模块。线程创建方式、synchronized和Lock的区别、volatile关键字的作用、线程池的核心参数和拒绝策略、CAS和ABA问题。有一道题我记得很清楚,考的是两个线程交替打印奇偶数,问的是线程通信的方式。这类题既是语法题也是并发编程思维题,准备的时候不仅要懂API,还要理解背后的内存模型和锁机制。
C++方向的考点则偏重指针和内存管理:智能指针的使用、虚函数与多态、构造函数和析构函数的执行顺序、深拷贝与浅拷贝、const的各种用法。如果你C++学得更好,选择C++方向没问题,但注意不要在中途频繁切换,卷子上一旦选定语言,思路就要保持一致。
2.3 数据结构与算法:必考大题,还掺着程序填空
数据结构与算法的选择题主要考察复杂度分析和基础结构操作。快速排序和归并排序的时间复杂度在最好、最坏、平均情况下的表现,堆排序建堆的过程,二分查找的几个边界条件变化,二叉树的先序/中序/后序/层序遍历,图的深度优先和广度优先遍历,以及最小生成树、最短路径算法。
选择题里常考“程序输出结果”题型,给一段代码,让你写出运行结果。这类题最阴的地方在于考察代码的边界和副作用,比如i++和++i的混合使用、数组越界时的内存表现、递归函数的返回顺序等。准备的方式只有一个,就是平时做笔试题的时候不要只在脑子里跑,把代码亲手敲一遍,跑一遍,把每个输出结果和预期对照一遍。
编程大题只有一道,但比重很高,基本决定了你能不能进下一轮。那一批的在线编程题我记得和“两个有序数组中的中位数”长得有点像,但又加了额外的限制条件,本质考的是一次遍历+二分查找的混合思路,对代码手写能力要求相当高。光会死记模板不够,必须能把算法思路转化成边界处理完备的代码。
2.4 逻辑智力题和金融场景题:银行笔试题的特色成分
和纯互联网公司笔试相比,银行系笔试还会加入一部分逻辑推理题和少量金融场景题。逻辑题大致是数字推理、图形推理、条件排列组合等,类似公务员行测的判断推理,但题目数量没有那么多。这类题型没有太多速成办法,就是多刷,刷多了对数字和图形变化的敏感度自然就上来了。
金融场景题则比较有意思,它不会直接问金融公式,而是以业务背景包装一两个技术问题。比如“个人征信系统需要同时支持高并发查询和实时数据更新,你会选择什么存储方案”或者“账单日当天大量用户集中访问App导致接口超时,请分析可能的原因并给出优化思路”。这种题考察的是你能否把技术知识和银行的实际业务场景结合起来。没有标准答案,但答题时如果你能表现出理解业务侧压力的思维模式,会给你加分不少。
3. 实战复盘:一场完整的笔试体验与时间分配策略
3.1 笔试平台和考前准备
那批笔试用的是赛码网,对,就是很多互联网公司校招也在用的那个在线笔试平台。赛码网的特点是你需要在自己电脑上完成答题,浏览器会开启全屏锁,摄像头监测和切屏检测都开着,签到后整个答题过程都有记录。所以考前最好先把浏览器升级好、网络稳定、准备好身份证件和草稿纸,提前半小时登录系统测试环境。不要等到开考了才发现摄像头权限没开,或者浏览器版本太低导致代码编辑器调不出来。
实际答题界面是这样的:左半部分是题目列表,右半部分是答题区域。选择题直接在选项里点选,编程题则在内嵌的编辑器里写代码并用测试用例验证。赛码网的编程题不支持导入本地编译器,所以平时刷题就要习惯在网页编辑器里编码,尤其是调试依赖输出日志的方式要适应。
3.2 时间分配:选择题不能恋战
整场考试时长我记得是两个小时左右,题型多、题量大,时间非常紧。我当时拿到卷子后先花了两分钟快速浏览全部题目,大致估算了一下各部分的数量和难度,然后给自己定了这样一个时间分配方案:
选择题部分合计控制在70分钟以内,平均每道题大约1分钟。遇到卡壳超过两分钟的题目,先标记跳过去,最后如果有空余时间再回来推。逻辑题和金融场景题各留出5-8分钟,编程大题至少留出30到35分钟。
这个分配看起来简单,其实执行起来并不容易。选择题里一旦遇到一两个拿不准的网络题或者数据库题,很容易陷入“再想想、马上就能想出来”的陷阱。实际情况是越想越乱,等到回过神来,20分钟已经过去了。我自己的经验是,选择题里每一道都追求完美是这场考试最大的敌人,你要接受“有少量题目拿不准很正常”这个事实,保证整体节奏才是第一位的。
编程题的时间分配更讲究技巧。拿到题目后先花3到5分钟读题和确认输入输出格式,理解清楚边界条件,再用剩余时间写代码和跑测试。很多人的问题在于读题不够仔细,输入输出格式理解错了,代码逻辑完全正确但自测用例过不了,非常可惜。
3.3 大题实战:编辑器里的挣扎与破局
那场笔试的编程题,我记得很清楚,题目描述里给了两个数组,一个是有序的,另一个也有顺序但带有重复元素,目标是在没有额外空间限制的条件下找出满足某个数量关系的最优值。初看有点像二分变体,但我在草稿纸上推了一遍边界情况后意识到,如果直接套二分模板,很容易在重复元素上栽跟头。
我先落了一个最直观的解法,双指针遍历,一次扫描,时间复杂度O(n),能过基础用例。但赛码网的判题系统一般会混合小数据和大数据测试,O(n)有时候能够通过,但一旦数据规模上到百万级别,底层语言是Java时内存和运行时间的边缘情况就会暴露。我后面又在纸上把二分查找的收敛条件推导了一遍,把左右指针的移动逻辑换成基于坐标的比较,用一个循环来逼近目标值。改完之后,自测通过,再代入几个特殊构造用例去验证,包括数组长度为1、两个数组完全重叠、全部分布在目标两侧这三种情况。
整个过程大概花了28分钟,说实话不算快。但在交卷前我把代码重新读了两遍,把每一个循环变量的增减都检查了一遍。赛码网不会提醒你哪里错了,只能在提交前把能想到的边界全部自测一遍。这里也给大家一个建议:在线编程题提交前,一定要构造几组代码里最容易出错的边界用例去自测。判断失误的代价往往就是整道题零分。
3.4 交卷前的检查清单
还有几分钟时,我停止了做题,开始做一轮快速检查。检查重点是三件事:第一,选择题有没有漏选或误选,尤其是界面上是否存在“已答/未答”状态提示,我那次发现有2道题被不小心标记了“跳过”状态,立刻补选了。第二,编程题的提交状态是否是真真正正地“提交成功”,而不是只保存了草稿。第三,检查自己的姓名学号等登录信息和界面一致,避免后续成绩匹配出问题。
这一轮检查看起来很基础,但每年都会有人栽在细节上。尤其是赛码网的编程题,如果你写完了忘记点提交,系统不会自动帮你提交,成绩就变空白卷了。
4. 容易踩的坑和避坑技巧总结
4.1 平台操作坑:这些故障浪费了我十分钟
赛码网笔试有几个特别容易踩的平台级问题。第一个是代码编辑器的自动缩进和括号补全功能需要提前适应。很多人平时用IDE写代码,习惯了自动格式化,但赛码网的编辑器非常朴素,基本没有智能提示。如果你平时完全不看行号、不手动管理缩进,到了考场上会非常不习惯,代码风格一乱,调试时间就会变长。
第二个问题是测试用例提交的返回结果。赛码网的在线判题通常只显示“通过/不通过”,不显示具体错在哪个测试用例上。所以你只能靠自己的测试用例来判断。我建议开考后第一时间先用打印输出的方式确认输入解析是否正确,特别是输入的数组格式是不是带括号或引号,这些细节一旦读错就是一整道题全错。
第三个坑是网络波动。考试期间如果断网,赛码网会允许你恢复后继续答题,但丢失的时间不会补偿。所以考前尽量用有线网络连接,开考前测一遍网络稳定性。我当时把手机热点作为备用方案准备在桌上,虽然最后没用上,但心里踏实很多。
4.2 知识复习上的几个典型误区
很多人在准备银行IT笔试时,容易犯一个方向性的错误:花大量时间刷公务员行测的逻辑题和图形推理,而忽视了计算机基础。这可能是因为银行笔试题型的流言和刻板印象太深了,总觉得银行笔试会大量考察行测。事实证明,信用卡中心开发方向的笔试里,行测逻辑题占比并不高,更核心的还是计算机专业知识。
另一个误区是算法只刷题不看书。笔试选择题里有很多数据结构基础题,这些题目不是靠刷题量就能覆盖的,你需要理解红黑树的旋转过程、B+树的层高和节点分裂逻辑。如果对底层原理不够清楚,遇到稍微变形的选择题就会懵。建议在刷题之前先把“数据结构”“计算机网络”“操作系统”“数据库原理”这几本核心教材重新过一遍,尤其是重点章节的课后题。
还有一个很常见的误区是编程题只刷自己的强项语言,但对另一种语言完全不懂。招行信用卡中心笔试虽然编程大题允许选语言,但部分选择题是Java和C++混着出的,如果你只看得懂其中一种,另一种语言的选择题就只能靠猜。复习时至少要能看懂另一种语言的代码含义,哪怕不写,也要能读懂。
4.3 时间管理上的独家技巧
我后来帮学弟学妹复盘过很多场校招笔试,发现成绩不理想的人,绝大多数不是知识储备不够,而是时间分配严重失衡。有几个针对在线笔试的时间管理技巧,我觉得值得特别分享。
第一招是“先框架后细节”。拿到卷子先不要急着做第一道选择题,花两三分钟浏览整套题,心里标记一下哪些部分是自己的强项,哪些部分可能比较费时间。编程题一定先读题,哪怕不立刻写,也要让大脑在后台运转,说不定做前面选择题的间隙,编程题思路就自己跳出来了。
第二招是“两分钟法则”。任何一道选择题,如果思考超过两分钟还没有明确思路,立即标记并跳到下一题。在线笔试系统里,被标记的题目会在题号上有明显提示,最后有剩余时间再回头处理。这套机制充分利用了大脑的“酝酿效应”,很多题跳过去后,等做到后面再回头看,思路反而清晰了。
第三招是“编程题至少留30分钟”。不管前面选择题有多难,都要强制自己把编程题时间留够。一道编程大题的分数占比远高于三五道选择题,放弃几道选择题换来一道完整的大题,绝对是划算的。有不少人前面的选择题做得非常完美,但编程题零分,最后依然挂了,因为大题是硬性筛选条件之一。
5. 备考资料和刷题路线建议
5.1 计算机基础:用一套教材打通知识脉络
准备这类笔试,我是强烈建议先把课本内容过一遍,再通过刷题来检验效果。比较推荐的组合是《计算机网络:自顶向下方法》配合谢希仁的《计算机网络》,操作系统看《操作系统导论》或汤小丹版,数据库看《数据库系统概念》。不是说教材要全部读完,而是把与笔试大纲相关的章节挑出来精读,尤其是TCP/IP协议族、进程管理、内存管理、索引的实现原理这几块。
教材过完之后,可以开始刷题。专门针对笔试知识点的刷题题库,牛客网有大量的企业历年真题和模拟卷,拉勾网和LeetCode的讨论区里也有很多人分享笔试复盘。你可以按科目刷,比如今天只刷网络,明天只刷操作系统,把错题整理成一个文档,隔天再重新做一遍。我当时就是靠这套“精读教材+分类刷题+错题滚动复习”的方法,把计算机基础的选择题正确率从60%左右拉到了85%以上。
5.2 算法编程题:按类型拆解,不要贪多
算法题不用一上来就追求刷500道,更重要的是每道题都吃透。我的建议是先把算法题按类型拆解成若干模块:数组与字符串、链表、栈与队列、二叉树、图、动态规划、贪心算法、排序与搜索。每个模块挑10到15道高频题,从易到难刷。每道题做完,不只是看能不能通过,还要总结归纳这一类型题目的通用思路,比如“看到有序数组就想到二分”“看到最值就考虑动态规划”。
在线编程题对输入输出的格式要求特别严,建议平时刷题时多用牛客网或者赛码网提供的模拟笔试模式练习,因为题目描述风格、输入输出样例格式都和真实考试更像。与LeetCode那种已经帮你封装好函数签名的设计不同,牛客和赛码的编程题需要你自己处理main函数和输入解析,很多人刷惯了LeetCode后换到这种平台会非常不适应。
5.3 真题和模拟题的使用策略
银行系笔试题在市面上流通的并不算多,但和它难度相近、风格相似的企业真题还是可以找得到的。我建议优先刷两类题目:一类是大型商业银行软件中心/数据中心的笔试题,另一类是头部互联网公司的校园招聘笔试真题。这两类题目的交叉点正好能覆盖招行信用卡中心笔试的核心考察范围。
不要盲目追求刷题数量,更建议每刷完一套真题,都做一个错题归因分析。错题归因不是单纯看答案,而是要把错误原因归类为“知识点遗漏”“审题错误”“时间仓促看错”“计算粗心”四类,每一类对应不同的改进策略。我当时为了提高效率,直接把每套题的错题记录在一个Excel表格里,标注科目、知识点、错误原因和解决建议,复盘效率一下子高了很多。
6. 笔试之后的下一步:面试准备从交卷那一刻就要开始
笔试不是终点,它的成绩通常会在几天内出来,通过后紧接着就是面试环节。很多人在笔试结束后彻底放松,等到收到面试通知才开始准备,时间其实已经不够了。比较明智的做法是笔试交卷后立刻复盘自己在笔试中暴露的问题,并把面试准备提前启动。
招行信用卡中心的面试通常包括技术面试和HR面试,技术面试会围绕你笔试中的薄弱点、项目经历和你简历上写的技术栈展开。如果你在笔试里网络错了好几题,那面试前就要重点突击网络基础;如果编程大题写得一般,面试官可能会让你现场手写一道类似的算法题。可以说,笔试暴露出来的问题,就是面试准备的方向清单。
面试前一定要把自己的项目经历重新梳理一遍。不要只讲项目用了什么技术,而是要讲清楚你负责的模块架构、技术选型的理由、遇到的难点和解决方案。银行面试官很喜欢追问“如果某个环节出问题了你会怎么排查”,这比让计算机理论更考验实际工程能力。
7. 关于这场笔试的最终复盘心得
现在回过头看2019秋招这场招行信用卡中心第一批IT笔试,我觉得它对我最大的价值,是让我认清了一个事实:银行系的技术笔试已经不再是“走流程”了,它正在以互联网公司的标准来选拔开发人才。
从岗位匹配度来看,这个笔试的定位很精准。它要筛的不是单纯的“会做题的人”,而是基础扎实、能写代码、有逻辑、能抗压的人。题目结构安排层层递进:基础选择题覆盖知识面,语法细节题考察语言功底,逻辑题考察思维方式,编程大题考察真实动手能力,金融场景题考察业务结合能力。任何一环有明显的短板,都很难拿到后续面试的入场券。
我个人的建议是,如果你准备参加银行系IT岗位的秋招,不要被“银行”两个字影响判断,不要以为它比互联网公司好考多少。它更像是给那些“不甘心只做互联网纯业务开发”的候选人准备的一个新选项。在这个赛道上,过硬的基础、扎实的代码功底、从容的时间管理缺一不可。希望这份复盘能帮你少走一点弯路,也希望你在考场上能稳定发挥,不留遗憾。