2019年秋天,我坐在电脑前参加招商银行信用卡中心秋招IT笔试,报考方向是测试开发,第二批。两个小时左右的题量做下来,最大的感受是:这家机构的笔试题不像互联网大厂那样追求偏题怪题,而是把重心放在“基础是否扎实、思维是否周密”上。作为经历过的人,我把整场笔试的考情、考点、答题思路和踩坑教训完整复盘了一遍,给准备银行系测试开发岗的同学一份能直接参考的攻略。
先说结论:招商银行信用卡中心的IT笔试,测试开发方向的核心考察点有三个——计算机基础知识、编程基本功、测试思维(尤其是用例设计能力)。这里的“测试思维”才是区分度所在,很多开发背景的同学能写完编程题,却在测试设计题上丢分严重。这篇文章会把每个模块考什么、怎么答、为什么这样答,全部拆开讲清楚。
1. 考情概览:这场笔试到底在筛选什么样的人
1.1 整体题型结构与时间分配
先说硬信息。2019秋招第二批的笔试,采用的是在线笔试系统,整体题型大致分四块:单选题、多选题(或判断题)、编程题、测试设计题(主观题)。总时长一般在120分钟左右,题量不算小,需要合理分配时间才能全部做完。
从题型比例来看,选择题占大头,覆盖计算机基础、计算机网络、操作系统、数据库和编程语言基础。编程题一般是1-2道,难度接近LeetCode简单到中等偏下,不会考特别复杂的算法。测试设计题通常会给出一个具体业务场景,比如“信用卡还款功能”或“登录模块”,让你设计测试用例。整套题的核心意图很明确:不追求你是算法竞赛选手,而是看你有没有扎实的计算机功底,以及是否有测试岗位需要的结构化思维。
这里多说一句,银行系的IT笔试通常还有个特点——会嵌入一部分行测或性格测试类题目,但招商银行信用卡中心的技术批次基本以纯技术题为主,这部分占比极小甚至没有。重点还是技术基础。
1.2 测试开发方向与普通开发方向的题目差异
同场考试可能分多个方向,比如Java开发、数据研发、测试开发。测试开发方向的选择题和开发方向有不少重叠,但差异点非常明显:
- 算法题难度略低,更偏基础数据结构的应用。
- 会增加软件测试理论相关题目,比如白盒测试、黑盒测试、覆盖率的含义。
- 主观题明确要求写测试用例,而不是系统设计。
- 对数据库和Linux的考察权重更高,因为测试岗位日常需要写SQL做数据校验、上服务器看日志。
所以如果你是按开发岗的标准去刷题准备,可能会在测试理论和用例设计上吃亏。反之,如果只准备测试理论而忽略了编程基础,选择题和编程题又会拖后腿。两者的平衡点,就是整场考试的核心得分策略。
2. 核心考点拆解:每个模块到底考什么、怎么答
2.1 计算机基础:数据结构与算法的高频题型
计算机基础是选择题的重头戏。数据结构方面,数组、链表、栈、队列、二叉树、哈希表是绝对高频。常考的知识点包括:
- 各种排序算法的时间复杂度、稳定性对比。比如快速排序最坏情况的时间复杂度是多少(O(n^2)),堆排序是否稳定(不稳定),这些细节很容易被忽视。
- 二叉树的前序、中序、后序遍历,尤其是给两个遍历序列求第三个,或者求二叉树深度。
- 哈希表的冲突解决方法,开放地址法和链地址法的区别。
- 栈和队列的应用场景,比如用栈实现队列、括号匹配。
说一个我印象很深的题:给出一个中序遍历序列和后序遍历序列,要求选出对应的前序遍历。这种题属于数据结构里的经典题型,思路是“后序序列的最后一个节点是根节点,再到中序中切分左右子树”,递归还原。笔试时没有IDE调试,全靠手推,所以平时一定要练到条件反射。
算法方面不会考动态规划、图论这些重难点,顶多出现二分查找、递归、简单字符串处理。准备策略很明确:把常见排序的代码和复杂度背熟,把二叉树遍历吃透,链表反转、字符串反转这类基础操作能手写。
2.2 数据库与SQL:测试岗位的加分项
数据库的题目在测试开发方向占比不低,因为测试过程中经常要做数据准备和数据校验。常见考点:
- SQL多表查询,尤其是INNER JOIN、LEFT JOIN的区别。
- GROUP BY与HAVING的使用场景,WHERE和HAVING的执行顺序差异。
- 索引的作用和优缺点,什么时候索引会失效(比如对索引列使用函数或隐式类型转换)。
- 事务的ACID特性,隔离级别以及各自解决的问题。
举个例子,典型的题目是:有两张表,学生表和学生成绩表,要求查出平均成绩大于80分的学生姓名和平均分。正确写法是先用GROUP BY按学生分组,再用HAVING过滤平均分大于80,然后JOIN学生表取姓名。
SELECT s.name, AVG(sc.score) AS avg_score FROM student s JOIN score sc ON s.id = sc.student_id GROUP BY s.id, s.name HAVING AVG(sc.score) > 80;这里有个易错点:如果用WHERE AVG(sc.score) > 80,会直接报错,因为聚合函数不能出现在WHERE子句中。这是SQL笔试中非常经典的坑,一定要记住聚合条件的过滤用HAVING。
索引方面,我还遇到过一个问法:给一个查询语句,问怎么建索引最合适。核心原则是“等值查询优先建索引,覆盖索引能避免回表”,以及“最左前缀原则”。准备的时候把这三个概念理清楚,基本就能应对。
2.3 计算机网络与操作系统:常考但容易丢分的板块
计算机网络的高频考点集中在TCP/IP协议栈:
- TCP三次握手和四次挥手的过程,为什么握手是三次而不是两次。
- HTTP常见状态码的含义,尤其是404、500、302、304。
- TCP与UDP的区别,各自的应用场景(TCP适合文件传输、HTTP,UDP适合视频直播、DNS查询)。
- 输入一个URL到页面展示的完整过程,这道题几乎是必背的。
这里建议把“URL输入到页面渲染”的过程背熟:DNS解析、TCP连接、发送HTTP请求、服务器处理并返回、浏览器解析渲染、连接关闭。不仅能应付选择题,面试也会问。
操作系统方面,进程与线程的区别、死锁产生的四个必要条件(互斥、持有并等待、不可剥夺、循环等待)、进程间通信方式(管道、消息队列、共享内存、信号量)是常客。
再补充一个容易忽略的点:银行笔试很喜欢考Linux命令。比如查看端口占用用什么命令(netstat或ss),实时查看日志输出用什么(tail -f),查找文件中包含关键字的行(grep)。后面我会单独讲测试开发方向对Linux的要求。
2.4 编程语言基础:Java为主导
招商银行信用卡中心的技术栈以Java为主,所以选择题中Java相关题目出现概率很高。常考的点包括:
- Java基础语法:equals和==的区别、String和StringBuilder的区别。
- 集合框架:ArrayList和LinkedList的底层实现与适用场景、HashMap的底层原理(JDK 1.8后是数组+链表+红黑树)。
- 异常机制:受检异常和非受检异常的区别。
- Java内存区域:堆、栈、方法区各自存放什么。
举个例子,HashMap的底层原理几乎是必考题,从“put一个键值对后发生了什么”到“什么时候链表转红黑树”都可能考。这里直接给一个标准回答思路:计算key的hash值定位到数组下标,如果该位置为空则直接插入,否则遍历链表,存在相同key则覆盖,否则尾插法加入链表;当链表长度超过阈值8且数组长度大于等于64时,链表转为红黑树。
如果你是Python或C++背景,Java基础题可能有点吃亏,但也不用慌,把上面列举的这几个高频考点速成一遍,足够应付选择题。
3. 测试开发方向的侧重点:这才是拿分关键
3.1 测试理论与用例设计方法
这是测试开发方向区别于其他方向的核心板块。选择题会考一些概念,比如黑盒测试和白盒测试的区别、单元测试和集成测试的目标、语句覆盖和分支覆盖哪个更强。
真正的重头戏是最后的主观题:给出一个业务模块,让你写测试用例。这题分值高、区分度大,也是最容易暴露水平的一题。
我当时遇到的场景是“信用卡还款功能”,要求设计测试用例覆盖正常路径、异常路径和边界情况。这类题的答题框架非常固定,就是一个字:全。我建议这样组织:
- 功能测试:正常还款成功、余额不足、还款金额超过欠款、还款金额为0或负数、重复还款、还款卡号错误、还款日当天还款、逾期后还款。
- 接口/数据测试:数据库金额是否正确更新、还款流水是否生成、异步通知是否成功。
- 兼容性测试:不同浏览器、不同手机型号、不同操作系统。
- 安全性测试:支付密码错误次数限制、接口是否加密、是否有越权风险。
- 性能测试:高峰期并发还款时系统是否稳定、响应时间是否达标。
每个用例都要写清楚前置条件、操作步骤、输入数据、预期结果。比如“还款金额超过欠款”这个用例,正确预期应该是“系统提示还款金额不能超过应还金额,交易失败”。
再举一个“登录模块”的例子帮助理解。登录功能看似简单,但用例设计可以写几十条:正确的用户名密码登录、密码错误、用户不存在、密码为空、用户名包含特殊字符、连续输错5次密码锁定、勾选记住密码后关闭浏览器再打开、不同设备同时登录同一账号等。每一条代表一个独立的测试场景。
如果没接触过测试理论,建议先把等价类划分、边界值分析、场景法、错误推测法这四种黑盒用例设计方法吃透。笔试中出现的设计题,基本都能用这四种方法覆盖。边界值法尤其要重视:很多隐藏bug都出现在边界上。
3.2 测试设计题的高分答题模板
我总结了一套主观题答题模板,考试时直接套用,既省时间又不丢项。第一段先写“本次测试的对象和范围”,明确你要测什么、不测什么。接下来分几个维度展开:功能测试、接口测试、兼容性测试、安全测试、性能测试。每个维度下列出具体用例。
这里有一个关键技巧:不要只写用例名称,一定要写“预期结果”。阅卷人在快速批改时,最直观的判断标准就是用例条目是否完整、预期结果是否清晰。只写步骤不写预期结果,会被认为测试思维不成熟。
再补充一点,银行场景的题目,一定要考虑安全合规相关的用例。比如涉及支付的场景,要考虑支付密码错误次数限制、短信验证码有效期、交易金额是否加密传输。你把这类用例写上去,会明显提升答案的专业度。
3.3 自动化测试与接口测试常识
招商银行信用卡中心的测试开发岗,日常工作大概率涉及接口自动化、UI自动化和持续集成。笔试虽然不会让你现场写一套自动化框架,但选择题可能会考察相关概念。
高频考点有两个:第一,常见的自动化测试框架有哪些,比如Java系的JUnit、TestNG,Python系的pytest、unittest,UI自动化常用的Selenium,接口测试常用的Postman、JMeter、RestAssured。第二,接口测试的关注点,包括请求参数是否正确、响应状态码是否符合预期、响应数据的字段类型和值是否正确、接口的性能耗时是否达标。
举个例子,要求你用pytest写一个简单的接口测试用例,验证某个登录接口:
import requests import pytest def test_login_success(): url = "https://api.example.com/login" payload = {"username": "testuser", "password": "123456"} resp = requests.post(url, json=payload) assert resp.status_code == 200 data = resp.json() assert data["code"] == 0 assert "token" in data["data"]这个用例没有做太多复杂的事,就是发请求、校验状态码、校验关键字段。但笔试中能写出类似的代码,已经能证明你具备接口测试的基本能力。不要背太复杂的框架代码,核心的请求发送和断言逻辑足够。
如果选择题中出现了JMeter相关概念,也不要慌,掌握几个关键词就行:线程组(模拟并发用户)、取样器(Sampler,发送请求)、监听器(Listener,查看结果)、断言(Assertion,校验响应)。考得都很浅。
4. 实操经验:笔试过程中的策略与节奏
4.1 时间分配方案
我当时的做题顺序是:先快速浏览所有题目,做到心里有数;然后用45分钟左右解决选择题,遇到卡住的先标记跳过;再用30分钟做编程题;最后留出40分钟专门写测试设计主观题;剩余时间检查。
这个节奏的核心逻辑是:主观题分值高且只要写了就能拿分,必须保证充足的时间。选择题如果在一个不确定的题目上纠结太久,会挤压后面的大题时间。我见过太多人在选择题上投入过多,最后主观题草草几行字收尾,非常可惜。
编程题如果不能完全AC,也一定要写出部分正确的代码,哪怕只过了一个示例用例,也比空着强。银行笔试的编程题一般不要求优化到极致,能跑通最简单的情况,就有基础分。
4.2 编程题的常见套路:字符串、数组与模拟
编程题的范围虽然窄,但依然有规律可循。我统计了银行类笔试常见编程题类型,主要集中在三类:字符串处理、数组操作、简单逻辑模拟。纯算法题很少,动态规划基本不考。
最常见的题目比如:给定一个字符串,反转其中的单词顺序;给一个整数数组,找出出现次数最多的元素;实现一个字符串转整数等功能。这些题目难度不高,关键是能在无IDE环境下写对。
举一个我在练习中反复用的例子:判断一个字符串是否是回文串。这道题在多家银行笔试中都出现过变体。
def is_palindrome(s: str) -> bool: left, right = 0, len(s) - 1 while left < right: while left < right and not s[left].isalnum(): left += 1 while left < right and not s[right].isalnum(): right -= 1 if s[left].lower() != s[right].lower(): return False left += 1 right -= 1 return True这段代码用双指针法,跳过了非字母数字字符,统一转小写后比较。现场手写时,最容易出错的点是忘记处理空字符串和大小写问题。建议在平时的练习中,把“输入为空”“只有一个字符”“大小写混合”这些边界情况都跑一遍。
笔试环境下的另一个常见问题是输入输出格式。在线OJ系统有些要求自己写输入解析,比如第一行是测试用例数量,后面每行是一个字符串。一定要提前熟悉目标平台的输入输出模式,否则代码逻辑对了,却因为读入方式不对导致超时或报错,非常冤。
4.3 选择题的“蒙题”技巧与策略
虽然不鼓励蒙,但遇到不会的选择题,有一些简单的提分策略。首先,多选题目中,拿不准的选项不要选,少选得部分分,错选直接零分。这是多选题最重要的原则。
其次,一些概念题可以通过排除法缩小范围。比如问“下列哪个协议是面向连接的”,TCP和UDP二选一,知道UDP是无连接的,答案就出来了。平时积累的几个高频选项要记牢:TCP面向连接、UDP无连接、HTTP基于TCP、DNS基于UDP。
再一个策略:第一直觉往往是对的。在线笔试没有回头检查的习惯时,不要反复修改答案,除非你非常确定原来的选择是错的。我在多次考试中的经验是,纠结后改掉的答案,大概率会把对的改成错的。
5. 常见问题与排查技巧实录
5.1 我踩过的坑:在线笔试环境的三个大坑
第一个坑是编程题的环境不熟悉。部分银行的在线笔试系统不是标准的LeetCode模式,不会帮你处理输入输出,需要自己写main函数或标准输入读取。我见过有人用惯了LeetCode的函数补全模式,到了笔试环境连Scanner都没写,最后整个代码无法编译。建议考前一定要查清楚笔试平台的操作方式。
第二个坑是时间分配失衡。我有个朋友当年参加这场考试,选择题做得很爽,结果最后一道测试设计题只剩五分钟,草草写了几个用例就交卷了。后来复盘才发现,那道主观题几乎决定了能不能进面试。这个教训非常深刻,所以我特别强调:主观题至少留40分钟。
第三个坑是写测试用例时只写“正常路径”。很多同学能写出正确登录、正确还款这类用例,但一到异常路径就短路了。比如密码错误、网络超时、金额为0、重复提交这些场景写不出来。这其实是测试思维不够成熟的体现。我在训练时养成一个习惯:列出每一个输入字段,然后对每个字段分别考虑“合法值、非法值、边界值、空值”四种情况,再考虑业务流程的“正常、中断、重复、并发”等场景。这套思路可以覆盖绝大部分用例设计题。
5.2 常见问题速查表
为了便于快速回顾,我把整场笔试中的高频问题和应对方案整理成一个表格:
| 常见问题 | 原因分析 | 解决方案 |
|---|---|---|
| 编程题编译不通过 | 不熟悉笔试平台的输入输出模式 | 考前查清题型模式,练习标准输入读取 |
| 测试用例写不全 | 只关注正常路径 | 用等价类和边界值法逐字段分析 |
| 多选题丢分严重 | 选择了不确定的选项 | 拿不准的选项不选,宁少勿错 |
| SQL聚合条件写错 | WHERE误用聚合函数 | 记住聚合条件用HAVING过滤 |
| 时间不够用 | 选择题耗时过多 | 45分钟做选择题,主观题留40分钟 |
| HashMap原理说不清 | 只看概念没理解底层流程 | 从put过程入手理解数组+链表+红黑树 |
5.3 考后复盘:笔试通过接下来准备什么
笔试通过后,一般会进入面试环节。银行面试通常包含技术面试和HR面试。技术面试会追问笔试中的测试设计题,让你现场补充用例,也会问项目经验。所以笔试结束后不要松懈,建议把笔试中没答好的题目再复盘一遍,尤其是测试设计题,整理成一份标准答案。
另外,招商银行信用卡中心的面试还会关注“为什么选择银行系”这类动机类问题。如果你准备进金融科技领域,建议提前了解一下银行系统对稳定性和安全性的高要求,在面试中可以多谈自己对“金融级测试标准”的理解,比如数据一致性校验、资金安全、高可用保障等,面试官会很认可。
我个人在准备这类岗位时,给自己定了一个原则:“先广度后深度”——花一周时间把计算机基础、数据库、网络、Linux这些必考点过一遍,再花一周时间重点攻克测试理论、用例设计和接口自动化。这套复习路线对于银行系测试开发岗的笔试和面试都是通用的,值得一试。