システム設計面接とは

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・タイプアヘッド)

設計面接は「すごいアーキテクチャを知っているか」ではなく、「要件に対して論理的に考えられるか」を見ています。声に出しながら思考プロセスを共有する練習が重要です。