项目库
Web 应用Stripe · 应届软件工程师 · 2023

校园社团的琴房预订工具

分享者:D. Okafor · 前 Stripe 应届工程师

分享者在 Stripe 的应届面试里讲的就是这个项目,后来拿到了 offer。

走进这场面试

4 个当年真实追问 · 1 个 hard · 约 12 分钟

答完每一题,才翻开当事人当年的接法。

他们当时是怎么讲的

一个我们学生社团用来预订共享排练室的预订网站,取代了原来那张乱成一团的共享表格。

展开全文

在这之前,我们舞蹈社是用一张 Google 表格来订共享排练室的时间,大家老是订重,或者互相把对方的行删掉。我花了一个学期做了一个小的预订 Web 应用。前端是纯 React,后端是 Django 加 Postgres,因为我想要真正的关系型约束。核心数据模型就是房间、时间段和预订,我最得意的是我在 (room_id, slot) 上加了一个数据库层面的唯一约束,这样不管前端怎么搞,两个人字面意义上就是没法在同一时间订同一个房间。这一课我是踩坑学来的——我第一版是在应用代码里查有没有空,结果在一个报名高峰期,两个请求都通过了检查、都插进去了。经典的竞态。加上唯一约束,再捕获插入报错、给用户显示『有人刚抢走了这个』,就干净利落地解决了。我还加了个后台任务发确认邮件,这样发邮件慢也不会卡住预订的响应。最后大概有 40 个社员用了一个学期。登录我做得极简,直接用学校的 Google 登录,因为我根本不想存密码。

当年真实被问到的

跟我讲讲那个订重的 bug,以及你到底是怎么修的。

困难

为什么用 Postgres 加 Django,而不是像 SQLite 或者干脆无后端的 Firebase 这种更轻的方案?

中等

为什么把邮件挪到后台任务里?

简单

如果从 40 个用户扩到你们整个校园,第一个撑不住的地方是什么?

中等