1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「システム設計の面接試験」を読んだので個人的なメモまとめ

Last updated at Posted at 2025-10-13

「システム設計の面接試験」を読んだので、個人的な学びなどを以下メモしておきます。図解多めで普段業務で触らない部分についても触れてあり、勉強になりました


システム設計の面接試験:章ごとの個人メモ

タイトル 主なテーマ/学習ポイント (淡々と)
第1章 ユーザー数ゼロから数百万人のへのスケールアップ システム拡張の基本。負荷分散、DBレプリケーションによる読み込み分散、キャッシング、CDN導入。Web層は状態を持たないステートレス化が必須。DB拡張は水平スケーリング(シャーディング)が基本。構成要素の疎結合化と信頼性向上のためにメッセージキューを採用する。
第2章 おおまかな見積もり 容量計算のための数値感覚を習得。2のべき乗の把握。プログラマが知っておくべきレイテンシの数値(メモリは速い、ディスクは遅い)を理解する。可用性(SLA)の概念と9の数によるダウンタイムの理解。面接では、正確な計算より四捨五入/概算前提条件/単位の明記が重要。
第3章 システム設計の面接試験のフレームワーク 面接を成功させる4ステップ: 1. 問題理解/範囲明確化(3〜10分)、2. 高度な設計提案/賛同獲得(10〜15分)、3. 設計の深掘り(10〜25分)、4. まとめ(3〜5分)。最初のステップでの質問による要件定義が特に重要。
第4章 レートリミッターの設計 トラフィック制御によるDoS防止、コスト削減が目的。実装は信頼性の高いサーバー側(APIゲートウェイ)で行う。主要アルゴリズム:トークンバケットリーキーバケット固定ウィンドウカウンタスライディングウィンドウログ/カウンタ。分散環境では、Redisを利用し、レースコンディションや同期の問題を解決する必要がある。
第5章 コンシステントハッシュの設計 サーバーの追加・削除時にデータ再配置を最小化する技術。従来のハッシュ方式で発生する再ハッシュ問題を軽減する。ハッシュ空間をリング状にし、仮想ノードを使ってキーの分布の偏りを是正する。
第6章 キーバリューストアの設計 分散K/Vストア(NoSQL)の設計。CAP定理(一貫性、可用性、分断耐性)のトレードオフ理解が前提。データの分割にはコンシステントハッシュ、一貫性確保にはクォーラムコンセンサス ($W+R>N$) を使用。可用性を優先する場合、不整合解消のためにベクトルクロックによるバージョン管理が必要。永続的な障害対応にはマーケルツリーが有効。
第7章 分散システムにおけるユニーク ID ジェネレータの設計 グローバルに一意で、ソート可能で時間と共に増加するIDを効率的に生成する課題。マルチマスターレプリケーションやUUIDの課題点を検討。TwitterのSnowflakeアプローチ(タイムスタンプ、データセンターID、マシンID、シーケンス番号で構成される64ビットID)が最も要求を満たす解決策。
第8章 URL 短縮サービスの設計 長いURLを短くし、リダイレクトするサービス。リダイレクトには301(恒久的)または302(一時的)を使用。短いURL生成は、ユニークなIDをBASE62変換するか、ハッシュ関数と衝突判定を行う。読み込み負荷が高いため、マッピング情報はキャッシュ層に保存し、パフォーマンスを向上させる。
第9章 Web クローラの設計 検索エンジンのインデックス作成などが目的。設計上の重要課題はスケーラビリティ堅牢性ポライトネス(ホストへの過剰なリクエスト回避)。URLフロンティアがURLの優先順位付けとポライトネスの確保を担う中心コンポーネント。
第10章 通知システムの設計 プッシュ通知(APN/FCM)、SMS、eメールをサポートする。初期設計のSPOFやパフォーマンスボトルネックを回避するため、DB/キャッシュを外部に移動し、メッセージキューを導入して構成要素を分離する。信頼性向上のため、通知データをDBに永続化し、再試行メカニズムを実装する。
第11章 ニュースフィードシステムの設計 ニュースフィードの設計は、フィードの公開(投稿時)とニュースフィードの構築(読み込み時)の2つの主要フローに分けて考える。
第12章 チャットシステムの設計 リアルタイム通信技術として、ポーリング、ロングポーリング、WebSocketの採用を検討する.
第13章 検索オートコンプリートシステムの設計 効率的な入力補完機能を提供するため、データの管理とクエリに**トライ木(Trie)**データ構造を利用する。
第14章 YouTube の設計 動画アップロード、ストリーミング、そして再生を可能にするためのトランスコーディング(符号変換)のワークフロー設計が中心となる。
第15章 Google ドライブの設計 ファイル同期サービスの設計。API、同期統合、ブロックサービス、メタデータDBの管理、高一貫性の要求、および障害処理が主要な論点である。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?