题目重点:六字段 CSV 从非空校验扩到金额/方法风险、用户行为基线和最多两个错误码,严格说明 50% 判定分母。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版标准 CSV 解析后恰六字段;哪列是 transaction ID/customer/amount/method/country/time 只是示例映射,正式列次以题面为准。
- 金额范围和 blocked list 都是外部配置,非空与数值格式错误先于风险规则报告;金额区间端点含不含边界按题面。
- 行为匹配率训练版定义为‘可比较且有历史基线的特征中匹配项数/可比较特征数’;缺失历史不等同不匹配。题目只说至少 50%,未给分母与空集判定。
解题路线
- 先用 CSV parser 和 schema validator 将 parse error、字段缺失、值格式错误拆开;后续风险规则只在所需字段有效时运行,避免异常遮盖原始错误。
- 金额与 payment method 风险规则是独立谓词。金额超界、blocked method、行为不匹配都收集为结构化 Issue(code,priority,column),而不是在第一个错误处立即 return。
- 行为匹配先定义特征归一化:国家代码、小时分箱、金额区间及用户历史窗口。计算 match_count 和 comparable_count,用 2×match_count≥comparable_count 比较,避免浮点;历史为空要用专门缺证状态按产品规则处理。
- 最后按题面指定的错误优先级稳定排序并截前两个;无错误输出 OK。column alignment 用最后一步格式化,核心验证返回数据结构,便于单测。
- 测试引号内逗号、六字段边界、金额阈值、blocked list 大小写、恰 50%、历史缺失、三种错误并发以及两个同优先级错误的确定顺序。
手动走一遍
训练例某交易可比较 4 项行为特征,2 项与历史匹配,则 2/4=50%,按‘至少 50%’通过;1/4 不通过。若同时金额超限、method 被禁和行为不匹配,最多输出哪两个取决于题面优先级表,不能按 if 顺序偶然决定。
规模与取舍
R 行交易、每行 F 个字段、每用户 H 项历史摘要:CSV 解析 O(总字符数),规则评估 O(R(F+H))(若历史可预聚合则 O(RF)),每行错误数小且固定,排序 O(E log E)。空间 O(用户基线+单行字段/问题),可流式输出。
易错点与追问
容易失分的边界
- 把 50% 写成严格大于,恰一半被拒。
- 把缺失历史当作匹配 0,误把新用户全部判可疑。
- 按 if 顺序只报第一错,违反最多两个按优先级输出。
- 六字段未公开仍把示例列名写成面试原题。
- 把此题与 q8 的商户分数乘加规则混成一题。
继续深挖
- 用户历史行为被当前交易污染时如何防数据泄漏?
- 规则与基线版本变更后如何解释过去的可疑判定?
- 缺失行为基线的冷启动用户怎样设单独规则而非直接拒绝?
