システム設計面接とは
GAFA・大手IT企業のエンジニア採用では、「Twitterを設計してください」「YouTubeのアーキテクチャを考えてください」といったオープンエンドな設計問題が出題されます。正解のない問いへの思考プロセスを評価されます。
面接の進め方(45分の場合)
| 時間 | 内容 |
|---|---|
| 5分 | 要件の明確化 |
| 10分 | 規模の見積もりと高レベル設計 |
| 20分 | 詳細設計(重要コンポーネント) |
| 10分 | ボトルネック特定とスケールアップ |
Step 1: 要件の明確化
曖昧な要件を具体化します。
- 機能要件:何を作るか(投稿・検索・フォロー...)
- 非機能要件:DAU・QPS・レイテンシ・可用性
例:「URLショートナーを設計して」 - 1日何件のURL短縮リクエスト?(例:1億件/日) - 短縮URLの有効期限は? - 同じURLが重複して生成されても良いか?
Step 2: 規模の見積もり
DAU(日次アクティブユーザー)= 1億人
書き込みQPS = 1億 / 86400秒 ≈ 1,200 QPS
読み込みQPS(読み書き比 10:1)= 12,000 QPS
5年間のデータ量 = 1,200 * 5年 * 365日 * 86400秒 * 100バイト ≈ 18TB
Step 3: 高レベル設計
クライアント
→ [CDN] ← 静的コンテンツ
→ [ロードバランサー]
→ [APIサーバー群] → [キャッシュ(Redis)]
→ [データベース(Primary/Replica)]
→ [メッセージキュー]
→ [非同期ワーカー]
よく使うコンポーネント
| コンポーネント | 用途 |
|---|---|
| CDN | 静的アセット・地理分散配信 |
| ロードバランサー | トラフィック分散 |
| Redis | セッション・キャッシュ・レート制限 |
| Kafka | 非同期メッセージング |
| Elasticsearch | 全文検索 |
| S3 | 画像・動画ストレージ |
よく問われる設計テーマ
- URLショートナー(ハッシュ衝突・リダイレクト)
- タイムライン(ファンアウト on read vs write)
- 通知システム(プッシュ・メール・SMS)
- 分散IDジェネレーター(Snowflake ID)
- 検索サジェスト(Trie・タイプアヘッド)
設計面接は「すごいアーキテクチャを知っているか」ではなく、「要件に対して論理的に考えられるか」を見ています。声に出しながら思考プロセスを共有する練習が重要です。





