Stripe OA 面经|Stripe 新鲜面经|Stripe SDE NG OA 原题

顶级技术积累,独家导师资源,面试实战演示(FREE!)

anthony
Anthony W
Senior @ Meta

UCSD博士毕业,前Pinterest senior MLE。在CVPR、ECCV等顶级学术会议上以第一作者身份发表过十余篇论文。研究方向集中在可解释的人工智能和鲁棒模型架构的研究。对MLE的面试技巧和得分点了如指掌,培训了团队内的数十名新同事。

Luke P

Senior @ 谷歌

前谷歌高级软件开发工程师,精通分布式系统、云计算和大规模数据处理。在顶级技术会议KubeCon和Google Cloud Next上发表多篇技术报告。专注于提升系统的可扩展性和可靠性。在Github上发布了System Design面试手册,收获上千 🌟

samuel
Samuel
Nick L
L6 @ Amazon

前 Amazon 工程老兵,长期深耕SDN核心系统研发。专注于提高系统的可扩展性、可靠性和成本效率。在服务治理、网络系统、事件驱动架构方面有丰富的实战经验。专做 Amazon 和 Meta 的 SDE 面试辅助,一年内帮助候选人成功斩获超过 30 个 L5和 L6 offer。

Stripe OA 面经|Stripe 新鲜面经|Stripe SDE NG OA 原题


想要和我们的技术团队进行一次免费的沟通?

当然可以!
我们会直击要点,回答你的所有疑问,并介绍我们的服务。
还有顾虑?
我们可以提供免费的面试实战展示。我们团队到底有多少水平,你说了算。

这道 Stripe 的 HackerRank OA 真题是一道非常高频的系统模拟题,背景来源于 Jupyter load balancing 的实际工程场景。Stripe 的 Notebook 平台运行在 Jupyter 上,而 Jupyter 在面对大量用户时性能下降明显,因此公司会部署多个 Jupyter servers,并通过一个 load balancer 自动分配用户请求。这道题的目标是模拟这一逻辑,实现一个函数 route_requests(),用于确定每个 incoming request 应该被路由到哪个目标服务器。虽然题目不涉及真实的网络通信,但它要求完整模拟连接建立、断开、对象共享、capacity 限制以及 server 重启等一系列复杂的行为。

虽然说是一小时完成一道题,但是难度远大于tiktok的一小时四道题。


函数 route_requests(numTargets, maxConnectionsPerTarget, requests) 接收三个参数,分别代表 number of target servers、maximum connections per server、以及 request sequence。每个请求字符串格式可能为 action, connectionId, userId, objectIdaction, targetIndex。返回值是一个字符串数组,包含所有成功的 CONNECT 操作结果,格式为 connectionId, userId, targetIndex。题目共分五个阶段(Part 1–5)每个阶段在前一阶段的逻辑上递进,最终形成一个接近真实系统负载均衡器的完整模拟。

Part1

第一部分是 Basic Load Balancing。这一阶段要求实现最基本的调度逻辑。程序需要维护每台 server 当前的 active connection 数量,当有新的 CONNECT 请求到达时,应选择负载最小的 server。如果有多个负载相同,则选择 index 最小的一个。每个请求独立处理,与用户或对象无关。核心思路是通过一个 array 或 dictionary 跟踪当前各 server 的连接数量,并在 O(1) 时间内找到最优目标。

Part2

第二部分是 Modeling Disconnection。在第一阶段的基础上新增 DISCONNECT 请求。系统需要维护一个 connection mapping table,记录每个 connectionId 当前所在的 server。当接收到断开请求时,从 mapping 中查找该 connectionId,释放相应的 server 负载。这要求在数据结构层面保持 connection 与 server 状态同步,以确保负载统计正确。实现的重点在于使 connect 与 disconnect 操作的更新成本都保持常数级别。

Part3

第三部分是 Routing Based on Object ID。这一阶段引入了对象一致性(object-level consistency)的约束。Jupyter notebooks 的多个用户可能共享同一个 objectId(即共同编辑同一个文档),因此这些请求必须被路由到同一台 server。程序需要维护一个 objectId → targetIndex 的映射表,当有新请求到达时,如果 objectId 已经存在,就直接使用同一台 server;否则执行常规的负载均衡逻辑。难点在于维护 object-server 绑定关系的正确性,并在连接断开后及时清理。

Part4

第四部分是 Target Size Limits。本阶段模拟服务器容量限制。每台 server 最多可承载 maxConnectionsPerTarget 个连接。当 server 达到上限后,它将从候选列表中排除。如果所有服务器都已满载,新请求将被拒绝,不会输出日志。同样,如果一个 objectId 已绑定的 server 已经满载,即使按照一致性规则该 server 是正确目标,也必须拒绝该连接。思路是增加容量检查逻辑,动态地跳过 overloaded targets。实现过程中需要保证 routing 决策的稳定性与一致性。

Part5

第五部分是 Target Shutdown。该阶段模拟服务器暂时下线的情况。当收到 SHUTDOWN,targetIndex 请求时,表示该 server 需要 temporarily reboot。系统必须立即驱逐(evict)该 server 上所有 active connections,并重新按照之前的 routing 规则将它们迁移到其他 server。这一过程称为 connection re-routing。被重新路由的连接也会被记录在输出日志中。题目假设 shutdown 是瞬时的,服务器会立即恢复,因此后续请求仍可被分配到它上面。思路是先收集被驱逐的连接,更新状态映射,再逐一调用先前的 routing 逻辑为其分配新 server。


整体实现中需要同时维护四个核心数据结构connection_map(connectionId → server index)、object_map(objectId → server index)、target_load(server index → active count)、以及 shutdown_targets(暂时不可用服务器集合)。这些状态共同描述了系统的全局状态。每次操作都需要保证这四张表的数据一致性。在复杂度上,每个请求的处理应为 O(1),从而在大规模输入下保持高效。对于 SHUTDOWN 操作,可能需要遍历被驱逐连接,但整体依然能保证线性复杂度。


这道题是 Stripe HackerRank 中非常有代表性的 system simulation problem,融合了负载均衡策略、状态同步、对象一致性、capacity control 以及容灾恢复逻辑。在一小时内完成全部五个阶段,意味着你能快速构建并实现一个具备动态调度、资源管理、consistency 约束与 failover 恢复机制的系统原型。

求职辅助服务,是关于时间和品质的较量。咨询 Alpha 小助手,获取最专业的Tech求职辅助。

客户怎么评价我们