
春招、秋招折腾过的同学应该都清楚银行IT笔试和互联网大厂的笔试完全是两种画风。互联网公司喜欢上来就甩几道 Hard 题让你在“最优解”和“暴力解”之间反复横跳银行系笔试则更像一次基础功底的大阅兵考的是你平时有没有认真上课、有没有老老实实刷过基础题。我在2019年秋招时参加过招商银行信用卡中心的IT笔试报名的是开发方向第二批今天就把这次笔试的完整复盘写出来从考点拆解、编程题思路到线上笔试的踩坑实录都给后来人做个参考。虽然是2019年的题目但银行IT笔试的考点结构这几年相对稳定尤其信用卡中心这种业务导向的技术部门考察逻辑和知识面很有代表性。无论你是准备银行系、券商系还是其他金融机构的科技岗这篇文章都有直接参考价值。1. 招商银行信用卡中心笔试的项目背景与整体概况1.1 为什么信用卡中心的IT笔试值得单独复盘招商银行信用卡中心在银行体系里算比较特殊的存在虽然是招行下属机构但技术团队规模不小业务系统涉及交易、风控、积分、账务、客户管理多个核心模块所以招人时对开发岗的考察并不水。笔试环节主要用来筛掉基础不扎实的人题目难度中等但覆盖面非常广。“第二批”这个信息也有点讲究。银行招聘常分批次组织笔试第二批通常是补录批次或者按照简历投递时间分批安排。和第一批相比第二批题目会有部分重合但也可能临时调整题型分布。我当时的情况是同批次的同学反映整体风格和第一批类似只是编程题换了一两道。笔试形式是线上笔试用的是第三方在线考试平台全程摄像头监控。考试时间大约100分钟题型分为三块计算机基础知识选择题、编程题、性格测试。选择题覆盖数据结构、操作系统、计算机网络、数据库、Java基础等编程题一共两道一道算法题、一道SQL题性格测试不计分但前后有少量重复题用来测答题一致性。所以如果你想报考这类岗位备考重点其实很明确计算机基础打牢算法能解中等题SQL必须熟练。下面逐块拆解。1.2 笔试的筛选逻辑与岗位匹配度银行开发岗笔试和面试是两轮筛选逻辑。笔试更像“资格赛”目的是确认你具备计算机科班或自学同等学力的基本素养。题目不会出特别偏、特别难的但会在细节上做文章。举个例子选择题里可能出现“HashMap在JDK1.8中当链表长度达到多少时转红黑树”。这种题在业务开发里不一定要背但笔试会考。为什么因为银行技术栈中Java是大头开发和维护需要候选人看懂底层机制不只是会用API。另外SQL题基本必考。信用卡中心每天处理大量账务、交易流水关系型数据库是核心基础设施。笔试考SQL不是故意刁难而是这部分能力入职后马上就会用到所以必须在笔试阶段筛选。清楚了这个逻辑备考的优先级就很明确Java基础 数据结构与算法 数据库 操作系统/计算机网络 其他。2. 开发方向笔试核心考点拆解各大知识板块怎么准备2.1 数据结构与算法难度不高但熟练度要求高银行笔试算法题很少出Hard一般集中在数组、字符串、链表、二叉树、栈、队列这些基础结构上。我那次的两道算法题难度基本对应LeetCode Easy到Medium之间但如果刷题量不够时间会非常紧张。建议准备时重点练这几类字符串处理类反转、回文、子串匹配、字符统计。链表操作类反转链表、合并链表、找环入口。二叉树遍历类前中后序遍历、层序遍历、二叉树深度。排序与查找快排、归并、二分查找。动态规划入门背包问题、斐波那契、爬楼梯这类题出现频率稍低但偶尔会有一道。笔试算法题和面试算法题有一个重要区别笔试看结果面试看过程。在线笔试时没有人和你讨论思路只有提交代码、跑用例、判分。所以平时练习一定要养成“一次写对”的习惯尤其是边界条件比如空数组、链表只有一个节点、字符串里有空格等。2.2 计算机网络与操作系统核心概念反复考这两个板块在选择题里占比不小但考来考去就那么几个考点。计算机网络高频考点TCP三次握手状态变化和SYN攻击原理。HTTP状态码含义尤其是301、302、403、404、500。TCP与UDP区别TCP粘包问题。DNS解析过程。操作系统高频考点进程和线程的区别以及它们的通信方式。死锁产生的四个必要条件互斥、请求与保持、不可剥夺、循环等待。常见页面置换算法LRU、FIFO等。用户态和内核态的切换场景。这些知识点刷一遍并不难难的是记牢、选对。建议把计算机网络和操作系统做成“速记卡片”考前一周每天过一遍。2.3 数据库与SQL银行笔试的必争之地信用卡中心的业务是和账户、流水、账单打交道的数据库重要性不用多说。选择题里会考事务的ACID特性、隔离级别读未提交、读已提交、可重复读、串行化、索引失效场景、三大范式。SQL编程题一般是一道JOIN查询或者带条件的聚合查询。比如题目会给两张表用户表和交易表要求统计每个用户的消费总金额/消费次数筛选出超过平均值的用户等。这种题型在牛客网的SQL题库里非常多练熟了基本能cover。我之前遇到过一道SQL题大致是给定交易表查询2019年每个月消费金额排名前三的用户。这种“分组取Top N”的题目核心是用窗口函数或者用自连接COUNT统计比当前值大的数量。但要注意银行笔试的SQL环境不一定支持窗口函数所以最稳的做法是掌握“JOIN GROUP BY HAVING”的写法窗口函数作为加分项。2.4 Java基础与编程语言占比最高的选择题板块招行信用卡中心开发岗肯定以Java为主选择题里Java占比相当高。考察内容集中在以下几个方面集合框架ArrayList和LinkedList区别、HashMap底层原理、HashSet如何保证不重复。并发基础synchronized和Lock区别、volatile作用、线程池参数含义。JVM内存区域划分、GC参数、类加载过程。面向对象重载和重写区别、接口和抽象类区别、静态绑定与动态绑定。如果你平时用C或者Python刷题考前也要专门过一遍Java基础题。不需要全部掌握但至少能应付选择题。我当时也踩过这个坑习惯用C写算法结果Java集合底层的题只能靠蒙后来面试问JVM时又追问了一轮差点翻车。3. 编程题实操复盘三道典型题目与完整解题思路3.1 编程题的类型分布与答题节奏策略2019年那次第二批笔试的编程题一共是三道两道算法题一道SQL题。但因为不同批次的题目可能存在卷型差异我按考场上实际见到的题型来复盘同时给出通用的解题思路方便你迁移。先说答题节奏。100分钟包含选择题、编程题和性格测试时间其实偏紧。我的策略是先快速跳过拿不准的选择题用5到8分钟把编程题看完动手先做有思路的编程题回头再补选择题。因为选择题一道也就1到2分而一道编程题动辄20到30分这个权重差异决定了策略。另外编程题支持的语言我当时用的是C和Java两种原则上选择自己最熟的语言就行。但要注意输入输出格式银行笔试平台一般从标准输入读流式数据输出结果到标准输出不需要做文件IO。3.2 第一题字符串按出现次数排序Easy-Medium题目大意输入一行字符串要求按字符出现次数降序输出字符如果出现次数相同按字符原本字典序升序输出。例如输入abacc输出aaccb或aacbc不同实现可能顺序略有差异以题目要求为准。思路拆分第一步用哈希表统计每个字符出现次数。第二步需要按次数排序同时相同次数按字符序排序所以可以构造一个pair第一维是次数第二维是字符使用自定义排序。第三步按照排序结果拼接字符串。C参考实现#include bits/stdc.h using namespace std; int main() { string s; cin s; unordered_mapchar, int mp; for (char c : s) mp[c]; vectorpairint, char vec; for (auto p : mp) vec.push_back({p.second, p.first}); sort(vec.begin(), vec.end(), [](pairint, char a, pairint, char b) { if (a.first ! b.first) return a.first b.first; return a.second b.second; }); string res ; for (auto p : vec) res.append(p.first, p.second); cout res endl; return 0; }这段代码的核心是sort的lambda自定义排序另一个容易被忽略的是string.append接口可以一次性追加n个字符。如果你用Java写用StringBuilder的循环append即可。这类送分题切忌失误常见扣分点有没有处理字符串为空的情况、统计时用了数组但没考虑大小写混合、排序规则写反导致部分用例过不了。3.3 第二题二叉树的层序遍历Medium题目大意给定一棵二叉树输出它的层序遍历结果要求每一层单独一行行内用空格分隔。思路拆分层序遍历最自然的做法是使用队列广度优先搜索。需要知道当前层的节点数量所以每次进入循环时先记录queue.size()这个值就是当前层的节点数。遍历当前层的同时把下一层节点入队。C参考实现#include bits/stdc.h using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; vectorvectorint levelOrder(TreeNode* root) { vectorvectorint res; if (!root) return res; queueTreeNode* q; q.push(root); while (!q.empty()) { int n q.size(); vectorint level; for (int i 0; i n; i) { TreeNode* node q.front(); q.pop(); level.push_back(node-val); if (node-left) q.push(node-left); if (node-right) q.push(node-right); } res.push_back(level); } return res; }很多同学写层序遍历时会忘记“记录当前层节点数”直接用while(!q.empty())输出结果所有节点被打印成一行这就是低级的0分失误。面试时如果让你白板写层序遍历这个点也会被重点考察。3.4 第三题SQL分组Top N查询题目大意给定交易流水表transactions字段包括user_id、trans_date、amount表数据如下user_idtrans_dateamount0012019-01-051000022019-01-082000012019-02-11300要求查询每个用户消费总金额并按消费总金额降序返回前三名。思路拆分先按user_id分组求SUM(amount)然后按总金额排序最后用LIMIT 3限制。MySQL参考写法SELECT user_id, SUM(amount) AS total_amount FROM transactions GROUP BY user_id ORDER BY total_amount DESC LIMIT 3;这里有一个细节如果分组里有金额相同的用户是否需要并列排序题目通常要求严格的排序不会涉及并列所以LIMIT写法足够。但如果是“按月份取每月消费金额前三的用户”就需要子查询SELECT user_id, trans_month, total_amount FROM ( SELECT user_id, DATE_FORMAT(trans_date, %Y-%m) AS trans_month, SUM(amount) AS total_amount, ROW_NUMBER() OVER (PARTITION BY DATE_FORMAT(trans_date, %Y-%m) ORDER BY SUM(amount) DESC) AS rnk FROM transactions GROUP BY user_id, DATE_FORMAT(trans_date, %Y-%m) ) t WHERE rnk 3;建议两种写法都熟练窗口函数在MySQL 8.0之后是支持的但有些银行笔试系统可能用的是MySQL 5.7所以第一种写法必须会。3.5 在线笔试环境与提交的细节坑笔试平台的坑比想象中多。我当时用的平台是牛客网风格的在线编译环境本地IDE能跑的代码粘贴上去后可能出现两个问题一是编译器版本不同导致C标准库引用报错二是输入格式存在换行符不一致问题。建议提交前做三步检查头文件是否齐全C建议直接用#include bits/stdc.h省去遗漏。是否读了多组输入。有些题目表面是一组输入实际上会循环输入到EOF如果没写循环只过部分用例。数组和变量类型是否可能溢出。比如题目给的数据范围可能超过int求和时要用long long否则大用例直接WA。4. 笔试备考时间规划与应试策略从零开始的高效路径4.1 备考时间线一个月到两个月是合理区间银行笔试内容多、杂、但单点难度不大所以备考的关键不是拼深度而是保证宽度。我建议至少提前40天开始准备太长容易疲惫太短容易遗漏。第1周过一遍数据结构与算法核心知识点同时刷LeetCode的数组、链表、字符串标签下的Easy题目标是每天3到5题。第2周重点攻二叉树、DFS/BFS、排序同时穿插复习Java集合和并发基础选择题。第3周开始刷SQL题每天5到8道把牛客网的SQL入门到进阶题库过一遍。同时复习计算机网络和操作系统高频考点。第4周进入模拟笔试阶段用牛客网的银行历年真题卷限时100分钟每周做2到3套。第5到6周针对错题查漏补缺重点练自己不熟的知识点考前三天只看错题和速记卡片。这个计划适合计算机基础一般、平时有刷题习惯但不系统的同学。如果你平时算法练得少可以把刷题时间拉长到每天5题以上并优先刷高频题。4.2 刷题工具与题单推荐当年我用的刷题工具是LeetCode加牛客网这个组合到今天依然好用。银行笔试的选择题和SQL题在牛客网上的覆盖度最高而算法题在LeetCode上练手感更合适。推荐的题单LeetCode Hot 100只刷Easy和MediumHard看情况忽略。剑指Offer原题尤其里面的链表、二叉树、字符串题。牛客网“名企校招笔试真题”模块搜索“银行”或“招行信用卡”可以直接看到往年真题。SQL专项牛客网SQL题库从简单到困难按顺序刷完前80题。一个技巧每道题做完后在笔记本上写一行总结标注核心思路和时间复杂度。不要只刷题不总结否则过两周就全忘了。4.3 银行笔试行测题与性格测试怎么应对有些银行笔试会混入行测题比如言语理解、数量关系、逻辑推理、资料分析。招行信用卡中心那场也有类似板块但不计入技术岗总分或者占分很低所以我当时没有花太多时间准备。但有两类题不能完全忽略性格测试和认知能力测试。性格测试虽然不计分但后台会做一致性分析如果前后矛盾太多会被标记。认知能力测试里偶尔会出现“图形推理”、“找规律”类题目这类题考察反应速度建议提前了解一下题型不至于现场发懵。我的建议是行测题只做会做的不会的快速蒙一个把时间留给后面的编程题和Java选择题。4.4 考场上的时间分配技巧100分钟说长不长说短不短分配不合理很容易翻车。我当时的分配方案是开考前2到3分钟打草稿先浏览所有题目把选择题明显不会的标出来不要在单个题上停留超过2分钟。选择题部分控制在40分钟以内剩下60分钟给编程题。编程题先做有思路的再做不太确定的。每道题限时25分钟如果25分钟没写出来先提交一部分用例的分不要死磕。最后预留5分钟检查代码是否编译通过、是否有明显边界漏判。5. 实战避坑与问题排查实录那些考场上才发现的坑5.1 最容易丢分的三个低级错误笔试最大的敌人不是题目难而是低级失误。我复盘了自己和同批次同学的失误以下三类最常见第一本地运行正常提交后0分。原因通常是输入输出格式问题。很多同学平时习惯自己定义输入数据测试没有严格按照题目要求的输入格式写循环读取。遇到多组数据的情况需要用while(cin s)或while (cin t)读入而不是只读一次。第二Java主类名写错。在线笔试平台一般要求主类名为Main如果写成public class Solution直接编译失败。这个错误非常可惜属于白送0分。第三变量类型溢出。题目告诉你在10^9以内但中间结果可能是10^9乘以数组长度超出int范围用int存储就会WA。C中建议直接使用long long。5.2 线上笔试环境准备与突发情况处理线上笔试最怕的不是题目难而是设备出问题。我当时专门做了三件事提前一天用考试平台提供的模拟测试链接检测摄像头、麦克风和浏览器兼容性。准备一个有线网络加一个手机热点万一主网络断掉可以快速切换。把电脑调成免打扰模式关闭所有弹窗软件、即时通讯软件避免考试中途被打断。即便如此考场还是可能出幺蛾子。我同批次有同学考试中途跳出一个系统更新提示导致考试页面失去焦点被系统判定为切屏警告。所以强烈建议提前关闭Windows系统更新通知、QQ、微信等一切可能弹窗的程序。如果考试过程中确实断网不要慌第一时间截图保存现场联系考试平台客服或招行校招组报备一般会安排重考或者补时关键是不要自己乱操作关闭浏览器。5.3 如何获取往年真题和考点信息有很多同学问政哪里找银行笔试真题。除了牛客网其实有两个渠道容易被忽略一是应届生求职论坛的笔试汇总帖。每年秋招季很多热心同学会在论坛上发布“刚刚考完题目回忆版”包括选择题考点、编程题大意和SQL题目结构。这些信息时效性极强建议在笔试前一周集中刷一遍当年的回忆帖。二是招商银行信用卡中心自己的招聘公众号或宣讲会。有些年份HR会在宣讲会或在线答疑时透露笔试考纲范围比如“以Java和数据结构为主”、“包含SQL题目”等。这些信息虽然不精确但能帮你确认备考大方向。5.4 笔试与后续面试的关联性银行笔试往往不只是筛选门槛笔试成绩和考试记录会被面试官看到。我当时面试时面试官就提到了笔试中的SQL题问我“当时那题你是用窗口函数做的吗”这说明面试官手里的材料是包含笔试答题记录的。所以笔试答题时尽量用清晰、标准、可解释的写法。即使题目AC了如果代码写得像“天书”面试官追问时也不好解释。反之如果代码注释清楚、思路清晰会给面试官留下更好的印象。这个细节很多人不知道但对后续流程有实际影响。6. 银行IT笔试与互联网笔试的差异总结最后再用一张表把银行系和互联网系笔试的差异拉出来帮你判断自己更适合哪种复习节奏对比维度银行IT笔试互联网大厂笔试算法难度Easy到Medium为主Medium到Hard常见考点范围计算机基础JavaSQL算法系统设计为主题目类型选择题比例高几乎全是编程题SQL占比必考且占分高很少直接考SQL时间压力中等但选择题耗时间压力大算法题耗时间面试关联笔试记录面试时可能被追问面试时主要看简历和手撕代码如果你是一个算法竞赛背景强、但基础概念不够扎实的人银行笔试反而比互联网笔试更需要注意因为选择题没有AC一说错了一道就是扣分。如果你平时做业务开发、Java基础扎实银行笔试会相对顺手算法只要保持手感就行。我个人在实际操作中的体会是银行系科技岗的笔试是“性价比”很高的筛选机制它不追求区分度拉满而是把所有必备技能都摆在台面上考一遍。备考时你去追那些偏题难题收益很低把高频考点吃透、把SQL写熟练、把常见算法模板背到条件反射基本就能稳过。最后分享一个小技巧考前一周把HashMap、线程池、JVM内存区域、TCP三次握手、四种事务隔离级别这五个专题做成一张A4纸速记表每天早起过一遍进考场前再看一眼。银行笔试考来考去始终绕不开这些最核心的东西。