ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

银行IT笔试复盘:招行信用卡中心2018春招开发岗全解析

银行IT笔试复盘:招行信用卡中心2018春招开发岗全解析 参加招商银行信用卡中心那场2018春招IT笔试是我整个校招季里印象最深的一场。倒不是题目有多变态而是它的考察风格和互联网公司完全两个路子——不跟你拼什么冷门算法也不考你用过什么最新的框架它更像是在筛能踏实进银行系统干活的人。当时我投的是开发方向第一批笔试考完之后花了两天复盘积累了不少一手经验。这篇文章就把整场笔试从头到尾拆开讲清楚包含题型结构、每个模块的核心考点、编程题的答题策略以及银行IT笔试独有的那些隐形门槛。无论你是正在准备银行系科技岗、信用卡中心、金融科技子公司的应届生还是想了解传统金融机构开发岗笔试和互联网大厂差异的从业者这篇复盘都能帮你少走很多弯路。全文不涉及具体原题内容但考察范围、答题思路、避坑策略都是通用的照这个方向准备基本不会跑偏。1. 笔试全流程观察从投递到进入笔试环节1.1 银行系IT笔试的基本盘招行信用卡中心在银行系里面算是比较特殊的存在。它不是总行编制而是独立的事业部/子公司化运营技术氛围比传统银行部门要开放一些但笔试环节依然带着浓厚的银行招聘色彩题量大、时间紧、覆盖面广、基础题占大头。2018年春招的流程大致是网申投递、在线笔试、技术面试、HR面试。笔试是统一安排在某一个周末的晚上进行用的是在线测评系统全程摄像头监控。当时我是在学校宿舍里做的提前调试好了电脑和网络结果还是遇到了一些环境问题这个后面专门说。这里要提醒一点银行系的简历筛选通常比较玄学双非院校可能连笔试机会都拿不到但一旦进了笔试大家就在同一起跑线了。所以收到笔试通知那一刻不要管自己学校是不是目标院校把精力全部放在刷题和补基础上就行。1.2 试卷结构一览与时间分配策略先说整体结构。开发方向的笔试内容大体可以分为五个模块每个模块考察的目标完全不同模块考察方向参考题量参考时长行测/逻辑推理通用素质10-15题15分钟计算机基础知识专业基础20-25题30分钟金融业务常识行业认知5-10题10分钟编程题代码能力2-3题40-50分钟性格测试岗位匹配度不限按自己真实情况作答这里有个关键信息行测题和性格测试是很多技术同学容易忽视甚至厌恶的部分但银行的笔试就是这套逻辑它想测的是你在这个组织里能不能稳定地工作而不是单纯测代码水平。时间分配上我的建议是行测题不要恋战会就选不会就蒙控制在15分钟内计算机基础题是拿分主战场要认真审题能做对90%以上就是合格线编程题留足40分钟以上因为在线OJ的输入输出处理和本地IDE不同容易在调试上浪费时间。1.3 在线笔试环境和设备准备这个问题我要单独拿出来讲因为当时好几个同学就是挂在环境上。银行用的在线笔试系统一般是第三方提供的比如北森、智鼎之类的平台。这些系统有几个通病对浏览器版本挑剔、对网络波动敏感、切屏会被记录甚至警告。我当时用的Chrome结果考试中途浏览器弹了一个更新提示导致切屏被记录了一次。虽然最后没有影响成绩但整场考试心态都有点慌。建议至少提前一天做以下准备使用官方推荐的浏览器一般是Chrome或IE但以邮件说明为准关闭所有无关插件提前测试摄像头和麦克风确保能正常开启找一个网络稳定的环境最好是有线网络准备身份证件放在手边部分系统会在考前随机拍照验证手机调成免打扰放在够不到的地方这些准备工作看似琐碎但任何一个环节出问题轻则影响心态重则直接判违规。银行笔试没有补考机制一定要当成正式考试来对待。2. 计算机基础题开发岗笔试的压舱石2.1 数据结构与算法链表、树、排序是绝对主角计算机基础题是整个笔试中题量最大、也是最容易和互联网公司拉开差距的部分。经过电面、笔试多轮验证银行系的出题风格非常固定不出偏题怪题不考竞赛级别的算法但会把经典数据结构的细节考得很深。链表是必考。单链表反转、判断链表是否有环、找到链表的中间节点这三板斧几乎每场必出。考察方式一般是给一段代码片段让你判断输出结果或者指出错误。比如判断链表有环的代码它可能会在快慢指针的初始位置做文章或者把 while 循环的判断条件写错。这类题的关键是理解指针移动的每一步而不是背代码。二叉树同样重要。前中后序遍历、层序遍历、二叉树的高度和深度、最近公共祖先这些都是高频考点。特别要注意的是银行笔试很喜欢考根据遍历序列还原二叉树这种题给你前序和中序让你判断后序是什么。这种题看着简单但手推的时候一定要在草稿纸上画出来不要心算心算特别容易错。排序算法更不用说。各种排序的时间复杂度、空间复杂度、稳定性对比基本上是必考选择题。我整理的对照表如下排序算法平均时间复杂度最坏时间复杂度空间复杂度稳定性冒泡排序O(n²)O(n²)O(1)稳定快速排序O(n log n)O(n²)O(log n)不稳定归并排序O(n log n)O(n log n)O(n)稳定堆排序O(n log n)O(n log n)O(1)不稳定插入排序O(n²)O(n²)O(1)稳定这里要额外提醒一个点不要只背复杂度还要理解每一趟排序后数组长什么样。银行笔试特别喜欢给一个乱序数组问经过第一趟快速排序后数组的顺序是什么。这种题考场上是真的会让人卡壳的平时不手推几遍临时想很容易翻车。2.2 操作系统与计算机网络高频考点清单操作系统和计算机网络这两块银行笔试的深度介于学校期末考试和互联网公司面试之间。不会让你写LRU算法的完整实现但会考你进程和线程的区别、死锁的四个必要条件、虚拟内存的作用不会让你手撕TCP三次握手的状态变迁但会考你TCP和UDP的区别、HTTP常见状态码的含义。操作系统部分高频考点如下进程与线程的区别、进程间通信方式管道、消息队列、共享内存、信号量死锁产生的四个必要条件互斥、持有并等待、不可剥夺、循环等待银行家算法很多人以为银行笔试会考银行家算法实际上考的频率并不高但建议理解一下虚拟内存、页面置换算法FIFO、LRU、OPT用户态和内核态的区别计算机网络部分高频考点如下OSI七层模型和TCP/IP四层模型的对应关系TCP三次握手和四次挥手的过程HTTP和HTTPS的区别、HTTP/1.0、1.1、2.0的主要变化常见状态码200、301、302、403、404、500、502、504IP地址分类与子网掩码计算关于子网掩码计算这个几乎是送分题但很多人就是在这里丢分。核心就一句话把IP地址和子网掩码都转成二进制做与运算得到的就是网络地址。考场上别偷懒一定要老老实实在草稿纸上算。2.3 数据库SQL语法与索引原理是送分题数据库在银行系统的地位不用多说信用卡中心所有的账务、额度、交易数据全在数据库里。笔试中数据库的题量不多但几乎必考而且难度不大属于认真复习就能拿满分的板块。最常考的题型简单的SQL查询SELECT、WHERE、GROUP BY、HAVING、ORDER BY 的组合使用表连接INNER JOIN、LEFT JOIN、RIGHT JOIN 的区别以及它们的结果集大小索引主键索引、唯一索引、普通索引的区别索引失效的场景事务ACID特性、隔离级别、脏读和幻读的区别这里有一个高频易错点GROUP BY 和 HAVING 的配合。很多人会以为 WHERE 也能过滤分组后的数据实际上 WHERE 是在分组前过滤HAVING 是在分组后过滤。银行笔试特别喜欢用这个设陷阱题目大概长这样查询部门平均工资大于5000的部门编号和平均工资很多人条件反射就写了 WHERE avg(salary) 5000这必错得用 HAVING。SQL题没有什么特别的技巧就是多练。考前把常用语法过一遍做到手写SQL不卡壳这块就是白送的分。3. 编程题实战从读题到AC的完整思考路径3.1 编程题的难度分布与出题风格银行IT笔试的编程题和互联网大厂的笔试相比整体难度要低一档更看重代码规范和基本的算法功底。2018年招行信用卡中心开发方向第一批的编程题大概在LeetCode简单到中等难度之间没有特别偏的DP或者图论题。从出题风格上看银行系的编程题有几个明显特点题目叙述比较绕喜欢套一个业务场景比如信用卡账单日、积分兑换之类数据范围不大暴力解法通常能过一部分测试用例对时间复杂度的要求不像互联网那么极限但要注意数据类型的溢出问题多组输入输出是常态不是只处理一组数据这意味着哪怕你只会暴力解法也能拿一部分分。所以编程题的战略是先保证所有题目都写出来再考虑优化。不要死磕一道题把时间耗在看后续题目上。3.2 输入输出处理最容易翻车的地方这一节我单独拿出来讲是因为太多人挂在输入输出上。在线笔试的编程题使用标准输入输出你需要自己处理输入数据的读取。银行笔试系统一般支持多种语言Java和C为主也有Python。以Java为例推荐使用 BufferedReader 和 StringTokenizer 组合读取速度比 Scanner 快很多import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st new StringTokenizer(br.readLine()); int n Integer.parseInt(st.nextToken()); // 继续读取处理 } }关键点是如果题目要求多组输入格式是每行一组数据直到文件末尾你需要用 while 循环读取。此时最稳妥的写法是String line; while ((line br.readLine()) ! null !line.isEmpty()) { // 处理每组输入 }输出方面注意两点一是每一组结果的格式要和题目要求完全一致包括空格、换行、大小写二是如果结果可能是小数要注意保留位数一般用 DecimalFormat 或 printf 指定格式。我当年就吃过亏一道题要求输出结果取模 1000000007我忘了加取模导致部分测试用例直接溢出变负数。这个教训让我后来越来越注重看题目的约束条件。3.3 一道典型题目的完整解题演示这里我整理一道和信用卡积分场景相关的典型编程题还原考场的完整思考过程。题目大意给定一个整数数组每个数字代表一种积分值要求找出数组中两个数之和等于目标值的所有组合输出组合个数。数组长度不超过1000目标值不超过10000。第一步是暴力解法。两层for循环枚举所有组合O(n²)的复杂度在n1000时是10的6次方完全能过。int count 0; for (int i 0; i n; i) { for (int j i 1; j n; j) { if (arr[i] arr[j] target) { count; } } } System.out.println(count);但要注意所有组合的定义如果数组里有重复数字不同下标算不同组合吗题目里通常会说明。如果没有说明默认按下标区分。如果不考虑下标用HashMap计数MapInteger, Integer map new HashMap(); for (int num : arr) { map.put(num, map.getOrDefault(num, 0) 1); } for (Map.EntryInteger, Integer entry : map.entrySet()) { int a entry.getKey(); int b target - a; if (map.containsKey(b)) { if (a b) { count entry.getValue() * map.get(b); } else if (a b) { count entry.getValue() * (entry.getValue() - 1) / 2; } } }完整答题的流程建议是先花1-2分钟读题把输入输出格式和数据范围圈出来然后先写暴力解法确保思路正确再用草稿纸推演一个简单测试用例最后再考虑优化。千万不要一上来就写HashMap版本万一思路有偏差Debug的时间远比你想象的长。4. 金融IT特色题银行笔试独有的隐形门槛4.1 为什么开发岗笔试要考金融业务常识这可能是很多程序员最不理解的部分。我要说这恰恰是银行笔试最值得认真准备的部分。银行系的IT系统不是做出来的而是长出来的。信用卡中心的核心系统可能已经运行了十几年每一行代码背后都对应着真实的业务逻辑。作为开发人员你写出来的每一段代码都要被带到实际的信用卡业务中验证。如果你完全不懂业务连需求都理解偏了开发出来就是事故。所以银行笔试考金融业务常识的用意是筛掉那些只懂写代码、对行业没有敬畏心的人。这部分题量不大但范围很广主要包括信用卡基础概念账单日、还款日、免息期、最低还款额、分期手续费支付清算基本概念清分、清算、结算的区别风险控制基本概念反欺诈、额度管理、征信银行IT系统架构基本概念核心系统、外围系统、渠道系统4.2 信用卡业务与银行IT系统的知识点清单针对信用卡中心开发岗业务知识点可以按以下思路准备账单相关的概念。账单日是银行每月生成账单的日期还款日是最后还款日期免息期是从消费日到还款日的时间。不同卡种的免息期不同一般是20-50天。逻辑题可能会给一个具体的消费日期和账单日让你算最长免息期。这类题本质是日期计算但如果不熟悉业务术语连题目都读不懂。还款相关的概念。最低还款额一般是账单金额的10%左右如果只还最低还款额剩下的部分会按日计算利息。很多人以为这是数学题实际上是应用题会算利息就好了。清分、清算与结算。清分是指确定交易各方的应收应付金额清算是根据清分结果完成资金划拨结算是指最终完成债权债务清偿。这三者的区别是高频选项题理解关键词就能答对。征信和风控。信用卡申请会查征信逾期会影响征信记录。这个属于常识范畴不需要太深入。我的建议是不要花太长时间死背业务题性价比不高。把上面这些概念过一遍做到看到术语不慌就可以了。重点还是把计算机基础题和编程题的分稳稳拿下。4.3 性格测试与价值观题别小看这一环性格测试在银行笔试里几乎必考形式通常是几十道情景选择题问你遇到某种情况会怎么做。很多人觉得性格测试随便填就行这是大错特错。银行系的性格测试有几个隐藏逻辑它会重复出相似的题来检测你是否前后一致。如果同样的情景你前面选A后面选C会判定为不诚信它偏好稳定、合作、服从规范的倾向而不是激进、创新、独立独行它会在意你的抗压能力和团队协作倾向我的建议是不要在性格测试上演因为你很难在没有准备的情况下连续演几十道题而不暴露。按照自己的真实情况作答但要稍微往靠谱、稳定、能合作的方向靠拢。如果真的因为性格测试被刷那大概率是文化不匹配对公司和你自己来说都不是坏事。5. 笔试踩坑实录与备战建议5.1 高频翻车现场盘点下面这些坑是我自己踩过或者身边同学踩过的整理出来给后来人避雷。在线考试系统切屏被警告。这是最冤的情况。考试系统会在你切换窗口或弹窗时自动记录切屏次数超过一定次数直接判作弊。解决办法是提前关掉所有不必要的软件弹窗、浏览器插件特别是输入法弹窗和广告弹窗。另外考试期间不要切出去查资料摄像头和系统后台都在盯着。编程题本地运行正确但OJ提交编译失败。这种情况通常是类名问题。在线OJ一般要求主类名为 Main如果直接提交public class Test就会编译失败。写代码的时候要习惯性地写 Main 作为类名。题干信息读漏导致算法全错。比如题目说输入包含多组测试数据你却只处理了一组题目说结果对1000000007取模你忘了取模。应对办法读题后先把输入格式、输出格式、数据范围三要素在草稿纸上抄一遍再开始写代码。时间分配失衡。行测题做了30分钟导致后面编程题只剩20分钟草草写了暴力解法还没有验证。这个问题在银行笔试里太常见了因为很多技术同学不熟悉行测题容易陷入再想想就能做出来的陷阱。我的建议是行测题每题最长给90秒超时就先标记跳过留到最后蒙。5.2 针对银行IT方向笔试的备战路线如果你现在还有1-2个月准备时间可以参考下面这个路线第一周先把计算机基础过一遍。数据结构里的链表、栈、队列、树、图重点理解操作过程和复杂度操作系统和计算机网络挑高频考点看不需要啃完一整本教材。第二周开始刷题。以LeetCode简单题为主中等题挑经典的做。每天保证至少3道代码题重点是链表、二叉树、字符串、数组这几个专题。第三周专项补强SQL和业务常识。SQL每天手写5道查询语句业务常识看一遍信用卡基础概念和支付清算概念就行。第四周模拟笔试。找一套完整的在线笔试模拟题限时完成感受一下节奏。没有模拟题的话也可以找几套数据结构试卷自己严格控制时间。还有一个容易被忽视的点关注招聘JD里的技术栈要求。如果岗位描述里写了熟悉Java开发或者熟悉Linux环境笔试大概率会涉及这些内容。Java的集合框架、多线程基础、JVM内存模型Linux的常用命令如 grep、awk、sed、find都属于开发方向笔试的范围。Linux命令这块我可以多说两句。银行系统的服务器基本都是Linux开发人员日常要登录服务器看日志、改配置、启停服务所以笔试偶尔会出几道Linux命令的选择题# 查看日志文件最后100行 tail -100 app.log # 搜索日志中包含ERROR的行 grep ERROR app.log # 统计文件中行数 wc -l app.log # 查找指定目录下文件名包含backup的文件 find /data -name *backup* # 查看进程占用端口 netstat -anp | grep 8080这些命令不用背得特别全但常用的几个一定要熟。笔试不会考冷门参数但基础命令和选项是可能考的比如 grep 的 -v 表示反选、-i 表示忽略大小写这类细节容易出选择题。5.3 笔试之后的面试衔接准备笔试结束之后如果估分感觉还行就要立刻开始准备面试。银行的招聘流程一般是笔试后1-2周内通知面试时间很紧凑别等笔试成绩出来再准备。银行技术面试的风格和互联网公司也有差异。互联网公司爱问项目的挑战性在哪里、你是怎么优化性能的银行面试官更爱问这个功能的业务流程是什么、异常情况怎么处理、数据一致性问题。结合信用卡中心的业务特点面试很可能围绕下面几个话题展开如何设计一个积分系统需要考虑哪些表结构支付流程中如何保证幂等性分布式场景下如何保证数据一致性如何做账务系统的对账这些话题如果笔试之后有时间可以提前准备一下系统设计层面的思考。哪怕只是把表结构和接口设计画在纸上面试时也能比完全没有准备好很多。我个人的体会是银行笔试更像一场资格赛它不会直接决定你能不能进但过不了就绝对进不了。它的出题逻辑不是难为你而是想确认你具备基础的计算机素养、逻辑能力和稳定性。只要认真准备了通过率并不低。我当时在准备这一场笔试时把互联网公司那些偏题怪题全部放下转攻基础题和编程题的正确率效果非常明显。最后再分享一个小技巧笔试前一周每天抽出15分钟专门练习手写SQL和手推排序过程这比刷十道偏题都有用。
返回列表