![見出し画像](https://assets.st-note.com/production/uploads/images/102875853/rectangle_large_type_2_f36254307c17c69abdbd089d2789e307.png?width=1200)
「システム設計の面接試験」読んでみた①
最近こちらの本を購入。
自分はFlutterのエンジニアですが、システム設計についてまだまだ知識不足です。設計について勉強したかったのと、もしエンジニアとして転職する際は面接試験は避けて通れないので、読んでいて損はないかと考えてもくもくと読んでいます。
自分の勉強のため、気になる方にむけて読んだ内容の整理をしていきます。
本の概要
本書では、「Webクローラ」「通知システム」「ニュースフィードシステム」「チャットシステム」「youtube」など実践的なテーマに沿って、システム設計の問題を出題し、その回答を解説することで、システム設計力を身に付けられるようにしています。
16章もある分厚い本ですが、わかりやすい図と的確に翻訳された日本語のおかげで意外と読みやすいです。
ただ、ITの専門用語が解説なく羅列されているので、ChatGPTを開いて意味の分からない単語を調べながら読み進めていくことに。。。
ちなみに、自分は専門書を読む時、山口真由さんが提唱している「7回読み」勉強法を採用することがあります。
頑張って難しい本を1回読んでも1週間後には90%くらい忘れているので、何度も読むことを心がけてます。(実際は7回も読めずに3〜4回でギブアップすることも多い。なんなら1回読みで終わる)
本書は最初から全部読む必要はないかと思っていて、自分の気になる章について7回くらい調べながら読んだら内容が頭に入るだろうと考えてます。
自分は11章「ニュースフィードシステムの設計」が気になるので、今回はこの章について記載。
11章「ニュースフィードシステムの設計」
まずは本書に出てくる用語の整理。
ニュースフィード
フィードは、ホームページの中央に表示される記事のリストのことで、内容は常に更新されます。フィードには、Facebookでフォローしている利用者、ページ、グループの近況アップデート、写真、動画、リンク、アプリのアクティビティや「いいね!」などが表示されます。
Fanout
ある投稿を友人全員に配信すること。
書込み時Fauoutと読み込み時Fauoutの2種類あるそう。
書込み時Fauout
ニュースフィードを書き込み時にあらかじめ計算
読み込み時Fauout
ニュースフィードを読み込み時に生成
ロードバランサ
トラフィックをwebサーバへ振り分け
メッセージキュー
メッセージキューは、サーバーレスおよびマイクロサービスアーキテクチャで使われる非同期サービス対サービスの通信形態です。
メッセージキューを使うことで、重い処理の分割、バッファーまたはバッチ処理、およびスパイクの多いワークロードを円滑にすることができます。
→メッセージキューを取り入れるメリットとしては、アプリのコーディングを簡素化したり、パフォーマンスを高めたりできるらしい。
面接のステップ
この本では1時間面接があると仮定し、お題を出されてから時間内にどのように設計を終わらせるか、そのステップが書かれてます。
ステップは3つ。
1. 設計範囲を明確化
2.高度な設計を提案
3. 設計深堀り
1. 設計範囲を明確化では、面接官に対してシステム要件に対して根掘り葉掘り質問し、どんな機能を実装して要件を満たすべきかを理解するよう書かれてます。
質問は例えば、なにの機能が重要か、想定されるトラフィック量はどれくらいか、といったこと。ここでちゃんと質問しないと、面接官が考える設計の内容をミスリードしてしまって、想定とは異なる設計をしてしまい時間を無駄にしてしまいそうです。
2.高度な設計を提案のステップでは、フィードの公開、ニュースフィードの構築という2つのフローの設計図を書き、面接官に説明しています。
そして3. 設計深堀りで各サービスを詳細化していきます。例えばFanoutのサービスの長所、短所といった内容や、ニュースフィード取得の深堀り、といったことです。
まとめ
本の図を貼り付けたりできないのであまり詳細に内容を記述できなかったですが、面接試験を控えてる人にはおすすめ。