建築のセクションを取ることをどのように学んだか

建築のセクションは、多くの人に不確実性と不安感を引き起こします。言葉遣いは詳細に満ちておらず、答えを確認する方法が明確ではありません。同時に、建築部門を通過する能力は、昨日の卒業生と、バイナリツリーを横断する以上の何かを構築することを信頼できる人とを区別します。ある時点で、私はデザインセクションを適切に準備することを決定し、これに約2週間を費やして、皆さんと共有したい体系的なアプローチを開発しました。



予定



それを持つことは非常に重要です。どこかで間違いを犯し、推論を間違った方向に向けたとしても、全体的な構造化されたアプローチがあなたの手に渡ります。最初は、適度に鈍くして詳細をインタビュー対象者に尋ねることができますが、特定のポイント(以下の私の計画ではポイント3に対応)から始めて、完全に主導権を握る必要があり、最後までそれを手放さないことが最善です。私の計画は次のようなものでした:



  1. 主な機能のリストを収集し、ボードの隅に書き出します。この簡単なトリックは、重要な制約や仮定を思い出すのに役立ちます。
  2. システムが持つべき技術的特性を理解します:期待されるRPS、許容可能な応答時間の範囲、一貫性と信頼性の観点からの期待。
  3. どういうわけか機能する最も単純な1台のマシンソリューションを構築します。世界中の20のデータセンターから始める必要はありません。徐々にこれに到達する方がはるかに優れています。
  4. 単一の障害点またはパフォーマンスのボトルネックを見つけます。
  5. 問題を解決するための1つ以上のオプションを提供し、それぞれの長所と短所を明確に説明します
  6. オプションの1つを選択し、まだ時間がある場合は手順4に進み、時間が終了する場合は次の項目に進みます。
  7. ストレージのサイズ、サーバーの数、ネットワーク帯域幅を見積もり、すべてを注意深く書き留めます
  8. ボーナス:追加機能、ML実装、製品メトリック、実験について話します


時間管理は非常に重要です。最初の2つのポイントに5〜10分、最後の2つのポイントに5分を費やそうとしました。



トレードオフ



たとえ明白に見えても、話す必要があります。新しい部分を導入した後は、「新しい要素を追加しました。これにより、このような問題は解決されますが、その費用は負担します」などと言うことが重要です。トレードオフは次のようになります。



  1. 新しいシステムコンポーネントまたは既存のスペアパーツの数の増加は、負荷/応答速度の問題を解決しますが、サポートと展開に問題を追加します。
  2. シャーディングは負荷とスペースの制約を解決しますが、将来的に再シャーディングの問題を追加します。
  3. 複製されたストレージは負荷と信頼性の問題を解決しますが、読み取りと書き込みのレプリカの場合、腐った値と可用性と一貫性の反対について考えるようになります
  4. キャッシュは負荷の問題を解決しますが、悪意のある値とキャッシュの一貫性について考えるようになります。
  5. 独自のソリューションは、ニーズに合わせて簡単に変更および最適化できますが、最初に作成する必要があります。
  6. 既存のソリューションの良いところは、それがすでに存在していることですが、それを理解する必要があります。


数字



プログラマーなら 誰でも知っておくべき待ち時間の数値は誰もが知っていますが、私の意見では、リンク上の数値は最も便利な方法で構成されておらず、覚えやすいように準備プロセスで再フォーマットしました。



最終的に、次のことが重要です。



  1. さまざまなレベルのプロセッサキャッシュ、メモリ、SSD、HDD、およびネットワークからデータを読み取るために費やされた時間を把握します。
  2. データセンター内および世界中の往復の時間と、人が遅れとして感じる最小の待ち時間(〜100ms)を覚えておいてください。
  3. バイトをギガバイト、ナノ秒から秒などにすばやく変換できるようにするために、私は練習の過程でこのスキルを独自に開発しました。


練習



私はホワイトボードを購入し、既存のサービスを利用して、それらを最初から作成する方法を見つけようとしました。ボード上に図を描き、負荷と必要なリソースを把握し、設計の弱点を探しました。また、疑似セクションを配置してお互いにトレーニングした素晴らしい友達もいます。とてもやりがいのある経験でした。練習後、オンラインに接続して実際にどのように行われるかを確認し、再試行できます。さまざまなサービスを使用した10〜20回のラウンドの後、既存のシステムの啓発セットと個々の繰り返しパーツがはっきりと見え始めます。スペアパーツは、たとえば次のようになります。



  1. 検索(できればリアルタイムでインデックスを更新する機能を使用)
  2. (gfs, haystack)
  3. kv- (cassandra, dynamo)
  4. Message queue pub-sub (kafka)
  5. (twitter, instagram, facebook)
  6. , , - (whatsapp, telegram, battle.net)
  7. , - (skype, twitch, youtube)




  1. Grokking the system design interview. , , .
  2. System design primer. , .
  3. ( ). . , , .
  4. 高スケーラビリティの豊富な品揃え
  5. さて、最も重要なリソースは、システムがどのように機能するかを知っていて、それらについてあなたに話すことができるあなたの友人や知人です。


いくつかの良いビデオとチャンネル



1.スケーラビリティ

2.イントロアーキテクチャとシステムデザインのインタビューに

3つ分散システムアーキテクチャパターン

4. 2012年のDropbox

5.スラック

6.ツイッター

7. Redditに

8. Instagramの

9。2007年にYouTubeの

10の同胞からシステム設計についてのチャンネル

11 。別のチャネル

12.そして別のチャネル



困難な時間枠はないが、インタビューの見通しがすでに迫っている場合、最も正しい戦術は、大規模なシステムの主題について、バックグラウンドで何かを常に読んだり見たりすることです。アルゴリズムパズルの場合も同じです。インタビューの前の週末にlitcode全体をマスターしようとするよりも、定期的に解決し、常に良好な状態である方がよいでしょう。しかし、短時間で建築部門の集中的な準備をすることで、私ははるかに優れたスペシャリストになりました。



All Articles