SWE / MLE / Technology Intern · Power Day Case Study

Capital One 虚拟信用卡 Case:位编码、Visa/Master 规则与 Debug

Power Day Case 从产品利弊进入交易有效性;按 1-based 卡号与交易 ID 位规则解析、建布尔表、逐项验证并调试条件代码。

题目重点:Power Day Case 从产品利弊进入交易有效性;按 1-based 卡号与交易 ID 位规则解析、建布尔表、逐项验证并调试条件代码。

题意与假设

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

  • card_number 为恰好 16 位数字字符串,transaction_id 为恰好 8 位数字字符串,amount 为非负整数;异常输入返回 invalid/error 的区别题目未明确。
  • 按:交易 ID 第 7 位 1=online、0=offline,第 6 位 1=charge、0=authorization;卡号第 15 位 1=merchant-bound、第 14 位 1=Master(0=Visa)、第 13 位 1=multi-use。其他位不在公开规则内。
  • Visa 有效当 (bound∧multi)∨(online∧amount<100∧charge);Master 有效当 (amount<100∧(online∨offline)∧¬bound)∨(bound∧amount>100)。金额等于 100 两个 Master 分支都不满足。
  • online/offline、charge/authorization 是从 ID 解出的属性;如果题面另给声明字段,需核两者冲突时的优先级。

解题路线

  1. 产品部分分用户与发卡方:用户可谈安全控制、单次/商户绑定与便利,也要谈失败体验;发卡方可谈风险控制、运营与授权成功率,但不编造具体收益。每点说可测指标与代价。
  2. 先写位位置表并把 1-based 转为索引 pos−1;对长度、数字字符和 0/1 标志位校验。命名解析出的 online、charge、bound、master、multi 布尔量,不在条件式里重复写神秘数字下标。
  3. 把 Visa/Master 规则各写成括号完整的两个子式,避免 && / || 优先级误解;金额 99/100/101、bound/unbound、online/offline、charge/authorization 做真值表。
  4. 给定卡号 1234567891011111、交易 ID 50781100、金额 150:第 14 位 1=Master、第 15 位 1=bound;Master 第二分支 bound∧amount>100 为真,因此有效。
  5. 调试现成代码时先固定 oracle,再逐条查位偏移、错误分支引用、严格 < 与 >、多条件括号及输入检查;不要一边猜业务规则一边改代码。

手动走一遍

按该版规则,Master/bound/150 有效;若金额恰为 100,则即使 bound,第二分支的 >100 为假,第一分支的 <100 也为假。Visa/unbound/online/charge/99 有效;把 charge 改成 authorization 则第二分支失效。 的早期示例和位说明有抄写冲突,不用它覆盖 的明确版本。

规模与取舍

固定长度字段解析与布尔判断 O(1) 时间/空间;若对 T 笔交易批量校验为 O(T) 时间。产品指标验证需真实实验和风险样本,题目没有样本量或业务基线。

易错点与追问

容易失分的边界

  • 把第 15 位当 Python 下标 15 而非 14。
  • 沿用 的混写位置造成 Master/Visa 误判。
  • 漏括号令 Visa OR 条件或 Master 金额条件跨分支生效。
  • 把 amount=100 当小于或大于 100。
  • 把 Case 练习规则说成真实银行卡网络政策。

继续深挖

  • 若支持按卡前缀识别网络,如何做可维护规则表?
  • 给定声明 online 字段与 ID 编码冲突怎么办?
  • 如何从条件表生成系统化测试?
  • 单次卡已使用后怎样保证并发只授权一次?
✓已复制微信号!