SWE / New Grad · Phone / Technical Screen

Stripe 商户记录关联:字段加权到两跳和连通分量

按相同字段建立加权边,再从目标记录扩展直接邻居、有限跳数或完整传递闭包。

题目重点:按相同字段建立加权边,再从目标记录扩展直接邻居、有限跳数或完整传递闭包。

题意与假设

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

  • 同字段非空且完全相等才算命中,是否大小写归一化、模糊名字或共享公司名视题面而定。
  • 训练版边权为所有相同字段权重之和,达到阈值(≥)即连边;来源有帖写‘超过’,等号边界必须现场确认。
  • 从目标记录返回其他匹配 ID,不含自己;两跳指最短路径边数≤2,完整闭包不限制路径长度。

解题路线

  1. 先做纯函数 score(a,b),枚举字段并按非空相等加权,确认字段名集合、默认权重和 threshold。直接版扫描所有记录 O(nf)。
  2. 若要两跳,先构造或按需生成邻居,再 BFS 到深度 2;若要所有传递相关记录,BFS/DFS 直到队列空或用并查集求同一个连通分量。
  3. n 很小时建全图 O(n²f) 最清楚;n 大且相等字段稀疏时建倒排索引 field→value→recordIds,枚举可能共享字段的候选 pair,再做完整 score 过滤。高频值如 company='Stripe' 可能产生二次方候选,需要容量规划。
  4. 同一 ID 重复、字段缺失、零/负权重、浮点权重阈值、跨多跳误连与输出排序都要问;系统里不可把传递相似直接宣称为同一自然人。

手动走一遍

训练例:A/B 同 email,B/C 同 phone,A/C 没有共同字段。阈值设成单项匹配可达时,直接查询 A 返回 B;两跳及完整闭包返回 B、C。若 D 只与 C 匹配,完整闭包还返回 D,两跳不返回。

规模与取舍

朴素构图 O(n²f) 时间、O(n²) 最坏边空间,BFS O(n+m);单次直接扫描 O(nf)。倒排索引构造 O(nf) 但若共享值过于常见,候选对仍可能达到 O(n²)。

易错点与追问

容易失分的边界

  • 用单个共享字段无条件合并,忽略权重阈值。
  • 把 2 hops 与无限传递合并成同一个回答。
  • 空 email=空 email 也算命中,导致所有缺失记录连通。
  • 同一实体的传递推断未经人工/业务校验直接用于支付或合规决定。

继续深挖

  • 字段更新或删除后并查集无法直接拆分,如何增量维护连通分量?
  • 阈值刚好相等时算不算边,浮点精度如何处理?
  • 有大规模公共 email 域或公司名时怎样控制误连接与候选爆炸?
✓已复制微信号!