Capital One 是美国 Top-3 信用卡发卡行,技术招聘量在金融行业里仅次于 JPMorgan 和 BlackRock,SWE 与 Technology Development Program (TDP) 每年放出 800+ 个 New Grad / Intern 岗位。它的 OA 流程是业内最规整的——CodeSignal 编程 + HireVue 视频行为,两关都过才算 OA 通过。
本文按一亩三分地、Reddit r/CapitalOne 与 Glassdoor 上 2025-2026 的最新反馈,把 Capital One OA 的题型、评分、Recruit Loop 衔接讲清楚(面向 SWE / TDP track;如果你考的是 Data Science,可以参看我们的 DS 版 OA 文章)。
Capital One SWE / TDP OA 概览
| 维度 | 详情 |
|---|---|
| 平台 | CodeSignal General Coding Framework |
| 时长 | 75 分钟(部分批次为 70 分钟) |
| 题量 | 4 道(Level 1 → Level 4 递进) |
| 难度 | 字符串解析 + 模拟 + 集合运算 + DP 复合 |
| 通过线 | Level 1-3 全 AC + Level 4 ≥ 50% hidden test |
| 后续 | HireVue 行为视频(5-7 题,每题 2-3 分钟) |
| 反馈周期 | 7-21 天 |
最大特点:Capital One 不出 LC 风格的图论 / DP 难题,而是出银行业务相关的字符串 / 模拟 / 状态题。题面长(每道 1-2 屏文字),读题 + 建模时间 ≥ 一半。
真题:Bank Transaction Logs(4 级递进)
这是 2025 秋季到 2026 春季出现频率最高的题面之一。
Level 1:基础日志解析
题面:给定字符串数组 logs,每条形如 "2026-04-15 10:23:01 USR_001 DEPOSIT 250.00"。实现 top_k_balance(logs, k),返回当前余额最高的 k 个用户(同余额按 user_id 字典序)。
操作类型只有 DEPOSIT 和 WITHDRAW。
from collections import defaultdict
import heapq
def top_k_balance(logs, k):
bal = defaultdict(float)
for line in logs:
parts = line.split()
# parts: [date, time, user, op, amount]
user = parts[2]
op = parts[3]
amt = float(parts[4])
if op == "DEPOSIT":
bal[user] += amt
elif op == "WITHDRAW":
bal[user] -= amt
ranked = sorted(bal.items(), key=lambda x: (-x[1], x[0]))
return [u for u, _ in ranked[:k]]
坑:浮点累加有误差,hidden test 会卡 0.01 精度。Level 1 一开始就用 int(amt * 100) 改成"分",后续 Level 全程整数运算,会省事很多。
Level 2:账户冻结状态
新增操作 FREEZE 与 UNFREEZE:被 freeze 的账户任何 WITHDRAW 都失败(仍记录但不扣钱),DEPOSIT 仍正常。
def parse_logs_v2(logs):
bal = defaultdict(int) # 单位:分
frozen = set()
fail_count = defaultdict(int)
for line in logs:
parts = line.split()
user, op = parts[2], parts[3]
if op == "FREEZE":
frozen.add(user)
elif op == "UNFREEZE":
frozen.discard(user)
elif op == "DEPOSIT":
bal[user] += int(float(parts[4]) * 100)
elif op == "WITHDRAW":
amt = int(float(parts[4]) * 100)
if user in frozen or bal[user] < amt:
fail_count[user] += 1
else:
bal[user] -= amt
return bal, fail_count
评分点:用 int(float(x) * 100) 一行避免后续浮点累计错。Level 2 还要返回 fail_count——hidden test 通常包含 "用户 X 应有 5 次失败 WITHDRAW" 的断言。
Level 3:滑动窗口统计
新增需求:实现 transactions_in_last_k_minutes(logs, query_user, k)——给定查询用户与 k 分钟窗口,返回该用户最后一次操作前 k 分钟内的成功 transaction 总数。
思路:先线性扫一遍构建每个 user 的 (timestamp, op, success?) 列表,然后对查询用户做双指针 / 二分。
from datetime import datetime
from bisect import bisect_left
def build_index(logs):
index = defaultdict(list) # user -> list of (epoch_seconds, success_bool)
bal = defaultdict(int)
frozen = set()
for line in logs:
parts = line.split()
ts = datetime.strptime(parts[0] + " " + parts[1], "%Y-%m-%d %H:%M:%S").timestamp()
user, op = parts[2], parts[3]
if op == "FREEZE":
frozen.add(user)
continue
if op == "UNFREEZE":
frozen.discard(user)
continue
amt = int(float(parts[4]) * 100)
success = True
if op == "WITHDRAW":
if user in frozen or bal[user] < amt:
success = False
else:
bal[user] -= amt
else: # DEPOSIT
bal[user] += amt
index[user].append((ts, success))
return index
def transactions_in_last_k_minutes(index, user, k):
if user not in index or not index[user]:
return 0
last_ts = index[user][-1][0]
threshold = last_ts - k * 60
times = [t for t, _ in index[user]]
pos = bisect_left(times, threshold)
return sum(1 for t, s in index[user][pos:] if s)
坑:题目用 datetime 字符串,直接字符串比较就够(YYYY-MM-DD HH:MM:SS 字典序 = 时间序)。但滑窗 k 分钟最好转成 epoch,否则跨小时 / 跨日要小心。
Level 4:用户分群与最优归并
最终 Level 题面:把所有用户按"行为相似度"分群(操作时间窗 + 金额水平接近),返回 k 个最大的用户群。需要 K-Means / hash bucketing 或简单聚类。
70 分钟内拿满分非常困难。典型应对:用简化分桶——按 (avg amount bucket, total transactions bucket) 二维 hash 分桶,然后输出 size 最大的 k 个桶。能拿 50-70% hidden test,足够过线。
def cluster_users(index, k):
profile = {}
for user, ops in index.items():
succ = [op for op in ops if op[1]]
if not succ:
profile[user] = (0, 0)
continue
n = len(succ)
# 粗略分桶:操作数桶 0/1/2/3+, 时间跨度桶
if n <= 1:
n_bucket = 0
elif n <= 5:
n_bucket = 1
elif n <= 20:
n_bucket = 2
else:
n_bucket = 3
span = succ[-1][0] - succ[0][0]
s_bucket = 0 if span < 3600 else 1 if span < 86400 else 2
profile[user] = (n_bucket, s_bucket)
buckets = defaultdict(list)
for u, p in profile.items():
buckets[p].append(u)
top = sorted(buckets.values(), key=lambda x: -len(x))[:k]
return [sorted(g) for g in top]
评分点:Capital One 的 Level 4 不要求最优解——能产出"非空的、deterministic 的、解释得清"的分桶就有 50%+ 分。不要花 20 分钟跑 KMeans 然后 timeout。
时间分配建议
| Level | 推荐用时 | 关键策略 |
|---|---|---|
| Level 1 | 8 min | 干净的字符串解析 + 整数化金额 |
| Level 2 | 12 min | 在 Level 1 基础上加 frozen 集合 |
| Level 3 | 18 min | 复用 index,二分定位窗口 |
| Level 4 | 25 min | 哈希分桶 > KMeans,求过线不求满分 |
| Buffer | 12 min | debug + 检查浮点 |
HireVue 视频行为面(OA 通过后必经)
OA 编程过了不代表 OA 整体通过——还要做 HireVue 视频行为面。一般在 OA 通过后 3-7 天内邮件邀请,5-7 题,每题 2-3 分钟回答时间。
高频问题
| 问题类型 | 示例 | STAR 准备点 |
|---|---|---|
| 学习经历 | "Tell me about a time you learned something new under pressure." | 强调 timeline + 学到的具体技能 |
| 团队冲突 | "Describe a situation when your team disagreed." | 你的 mediation 角色,不要责备 |
| 客户视角 | "How do you balance speed vs. quality?" | Capital One 的 "deliver excellence" value |
| 失败反思 | "Tell me about a project that didn't go as planned." | 学到的教训具体化 |
| 为什么 Capital One | "Why Capital One specifically?" | 提到具体产品 / tech blog |
录制要点:
- 每题 2-3 分钟,严格控制时间——超时会被自动剪断
- 看摄像头不看屏幕,笑容 + 节奏稳定比内容华丽更重要
- 不要重录:HireVue 默认只给 1-2 次重录机会,珍惜首次
备考策略
| 优先级 | 重点 | 推荐题号 / 资源 |
|---|---|---|
| ⭐⭐⭐ | 字符串解析 / split / parse | LC 65、LC 224、LC 736 |
| ⭐⭐⭐ | 模拟 + 状态机 | LC 348、LC 1396、LC 1352 |
| ⭐⭐ | 滑动窗口 + 二分 | LC 209、LC 1838、LC 1146 |
| ⭐⭐ | OOP 设计 | LC 146、LC 460、LC 355 |
| ⭐ | HireVue 行为题 | Capital One 官方 careers FAQ + Glassdoor BQ 题库 |
FAQ
Q1:Capital One OA 难度比 FAANG 高还是低?
算法难度低——Level 1-3 大约是 LC Easy 至 Medium 偏 Easy。但整体不容易过,因为:(1) Level 4 直接 hard;(2) 题面长,读题 + 建模成本高;(3) 后续 HireVue 视频面也算 OA 通过条件,很多 candidate 编程过了倒在 HireVue。
Q2:Capital One TDP 和 SWE 是同一个 OA 吗?
编程 OA 完全一样,但 HireVue 题库略有不同:
- TDP 多问"为什么是 rotational program / 如何看待跨团队学习"
- SWE 多问"代码 ownership / 系统设计直觉"
录用率:TDP 录用面更广(也接受非 CS 专业),SWE 偏向 CS / 软工硬专业,bar 略高。
Q3:Capital One OA 通过后多久 onsite?
OA + HireVue 全过后,通常 2-4 周进入 Power Day(Capital One 的 onsite 名):1 个 Behavioral + 2 个 Coding + 1 个 Case(业务情境分析)。整个 OA → Offer 流程平均 6-10 周。
Q4:HireVue 可以提前看题吗?
不可以。每题点开后有 30 秒思考时间,然后强制开始录制。建议:把上面 6 个高频题的 STAR 故事提前写好背熟,HireVue 时候你能在 30 秒内决定用哪个。
Q5:Capital One 看 GPA 吗?
TDP 卡 GPA 3.0+(有时 3.2+),SWE 不硬卡但简历里 GPA < 3.0 默认进 review queue。如果 GPA 低,强烈建议用 Recruiter Connect / 校招活动认识 recruiter,绕过 ATS 自动过滤。
Q6:Capital One Power Day 通过率多少?
约 30-40%——比 FAANG onsite(25-30%)略高,因为 Capital One 重视 culture fit 多于"能否秒杀难题"。建议:在 Onsite Coding 阶段,讲清思路 + 写出 working solution > 一行流写最优解。
联系方式
正在准备 Capital One TDP / SWE / DS 或类似金融科技岗(JPMorgan, BlackRock, Discover)的 candidate,OA 编程关只是第一道筛子——后面的 HireVue + Power Day 行为面才是真正淘汰主力。我们整理了 Capital One Top 30 HireVue 题 + STAR 模板 + Power Day 真题集,欢迎联系交流。
立即添加微信 Coding0201,获取 Capital One OA 与 HireVue 真题。
- Email:[email protected]
- Telegram:@OAVOProxy