大学サークルの練習室予約ツール
共有者はStripeの新卒面接でまさにこのプロジェクトを語り、内定を獲得しました。
この面接を練習する
実際の深掘り4問 · うち難問1 · 約12分
各質問に自分で答えると、本人の実際の答えが見られます。
本人はこう語った
混沌とした共有スプレッドシートに代わって、私の学生団体が共用練習室を予約するために使った予約サイトです。
全文を読む
それまで、私たちのダンスサークルは共用スタジオの時間をGoogle Sheetで予約していて、ダブルブッキングやお互いの行を消してしまう事故が絶えませんでした。私は1学期かけて小さな予約Webアプリを作りました。フロントエンドは素のReact、バックエンドは本物のリレーショナル制約が欲しかったのでDjangoとPostgresです。コアのデータモデルは部屋、タイムスロット、予約で、一番誇れるのは(room_id, slot)にデータベースレベルのユニーク制約を張ったことです。これでフロントエンドが何をしようと、2人が同じ部屋を同じ時間に予約することは文字通り不可能になりました。これは痛い目を見て学んだことで、最初のバージョンではアプリケーションコードで空き状況をチェックしていたのですが、申し込みが集中する時間帯に2つのリクエストが両方チェックを通過して両方insertしてしまいました。典型的なレースコンディションです。ユニーク制約に加えて、insertのエラーを捕まえて「たった今誰かに取られました」と表示することで、きれいに解決できました。さらに、遅いメール送信が予約レスポンスをブロックしないよう、バックグラウンドジョブ経由のシンプルな確認メールも追加しました。最終的に約40人のサークルメンバーに1学期使われました。パスワードを保存したくなかったので、認証は大学のGoogleサインインだけの極力シンプルな構成にしました。
実際に聞かれた質問
ダブルブッキングのバグと、実際にどう直したかを順を追って説明してください。
難しいSQLiteやバックエンド不要のFirebase構成のような軽いものではなく、なぜPostgresとDjangoを?
普通なぜメールをバックグラウンドジョブに移したのですか?
易しいこれが40人からキャンパス全体に広がったら、最初に壊れるのは何ですか?
普通