私たちのブログでは、私たちは、さまざまな国でITのキャリアの構築について多くのことを書く仕事を見つける、面接の過程の違い、大企業を。今日の記事では、さらに進んで、いわゆるシステム設計インタビューのトピックを取り上げます。これは、多くの候補者が排除される有名なテクノロジー企業へのインタビューの段階の1つです。
では、システム設計とは何ですか。また、この種のインタビューをどのように受けますか。
それは何ですか
今日の世界では、ITシステムは非常に複雑になっています。製品の新しい「機能」はそれぞれ多くの要件を満たす必要があり、エンジニアがバランスを取る必要がある制約が常にあります。GoogleやYandexを介して検索クエリを送信するなど、平均的なユーザーにとって非常に簡単に見えるものは、実際には非常に複雑です。
システム設計インタビューと通常の技術インタビューの違いは、候補者がデータ構造とアルゴリズムに関するあいまいな質問に答えることを期待していることです。原則として、この段階でのタスクは、明確に正しいまたは間違った解決策がないようなものであり、思考プロセスを引き起こします-候補者が明らかにされるのはその中にあります。
大まかに言えば、システム設計のインタビューは、ブレインストーミングセッションのようなもので、人は大声で考え、考えられる解決策を検討し、それぞれの欠陥をリアルタイムで分析します。これは難しさですが、主なプラスでもあります。ここでは、結果よりも思考プロセスの方が重要です。原則として、このようなインタビューは、大規模なシステムを開発している大企業(FAANGなど)によって実施されます。
システム設計のインタビューをどのように受けますか?以下はいくつかの実用的なヒントです。
, , @g-jobbot. , Telegram , – , .
–
システム設計面接では、問題をどのように解決するかが最も重要であるため、最初の段階でそれを明確に理解することが非常に重要です。彼の記事の元マイクロソフトとフェイスブックのエンジニアは、実際的な例でこの事実の重要性を示しています。
通常、タスクは「45分でNetflixをどのように設計しますか?」のようなものです。一見、そのような質問は完全にナンセンスです。このような大規模なシステムは、何百、何千ものエンジニアによって長年にわたって設計および実装されてきました。そのような製品のコンポーネントの少なくとも1つについて話し合うには、45分では十分ではありません。
ここで、タスクを理解することが非常に重要です。インタビュアーが何を望んでいるかを理解する必要があります。そして彼は明らかに彼に次のことを望んでいます:
- システム全体の「ヘリコプタービュー」の形式で回答しました。
- 次にそれをコンポーネントに分解しました
- それぞれが必要な理由(データセンター、データストレージ、フロントエンド、バックエンド、キャッシング、キューの操作、ネットワーキング、ロードバランシングなど)について説明しました。
画像:system-design-primer
これらのコンポーネントのいくつかについて詳しく説明することができます。これらのコンポーネントはこれを示しているか、質問する必要があります。通常、システム設計のインタビューでコードを書く必要すらありません。最初にシステム全体について説明せずに、すぐに技術的なジャングルを掘り下げると、これは不利になります。
明確な質問をする
システム設計面接の主な目的は、候補者に知識と経験を示す機会を与えることです。上で述べたように、正しい答えも間違った答えもありません。問題自体を解決するのではなく、特に割り当てられた時間内にそれが単に不可能である可能性があるため、問題を解決するのではなく、思考プロセスをすべての栄光で示すことがはるかに重要です。
したがって、突然起こったとしても、提起された質問に対する答えを明確に知っている場合でも、質問をすることは非常に重要です。このような状況では、問題の解決策を書く必要はありません。これはインタビューの目的に反します。既知の解決策を忘れて、途中で質問しながら新しい解決策を探し始める必要があります。
これにより、インタビュアーは一度にいくつかのことを理解できます。
- 候補者は問題の評価にどのようにアプローチしますか?
- 彼はシステムの考えられる制限とボトルネックをすぐに評価しますか?
- ソリューションの最適化と制限の回避を通じてすぐに考えますか?
この記事では、Twitterエンジニアがインタビューの経験を共有しました。特に、彼は質問をする方法について良い説明をしました。インタビューで、ボックスを設計する割り当てが与えられたと想像してください。これ以上の情報は完全には提供されません。
質問は次のようになります。
- システムは正確に何をすることができますか(ボックスに収まるアイテムの数、それらのサイズは何ですか)?
- 製品のターゲットオーディエンスは誰ですか?
- 製品ユーザーの期待は何ですか?
それらへの回答により、少なくとも1つのテニスボールに合うエモティコンが描かれた黄色のボックスを作成する必要があることを理解できます。ただし、ボールはごく普通ではありません。半径は0.5メートル、重量は約1kgです。底を持って持ち運びに便利な箱なので、取っ手は不要です。
より多くの情報があります、今あなたはそのような洗練された問題を解決することについて考えることができます。
画像:freecodecamp.com
感動させようとしないでください
システム設計に関するインタビューでよくある間違い-多くの候補者は、この段階では抽象化レベルで作業する必要があるため、会話中にファッショナブルなテクノロジーのクールな用語と名前を入れて専門家に渡すだけで十分だと考えています。それはそのようには機能しません。
まず、システム設計に関するインタビューは、おそらく単なる採用担当者ではなく、チームに参加する人を探しているエンジニアになるでしょう。そのような人がNo-SQL、Mongo DB、Hadoopのような言葉を聞くだけでは十分ではありません。彼は明らかに明確な質問をし始めます、そしてあなたが言及された技術についてあまり経験がないならば、これは非常にすぐに明らかになるでしょう。
正直に
システム設計のインタビューは、確実にわからなくても大丈夫な時期の1つです。したがって、「この特定のテクノロジーを使用したことはありませんが、同様の問題を解決するためによく使用されることはわかっています」などの回答が適切なオプションです。正直に加えて、ここで候補者は特定の知識を示し、問題の解決を開始する場所をインタビュアーに明確にしました(彼は既知の解決策を試し、うまくいかない場合はさらに「掘り下げ」ます)。
さらに、ソリューションを理想的であり、欠点を含まないものとして見送ってはなりません。常に制限があり、経験豊富なエンジニア-インタビュアーはこれを誰よりもよく理解しています。したがって、インタビュー中に、ソリューションにはそのようなボトルネックがあると正直に言う価値がありますが、この方法でそれらを回避したり、追加のツールを使用したり、さらに調査を行ったりすることができます。
これにより、候補者が解決策を考え出し、それを徹底的に推し進めようとするだけでなく、柔軟性があり、調整を行うことができ、一般的には適切であり、常により良いことができることを理解していることが明らかになります。
これは、システム設計のインタビューでの素敵な架空の対話であり、実行しない方法を示しています。
: Twitter. ?
: NoSQL- MongoDB.
: MySQL?
: . MongoDB BigTable.
: Twitter MySQL, .
: , , , . - Facebook NO-SQL.
: Facebook MySQL.
: , , , . , MySQL , BigTable.
インタビュアー:それは問題ではありません。分析データはどこに保存しますか?
候補者:明らかにMySQLで。
インタビュアー:でも、MySQLには多すぎませんか?これでHDFSができました。
候補者:MongoDBが十分に開発される前から、Twitterの開発を開始したようです。MongoDBは、ツイートと分析データの両方に簡単に対応できます。
インタビュアー:ありがとうございました。おしゃべりできてよかったです。
インタビューの準備方法:役立つリンク
システム設計はインタビューの中で最も曖昧な部分の1つですが、それに備えることができます。候補者を支援するために、有用な資料のリストを収集しました。