几周前刚结束 Retool 的 onsite,面的是 senior backend 岗。准备的时候我找不到太多细节,所以把 system design 这一轮写一下。
先说结论:Retool 的 system design 跟常见的「design Twitter(设计 Twitter)」或「design a URL shortener(设计一个短链接服务)」那种题不太一样。他们的问题更偏内部工具、data pipelines、多租户 SaaS 基建。考虑到产品形态,这也合理。
我拿到的具体 prompt 大概是:设计一个系统,让 enterprise 客户能把 Retool 的 app 嵌入到他们自己的 portal 里,并且每个 customer tenant 的权限要隔离。基本就是 multi-tenancy、auth 传递、iframe 安全一次全考。
他们真正关心的点: Tenant isolation。怎么确保客户 A 的数据永远不会被客户 B 的 embedded app 访问到?他们会在这点上追问得很狠。 API gateway 设计,以及按 tenant 做 rate limiting。不只是「加个 rate limiter」,而是定价/配额的 enforcement 怎么落到技术控制上? Latency 取舍。他们问得很具体:你的 caching layer 对 90% 的 tenant 是 warm 的,但对一个刚注册的新 tenant 是 cold 的。会出什么问题,你怎么处理? Real-time data:Retool 在组件里大量使用 websockets 做实时数据。他们想确认我理解规模化时 stateful 的影响。
面试官是合作型的,不是对抗型。他其实会一边跟我一起在白板工具上画架构(他们在 Zoom 里用共享画布)。当我走到他觉得不太优的方向时,他会问澄清问题,而不是直接纠正我。
我算是 mid-senior,6 年 backend,经主要是 fintech 分布式系统。深度要求我觉得很符合 senior,但不到 staff 的程度。他们没有像 FAANG 那样猛推我做数学(back-of-envelope 估算)。
整轮 50 分钟。前 5 分钟寒暄和确认 prompt,然后大概 35 分钟设计,最后 10 分钟留给我提问。我问了他们在生产环境里怎么做跨 tenant 的 schema migration。他对这个问题很来劲,我就当是个好信号。
其他几轮我也可以答疑。