ソフトウェアエンジニア向けの典型的なデザイン面接の質問は何ですか?


ベストアンサー

これが私の思い出したものです。エスケープへのインタビュー:

  1. デザインインスタグラムまたはある種のコンテンツフィード。これは実際には非常に一般的です。いろいろな会社で3、4回もらったに違いない。これはかなりの型抜きであり、怠惰すぎてより良い質問を思い付くことができないインタビュアーが尋ねるでしょう。
  2. デザインタイプアヘッド/オートコンプリート。 また、これを複数回受け取りましたが、わずかな違いがある場合もあります。通常、Trieデータ構造に基づいています。これは練習するのに最適です!
  3. メッセージングバス(apache kafka / zeromq / rabbitmq)を設計します。 インフラ指向のソフトウェアの役割について面接している場合は、このようなものが表示される可能性があります。これは、さまざまなフォーカス領域とサブ質問を生成できる優れたものです。
  4. LRUキャッシュを設計します。 通常は、二重にリンクされたリストを実装して、キャッシュがいっぱいになったときに最も最近使用されていない要素を一定時間削除します。
  5. 設計分散キャッシュ。 繰り返しになりますが、インフラ指向の役割のためかもしれません。さまざまな方向に進むこともできます。
  6. データベーステーブル/データウェアハウスを設計します。 これは、よりデータエンジニア志向の役割の場合もありますが、優れたデータ設計が非常に重要であることを考えると、SWEでも一般的です。

個人的に見たことのないものがいくつかあります。 、一般的に受け入れられているにもかかわらず:

  1. URL短縮サービスを設計する
  2. ウェブショップ/ eコマースサイトを設計する

これがお役に立てば幸いです!上位4〜5は、システム設計のインタビューのほとんどをカバーすることを望んでいます。カバーされていないインタビューについては、それらを研究することで得られる知識は、さまざまな質問のバリエーションにうまく伝わるはずです。

回答

システム設計インタビューは、設計スキルと、複雑でスケーラブルなサービスを操作する能力をテストします。これらの面接でのあなたのパフォーマンスは、あなたが提供されるポジションと給与を決定します。あなたが立派なデザインスキルを持っているなら、あなたはより高いオファーを得るでしょう。このインタビューの準備に役立つリソース:システム設計インタビューの概要

設計上の問題の例は次のとおりです。

また、一貫性のあるハッシュ データのパーティション分割負荷分散冗長性とレプリケーション CAPの定理など

私の経験では、インタビューの設計でパフォーマンスが向上した候補者は、次の7つの手順に従いました。

ステップ1:要件の明確化:解決しようとしている問題の正確な範囲を見つけるために、常に質問をしてください。

ステップ2:システムインターフェースの定義:システムに期待されるAPIを定義します。これにより、要件が間違っていないかどうかも確認できます。

ステップ3:エンベロープの裏側の見積もり:設計するシステムの規模を見積もることは常に良い考えです。

ステップ4:データモデルを定義する:早い段階では必要ありません。これにより、システムのさまざまなコンポーネント間でデータがどのように流れるかが明確になり、後でデータの分割に向けてガイドされます。

ステップ5:高レベルの設計:システムのコアコンポーネントを表す5〜6個のボックスでブロック図を描きます。

ステップ6:詳細なコンポーネント設計: 2-3のコンポーネントを深く掘り下げます。インタビュアーのフィードバックは、システムのどの部分についてさらに説明してほしいかを常にガイドする必要があります。

ステップ7:ボトルネック:話し合うようにしてください可能な限り多くのボトルネックと、それらを軽減するためのさまざまなアプローチ。

これがお役に立てば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です