先说个背景:2019年秋天我参加了招商银行信用卡中心的IT笔试(开发方向第三批),岗位是软件开发方向,整体感受是“时间紧、范围宽、行测和英语占比高于预期”。这篇文章会把那场笔试的题型分布、考点细节、做题顺序、编程题思路,以及我踩过的坑完完整整写出来。无论你是准备银行系IT岗,还是想了解金融科技类的校招笔试长什么样,这篇都值得认真看完。
我先把结论放在前面:招行信用卡中心的IT笔试不是纯粹的技术笔试,更像“行测 + 英语 + 技术知识 + 编程题”的混合体。如果你只用刷LeetCode的思路去准备,大概率会在前面的行测部分浪费太多时间,导致后面编程题没时间写。这是我最想提醒你的一件事。
1. 银行IT笔试的整体格局与考察逻辑
1.1 这场笔试到底在筛什么人
招行信用卡中心的开发岗,在招聘流程里属于“总行下属机构单独招聘”的模式,笔试由招商银行信用卡中心自己组织,用的在线笔试平台是赛码网。整体流程一般是:网申 -> 在线笔试 -> 技术面试 -> HR面试。笔试的淘汰率很高,原因不是你技术不行,而是很多人在非技术模块就被刷掉了。
我当时拿到笔试邀请后,第一反应是去刷LeetCode,结果进了笔试系统才发现,真正的题目构成和互联网大厂完全不一样。整场笔试一共两大部分:第一部分是“统一考试”,包含情绪测试、言语理解、数量关系、逻辑推理、资料分析、英语阅读理解;第二部分才是“技术笔试”,包含技术单选题、多选题、编程题。
这套结构说明了一件事:银行系的IT笔试不只是考你能不能写代码,还在考你在压力下的综合能力、逻辑清晰度、英语阅读速度,以及最基本的职业性格是否稳妥。尤其性格测试,看起来不起眼,但真的会刷人。
1.2 时间分配与分值权重,直接影响做题顺序
不同批次的题量和时间会有微调,我当时那场(开发方向第三批)大概是这样的:
| 模块 | 题量 | 建议用时 | 核心目标 |
|---|---|---|---|
| 情绪与性格测试 | 约100题 | 15分钟 | 真实作答,别前后矛盾 |
| 言语理解 | 约10题 | 10分钟 | 拿稳基础分 |
| 数量关系 | 约10题 | 15分钟 | 会做就做,不会就蒙 |
| 逻辑推理 | 约10题 | 10分钟 | 图形推理靠特征记忆 |
| 资料分析 | 约10题 | 15分钟 | 找数快,算得准 |
| 英语阅读 | 约3篇 | 15分钟 | 先看题干再回文章定位 |
| 技术单选+多选 | 约25题 | 15分钟 | 多选宁少勿多 |
| 编程题 | 3道 | 剩余所有时间 | 至少AC一道保底 |
这里有一个特别关键的点:赛码网整场考试是分模块计时的,不是给你一个总时间自己随便分配。也就是说,行测部分到了时间就自动交卷,不会因为你后面编程题想多做一会儿就把前面的时间挪过来。
所以正确策略是:行测部分不要恋战,资料分析最后那个大题如果还剩不到5分钟,直接放弃,凭感觉选。因为资料分析计算量大,费时费力,而分数权重也没有高到值得你花掉后面编程题的时间。
1.3 赛码网笔试平台与环境准备
招行信用卡中心的在线笔试用的是赛码网,这个平台和牛客网、智联、北森类似,都是网页端做题。考前一定要提前做两件事:一是用赛码网的模拟笔试功能跑一遍流程,看摄像头能否正常开启;二是确认自己的浏览器版本,建议用Chrome或最新版Edge。
赛码网有一个很坑的特性:编程题支持的语言里,Java和C++是最稳的,Python虽然也行,但个别题目对Python的时间限制卡得很严。我当时用的Java,整体比较稳妥。
还有一个小细节:赛码网在笔试过程中会随机弹出“切屏警告”,如果你切出浏览器去查资料,会记录在案,频繁切屏有被视为作弊的风险。所以考前把你的本地代码编辑器准备好,写代码的过程尽量在笔试系统自带的编辑器里完成,不要来回切屏。
2. 行测与英语模块的实战复盘
2.1 言语理解:别靠语感,靠结构分析
言语理解这部分大概有10道题,主要分两类:选词填空和主旨概括。选词填空考的并不难,但选项里经常出现“似是而非”的近义词,比如“甄别”和“辨别”、“推脱”和“推托”这种。平时积累不够很容易看哪个都像对的。
我个人觉得,言语理解最需要冷静。做题时先把关联词圈出来,“但是”“然而”“其实”后面往往是核心观点;“为了”“由于”“导致”这类因果关系词则是快速理清文段脉络的关键。中心理解题里,出现“意在说明”“想要强调”这种提问方式时,选项一般不是原文原话,而是对原文的进一步引申,这个规律能帮你排除掉一半的干扰项。
我还发现一个规律:招行这类银行笔试的言语题,语料经常来自经济类新闻,比如央行政策、金融科技、移动支付、消费金融这些话题。你在阅读材料里看到“招商银行”“信用卡”“零售金融”这些词,基本就是银行内部题库的风格。这类材料读起来不陌生,但会有一些金融术语,建议考前把常见的金融词汇过一遍,比如“去杠杆”“资产证券化”“不良贷款率”“拨备覆盖率”,知道大概意思,就不会在阅读理解中被术语卡住。
2.2 逻辑推理与数量关系:性价比最高的抢分点
这两个模块是行测里最容易在短期内提高的。逻辑推理主要考图形推理和逻辑判断。图形推理的考点其实非常固定,无非是点线面角素、对称性、封闭空间、元素数量、旋转翻转、叠加去同存异。看到图形先看“图形之间的整体特征”,如果图形之间差异很大,优先考虑各自内部的数量规律,比如封闭区间数、交点数、线条数;如果图形之间局部相似,优先考虑叠加、去同存异、旋转。
逻辑判断题里,最常考的是“加强/削弱”和“翻译推理”。银行笔试的难度比公务员考试稍微低一点,题干没那么长,选项也没那么多陷阱。翻译推理只需要记住“如果A那么B”等价于“A→B”,“只有A才B”等价于“B→A”,以及逆否命题等价,基本就能应付。
数量关系这一块,我的原则是“保三争五”。十道题里通常有3道是送分题,比如简单方程题、工程问题、浓度问题;有2~3道是中等题,比如排列组合、概率、最值问题;剩下的就是计算量大、关系复杂的题,直接蒙一个走人。
很多人觉得数量关系难,是因为喜欢列方程硬解。其实银行笔试的数量关系题很多可以用“代入法”和“特殊值法”快速拿分。比如单选题里问“某班男生人数是女生的1.5倍,问全班人数可能是多少人”,直接拿选项去试,哪个能被2.5整除就选哪个。这种题你用方程也能解,但代入法速度快一倍。
2.3 资料分析:找数比计算更重要
资料分析大概是两篇材料、10道小题。材料类型一般是表格、柱状图、折线图,或者是“文字+图表”混合。银行笔试的资料分析题通常不难,难的是时间紧张。前面已经说了,如果你在前面花太多时间,很容易在这个模块草草收场。
我的做法是:先花20秒扫一眼材料的标题、表头、单位,知道每个数据大概在哪一块,然后立刻去看问题,带着问题回材料定位数据。计算上,能用估算就不用精算。比如题目选项差距比较大的时候,保留两位有效数字去算就足够了。看见“约”字,就说明可以接受误差,不要老老实实去精算。
2.4 英语阅读:银行IT特有的送分题
银行类的笔试几乎都会带英语,招行信用卡中心的英语题大概是3篇阅读,每篇5道题,总时长15分钟。难度比六级略低,比考研英语简单,文章主题偏向科技、经济、管理类。
这里有个经验要告诉你:英语阅读不要通读全文。先看题干,再回文章找答案。很多细节题,比如“According to the passage, which of the following is TRUE”,直接在文章里找关键词所在的位置,对比句意就行了。每一篇的最后一道题通常是主旨题,这种题需要你快速浏览文章首尾段和各段首句,综合判断。
英语题在整场笔试里占的分值不低,但它其实是所有模块里最不需要担心的一个。我建议考前一周每天精读两篇经济类短文,保持语感,不要在这个模块上花太多精力,因为它比较吃基础,临时抱佛脚提升有限。
3. 技术基础题:多选是重灾区
3.1 技术单选与多选的出题风格
技术部分大概有25道题,单选和多选混合。方向偏向Java、C++、数据结构、计算机网络、操作系统、数据库。整体难度比互联网大厂简单不少,但多选题是个大坑。
为什么说多选是坑?因为银行笔试的多选题通常采用“少选、错选、不选都不得分”的规则。也就是说,你哪怕只选对了一个选项,但漏掉了另一个正确选项,这道题依然是零分。这个规则直接决定了策略:拿不准的选项绝对不要选,宁可少选也不能错选。
举个例子,有一道题问“下列哪些属于TCP协议的特点”,选项大概是:面向连接、可靠传输、面向报文、支持广播。TCP是面向字节流的,不是面向报文的,所以“面向报文”这个选项是错的。但如果你对TCP和UDP的区别不熟,很可能把“面向报文”选进去,这道题就直接零分了。
3.2 数据结构与算法:链表、二叉树、排序必考
数据结构部分的题目主要集中在几个固定考点上。链表和数组的对比、栈和队列的特性、二叉树的遍历方式、排序算法的复杂度和稳定性、哈希表的冲突解决方法。这些都是最基础的知识点,但正因为基础,很多人反而容易忘记细节。
我考到的一道题是:“以下哪种排序算法在最坏情况下时间复杂度为O(nlogn)?”选项是:冒泡排序、快速排序、堆排序、插入排序。正确答案是堆排序。很多人会选快速排序,但快速排序最坏情况下是O(n²),只是平均是O(nlogn)。这种题就是经典的“细节区分”题,复习的时候一定要把“最坏/平均/最好”三种情况下的时间复杂度和空间复杂度整理清楚。
另一个高频考点是“给定一个二叉树的前序遍历和中序遍历,求后序遍历”。这种题我当时考到的时候觉得很简单,因为前序是“根左右”,中序是“左根右”,只要从前序里找到根节点,去中序里划分左右子树,递归套下去就行了。笔试环境里没有纸笔的话会有点难受,但赛码网提供一个简单的在线草稿板,考前要提前适应一下在网页里写写画画的感觉。
3.3 操作系统与计算机网络:经典八股,但考得浅
操作系统主要考进程和线程的区别、进程状态转换、死锁产生的四个必要条件、银行家算法、页面置换算法、虚拟内存等。计算机网络主要考OSI七层模型和TCP/IP四层模型对应关系、TCP三次握手、TCP与UDP区别、HTTP状态码、DNS解析流程、子网掩码计算。
我记得有道判断题:死锁产生的必要条件有哪些?四个条件是互斥、请求保持、不可剥夺、循环等待。这类题就是纯记忆题,没有技术含量,但你不背就真的不会。
计算机网络里比较常考的一个计算题是子网划分。比如“某公司有200台电脑,问最少需要多少个C类地址?”答案是两个C类地址。因为一个C类地址最多支持254个主机地址,200台需要一个C类,但有些题目会加条件说需要预留扩展,那就得看题目怎么描述。这类题目关键是读懂题干里“至少”“最多”“预留”这些字眼。
3.4 数据库:SQL语句和索引是核心
数据库考题集中在SQL语句、三大范式、事务ACID特性、索引原理、锁机制。难度不大,但SQL题的坑在于“考得很具体”。比如会给你两张表,要求写出某个查询语句,或者问“下列哪个SQL语句可以实现去重查询”。这种题就是靠平时写得熟不熟。
索引部分最常问的是“为什么使用B+树而不是红黑树作为索引结构”。答案是:B+树非叶子节点不存储数据、叶子节点之间通过指针连接、一个节点可以存储更多索引项,减少了磁盘IO次数。这是一个经典面试题,放在笔试里就是送分题,只要你背过就一定能拿分。
事务的隔离级别也是一个高频考点:读未提交、读已提交、可重复读、串行化。MySQL默认的可重复读,Oracle默认的读已提交。问到“脏读在哪个隔离级别下不会发生”时,答案是读已提交及以上。这种题如果没复习过,靠常识也勉强能推出来,但最好还是系统过一遍。
3.5 Java/C++基础:语言细节才是拉分项
开发方向的技术题里,Java和C++的占比很高。我当时的卷子里Java题明显比C++多,应该是招行那边开发岗以Java为主的原故。Java常考的包括:HashMap底层原理、ArrayList和LinkedList区别、String/StringBuilder/StringBuffer区别、==与equals的区别、try-catch-finally的执行顺序、线程池参数含义、JVM内存区域、类加载机制、垃圾回收算法。
有一道题很经典:“ArrayList和LinkedList哪个更适合随机访问?”答案是ArrayList,因为ArrayList底层是数组,随机访问是O(1),而LinkedList底层是双向链表,随机访问需要O(n)。但如果问“哪个更适合频繁插入删除”,答案是LinkedList,因为数组插入需要移动元素。这种题就是纯概念题,看一眼就会。
C++常考的则包括指针与引用的区别、虚函数与纯虚函数、重载与重写的区别、构造函数和析构函数的执行顺序、深拷贝与浅拷贝。如果你投的岗位偏Java,C++不需要准备太多,把基本概念过一遍就行,但如果你投的是偏底层方向的开发岗,那C++的深度会明显加大。
我有一次在地铁上刷手机,看到有人分享“拼多多笔试考了虚函数表”,虽然银行笔试没考到这么深,但你可以大致感受一下,技术题考察的深度往往取决于岗位的细分方向。招行信用卡中心的开发岗,整体偏应用,不会在语言底层上疯狂深挖,但基础的原理必须能说清楚。
4. 编程题实战场:从思路到AC
4.1 第一道题:字符串处理类,保底题
编程题一共3道,难度从易到难。第一道题通常是字符串处理或简单数组题,难度对标LeetCode简单或简单偏中等。这道题是必拿分题,因为如果你连这道题都AC不了,后面两道题大概率也做不出来,整场笔试的技术分就会非常难看。
我考到的一道题大致是:给定一个字符串,去掉其中所有重复字符,并保持字符出现的相对顺序,输出处理后的字符串。例如输入“abracadabra”,输出“abrcd”。
这道题的思路非常直接:用一个HashSet记录已经出现过的字符,遍历字符串,如果当前字符不在Set中就加入结果,同时加入Set;如果在Set中就跳过。复杂度为O(n)。核心代码大概是这样:
public static String removeDuplicate(String s) { Set<Character> seen = new HashSet<>(); StringBuilder sb = new StringBuilder(); for (char c : s.toCharArray()) { if (seen.add(c)) { sb.append(c); } } return sb.toString(); }这里有一个关键考点:HashSet的add方法返回boolean,如果元素已经存在,返回false。用这个特性可以少写一个contains判断。这种小技巧笔试时一定要反应出来,因为能省几秒钟,积少成多。
4.2 第二道题:区间合并类,容易出现细节Bug
第二道题一般比第一道难一些,我当时遇到的是区间合并问题:给定一组区间,合并所有重叠的区间。输入是[[1,3],[2,6],[8,10],[15,18]],输出应该是[[1,6],[8,10],[15,18]]。
这道题的常规解法是:先把区间按左端点排序,然后维护一个当前合并区间的左端点和右端点。遍历所有区间,如果当前区间的左端点大于当前合并区间的右端点,就把当前合并区间加入结果,并开启新区间;否则更新合并区间的右端点为两者中的较大值。
public static int[][] merge(int[][] intervals) { if (intervals == null || intervals.length == 0) return new int[0][]; Arrays.sort(intervals, (a, b) -> a[0] - b[0]); List<int[]> result = new ArrayList<>(); int left = intervals[0][0], right = intervals[0][1]; for (int i = 1; i < intervals.length; i++) { if (intervals[i][0] > right) { result.add(new int[]{left, right}); left = intervals[i][0]; right = intervals[i][1]; } else { right = Math.max(right, intervals[i][1]); } } result.add(new int[]{left, right}); return result.toArray(new int[0][]); }这道题容易出错的地方在于排序的lambda表达式。赛码网的在线编辑器对Java 8的语法支持较好,但如果你的编辑器默认用Java 7,lambda会报错。我当时就踩了这个坑,最后手动改成了Comparator的写法。所以强烈建议你考前查一下笔试平台支持的Java版本,不同平台之间差异真的很大。
另一个坑是:区间端点包含关系。有的题题目会明确说“区间 [a, b] 和 [c, d] 重叠当且仅当 a <= d 且 c <= b”,但有时候“端点相邻也算重叠”,比如[1,2]和[2,3]算重叠,有时候又不算。一定要认真读题,不要默认。
4.3 第三道题:动态规划类,尽力而为
第三道题我当时没有完整AC,只过了一部分测试用例。题目是一个典型的动态规划问题,类似“给定一个包含非负整数的网格,找出从左上角到右下角的最小路径和”,但加了一个条件:只能向右或向下走。
这类题的状态转移方程是:dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]。边界条件是第一行只能从左边来,第一列只能从上边来。如果你刷过LeetCode的“最小路径和”原题,这道题就是送分题,但如果你没刷过,现场推导状态转移方程会费不少时间。
我的建议是:第三道题不要强求AC。在笔试最后15分钟,如果你第二道题已经写完且通过了部分用例,第三道题可以先写一个暴力解法或者贪心解法,哪怕只通过20%的测试用例,也能拿一部分分。银行笔试的编程题判分通常按测试用例比例给分,不是非0即1。
5. 考后复盘与备战技巧
5.1 当场估分与下一步安排
笔试结束后,赛码网不会当场给分。一般需要等一周左右,如果通过会收到面试邀约。招行信用卡中心的面试通常在笔试后一到两周内启动,流程是技术面 + HR面,有些岗位会有两轮技术面。
我当时笔试结束后做了一个很傻的事:在社交平台上搜“招行信用卡中心笔试面经”,想找别人分享的答案来对。虽然确实找到了有人回忆的题目和讨论,但意义不大。因为你已经交卷了,答案对不对都改变不了结果,反而会给自己制造焦虑。
更值得做的是,趁记忆清晰,把笔试里遇到的题目和不确定的考点记录下来。这个记录不只是为了这一场,对你接下来参加其他银行的笔试也很有用。因为银行系笔试的题库高度相似,今天考的知识点很可能在下一场以变形的方式出现。
5.2 银行系IT笔试的通用备考路线
如果你准备的是银行系IT岗的秋招,我的建议是不要只盯着LeetCode刷题。银行笔试的难点从来不在算法深度,而在知识面的广度和做题速度。你要把精力分成几块:行测模块要刷公务员考试的真题,尤其是言语理解、逻辑推理、资料分析;技术模块要把数据结构、计算机网络、操作系统、数据库的基础知识系统性过一遍;编程题保持每周刷3~5道LeetCode简单和中等题,练手感。
还有一个很容易被忽视的备考点:行测中的“数量关系”和“逻辑推理”,其题目风格和公务员考试高度一致,但银行笔试的难度略低。你可以直接找近几年的银行校招笔试真题来刷,它们的题型和招行信用卡中心的相似度非常高,比如“微众银行数据分析笔试”“拼多多笔试”中的行测部分,虽然属于不同公司,但行测的出题思路都源自同一套体系。
5.3 笔试与面试的衔接:技术面在问什么
很多人在笔试通过后,以为下一个难关是技术面试,但实际上银行系的技术面试往往没有互联网大厂那么硬核。招行信用卡中心的技术面更看重你对基础知识的掌握程度、项目经历的完整度,以及沟通表达能力。
我当时在技术面里被问到了这几个问题:HashMap的put流程、Java内存模型、MySQL索引为什么用B+树、Spring的IOC和AOP、以及一个开放题“如果要设计一个信用卡账单分期功能,你会怎么设计数据库表”。你会发现这些几乎全部是笔试里出现过的考点的深化版。也就是说,笔试的准备过程本身就是在为面试打基础。
所以不要把笔试和面试割裂开来,笔试时积累的那些知识点,面试前一定要再复习一遍,尤其要能用自己的话讲清楚。笔试时你可能只需要选对选项,面试时需要你把整个思路流畅表达出来,这是完全不同的要求。
6. 写在最后:一些真实感受
如果你正在准备招商银行信用卡中心或类似银行系机构的IT笔试,我的核心建议可以浓缩成一句话:行测是入场券,技术是分水岭,编程题是保命符。很多人行测裸考、技术临时抱佛脚、编程题只攻一道,结果要么行测勉强过线但技术一塌糊涂,要么技术很强但在行测上被时间拖垮。
我个人的体会是,银行IT笔试本质上是一场“压力下的准确率测试”,它考的不是你有多聪明,而是你在规定时间内能稳定输出多少。这种能力完全可以通过真题、模拟题、限时训练来提升。笔试前一周,每天做一套行测限时训练,手感和速度就能进步一大截。
最后分享一个小技巧:考试前30分钟,打开赛码网的模拟笔试,把摄像头、麦克风、浏览器权限都测试一遍。再找一个PDF阅读器,因为有些银行的笔试题会附带PDF图表材料,如果你的浏览器不支持内嵌PDF预览,到时候资料分析就只能瞎猜了。这些小细节,往往比多刷一道题更容易决定你的真实分数。