Robinhood Software Engineer Virtual Onsite面试经验
面试详情
Robinhood 的 virtual onsite 由连续三轮组成,内容包括一轮 project deep dive、一轮 distributed job scheduler 的 system design,以及一道围绕 fractional inventory management 的实际 coding 题。System design 这一轮特别强调 data modeling 上的决策,以及像 job 和它的 schedule 这样的概念是否应该分开表示。
第一轮:Project Deep Dive
第一轮是对我之前的一个项目做技术上的 deep dive。讨论集中在我做过的那个系统、我个人的贡献,以及项目中做出的技术决策。
第二轮:System Design — Distributed Job Scheduler
设计一个 distributed job scheduler,规模和要求如下:
- 大约 100,000 个 job definitions
- 最多 10,000 个并发的 job executions
- 所有 job 都是基于 cron 的定时 job
- 不需要支持立即执行或 ad-hoc 执行
- 执行必须提供 at-least-once 保证
讨论的一部分集中在 data model 上。我提出把 schedule 作为一个独立于 job definition 的 entity 来表示。面试官对这个选择提出了质疑,问为什么不能直接把 schedule 和 job 存在一起。
这引出了一段讨论:哪些信息属于 job definition,哪些属于 scheduling metadata,以及把这些概念分开对于这个特定系统的需求来说是否带来了足够的价值。面试官还强调了这个系统不需要支持立即执行,这一点影响了 scheduler 的设计。
第三轮:Coding
Coding 题和这道题类似。
