返回 Papers
学习计划 Roadmap

金融系统设计计划(Roadmap)

每个系统用3天完成,共6周(含缓冲):

619FINANCE_SYSTEM_DESIGN_PLAN.md

金融系统设计实战 6周计划

定位:从"学过架构知识"升级为"能在45分钟内完成系统设计 + 输出专业交付物" 前置:已完成251天架构学习(Day 31-65 金融域深度,Day 110-114 系统设计面试) 目标:5个经典金融系统 × 完整设计文档 + C4架构图 + ADR + 面试级口述能力 开始日期:2026-04-14 产出目录docs/finance-design/ 进度文件docs/daily/FINANCE_DESIGN_PROGRESS.md


为什么做这个计划?

现状目标
架构笔记覆盖了知识点,但停留在"读过"能在白板上从零设计,经得起追问
Day 110-114 有过面试模拟,但没有完整交付物每个系统产出:C4图 + 数据模型 + ADR + 关键代码
知道各系统怎么做,但缺少"为什么这样做"的决策记录每个关键决策都有ADR,能讲清楚trade-off
面试时能讲大概,但细节经不起深挖每个系统准备3层深度:概要/详细/追问

总体设计

5个系统 × 3轮迭代

每个系统用3天完成,共6周(含缓冲):

系统核心挑战与已有笔记关系
Week 1支付网关系统幂等/通道路由/对账深化 Day 45-55, 110
Week 2记账引擎复式记账/多币种/日终结算深化 Day 33, 40
Week 3实时风控引擎毫秒级决策/规则+ML混合/特征平台深化 Day 56-62, 113
Week 4信贷系统授信/放款/还款/逾期/资产证券化深化 Day 35, 58
Week 5清算结算系统轧差/资金划拨/头寸管理/跨境深化 Day 47-49
Week 6综合演练 + 作品集整理限时设计 + 交叉review汇总

每日时间分配(每天6小时)

Day 1(需求→高层设计):
  ├── 45分钟限时设计练习(模拟面试)
  ├── 2小时:补充需求分析 + 高层架构设计 + C4 Context/Container图
  ├── 1.5小时:核心数据模型设计 + 状态机
  ├── 1小时:写设计笔记(需求篇 + 架构篇)
  └── 0.5小时:整理面试口述版本

Day 2(详细设计→关键代码):
  ├── 2小时:核心组件详细设计 + C4 Component图
  ├── 2小时:关键代码实现(核心领域模型/算法)
  ├── 1小时:写2-3个ADR(关键架构决策)
  └── 1小时:写设计笔记(详细设计篇)

Day 3(深度问题→面试打磨):
  ├── 2小时:深度问题攻克(性能/容灾/扩展/安全)
  ├── 1.5小时:与已有系统集成设计(系统间如何协作)
  ├── 1小时:面试追问准备(10个高频追问 + 答案)
  ├── 1小时:写设计笔记(深度篇 + 面试篇)
  └── 0.5小时:回顾总结

每个系统的标准交付物

docs/finance-design/
├── 01-payment-gateway/
│   ├── design-note.md          # 完整设计笔记(需求→架构→详细→深度)
│   ├── adr/
│   │   ├── ADR-001-幂等方案选择.md
│   │   ├── ADR-002-通道路由策略.md
│   │   └── ADR-003-对账差错处理.md
│   ├── diagrams/
│   │   ├── c4-context.mmd      # C4 Context图(Mermaid)
│   │   ├── c4-container.mmd    # C4 Container图
│   │   ├── c4-component.mmd    # C4 Component图
│   │   ├── state-machine.mmd   # 状态机
│   │   └── sequence.mmd        # 核心序列图
│   ├── code/
│   │   └── core-model.ts       # 关键领域模型/算法代码
│   └── interview-qa.md         # 面试追问 Q&A(10题)
├── 02-accounting-engine/
│   └── ...(同上结构)
├── 03-risk-engine/
├── 04-credit-system/
├── 05-clearing-settlement/
└── summary/
    ├── system-integration.md   # 5个系统如何协作的全景图
    ├── cross-cutting-concerns.md # 横切关注点(安全/监控/合规)
    └── portfolio-readme.md     # 作品集说明

ADR 模板

# ADR-XXX: [决策标题]

## 状态
已接受 | 已废弃 | 已替代

## 上下文
我们面临什么问题?为什么需要做决策?

## 备选方案
| 方案 | 优点 | 缺点 | 适用场景 |
|------|------|------|---------|
| 方案A | ... | ... | ... |
| 方案B | ... | ... | ... |
| 方案C | ... | ... | ... |

## 决策
我们选择方案X,因为...

## 后果
- 正面:...
- 负面:...
- 风险:...

## 参考
- 行业案例:...
- 已有笔记:Day XX

设计笔记模板

# [系统名称] 系统设计

> **设计日期**: YYYY-MM-DD
> **设计时长**: 45分钟限时 + X小时深化
> **关联笔记**: Arch Day XX-YY
> **难度级别**: L3(高级架构师)

---

## 一、需求分析

### 1.1 面试场景还原
> "请设计一个XXX系统..."

### 1.2 需求澄清(5分钟)
| 问题 | 回答 | 设计影响 |
|------|------|---------|
| Q1 | A1 | 影响XX设计 |

### 1.3 需求总结
**功能需求**:
**非功能需求**:
**约束条件**:
**不在范围内**:

---

## 二、高层架构设计

### 2.1 C4 Context 图
(系统与外部角色/系统的关系)

### 2.2 C4 Container 图
(系统内部的容器划分:服务/数据库/消息队列)

### 2.3 核心流程
(Happy Path 序列图)

### 2.4 数据模型
(核心表设计 + ER关系)

### 2.5 状态机
(核心业务对象的状态流转)

---

## 三、详细组件设计

### 3.1 C4 Component 图
(核心容器内部的组件划分)

### 3.2 组件职责矩阵
| 组件 | 职责 | 输入 | 输出 | 依赖 |
|------|------|------|------|------|

### 3.3 关键算法/策略
(路由算法/计算逻辑/规则引擎等)

### 3.4 接口设计
(核心API定义)

---

## 四、深度问题

### 4.1 性能与扩展
### 4.2 高可用与容灾
### 4.3 数据一致性
### 4.4 安全与合规
### 4.5 监控与告警
### 4.6 演进路线

---

## 五、架构决策记录
| ADR | 决策 | 理由 |
|-----|------|------|
| ADR-001 | ... | ... |

---

## 六、面试口述版(2分钟 / 5分钟 / 15分钟)

### 2分钟版本(电梯演讲)
### 5分钟版本(面试概要)
### 15分钟版本(深度讲解)

---

## 七、自评与反思
- 设计中最难的决策是什么?
- 哪些地方还不够深入?
- 与Day XX笔记对比,有什么新认识?

Week 1: 支付网关系统

设计目标

设计一个日均百万笔、支持多通道的在线支付网关系统。

核心设计挑战

挑战为什么难设计要点
幂等性网络超时+重试 = 重复扣款风险幂等键设计、去重表、状态机防重
通道路由成本/成功率/限额多目标优化路由策略引擎、降级熔断、A/B测试
资金一致性分布式环境下不能多扣/少扣本地事务+异步对账、补偿机制
对账内外部数据不一致T+1对账、差错处理、自动/人工平账
通道适配每家PSP接口不同适配器模式、统一抽象、通道管理

Day 1 任务清单

  • 45分钟限时设计:从"请设计一个支付系统"开始,计时完成
  • 需求分析:澄清场景/规模/支付方式/合规要求
  • C4 Context图:支付网关与商户/用户/PSP/银行/风控的关系
  • C4 Container图:API Gateway / Payment Core / Route Engine / Ledger / Channel Adapter / Reconcile / Notification
  • 核心数据模型:payment_order / payment_transaction / channel_config / reconcile_record
  • 状态机:CREATED→PROCESSING→SUCCESS/FAILED/TIMEOUT→REFUNDING→REFUNDED
  • 写设计笔记:需求篇 + 架构篇

Day 2 任务清单

  • Payment Core 组件详细设计(C4 Component图)
  • 通道路由引擎详细设计:规则配置/权重计算/降级策略
  • 幂等方案实现:关键代码(幂等键生成/去重检查/状态机转换)
  • 对账引擎详细设计:文件解析/差异比对/差错处理流程
  • ADR-001:幂等方案选择(Token vs 业务单号 vs UUID)
  • ADR-002:通道路由策略(静态规则 vs 动态权重 vs ML预测)
  • ADR-003:对账差错处理(自动冲正 vs 人工审核 vs 混合)
  • 写设计笔记:详细设计篇

Day 3 任务清单

  • 性能优化:热点账户、数据库分片、缓存策略
  • 高可用设计:多机房部署、通道故障降级、限流熔断
  • 安全设计:PCI-DSS合规、敏感数据加密、防重放
  • 与记账引擎的集成设计
  • 面试追问准备(10题)
  • 写设计笔记:深度篇 + 面试篇
  • 整理面试口述版本(2分钟/5分钟/15分钟)

面试追问准备

1. 如果PSP返回超时,你怎么处理?(超时补偿/查询/人工介入)
2. 如何保证"不多扣"?(幂等+状态机+对账三重保障)
3. 通道路由的降级策略是什么?(熔断器模式+备用通道+告警)
4. 日终对账发现差异怎么办?(差错分类+自动平账+人工审核)
5. 如何支持部分退款?(退款链路设计+金额校验+原路返回)
6. 支付系统如何做灰度发布?(通道级灰度+流量染色+金丝雀)
7. 百万→十亿的扩展路径?(分库分表+读写分离+异步化+多机房)
8. 跨境支付和国内支付的架构差异?(多币种+汇率+合规+清算周期)
9. 如何防止支付欺诈?(风控引擎联动+设备指纹+行为分析)
10. 支付系统的监控指标有哪些?(成功率/延迟/通道健康/资金对账率)

Week 2: 记账引擎

设计目标

设计一个支撑金融级记账的复式记账引擎,支持多币种、多账户类型、日终结算。

核心设计挑战

挑战为什么难设计要点
复式记账有借必有贷,借贷必相等分录模型、科目体系、试算平衡
多币种汇率波动+精度+会计准则原币/本位币双记、汇兑损益
高并发热点账户(备付金/手续费)缓冲记账、异步入账、账户分片
日终批处理大量数据+时间窗口有限并行批处理、增量计算、检查点
审计追溯金融监管要求不可变账本、完整审计链、数据归档

Day 1 任务清单

  • 45分钟限时设计:从"设计一个金融记账引擎"开始
  • 需求分析:会计准则/账户类型/科目体系/报表需求
  • C4 Context图:记账引擎与支付/信贷/风控/报表/监管的关系
  • C4 Container图:Account Service / Ledger Core / Journal Service / Balance Service / Report Service / Batch Engine
  • 核心数据模型:account / journal_entry / posting / balance_snapshot / chart_of_accounts
  • 复式记账核心流程:记账请求→校验→分录生成→过账→余额更新
  • 写设计笔记

Day 2 任务清单

  • Ledger Core 组件详细设计(C4 Component图)
  • 科目体系设计:科目编码规则/层级结构/启用停用
  • 热点账户解决方案:缓冲记账实现代码
  • 余额计算引擎:可用余额/冻结余额/在途余额
  • ADR-001:记账模型选择(单表 vs 分录表+余额表 vs Event Sourcing)
  • ADR-002:热点账户方案(影子账户 vs 缓冲记账 vs 异步汇总)
  • ADR-003:日终批处理架构(串行 vs MapReduce vs 流批一体)
  • 写设计笔记

Day 3 任务清单

  • 日终结算流程详细设计:结息/计提/损益结转
  • 多币种记账设计:汇率管理/汇兑损益处理
  • 审计与合规:不可变性保证/审计日志/数据保留策略
  • 与支付网关的集成:支付→记账的调用链路
  • 面试追问准备(10题)
  • 写设计笔记 + 面试口述版本

面试追问准备

1. 复式记账和单式记账的区别?为什么金融系统必须用复式?
2. 如何保证"有借必有贷,借贷必相等"?
3. 热点账户(如备付金账户)高并发怎么处理?
4. 日终批处理如果跑失败了怎么办?(检查点+重跑+补偿)
5. 多币种场景下汇兑损益如何处理?
6. 记账和业务系统的一致性如何保证?(同步记账 vs 异步记账)
7. 账本数据量很大后如何归档?(冷热分离+历史库)
8. 如何做到不可篡改的审计追溯?(Append-only + Hash链)
9. 试算平衡检查什么时候做?发现不平衡怎么处理?
10. 记账引擎和总账系统的关系?

Week 3: 实时风控引擎

设计目标

设计一个毫秒级响应的实时风控决策引擎,支持规则+ML混合决策。

核心设计挑战

挑战为什么难设计要点
毫秒级延迟风控不能成为支付瓶颈内存计算、预加载、异步降级
规则+ML混合规则灵活但有限,ML强但不可解释决策编排、模型serving、可解释性
特征计算实时特征(近N分钟统计)复杂流式计算、特征存储、时间窗口
策略热更新新欺诈模式需要快速响应规则引擎热加载、灰度发布、A/B测试
准确率vs召回率漏放 vs 误杀的trade-off多级决策(通过/人审/拒绝)、动态阈值

Day 1 任务清单

  • 45分钟限时设计:从"设计一个实时风控引擎"开始
  • 需求分析:风控场景/延迟要求/决策类型/模型类型
  • C4 Context图:风控引擎与支付/信贷/用户中心/外部数据源的关系
  • C4 Container图:Decision Service / Rule Engine / ML Serving / Feature Store / Event Stream / Case Management
  • 核心数据模型:risk_event / risk_rule / risk_decision / feature_config / model_config
  • 风控决策核心流程:事件接入→特征提取→规则匹配→模型预测→决策编排→结果输出
  • 写设计笔记

Day 2 任务清单

  • Decision Service 组件详细设计(C4 Component图)
  • 规则引擎详细设计:DSL语法/规则编译/执行优化
  • 特征平台设计:实时特征(Flink)+ 离线特征(Spark)+ 特征存储(Redis)
  • ML模型Serving:模型版本管理/A/B测试/影子模式
  • ADR-001:规则引擎选型(Drools vs 自研 vs Rete算法)
  • ADR-002:特征计算架构(Lambda vs Kappa vs 流批一体)
  • ADR-003:决策编排模式(串行 vs 并行 vs DAG)
  • 写设计笔记

Day 3 任务清单

  • 性能优化:规则预编译/特征缓存/模型推理优化
  • 名单系统设计:黑名单/白名单/灰名单管理
  • 案件管理系统:人工审核流程/SLA/效率指标
  • 与支付网关的集成:风控接入点/超时降级/异步补判
  • 面试追问准备(10题)
  • 写设计笔记 + 面试口述版本

面试追问准备

1. 风控引擎如何做到毫秒级响应?(内存计算+预加载+异步降级)
2. 规则和ML模型冲突时怎么办?(优先级编排+决策矩阵)
3. 新欺诈模式出现,规则更新流程是什么?(热更新+灰度+监控)
4. 如何评估风控系统的效果?(准确率/召回率/F1/误杀率/资损率)
5. 实时特征计算如何保证准确性?(Exactly-once + 时间窗口对齐)
6. 风控超时了怎么办?(降级策略:通过/拒绝/人审 取决于场景)
7. 如何防止模型退化?(持续监控+定期重训+数据漂移检测)
8. 反洗钱(AML)和交易风控有什么架构差异?(实时vs批量/规则差异)
9. 如何处理风控的可解释性要求?(规则命中链+SHAP值+决策日志)
10. 风控系统的误杀申诉流程怎么设计?

Week 4: 信贷系统

设计目标

设计一个覆盖贷前/贷中/贷后全流程的消费信贷系统。

核心设计挑战

挑战为什么难设计要点
授信决策多维度评估+动态额度评分卡/审批流/额度模型
还款计算等额本息/本金/先息后本...还款计划生成/提前还款/罚息
逾期管理催收策略+合规+效率逾期分级/催收编排/委外管理
资金流转放款→还款→结算的资金闭环资金路由/清算/与记账引擎集成
监管合规利率上限/信息披露/消保年化利率计算/合同管理/监管报送

Day 1 任务清单

  • 45分钟限时设计:从"设计一个消费信贷系统"开始
  • 需求分析:信贷产品类型/额度范围/利率/还款方式
  • C4 Context图:信贷系统与用户/征信/支付/风控/催收/监管的关系
  • C4 Container图:Product Engine / Credit Engine / Loan Core / Repayment Engine / Collection Service / Contract Service
  • 核心数据模型:credit_application / credit_line / loan_contract / repayment_schedule / collection_task
  • 信贷全流程:申请→审批→授信→用信→放款→还款→结清 / 逾期→催收
  • 写设计笔记

Day 2 任务清单

  • Loan Core 组件详细设计(C4 Component图)
  • 还款计划生成算法:等额本息/等额本金代码实现
  • 授信审批工作流:审批节点/自动+人工/审批策略
  • 逾期管理设计:逾期分级(M1-M6+)/催收策略编排
  • ADR-001:还款方式引擎设计(策略模式 vs 规则引擎 vs 配置化)
  • ADR-002:额度模型(静态额度 vs 动态额度 vs 共享额度池)
  • ADR-003:逾期利息计算(单利 vs 复利/计算基准/监管合规)
  • 写设计笔记

Day 3 任务清单

  • 提前还款/部分还款的重新计算逻辑
  • 资产质量管理:五级分类/拨备计提
  • 资产证券化(ABS)接口设计概要
  • 与支付网关集成(放款/还款)、与记账引擎集成(入账)、与风控集成(授信/交易)
  • 面试追问准备(10题)
  • 写设计笔记 + 面试口述版本

面试追问准备

1. 等额本息和等额本金的还款计算公式?为什么用户感知不同?
2. 授信额度如何做到动态调整?(行为评分+用信率+外部数据)
3. 用户提前还款对系统有什么影响?(重算计划/违约金/资金成本)
4. 逾期催收的分级策略怎么设计?(IVR→短信→人工→委外→法催)
5. 如何保证利率计算符合监管要求?(IRR年化/综合成本展示)
6. 联合贷款(助贷)的架构和普通自营有什么区别?
7. 日终跑批都做什么?(计息/逾期标记/五级分类/报表/对账)
8. 信贷系统和核心银行系统的关系?
9. 如何防止重复放款?(幂等+状态机+资金校验)
10. 资产证券化对信贷系统架构有什么影响?

Week 5: 清算结算系统

设计目标

设计一个支持多机构、多币种的清算结算系统。

核心设计挑战

挑战为什么难设计要点
轧差计算多对多的债权债务关系双边轧差/多边轧差/算法效率
资金划拨大额资金安全转移头寸管理/流动性/央行接口
清算窗口时间约束严格批次管理/并行处理/异常处理
跨境清算时区+汇率+合规SWIFT/CIPS接口/外汇头寸
差错处理清算失败的影响面大冲正/重算/人工介入/应急预案

Day 1 任务清单

  • 45分钟限时设计:从"设计一个清算结算系统"开始
  • 需求分析:清算类型/参与方/清算频次/币种
  • C4 Context图:清算系统与支付/记账/央行/SWIFT/参与机构的关系
  • C4 Container图:Clearing Engine / Netting Service / Settlement Service / Position Manager / FX Service / Reconcile Service
  • 核心数据模型:clearing_batch / clearing_instruction / netting_result / settlement_order / position
  • 清算核心流程:交易采集→数据校验→轧差计算→资金划拨→结算确认→对账
  • 写设计笔记

Day 2 任务清单

  • Clearing Engine 组件详细设计(C4 Component图)
  • 轧差算法实现:双边轧差/多边轧差核心代码
  • 头寸管理设计:日间头寸监控/头寸预警/流动性管理
  • 结算指令生成与执行:支付指令/央行接口/状态跟踪
  • ADR-001:轧差模式选择(逐笔 vs 双边净额 vs 多边净额)
  • ADR-002:清算时间窗口设计(实时 vs 定时批次 vs 准实时)
  • ADR-003:清算失败处理(重试 vs 回滚 vs 人工介入)
  • 写设计笔记

Day 3 任务清单

  • 跨境清算设计:SWIFT报文/CIPS接口/外汇头寸
  • 清算风险管理:保证金/违约基金/流动性风险
  • 应急预案:清算系统宕机/央行通道故障/数据不一致
  • 与支付网关、记账引擎的集成
  • 面试追问准备(10题)
  • 写设计笔记 + 面试口述版本

面试追问准备

1. 什么是轧差?双边和多边轧差的区别和适用场景?
2. 清算和结算的区别是什么?
3. 清算窗口内处理不完怎么办?(延迟清算/拆批/应急通道)
4. 头寸不足时如何处理?(流动性借入/延迟结算/部分结算)
5. 如何保证清算数据的完整性?(对账/校验/签名)
6. DVP(券款对付)是什么?如何实现?
7. 实时清算和批量清算的架构差异?
8. 跨境清算中的汇率风险如何管理?
9. 清算系统的灾备设计?(两地三中心/数据同步/切换预案)
10. 区块链对清算结算的影响?(DvP原子化/T+0/智能合约清算)

Week 6: 综合演练 + 作品集整理

Day 1-2: 限时综合设计

  • 模拟面试1(45分钟):随机抽取一个系统,从零设计
  • 模拟面试2(45分钟):设计"5个系统如何协作"的全景架构
  • 系统集成设计:
    • 支付→风控→记账 的调用链路
    • 信贷→支付→记账 的资金流
    • 交易→清算→结算→记账 的T+1流程
  • 画系统集成全景图(C4 Context级别)

Day 3: 横切关注点

  • 安全设计:数据加密/访问控制/审计/合规
  • 可观测性:监控指标体系/告警规则/链路追踪
  • 数据治理:数据质量/数据血缘/隐私保护
  • DevOps:CI/CD/蓝绿发布/金丝雀/回滚策略

Day 4-5: 作品集整理

  • 整理所有设计文档,确保格式统一
  • 补充系统间关联说明
  • 写作品集README(portfolio-readme.md)
  • 准备面试演示版本(每个系统的2分钟/5分钟/15分钟版本)
  • 自测:对每个系统的10个追问,能否流畅回答

评估标准

每个系统的评估维度

维度及格良好优秀
需求分析列出功能需求区分功能/非功能/约束能识别隐含需求和边界case
架构设计画出合理的系统框图有C4多层次图+清晰职责划分能解释每个设计决策的trade-off
数据模型核心表设计合理考虑了索引/分片/归档能支撑业务演进和规模增长
深度问题知道存在这些问题有具体解决方案能对比多种方案并说明选择理由
面试表达能讲出来结构清晰、有重点2分钟讲清核心,追问不慌

6周整体评估

  • 5个系统的设计文档完整
  • 15个ADR决策记录
  • 15张C4架构图(每系统3张)
  • 50个面试追问有流畅答案
  • 1张系统集成全景图
  • 每个系统能在面试中2分钟概括、5分钟展开、15分钟深讲

与已有学习资料的关系

本计划已有笔记关系
支付网关设计Day 45-55, Day 110从"知识笔记"升级为"设计文档+ADR+代码"
记账引擎设计Day 33, Day 40补充完整设计,增加多币种/日终/审计
风控引擎设计Day 56-62, Day 113补充特征平台/模型serving/案件管理
信贷系统设计Day 35, Day 58全新设计,Day 35只是概述
清算结算设计Day 47-49补充轧差算法/头寸管理/跨境

原则:不重复已有笔记的内容,而是在其基础上做"设计实战"——从知识到方案、从理解到表达。


执行建议

每周节奏

周一 (Day 1): 限时设计 + 高层架构   → 建立全貌
周二 (Day 2): 详细设计 + 关键代码   → 深入核心
周三 (Day 3): 深度问题 + 面试打磨   → 查漏补缺
周四-周五:    继续 Solidity/Rust 计划 → 双线并行
周末:         复习本周系统 + 预习下周  → 巩固衔接

与 Solidity/Rust/Move 90天计划的协调

  • 周一到周三:金融系统设计实战
  • 周四到周五:Solidity/Rust/Move 学习
  • 两个计划互相增强:金融系统设计 → 理解DeFi协议为什么这样设计