
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岗位的秋招不要被“银行”两个字影响判断不要以为它比互联网公司好考多少。它更像是给那些“不甘心只做互联网纯业务开发”的候选人准备的一个新选项。在这个赛道上过硬的基础、扎实的代码功底、从容的时间管理缺一不可。希望这份复盘能帮你少走一点弯路也希望你在考场上能稳定发挥不留遗憾。