私はかつて、問題を解決しなかった開発者を雇った。彼らは半分くらいで、時間の経過を経て、彼らのコードは編集しなかった。とにかくオファーのために彼らを推薦した。彼らは声を上げて考え、明確な質問をし、一緒に何かをデバッグする同僚のように私を扱っていた。 そこで私は、ライブコーディングのインタビューが悪く名付けられていることに気づいた。 私は12年間この業界で働いてきました。私は何百もの役割にインタビューを行い、50回以上の技術的なラウンドを経て、モンゾやスーパーベットのような場所で100回以上のライブコーディングインタビューを行いました。パターンは一貫しています:最高のコーディネーターは常に雇われません。最も声の良い人はそうします。あなたは沈黙と失敗で間違いのないコードを書くことができます。あなたは美しくコミュニケーションし、成功しながら、中途半端なソリューションを通して戦うことができます。 インタビューは、チームが週に40時間以上あなたと仕事をすることを望んでいるかどうかをテストしています。 なぜライブコーディングインタビューが必要なのか? ある夜、母に会いに行って、彼女は私にこう尋ねた。 すみません、ママ、私はあなたのために答えを持っていません。それは7のうちの3のラウンドでした。私はまだシステムの設計、ライブコーディング、行動とチームの合うラウンドを持っています。 彼女は尋ねた、死んだ――。 彼女の仕事を変えることは、医師のディレクターと15分を過ごすこと、主に給料を話し始める時間、そしてそれだけです。 「X社でのインタビューはどうでしたか?仕事を手に入れたのですか?」 「何?」 「これって、以前と同じ役目じゃないの?」 ソフトウェアエンジニアリングは信頼性の低い職業であり、その理由もよくあります。開発者間のスキル格差は驚くほどです。15年間コードをしていて、まだ基本的なアルゴリズムと戦っている人がいるかもしれません。 風景も急速に変化しつつあるが、適応性はますます高く評価されつつある一方で、強固な基礎と堅固な原則は味を失っている。 インターンはRustのマイクロサービスを再構築することでTikTokに3万ドルを節約 あなたはあなたの夢の役割を申請し、あなたはHRから電話を受けました。 and are あなたのスケジュールをチェックします。 Panic sets in. You start Googling. あなたはGoogleを始める やっとここに着いたので、この仕事を 「君の経験に感銘を受けた」 「あなたを次の段階に進めることを楽しみにしています」 Live coding interview — tomorrow 3PM 「How to Pass Live Coding Interview」 ライブコーディングインタビューの種類 すべてのライブコーディングインタビューが平等に作成されるわけではありません。パニックになる前に、あなたがどの形式に入っているかを知るのに役立ちます。 : プログラミングコンテストと同様に、既知のアルゴリズムを事前に理解する必要があるタスクが得られます. This tells you very little about a software engineer's actual proficiency. I recommend two strategies to beat these: LeetCode-style interview LeetCodeのようなウェブサイトを数週間磨き、簡単で中程度の問題を快適に解決できるようになるまで、これも難しい質問に備えなければなりません。一般的には、同じアルゴリズム(DFS、BFS、FFなど)を知る必要がありますが、複雑なソリューションの一部として1つ以上のアルゴリズムを使用します。 会社が競争力のあるプログラマーを探している場合は、このインタビューのスタイルは有意義です。 : あなたはホームトレーニングから始まります。あなたがこれを提出すると、雇用チームはあなたのソリューションをレビューするためのコースリーパスを行います。彼らがそれに満足している場合は、あなたが小さな変更をしたり、小さな新しい機能を実装したりするために10〜30分のライブセッションであるラウンド2に移行します。これはあなたが実際にコードを書くことができることを証明し、それは役に立つ知人ではありませんでした(その名前はChad Jeep ETとリメイクします)あなたのためにそれをしました。 Take-home exercise with live counterpart : 通常、1 つのタスクしかありませんが、約 1 時間かかるように設計されています。これは問題解決のスキルを端から端までテストします。あなたは正確に定義された問題文とコードを書く環境を得ます。 Pair-coding exercise : You'll get a bunch of questions related to programming, usually increasing in difficulty. The first few questions simply check if you have some level of proficiency in the language. The next few will take a bit of time to think. You might start taking notes here — using code comments before you implement works well. The final 1-3 questions are designed to mislead you, mess with you, and make you want to give up working in software. Depending on language, this will include typical foot-guns, usual suspects when debugging, and sometimes exotic edge cases the interviewers came across. You may not solve these, and that's fine. Walk the interviewers through how you'd approach them. Live programming trivia : テクノロジーインタビューの最後のボス. 私は私のキャリアで2つのホワイトボードインタビューに参加したことが幸運です. 彼らは以前のように今では人気はありません. あなたはしばしば、この千年で雇用プロセスを再考しなかった伝統的なテクノロジー企業によって使用されることがあります. あなたが幸運なら、あなたはあなたのアイデアを示すために偽コードを使用することができます. あなたはしばしばプログラム全体を書く必要があります. イラストを使用してあなたの意図されたソリューションを視覚化することはまた役立ちます (許可された場合)。 Whiteboard 誰もが同じ方法でインタビューをするわけではありませんので、安全になりたい場合は、複数のフォーマットに備えてください。 1. RTFM 友好的なマニュアルを読んでください. または、この場合、雇用チームがあなたに送信するメールを読んでください。 いくつかの企業は、面接の前に詳細な指示を送信します。彼らは、どのような種類の問題を期待するか、どのようなテクノロジーを使用するか、どのくらいの期間の面接が続くか、どのようなツールが必要になります。このメールを読んで、再び読んでください。私は招待状で明示的に述べられたものに備えていない候補者が現れるのを見ました。 インタビューが始まる前に整理する必要があるもの: ほとんどの面接官はあなたに会いたがっている。 あなたのノートパソコンのウェブカメラが壊れた場合は、携帯電話を使用してください。 あなたがウェブカメラを持っていない場合は、事前に彼らに知らせてください。 Get your webcam working. おそらく、画面を共有するか、またはコラボレーションツールを使用する必要があります。 で、 インタビューの前に実際にこれを行うことができることを確認してください. 私は、候補者が自分の画面を共有する方法を理解しようとしたときに5分間の無駄を見ました。 Test your screen sharing. コードパッド 補足 あなたのインターネットが混雑している場合、インタビューは誰にとっても苦痛になります。オーディオの削除、スクリーン共有の凍結、コードの同期しない - これらはすべてインタビューの協力感を殺します。 あなたがあなたの接続が信頼できないことを知っているなら、上位に雇用チームに連絡してください。 彼らはあなたがより良い場所に到達できるときに別のプラットフォームまたは再スケジュールを使用することを許可することができます。 Check your internet connection. たまに外部の人事コンタクトを持つことがあります - たとえば、エージェントからのテクノロジーの募集者です。Speakeasyで私の現在の仕事で、私は、すべてのステップを徹底的に説明し、私を準備するために最善を尽くした募集者と一緒に働きました。 Work with your recruiter. あなたができる最悪のことは、面接に出席し、前日解決したかもしれない技術的な問題のトラブルシューティングに最初の15分を費やすことです。 2.あなたが良い同僚であることを証明する つまんない仕事だろ?つまんない仕事だろ? あなたは、チームが週に40時間以上あなたと一緒に働きたいかどうかを評価しています。私は、インタビュー中に彼らが落ち込んでいたため、素晴らしいエンジニアが拒否されたのを見ました。 私の経験から100以上のライブコーディングインタビューを実施し、最も成功した候補者はすべて共通の1つの品質を持っています。彼らは声です。彼らは彼らの思考プロセスをコミュニケーションし、彼らは明確な質問を尋ね、彼らは彼らがテストされている試験の代わりに協力的な問題解決セッションとして面接を扱っています。 面接官は一つの質問に答えようとしている。 あなたの技術的なスキルは重要ですが、あなたが frustration をどのように処理するか、あなたがヒントにどのように反応するか、そしてあなたが閉じ込められるときに優しいかどうかも同じです。 「この人、僕のチームに欲しいの?」 良い指のルール:インタビュー者が関わっているように見え、フォローアップの質問をし、会話が自然に流れている場合、あなたはおそらく「同僚」のテストでうまく行っています。 3. Converse, But Don’t Deflect(会話するが、変動しない) 最初は、あなたが自分の脳についての自然ドキュメンタリーを物語っているかのように、不自然に感じますが、それはあなたがライブコーディングインタビューでできる最も貴重なことです。 「私たちはこの数列を通して繰り返す必要があると考えています. We could use a for loop, but since we are transforming each element, we can use a for loop, but since we are transforming each element, we can use a for loop, but since we are transforming each element, map ここでクリーンになるかもしれないし、必要に応じて最適化できる」と述べた。 これは2つの目的を果たします。第一に、あなたがどう考えているかをインタビュー者に示します。彼らはあなたの最終的な解決策を評価しているだけでなく、問題解決のアプローチを評価しています。第二に、あなたが15分間間違った道を歩む前にあなたを修正する機会を与えます。 私は、直接的な質問をされたときに、彼らが答えを知らないことを認めるのを避けるために、5分間の哲学的議論を開始する候補者をインタビューしました。 面接官が尋ねると、 and you don't know, don't respond with ただ言うと: 「この時間の複雑さは?」 複雑さは多くの要因に依存し、現実世界では、キャッシュの場所を考慮しなければなりません。 “I’m not sure about the exact complexity. I think it might be O(n log n) 配列ステップのせいですが、それを確認したいと思います」 慎重に包まれた正直さは、毎回転換を打つ。 あなたの質問はあなたの答えと同じくらい重要です。 面接で言いたかったことはありますか? ? いや、我々は積極的に候補者に、ライブコーディングインタビュー中にGoogle、Stack Overflow、およびドキュメントを使用することを奨励しました。多くの企業はこのアプローチに従いますが、すべてではありません。 彼らが言える最悪のことはノーであり、あなたがどこに立っているかを知るでしょう。 「I'd just Google this」 「わたしは物事を上から見ることができるのだろうか?」 しかし、Googleが利用可能な場合でも、質問をすることは依然として重要です。実際の仕事では、常に質問をします。あなたはあなたの製品マネージャーに説明を求めます。あなたはあなたの同僚に既存のアーキテクチャについて尋ねます。あなたは文書を見ます。インタビューはこの現実を反映すべきです。 あなたに問題が与えられたら、すぐにコードを開始しないでください。 「予想される入力サイズは何ですか? 10 件か 10 百万件ですか?」 「時間の複雑さや空間の複雑さのために最適化すべきですか?」 「特に知っておくべきエンドケースはありますか?」 「入力が null または empty である場合はどうなりますか?」 私は、45分間のインタビューの最初の8分間を要求事項に関する質問に費やした高級エンジニアにインタビューしたことを覚えています。私は、彼らがソリューションを開発するのに十分な時間がないと心配し始めました。 気をつけてください:質問は真の説明でなければなりません、ヒントのリクエストではありません。 (正当な質問)および (解決策のための釣り) 「予想される入力サイズは?」 「ここでハッシュマップは役に立つだろうか?」 A good rule of thumb is, if you're about to answer a question starting with 代わりに、あなたがさらなる明確化が必要であることを説明し、あなたの解決策がどのような要因に依存するかをリストアップしてください. This shows you understand the tradeoffs without making the interviewer drag it out of you. 「It Depends」 5. If You Don't Know - Ask このヒントはヒント4と同じように聞こえますが、微妙に異なります。ヒント4は要求を明確にするために質問することです。 私は、候補者たちが20分間、無意味なものについて正確な文法を覚えようとしているのを見たが、それ以上に恥ずかしがりすぎて尋ねる。 「私に聞くだけで、私はあなたに言います、そして私たちは興味深い部分に進むことができます。 JavaScript を覚えていない場合 あなたが大学で学んだアルゴリズムの名前を空白にしている場合は、あなたが覚えていることを記述し、面接官がそれが何と呼ばれているかを知っているかどうかを尋ねます。 sort() The key is to be specific about what you don't know. あなたが知らないことについて具体的である。 しかし 「I don't know how to do this」 “I’m stuck on how to efficiently find duplicates in this array. I’m thinking about using a Set, but I’m not sure if that’s the right approach here.” 「私はこのマレージで複製を効率的に見つける方法に閉じ込められています。 これは2つのことをします。第一に、あなたがただ諦めているのではなく、問題について考えて仮説を持っていることを示します。第二に、面接官にどこであなたを助けるべきかについて有用な情報を提供します。 または または 「The Set Approach Is Good」 “think about what you would need to with a Set” (セットで達成する必要があることを考える) 「実際には、あなたが最初に分類すれば、よりシンプルなアプローチがあります。 誰もあなたがすべてを知ることを期待しないが、彼らはあなたがそうでないときにあなたがリソースのあることを期待している。 6.今は新しいことを試す時間ではありません。 私が実施したコーディングインタビューで、候補者は、面接のために私たちが提供した言語の1つであるC#をよりよく知っていると述べたが、彼らは過去数年間スカラを書いていたし、スカラはJavaのようにJVMで動作しているため、代わりにJavaでインタビューをすることにしました。 私たちのライブコーディングタスクは非常に単純で、それは単に理解と基本的なプログラミングコンセプトのことです。この賭けは報われませんでした。彼らはJavaのシンタクスと戦うために貴重な時間を費やしました。 インタビューは、あなたがハッカーニュースで聞いた新しいフレームワークを実験する時間ではありません。これは、機能的なプログラミングを初めて試す時間ではありません。 あなたがJavaよりもPythonをよく知っているなら、Pythonを使用してください(選択肢があれば)。 面接官はあなたが問題を解決するのを見たい、あなたが知らない文法と戦っているのを見ない。 reduce ある例外があります:面接官があなたに、あなたが知らない何かを使用するよう求めている場合、それは異なりますが、それでも、あなたは言うことができます: 「以前はXを使っていなかったので、シンタクスを調べてみる必要があるかもしれないが、ここに私のアプローチがある。 あなたの面接官も人間です。 彼らもおそらく緊張しているかもしれないし、今回が初めての面接だったかもしれないし、辛い朝だったかもしれないし、彼らが正しい質問をするかどうか心配しているかもしれない。 私は候補者として、裁判官のようにインタビュー者を扱った - 遠く、間違いのない当局が私の価値を評価している。 これは実践的にいくつかのことを意味します: 問題の発言に何かが不明確な場合、それはおそらく面接官がそれをうまく説明しなかったからであり、あなたがそれを魔法で直感するべきではないからです。 面接官が分散しているように見えるか、携帯電話をチェックしている場合は、それを個人的に取らないでください. 仕事で何かが起こったかもしれません. それはあなたに対する反射ではありません。 テストケースに問題があるか、テストケースに問題があると思っている場合は、丁寧に指摘してください。 「我々がカバーしていない、ここにエンドケースがあるかもしれないと思うが・・・どうなるだろうか?」 そして、ここに大きなものがあります:あなたはレポートを構築することができます. 最初にちょっとした会話が役立ちます。 または インタビュー中に、彼らがあなたにヒントを与えるとき、あなたは言うことができます。 あなたの貢献を大切にすること。 「あなたの日々はどうですか?」 「インタビューに時間を取ってくれてありがとう」 「ああ、それは良い点だ、私はそう考えていなかった」 インタビューは二方向のストリートで、あなたは彼らがあなたを評価しているのと同じくらい彼らを評価しています。 明確な思考プロセスは、千行のコードに値する。 私は、立候補者が明確で合理的なコードの20行を書くより、賢い、混乱したばかげた200行を書くことを望む。 あなたがインタビューでコードするとき、明確さは知恵を勝ち取ります。 Not そして しかし、 そして インタビューでも3秒かかりますが、コードは無限に読みやすくなります。 Name your variables properly. x y userCount maxRetries もしあなたが5つのことを行う一つのラインを書いているのなら、中間変数を使用して複数のステップに分割してください。 Break down complex logic. スピード 複雑なフィルタ操作の前に、面接官はあなたの意図を逆にエンジニアする必要から救うことができます。 Add comments if it helps. // Find all users who haven't logged in for 30+ days 言う この方法で、あなたが間違ったコースにいる場合、面接官はあなたを早めに修正することができます。 Think out loud before you code. “I’m going to iterate through the array and build a hash map of values to indices” (私は、数値からインデックスへの値のハッシュマップを作成するつもりです) 私はかつて、私が従うことができない非常にエレガントなリクルシブソリューションで問題を解決した候補者にインタビューしました. 彼らにそれを説明するように頼んだとき,彼らはなぜそれが機能したのかを表現できませんでした. それを別の候補者に比較してください. 明確な変数名で単純なリクルシブソリューションを書いていて,私にそれぞれのステップを歩きました. 二番目の候補者はオファーを受けました. あなたの目標は、あなたの素晴らしさでインタビュー者に印象を与えることではありません。あなたの目標は、あなたのチームメイトが6ヶ月で理解できるコードを書くことができることを示すことです。 9.あなたの境界を知る インタビューの時間管理は残酷です. あなたは同時にタイミングの下で問題を解決しようとしている間、評価されています. Here’s what I recommend: これはあなたの内部タイマーを設定し、あなた自身をペースアップするのに役立ちます。 At the start, clarify the time limit. 「45分あるよね?」 Say: 面接の時間の半分を頑固に燃やさないでください。 If you're stuck for more than 3-5 minutes, speak up. 「私はこれについて数分間考えてきたが、進展はしていない。 面接で複数の問題があり、あなたが最初の問題に閉じ込められている場合は、「これを続けるべきか、それとも次の問題に移すべきか」と尋ねてください。 Know when to move on. Don't spend 40 minutes coding and then have no time to test your solution. If you finish with 5-10 minutes left, walk through your code with some example inputs. Find your own bugs before the interviewer does. If the environment already has tests, ! Save time for testing. あなたがそれらを実行することを確認してください 仕事があるなら 残り5分のソリューションで、それを再現しようとしないでください。 より多くの時間をかけて何を最適化するかを挙げるが、まず作業ソリューションを提供する。 Be realistic about optimisation. O(n²) O(n log n) インタビューに失敗したのは、最初の3つの問題を完璧にするのに35分を費やしたからで、その後他の2つの問題に焦点を当てなければならなかった。 10. 深さを示すが、強要しないこと あなたが分散システム、キャッシュ戦略、または複雑な建築パターンで作業した場合、問題が自然にそこへと導く場合は、それを言及してください。 私は、シンプルな文字列の逆転機能を実装するよう求められた候補者に、Unicodeの標準化、グラフィームクラスター、右から左のテキスト処理について10分間の論文を発表しました。 鍵は部屋を読むことです。インタビュー者が興味を示し、分散システムに関するあなたの経験についてフォローアップの質問をする場合、それを拡張してください。 ここに良いパターンがあります:まず問題を解決し、次に深さを提供します。 「このソリューションは、我々が議論した要件を満たすために機能します。生産において、私はまた(特定の先進的な懸念)を検討しますが、私はこの練習の範囲外であると仮定しています。 このアプローチは、面接を抜くことなく、より広い文脈を理解することを示しています. You demonstrate expertise while respecting the interviewer's time and agenda. 私は一度、質問が単に問題だったときに、APIエンドポイントの割合制限をどのように実装するかを説明するのに15分を費やした間違いを犯しました。 面接官は、私の失敗から学びなさい:彼らが尋ねた質問に答えるのではなく、あなたが望んだ質問に答えなさい。 「電子メールアドレスを検証する機能を書く」 +1 常にフィードバックを求める あなたが仕事を得るか否かに関係なく、フィードバックを求めるほとんどの企業はあなたに詳細なフィードバックを提供しません(責任の理由、ほとんどの場合)、しかしそれはとにかく尋ねる価値があります。 オファーがあれば: 「ありがとう!インタビューで何がうまくいったか聞くことができますか? 常に改善を求めています。 拒否された場合: あなたはフィードバックに関するポリシーを持っているかもしれないが、将来のインタビューでどのように改善できるかについて何かを共有できるなら、本当に感謝するだろう」 いくつかのインタビュー者はこれを無視します。いくつかのインタビューはあなたに一般的なプラチナを与えます。しかし、時々、あなたはあなたの次のインタビューであなたを助ける真の、行動可能なフィードバックを得るでしょう。 “You over-explained things, did not consider your audience” (あなたは物事を過剰に説明し、あなたの観客を考慮しなかった) 「あなたの解決策は正しかったが、私はあなたの思考プロセスに従うために苦労した」 「明らかにあなたには幅がたくさんあるが、私たちはいくつかのトピックについてもう少し深く評価するだろう」 インタビューは、あなたの自己改善の旅のための金鉱です。 Here's something most candidates don't know: some interviewers are comfortable chatting about the interview afterwards directly — via email or LinkedIn. I'd always ask if this is an option. At the end of the interview, you can say: ほとんどの人は「はい」と言いますが、それはHRが提供するよりも正直なフィードバックのチャンネルを開きます。 「もし私がフォローアップの質問があるなら、LinkedInで直接あなたに連絡すれば大丈夫ですか?」 少なくとも、フィードバックを求めることは、あなたが成長を望む人であることを示しています。役に立つ情報が得られなくても、あなたはポジティブな印象を残します。ドクラーでの私の時間の間に、私たちは6カ月ごとに熱心に戻って来た頻繁なフライヤー候補者を持っていました。彼はいつもフィードバックを持って去り、二度と同じ間違いを犯したことはありませんでした。最後の機会に、彼は完璧なインタビューをしました。 最悪の結果は、何も聞こえないこと、最良の結果は、次の仕事を手に入れる何かを学ぶことだ。 Good luck! あなたの今後のインタビューであなたに最高の幸運を願います! 私のヒントがあなたに役立った場合、またはあなたがより有用なトリックを共有する場合は、チャットしましょう!