私はインタビューで技術的な質問をするのが大ファンではありません。私にとっては、実際の問題である実際のコードよりもキーボードで候補者(または候補者)と一緒に座って、できればチームの他のメンバーと交互にペアプログラミングを行う方が良いです。 しかし、いくつかの技術的な問題は、エキサイティングで楽しい会話を始めるための良い出発点となり、お互いをより深く知ることができると思います。
このリポジトリには、潜在的な候補者を確認するために使用できるサーバー側に関連するいくつかの質問が含まれています。 いずれの場合も、1人の候補者にすべての質問をすることはお勧めしません。数時間かかり、広範囲のトピックを網羅しているため、まったく意味がありません。 誰もすべてを知ることはできません。 最も関連性の高いセクションと最も興味深い質問を選択して、会話を広げてください。
警告
ほとんどの質問は公開されており、一部の質問では単に正解も不正解もありません。 それどころか、彼らは会話の出発点になるべきであり、理論的には単純な答えよりも個人の能力をよりよく示すはずです。 個人的には、私自身は知らない質問や答えを一般的に尋ねたいと思います。
繰り返しますが、単に質問するだけでは十分ではないことを強調します。 インタビューの最後に、ペアプログラミングの長いセッションを費やしてください。これは、お互いのスタイルとアプローチを理解するための最良の選択肢の1つです。
このプロジェクトは、 @ darcyclarkeの 「 フロントエンドジョブ へのインタビューの質問」をモデルにしています。
答えはどこですか?
遅かれ早かれ、関連する回答を記事に追加します。 私はどんな助けにも感謝します!
内容
設計パターンに関する質問
コードの整理に関する質問(コード設計)
プログラミング言語に関する質問
Web開発の質問
データベースに関する質問
NoSQLに関する質問
コードのバージョン管理の問題
並行性の問題
分散システムに関する質問
ソフトウェアのライフサイクルとチームのリーダーシップに関する質問
ロジックとアルゴリズムに関する質問
ソフトウェアアーキテクチャに関する質問
サービス指向アーキテクチャとマイクロサービスに関する質問
セキュリティの問題
一般的な質問
未解決の質問
コードスニペット付きの質問
ビル・ゲイツのスタイルの質問
設計パターンに関する質問:
•なぜグローバルオブジェクトとスタティックは悪なのですか? サンプルコードで見せてもらえますか?
•制御の逆転と、それがコード編成を改善する方法について教えてください。
•デメテルの法則(最小認識の原則)では、各ソフトウェアモジュールは他のモジュールに関する限られた知識を持つ必要があり、直接の「友人」とのみ対話する必要があります(「見知らぬ人と話さない」と定式化される場合があります)。 この原則に違反するコードを書くことはできますか? なぜ彼は貧弱な組織を持っているのか、それを修正する方法は?
Active-Record-挿入、更新、削除などの機能の導入を促進する設計パターン、およびデータベース内の特定のベーステーブルの列に対応するプロパティ。 あなたの意見と経験では、このテンプレートの制限と落とし穴は何ですか?
•データマッパー-相互およびコンバーター自体からの独立性を維持しながら、オブジェクトとデータベース間でデータを移動するマッパーのレイヤーの使用を促進する設計パターン。 このテンプレートとは対照的に、Active-Recordオブジェクトには、データベースに保存する操作と、データベースのベーステーブルに対応するプロパティが直接含まれます。 これらのパターンについて意見はありますか? どのような場合に、それらの1つを別のものよりも好むでしょうか?
•NULLを導入するときに、10億ドルのエラーが頻繁に言及されるのはなぜですか? GOFブックに示されているNull Objectパターンやオプションのタイプなど、これを防ぐためのテクニックについて議論したいですか?
•構成が継承よりも優れていることが多いのはなぜですか?
•腐敗防止レイヤーとは何ですか?
•シングルトンは、単一オブジェクトのクラスのインスタンスを1つ作成するデザインパターンです。 正しいスレッドトン(Safe-Singleton)を書くのはそれほど簡単ではありません。 やってみますか?
•クライアント側に影響を与えずに実装を変更する機能は、データ抽象化と呼ばれます。 このプロパティに違反する例を記述してから修正してください。
•自分自身を繰り返さない(DRY)の原則に違反するコードフラグメントを記述します。 それを修正します。
•依存性地獄にどう対処しますか?
•なぜgotoが悪なのですか?
•信頼性の原則は、コードを整理するための一般的なルールであり、 「送信するものは保守的で、受け入れるものは寛大であること」を推奨します 。 多くの場合、 「寛容な読者であり、慎重な作家である」と定式化されています。 この原則の意味について議論したいですか?
•責任の分離-コンピュータープログラムを個別の領域に分割するための設計原則。各領域はそのタスクを担当します。 責任を共有するためのさまざまなメカニズムがあります(オブジェクト、関数、モジュール、またはMVCなどのテンプレートを使用)。 このトピックについて議論したいですか?
コードの整理に関する質問(コード設計):
•オブジェクト指向設計(およびコード全体の編成)の最も重要なタスクの1つは、強い結束力と弱い結束力であるとよく言われます。 これはどういう意味ですか? なぜそんなに重要なのか、どうやって達成するのか?
•なぜほとんどの言語で配列インデックスがゼロから始まるのですか?
•テストとTDDはコード構成にどのように影響しますか?
•自分自身を繰り返さない(DRY)の原則に違反するコードフラグメントを記述します。 彼がうまく組織化されておらず、正しい理由を説明してください。
•グリップと凝集力の違いは何ですか?
•リファクタリングが役立つのはなぜですか?
•コード内のコメントは役に立ちますか? 可能な限り避けるべきだと言う人もいますが、理想的にはまったく必要ないのです。 同意しますか
•コードの編成とアーキテクチャの違いは何ですか?
•コードの前にTDDテストが書かれているのはなぜですか?
•C ++は多重継承をサポートしますが、Javaはクラスが複数のインターフェースを実装できるようにします。 これらのエージェントを使用すると、直交性にどのような影響がありますか? 複数の継承と複数のインターフェイスを使用する場合の効果に違いはありますか? 委任と継承の使用に違いはありますか? [これはAndrew Huntと実用プログラマーのDavid Thomasからの質問です]
•ストアドプロシージャにドメインロジックを保存することの長所と短所。
•あなたの意見では、なぜオブジェクト指向の組織が長年市場を支配してきたのですか?
•コードが適切に編成されていない場合、これをどのように理解しますか?
プログラミング言語に関する質問:
• .
• ?
• ? ?
• ?
• ? ? .
• , , (. . ). .
• , ?
• , .
• : , . , . , ?
• ? .
• Java C# ( ).
• Java?
• — ?
• , , . .
• ? ?
• , ?
• , , , . ? Switch?
• ? ?
Cat
—
Animal
, ,
TakeCare<Cat>
—
TakeCare<Animal>
?
• Java, C# ?
• Node.js. , ?
• , Java (C#, Python, Go - ) JDK. ? ? ? ?
-:
• -?
• Web Services API?
• - ?
• , stateless? stateless-? (statefullness) — ?
• REST SOAP: , ?
• - Model-View Controller Model-View-View-Model , . ?
:
• , , MySQL PostgreSQL? , ?
• NULL ? , SQL
SELECT * FROM table WHERE field = null
null
?
• ACID — Atomicity, Consistency, Isolation, Durability (, , , ). . ? ?
• c , ?
• ? ? ?
• « N+1» , «-» ORM , , , . ?
• ?
• , ? ?
• - . , — , . , . .
NoSQL:
• (eventual consistency)?
• CAP, CP, AP CA.
• NoSQL ?
• NoSQL ?
• MongoDB , MySQL PostgreSQL?
:
• Mercurial Git , SVN?
• , Git, VCS SVN?
• GitHub Flow GitFlow?
• rebase ()?
• Mercurial Git, SVN CVS?
:
• ? .
• / ?
• ? .
• ? - , ?
• (process starvation)? , .
• (wait-free )?
:
• ?
• ?
• ?
• , — ?
• -? ?
• ?
• (reconciliation) .
• ?
• Request/Reply, Publish/Subscribe?
• , , c , . ?
:
• (agility)?
• -?
• , . , - .
• . .
• ?
• , ?
• , ?
• « » « » — , Agile-. .
• , , .
• ?
• , ( ) « ».
• ? , ?
• , ?
• , ?
• , . ?
:
• FIFO, LIFO. LIFO, FIFO.
• , .
• .
• REPL, . RPN-.
• ?
• , .
• , .
• .
• .
• .
• -. , .
• 10 ? 10 ?
• ?
:
• ?
• - ?
• ?
• (emergent design) ?
• : ? , ?
• (failover) ?
• CQRS (Command Query Responsibility Segregation)? Command-Query Separation?
• ?
• ?
• C10k?
• ( ) P2P?
• CGI ?
• (vendor lock-in)?
• «-» ?
• 80- , ?
• ?
• - DoS-, - ?
• ?
• (tight coupling)?
• ?
• ? : ?
• , , ? .
- :
• SOA , Saga?
• SOA ?
• -, , .
• Saga, SOA?
• ?
• ?
:
• ? , ? ?
• , ?
• ? -?
• , , , . ?
• , SQL- .
• SQL- ? , , , .
• ? , .
• ? , .
• HTTPS?
• « »? HTTPS ?
• ? , , , .
:
• ? ?
• Microsoft, Google, Opera Mozilla ?
• TCP ?
• ?
• ?
• ?
• — , . ?
• .
• - (bject-relational impedance mismatch)?
• ?
• TCP HTTP?
• ?
• ?
• « », « , , , , ». , : ? ?
:
• ?
• .
• , . ?
• ?
• , .
• , : ?
• ?
• . , — ?
• , .
• , - ?
• ?
• , (Eating Your Own Food).
• ?
• ? ?
• (greenfield) (brownfield)? ?
• , google.com Enter?
• , ? , , , , . .
• .
• .
• « »?
• — , ? .
• ?
• , ?
• , ?
:
• JavaScript?
function hookupevents() { for (var i = 0; i < 3; i++) { document.getElementById("button" + i) .addEventListener("click", function() { alert(i); }); } }
• , Java ?
ArrayList<Integer> li = new ArrayList<Integer>(); ArrayList<Float> lf = new ArrayList<Float>(); if (li.getClass() == lf.getClass()) // evaluates to true System.out.println("Equal");
• ?
public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if (size == 0) throw new EmptyStackException(); return elements[--size]; } /** * Ensure space for at least one more element, roughly * doubling the capacity each time the array needs to grow. */ private void ensureCapacity() { if (elements.length == size) elements = Arrays.copyOf(elements, 2 * size + 1); } }
•
switch
- ?
public class Formatter { private Service service; public Formatter(Service service) { this.service = service; } public String doTheJob(String theInput) { String response = service.askForPermission(); switch (response) { case "FAIL": return "error"; case "OK": return String.format("%s%s", theInput, theInput); default: return null; } } }
•
if
- ?
public class TheService { private final FileHandler fileHandler; private final FooRepository fooRepository; public TheService(FileHandler fileHandler, FooRepository fooRepository) { this.fileHandler = fileHandler; this.fooRepository = fooRepository; } public String Execute(final String file) { final String rewrittenUrl = fileHandler.getXmlFileFromFileName(file); final String executionId = fileHandler.getExecutionIdFromFileName(file); if ((executionId == "") || (rewrittenUrl == "")) { return ""; } Foo knownFoo = fooRepository.getFooByXmlFileName(rewrittenUrl); if (knownFoo == null) { return ""; } return knownFoo.DoThat(file); } }
• ?
function() { HRESULT error = S_OK; if(SUCCEEDED(Operation1())) { if(SUCCEEDED(Operation2())) { if(SUCCEEDED(Operation3())) { if(SUCCEEDED(Operation4())) { } else { error = OPERATION4FAILED; } } else { error = OPERATION3FAILED; } } else { error = OPERATION2FAILED; } } else { error = OPERATION1FAILED; } return error; }
:
Microsoft ( Microsoft).
• , ?
• . , — . /?
• .
• Quora , Yahoo Answers?
• : Cobol .
• 10 ?
• , . .
• . . . .
• . ?
• , ?