技术博客

面试券商科技岗:业务与系统设计考察地图

第 100 / 141 篇 · 2025-11-21 · secfin · 面试职业发展核心系统

这篇有点不同:不是讲系统,而是讲怎么准备进这个行当。面过几家券商和厂商(恒生、金证这类核心系统供应商)的核心研发岗之后,把考察面拆开总结成一张地图。社招看系统设计深度,校招看基础和悟性,但画像是一样的:互联网后端的技术底子 + 领域知识 + 合规意识。

业务常识:考的是"系统为什么长这样"

这类题听起来像背书:什么是 T+1?什么是 DVP、货银对付?集合竞价怎么定价?净额清算为什么能压交易量?

但面试官要的不是定义,是理解。问"客户周五卖股票,钱什么时候能取",想听的是你讲清资金在可用、可取、在途几个余额状态之间怎么流转(《可用/冻结/在途》那篇的模型);问"为什么 A 股清算在日终批量跑",想听的是 T+1 与交收制度怎么决定了系统架构(《T+0/T+1 与货银对付》那篇的论证)。答成名词解释就平了,答出因果链才出彩。这个系列的前八篇就是这个题库的答案集——倒不是凑巧,是这些题本来就从系统里长出来。

系统设计:三道高频题

社招的系统设计题高度集中,三道反复出现:

  1. 对账系统怎么设计:答出明细对账和汇总对账分层、差异先挂账再追平的闭环(《对账体系》篇的骨架),就是合格线;能主动讲"挂账超 N 天升级人工、追平要双向核对",是加分。
  2. 怎么防重复扣款 / 重复回报:幂等键加消费记录表,消息可能重投所以消费端必须去重(《消息中间件在交易链路的使用》《成交回报与确认》两篇的核心点)。
  3. 日终批量怎么提速:按账户哈希分片并行,全局串行点(备付金汇总行)做批量攒批优化(《账务性能》篇)。

真正的分水岭是最后一问:"那如果就是不平,怎么办?"生产思维在这里见真章:只答 happy path 的候选人大批出局,答得出"先止血——冻结后续任务保住现场,再定位——逐层 diff 找断点,后修复——红冲蓝补不直接改流水,最后补测试基线"这条链的(《错账处理》篇的完整逻辑),才是干过生产的人。

语言与数据库:按岗位方向深挖

  • C++ 岗(柜台、撮合方向):内存模型、锁的代价、无锁队列在撮合里的应用(《内存撮合 vs 数据库撮合》的模型),手写简版撮合引擎是常见现场题——价格优先、时间优先,几十行代码的事(《撮合算法》篇的完整实现就是那个量级);
  • Java 岗(管理系统、中台方向):JVM GC 停顿对交易时段的影响——为什么核心进程配大堆加低停顿收集器,为什么 Full GC 是生产事故;
  • 数据库(所有方向都考):行锁升级表锁的场景、索引失效的写法、分区表的设计动机(《核心系统的数据库设计》篇全覆盖)。

合规与稳定性:最容易准备也最容易丢分

有一类题几乎必考且最被轻视:"上线后发现清算结果差一分钱,你怎么办?"回答"找到原因直接 UPDATE 改回来"的直接出局——直接改流水违反审计底线(《审计日志》《错账处理》两篇都讲了这个为什么)。正确答案是前面那套止血、定位、红冲、补流程的顺序。平时多留意"变更窗口""回滚预案""双人复核"这些词怎么用,面试里自然带出来,就是内行暗号。

稳定性意识的考察还藏在细节里:聊到任何系统设计,主动提一句"这里失败了会怎样""对账怎么对平",比多讲一个技术亮点有用得多。券商系统容错错的代价比互联网业务高一个数量级,这是刻在考察标准里的。

准备路径

四步走:通读《证券金融业务全景》建立地图感;按目标岗位方向深入 2~3 个子系统(做柜台的深挖交易与账务,做清算的深挖批量与对账);每读一个设计问自己"为什么",问到自己答不出为止,那就是面试里会被追问的边界;最后把自己项目里的排障故事整理成三段能讲清楚的——一段定位过程的、一次变更回滚的、一次对账追平的。面试里一段真实的生产叙述,说服力胜过十段八股模板。

券商科技岗考察地图:四块面,三个分水岭 业务常识 系统设计 语言与数据库 合规与稳定性 T+1 / DVP / 货银对付 集合竞价怎么定价 周五卖股票钱何时可取 考察“系统为什么长这样” 对账系统怎么分层 重复回报怎么防(幂等键) 日终批量怎么提速(分片) 加分项:主动答“不平怎么办” C++:锁 / 无锁队列 / 内存模型 Java:GC 停顿避开交易时段 数据库:行锁升级 / 索引失效 手写简版撮合引擎 清算差一分钱怎么办 止血→定位→红冲蓝补→补基线 答“直接 UPDATE”直接出局 变更窗口 / 回滚预案是内行暗号 三个分水岭:答出因果链而非名词解释;答出“不平怎么办”;主动提失败与对账 一段真实的生产排障叙述,胜过十段八股模板

这张地图反过来也是学习地图:四个象限里哪块是自己的盲区,补齐它的过程就是准备面试的过程。对已经在行内的人,它也是一张自检清单——哪天这四块都讲不动了,就该回去翻代码了。