Senior SWE · Onsite AI Coding

LinkedIn 路径删除后服务影响传播:目录边界与 read/write 依赖链

先找被删路径下的直接读取者,再沿服务产物依赖传播;说明目录前缀、输出顺序与环处理。

题目重点:先找被删路径下的直接读取者,再沿服务产物依赖传播;说明目录前缀、输出顺序与环处理。

题意与假设

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

  • 只讲条件化算法,不冒充原测试格式:路径按目录组件规范化,/a 是 /a/b 的祖先却不是 /ab 的祖先;删除目录影响其子孙读取,不波及同父目录的无关兄弟。
  • A.write_to 与 B.read_from 完全匹配或满足约定的目录包含关系时建 A→B。删除是否影响写入者、每个 deleted path 分别输出还是合并输出、同层排序都须核实。

解题路线

  1. 解析服务并规范化路径,拒绝 `..` 等歧义。按目录组件建 Trie,节点关联读取该路径/子孙的服务;避免字符串 startsWith 误伤。
  2. 对每个 deleted path 定位其 Trie 子树,取直接读取受删位置的服务作种子;同父目录其他子树不能未经规则就纳入。
  3. 建立 writer path→reader 的有向服务图,从种子 BFS 传播,visited 防环和重复。输出若需因果层次可按 BFS 距离,若需依赖先后则在 DAG 做拓扑排序;有环先缩强连通分量,组件内部无严格先后。
  4. 多个删除目录有祖先包含时可去冗余;为每个影响服务记录触发它的路径与上游服务,便于解释和复核。

手动走一遍

A 读 /data/raw/a、写 /stage/x;B 读 /stage/x;C 读 /data/raw/b。删 /data/raw/a 时 A 直接受影响,B 经 A→B 传播;同父目录的 C 不受影响。删 /data/raw 时 A 与 C 都直接受影响。

规模与取舍

S 个服务、P 个总路径组件、D 条依赖边:建索引约 O(P+D),单次删除定位加命中输出和图传播约 O(路径长+S_reached+D_reached);Trie 与依赖图空间 O(P+S+D)。输出规则若需排序再加排序成本。

易错点与追问

容易失分的边界

  • 把 /ab 错作 /a 的子路径。
  • 只找直接读取者,漏掉 write→read 传播。
  • 把所有同父目录服务都算影响。
  • 图有环还直接声称可拓扑排序。
  • 把训练路径规则伪称原题规则。

继续深挖

  • 多个 read/write 路径如何建边?
  • 多个删除源影响同一服务如何展示原因?
  • 有环时恢复顺序怎样确定?
  • 频繁路径变更时 Trie 和图如何增量更新?
✓已复制微信号!