Mobile Engineer · Power Day System Design

Capital One Mobile 实时汇率 Dashboard:新鲜度、缓存与分页

Mobile Power Day SD 题目点出实时汇率 dashboard 与 cache、multithread、view、pagination、database;以可见报价和更新路径展开。

题目重点:Mobile Power Day SD 题目点出实时汇率 dashboard 与 cache、multithread、view、pagination、database;以可见报价和更新路径展开。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练版是展示汇率的 dashboard,不承诺用户可按显示价交易;若涉及交易报价,需单独定义锁价与有效期。
  • 每条汇率有 base/quote、source、asOf 时间与 stale 状态,展示前需确认币种小数精度和时区。

解题路线

  1. 先问显示多少货币对、更新频率、用户规模与离线体验,确定‘实时’可接受的最大陈旧度与刷新延迟。
  2. 报价摄取端校验来源、时间戳、异常跳变与重复更新,保存最近可信快照和历史序列;按币种对聚合读模型。
  3. 移动端首次读缓存快照,再用 WebSocket/SSE/定时拉取增量;断线后以版本号补齐,旧时间戳不得覆盖新报价。
  4. 缓存键按币种对/报价版本,配置 TTL 和 stale 标记;服务端不得把陈旧值无提示展示为当前价。
  5. UI 分页/虚拟列表只渲染可见币种对,搜索/排序在明确定义的同一快照上做;后台更新在异步 worker 合并,主线程负责平滑更新视图。
  6. 估算货币对数×更新频率×历史保留期,再看推送 fanout、客户端电量、数据库写入和缓存命中;监控源延迟、stale 比例、断线补偿和帧率。

手动走一遍

训练例:EUR/USD 在 10:00:01 得到 version 8,10:00:02 网络重发 version 7;客户端保留 8。用户离线 30 秒后看到 asOf 及陈旧标记,重连按 8 之后增量同步,不将旧值误认为实时。

规模与取舍

摄取写入与更新事件数成正比;面向 U 个同时在线客户端的直接 fanout 最坏 O(U×更新数),可按订阅币种对分组。题目无容量与 SLA,不能给固定服务器数。

易错点与追问

容易失分的边界

  • 把‘实时’写成无上限轮询而不定义新鲜度。
  • 异步旧响应覆盖更新的报价。
  • 缓存命中却不显示 asOf/陈旧状态。
  • 让主线程完成大量合并/排序造成卡顿。
  • 无题目依据地扩展成交易撮合系统。

继续深挖

  • 报价来源冲突时怎么选?
  • 离线客户端恢复后如何补数据?
  • 列表筛选和分页遇到持续更新时如何避免跳项?
  • 若要交易锁价需要新增什么状态?
✓已复制微信号!