シリコンバレーの2番目の大きな技術ブームにより、エンジニアは、新興企業や技術の巨人からも非常に高い需要があります。 エンジニアリングのバックグラウンドを持っている人、またはコンピューターサイエンスを勉強している人にとって、世界は今まさにあなたのカキです。
そうは言っても、企業は単に仕事を与えているだけではありません。 プログラマーは、時には恐ろしい技術面接を含む、専門的な面接プロセスを経る必要があります。
これらの準備は混乱を招く試練です。 特定の技術プロジェクトを勉強する必要がありますか、一般的に多くのトピックを更新する必要がありますか? コンピューターで練習するのか、友達と練習するのか
約165人の技術従業員を抱えるPocket Gemsの3人目のエンジニアとして、数百件の電話インタビューと現場インタビューを実施しました。 この間、私は適切に準備する方法について多くのことを学びました。 次の技術面接に必要なヒントを紹介します。
基礎に焦点を当てる
インタビュアーは主に、データ構造、アルゴリズムの複雑さの分析、クラスの設計などの基礎について質問します。 これらは、ファンダメンタルズに関する直接の質問(たとえば、Xを使用してYを行う)と、ファンダメンタルズを使用する質問(詳細は以下)の両方になります。
基本をツールボックスのツールと考えてください。 どんなにすばらしい新技術が出ても、彼らは変わらないでしょう。 強力なファンダメンタルズにより、オープンエンドの問題、つまり私たちや他の多くのスタートアップが日々解決している問題に取り組む準備が整います。 ファンダメンタルズに焦点を当てることにより、インタビュアーはインタビューの質問を設定する時間を短縮し、あなたの考えを見る時間を増やすことができます。
たとえば、次のような質問が表示される場合があります。バイナリツリーとツリー内の2つのノードが与えられます。 O(n)時間で与えられた2つのノードの最も低い共通の祖先を見つけます。
この質問を通して、インタビュアーはあなたがあなたの思考プロセスと解決策をどれだけうまく伝えることができるかを探しています。 問題をどのように考え、考えを整理し、答えを伝えるかは、結論と同じくらい重要です。 私たちは複雑で絶えず変化する環境で働いており、困難な問題を解決し、それらを技術的および非技術的なチームメイトに効果的に伝えることができる人を必要としています。
インタビューのこの領域では、文字列、配列、基本的な構文、データ型、リンクリスト、ツリー、グラフ、スタック、キュー、ハッシュテーブルなどについて議論することに慣れている必要があります。 ああ、目をつぶらなくてもFizzBuzzに答えられることを確認してください。
さまざまな方法で物事を解決する準備をする
基礎にはそれぞれ長所と短所があり、特定のタイプの問題に対して独自のソリューションを提供します。 インタビュアーがあなたのファンダメンタルズだけについて質問した後、彼らは実際にそれらをどのように使用できるかを見るでしょう。 これは、さまざまな方法で解決できる自由回答形式の質問をすることで達成されます。
ここでの質問の例は次のようになります。算術式が文字列として与えられます。 この方程式には、1桁の0〜9、加算、減算、乗算、および括弧があります。 この方程式を取り、正解を計算する関数を作成します。 入力例には、「1 + 1」と「2 *(1 + 9)-((2 + 5)-9」)が含まれます。
前と同様に、インタビュアーは、自由回答式の質問とソリューションを選択する際の思考プロセスをどのように分解するかを確認したいと考えています。 最も重要なことは、彼らはあなたが複雑な問題を効果的に伝えることができることを望んでいます。
どんな質問やどんな解決策を選んだとしても、大声で考えてください! 問題を解決するさまざまな方法がある場合は、どちらを使用するかを決定する前にオプションを確認してください。 インタビュアーがあなたの思考プロセスを見て理解するのに役立ちます。 また、インタビュアーは、他の人が特定の落とし穴を持っているか、インタビューの範囲外である可能性があることを知っているため、あるソリューションを他のソリューションよりも推奨する場合があります。
不明な点がある場合や、詳細な情報が提供されていない場合でも、質問することを恐れないでください。 これらもあなたが考えていることを示しており、インタビュアーにあなたが他の人とどのように働くかについての感覚を与えます。 質問を完全に理解するために明確な質問をしており、問題の範囲を拡大していないことを確認してください(たとえば、入力例は何ですか?0で割ることを心配する必要がありますか?心配する必要がありますか夏時間?)
最後に、終了と言う前に、いくつかのテストケースを口頭で確認してください。 これにより、コードをチェックし、コードをチェックしていることをインタビュアーに示すことができます。 面接をするのと同じくらい簡単ですが、残念ながらあなたの心を読むことはできません。
そのため、準備中に、ツールボックスのさまざまなツールを使用して質問を解くことを練習して、それについての直感を開発します。 インタビュー中につまずかないように、各ツールをいつ使用するかを知っておいてください。 また、思考プロセスを完全に説明する練習を必ず行ってください。これは、単独で作業することに慣れているコーダーにとって最も難しい部分です。
練習、練習、練習
練習すればするほど、テクニカルコーディングインタビューの準備が整います。 これはほとんどの場合に当てはまりますが、特に技術面接に関連しています。彼らは本当に脳を温める必要があります。
練習時間を最大限に活用するためのヒントをいくつか紹介します。
- インタビュー環境をシミュレートしてください。 問題に時間制限を設けてください。 電話インタビューを行う場合は、StypiとGoogleドキュメントの両方で練習してください。 (オートコンプリートがなく、構文の強調表示が電話インタビューでつまずいたことがあります。)面接を直接行う場合は、紙またはホワイトボードで問題を練習してください。
- 技術に詳しくない友人にインタビューの質問をしてもらい、彼または彼女に答えを説明してもらいます。 あなたが彼または彼女にそれを説明できるなら、あなたはあなたの技術面接官にそれを説明できると確信しています。
- あなたがそこにあるいくつかの準備ツールを使用する場合、あなたが浮気していると感じることはありません。 多くの場合、優れた洞察と練習の質問を提供します。 私のお気に入りは、TopCoderや Head Firstの 本などのWebサイトです。 インタビュープロセスについて詳しく説明している他の書籍には、 プログラミングインタビューの公開 と コードインタビューのクラッキングがあります 。
テクニカルコーディングインタビューはかなり困難に思えるかもしれませんが、適切な種類の集中的な練習を行うことで、あなたはそれらに立ち向かう準備ができます。 パンとバター、基礎に集中し、たくさん練習することを忘れないでください。 上記のヒントに従ってください。次のテクニカルコーディングインタビューの準備が整います。
さらに情報が必要ですか? 私は最近、UC Berkeley Engineering / Tech Career Conferenceでこのテーマについて発表しました。 他の考えやリソースについては、以下の講演のスライドをご覧ください!