Square · Primly 社区

Square senior / L5 system design 面试:预期是什么,哪里把我坑到了

sre_sol (Primly starter) · 4 条回复

刚结束 Square 的 onsite,面的是一个 senior SWE 职位(他们内部大概叫 L5,不过对外不一定用这个标签)。一共四轮。我想专门写一下 system design 那轮,因为它跟我准备的内容差别最大。

题目跟支付相关。但不是「design Twitter(设计 Twitter)」或者「design YouTube(设计 YouTube)」这种,他们给了一个很贴近 Square 真实业务的场景。大概是:设计一个能大规模处理争议解决的系统,merchant 和 buyer 都会和同一条记录交互。我就不贴原题了,但确实(heh)就是他们的核心领域。

他们看重的点: 先数据模型。 我还没开始讲服务或 API,他们就让我先定义核心实体。Dispute、transaction、party、state machine。他们对我最初的 schema 有 push back:「what happens when a dispute has multiple sub-claims?(争议里有多个子 claim 会怎样?)」这个问题问得很好,我只能现场改。 要 state machine,不只是 CRUD。 Dispute 会在不同状态间流转。他们希望我考虑 idempotency、重试,以及给银行发 webhook 的时候如果中途失败怎么办。这是 fintech,这些东西很关键。 Eventual consistency 的权衡。 我一开始偏向强一致模型(Postgres、单写入者),他们追问:「at what scale does this break?(到什么规模会撑不住?)」然后我们讨论了 event sourcing 作为替代方案。我觉得没有唯一正确答案,他们想听我怎么推理。

不太重要的点:我几乎没怎么聊 load balancer 配置或缓存层。他们也不太在意我的 CDN 策略。

45 分钟,一个面试官,全程很聊天式。完全不刁钻。我本来以为会是那种偏 Leetcode 的 system design:画方框、给服务起名字。结果更像是「让我看看你是不是真懂支付系统」的讨论。

准备建议:补一下 state machine、金融系统里的 idempotency,以及在 payments 语境下的 CAP 定理。如果你做过任何分布式事务或 webhook 相关的东西,把这些例子拿出来讲。

整个 loop 是两轮 coding + system design + behavioral。我的结果大概 8 个工作日出来。

由 AI 翻译,查看原文

4 条回复

finance_faye (Primly starter)

状态机这个重点和我听一个 6 个月前走过这套流程的人说的一样。Square 的整个支付流程本质上就是个状态机。如果你提前知道这一点,并且能讲清楚每次状态转换的 failure mode,你就已经比大多数候选人领先了。

由 AI 翻译,查看原文

visa_vik (Primly starter)

在 coding 轮次里,他们希望你了解 payment 领域的业务逻辑吗?还是那些更偏标准的算法题?

由 AI 翻译,查看原文

jordan_pm (Primly starter)

支付里的幂等性就是那种,你要么每天都在跟它打交道,要么直到面试才会想起来的东西。经典题:"what happens if we retry a charge and the network response was lost but the charge went through?(如果我们重试扣款,但网络响应丢了,其实扣款已经成功了,会发生什么?)" fintech 面试官特别爱问这个。

由 AI 翻译,查看原文

director_dee (Primly starter)

作为招聘方的人:先做 data model 的做法,本质上是在替代衡量「这个人是不是先想清楚再动手」。那些还没把要存什么数据搞明白,就直接开始画 microservices 的候选人,分数几乎都会更低。

由 AI 翻译,查看原文