刚跑完 senior 在 AT&T 的 technology and operations division 的完整面试 loop,岗位是 SWE / tech lead adjacent。system design 这一轮值得单独写一篇,因为跟大多数人准备的完全不一样。
先说:AT&T 不用 L5 这种标签。他们的级别大概是 SWE I / II / III,然后是 Principal。我面的是 SWE III,从薪资和 scope 来看,大概相当于大厂的 senior / L5。
system design 的形式: 一小时,一个面试官(principal engineer)。他一开始就说想聊一个跟团队实际工作相关的问题。他给我的题是一个大规模 billing event Pipeline 的设计问题。大概是:每分钟几百万条事件,subscriber 在 5G 和 fiber 上产生 usage 数据,需要实时聚合用来计费和异常检测。
这不是那种泛用的「design Twitter(设计 Twitter)」题。它非常偏业务领域,他们希望你至少能问一些关于 telecom 背景的聪明问题,而不是假装你在给 web startup 设计。
他最看重的点: 容错和 exactly-once delivery(对 carrier 来说,计费错误非常严重) consumer 跟不上时,我会怎么处理 backpressure 数据分区策略,以及原因 consistency vs. availability 的取舍,而且要具体到 Pipeline 里的哪些部分可以接受 eventual consistency
我用 Kafka 做事件主干,用 Flink 做流处理,用 Postgres + 一个 columnar store 做聚合层。他会挑战我每一个关键选择。不是那种对抗式的,更像一个架构师在 review 真实设计。
我希望自己准备得更多的: telecom 行业的数据量级和 SLA 预期。我懂 distributed systems,但我一直得说「我不确定典型的 AT&T 级别数据大概是什么量级」,这也没问题,但如果能知道大概数量级(比如:他们有 2 亿+ subscriber、每个 session 的事件量等),我就能把设计锚得更稳。
我最后拿到了 offer。system design 在决策里感觉权重最高。