← 返回部落格列表 Capital One OA 完整攻略|SWE / TDP 線上測評 4 題真題與 HireVue 行為面拆解
Capital One

Capital One OA 完整攻略|SWE / TDP 線上測評 4 題真題與 HireVue 行為面拆解

2026-05-16

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 字典序)。

操作類型只有 DEPOSITWITHDRAW

from collections import defaultdict

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:帳戶凍結狀態

新增操作 FREEZEUNFREEZE:被 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 天內 email 邀請,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

錄製要點

備考策略

優先級 重點 推薦題號 / 資源
⭐⭐⭐ 字串解析 / 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 錄取面更廣(也接受非 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 真題