ハッキングインタビュー:アルゴリズム別、アーキテクチャ別、行動別など

画像



私はシリコンバレーの企業で7回のインタビューを終えました。 最終的に、Facebookでのソフトウェア開発の提案を受け入れました。



これが、このインタビューの準備方法であり、その過程で学んだことです。



シリコンバレーへの長い旅



オーストラリアの大学でコンピューターサイエンスを学んだとき、シリコンバレーのソフトウェアエンジニアとしての自分の将来を常に想像していました。



私は、技術業界のすべての革新とその失敗の中心にいるというアイデアが好きでした。 この目標は私をやる気にさせました。 集中するのに役立ちました。



私はメルボルンの素晴らしい会社でリードiOSエンジニアとしての仕事を辞め、故郷のパースに戻って勉強しました。 ここでは、シリコンバレーで私を待っている交渉プロセスの準備をします。 私はそれが信じられないほど難しくて難しいことを知っていました。



ソフトウェアエンジニアとの部屋で技術面接について言及した場合、多くは従来の面接方法に反対します。 議論のほとんどは、ボード上のアルゴリズムを解くことは、ソフトウェアエンジニアの日常的なタスクを実際に表していないという事実に基づいています。



この記事のために、私はこの議論に入りません。 代わりに、候補者の観点からさまざまなタイプのインタビュー方法を検討します。 また、このプロセスから学んだことに焦点を当てます。






この翻訳は、 EDISON Softwareによってサポートされていました。EDISONSoftwareは、大規模な顧客向けのソフトウェアを専門的に開発している会社( 都市照明 制御システム電子検診システムなど )です。



面接はスキルです



研修中、私はいつも面接が難しいことを理解していました。 しかし、私は正直に言って、最初のインタビューに出るまで、それがどれほど難しいか分かりませんでした。



面接を見越して、有償サービスと無料サービスの両方を使用しました。これは、候補者との面接の実際の経験を持つ人々との電話インタビューをシミュレートしました。 これらの実際のインタビューは、プレッシャーを克服するために重要でした。 しかし、後で理解したように、彼らはこのインタビューの構成要素の一部にすぎませんでした。



私はあなたの後ろにいくつかの架空のまたは実際のインタビューをせずにあなたの夢の仕事のためにインタビューを受けないことをお勧めします。 神経質は信じられないほど圧倒的であり、練習を通してのみ鈍化することができます。



人生の他の多くの状況と同様に、練習は自信を高めます。



私が遭遇したさまざまなタイプの就職の面接



電話での面接で十分な準備ができ、十分に話すことができれば、その場所に着いて一日中面接を受ける機会が与えられます。 これらのインタビューは通常、インタビュー先の会社に応じて4〜6時間続きます。



シリコンバレーへの旅行中、私はなんとかオンサイトインタビューを7回受けました。 これにより、現在の意味でのユニークなインタビュー体験ができました。



通常、3つの主要なトピックがその場で扱われます。 私が研究して準備したアルゴリズム、設計、および動作のトピック。 ただし、この傾向を打ち破り、より実用的なスキルを獲得できるようにインタビューを拡大しているように見える企業もあります。



私が遭遇した各トピックを簡単に確認します。



アルゴリズムインタビュー



あなたが遭遇する最も一般的なタイプのインタビュー。 インタビュアーは、ボード上の問題を解決するように依頼します。これは、データ構造、ソートアルゴリズム、再帰、アルゴリズムの複雑さ(時間/空間の複雑さ)の分析、およびリスク認識に関する知識を評価します。 このインタビューでは、悪い解決策を思いつき、その解決策を改善し、提供するさまざまな解決策とのトレードオフについて議論します。



それは私の準備のパンとバターでした。毎日6週間、安いハンギングボードでアルゴリズムを解決し、その複雑さ(時間/空間の複雑さ)を推定し、コードの各行で何が起こっているのかを本当に理解しようとしました。



個人的には、ボード上のアルゴリズムを解くのがとても好きです。コンパイルされた構文を書くことを心配する必要がほとんどないので、タスクに専念できるからです。 他の人はボードが気に入らないかもしれませんが、試してみることを勧めます。



建築設計面接



これは私が非常に過小評価していた興味深いインタビューです。 インタビュアーは、駐車チケットシステム、チャットメッセンジャー、ツイッターチャンネル、または他の同様のシステムなどのシステム(もちろん、ボード上)を開発するように求めます。



評価しているのは、基本的な概念を理解し、すべての要件と制限を満たすシステムを設計する方法です。 また、候補者は要件と制限を定義する適切な質問をする必要があります。 このインタビューは、より多くの会話と図式化、そして場合によってはクラス構造化と混同されています。 すべてが非常に高レベルであるため、実際の実装コードを記述する必要はありません。



当然、会話を管理して、システムの動作方法に関する知識を示す必要があります。 あなたがバックエンドエンジニアである場合、この分野での経験がなければ、クライアントアプリケーションがどのように機能するかを詳しく調べることはありません。 私はiOSエンジニアなので、APIエンドポイントのスケーリング、従業員、AWSの追加などではなく、アーキテクチャ、機能のモジュール化、デザインパターンについて話しました。



行動面接



インタビュアーは、あなたについての質問と、特定のタイプの状況への対処方法について質問します。 この準備は他のインタビューほど難しくはありませんが、あなた自身の内省が必要になります。



通常、質問は次のとおりです。





彼を失敗させるのはかなり難しいと思うが、多くの人が失敗したと聞いた。 彼らは、自分の長所を短所として隠し、インタビュアーが他の人の失敗したプロジェクトの失敗を聞きたい、または単に非難したいという意見に対する反応を投影しようとします。





これらのインタビュアーは、下品な人を特定し、これに特に注意を払うように訓練されています。 誠実であること、あなたの仕事に情熱を示すこと、あなたの欠点に気づくこと、改善するために率先して行動すること、そしてすべてがうまくいくでしょう。



企業文化のコンプライアンス



これは通常、行動面接の一部であり、会社の基準を満たしているかどうかを判断することに焦点を当てています。



たとえば、Facebookはハッカーのような文化に従い、大胆で新しいアイデアを歓迎し、何かを台無しにすることを恐れていないようです。 また、Airbnbは、人々がどこにいても居心地の良い世界を作りたいと考えているため、ホスピタリティスキルを持つ人々を探しています。



多くの大規模なテクノロジー企業は、彼らの価値観を遵守することに基づいて、彼らの文化と人材の雇用に多大な注意を払っています。 これらの企業のいずれかで面接を行う場合、その価値を追求し、得られた経験に基づいて、面接担当者にそれらを伝えることができることが重要です。



ペアプログラミング



開発環境が特別にインストールされるコンピューターの前で、実際に使用されるものと非常によく似た別のエンジニアとペアになる興味深いカテゴリー。 タスクを完了するとすぐに満たす必要のある要件のリストがタスクに与えられます。インタビュアーは、タスクの完了期限が過ぎるまで、より多くの機能を示すように求めます。 Stack Overflowやドキュメントなど、あらゆるリソースを絶対に使用できます。



このインタビューでの候補者の成功は、実際のテストに対する彼の準備によって主に決定されるように思えます。 ホワイトボードとは異なり、構文的に正しいコードを書くことは単純に必要です。したがって、インターネットやドキュメントで回答を探すのに時間をかけたくないため、外部と内部の両方で作業する言語と開発環境を知っておく必要があります。



前の作業中に、タスクの作業中にクリーンなコードを記述しようとしました。 この種のワークフローは、このタイプのインタビューでは効果的ではありませんでした。 きれいなコードで行き詰まり、プログラムを最適化するのが早すぎたため、元の場所に戻るのは困難でした。 あいまいなコードを書いて、面接担当者に、実際の開発ではすべてを違ったやり方でやったことを思い出させれば、クリーンで最適化されたコードを書くのとは対照的に十分であると思いました。



エラーの検索と修正



エンジニアとして私たちが行うことの多くは、さまざまなソースから報告されたバグを見つけて修正することに焦点を合わせています。 このインタビューでは、エラーを見つけて修正するためのエラーのリストと、他の潜在的に問題のあるコードを特定します。



このタイプのインタビューは1件しか見ていません。特に後輩の場合、準備するのは本当に難しいと思います。 各プログラミング環境には独自の小さな癖とニュアンスがあり、それらの多くは統合開発環境(IDE)での以前の経験と、長年使用してきた同様のフレームワークのおかげで明らかになりました。



お住まいの地域の知識をテストする



プログラミングは、今日見られるほとんどの言語で基本的に同じです。 おそらく、ある言語でオブジェクト指向プログラミングを知っているなら、これらのスキルは別の言語に適しています。



ただし、このインタビューでは、言語またはフレームワーク間でリンクできない側面に焦点を当てています。 APIに関連付けられた環境の機能、メモリ管理、機能、制限、履歴などについてインタビューされます。

この特定のトピックの準備をすることは、おそらくより困難です。 エラーの発見と修正に関連するインタビューの場合のように、多くの答えはすでに得られた経験に基づいていると思います。 適用する役割のレベルに応じて、あなたが与える答えは異なって重み付けされる場合があります。 たとえば、後輩であると主張する人がAPIが特定の方法で構成されている理由のストーリーを知らない場合、リベートが与えられることがあります。 ただし、上級職に応募する候補者が答えを知らない場合は、より厳密に評価されます。



オペレーティングシステムについて



インタビューしている役割またはチームによっては、オペレーティングシステムのみに焦点を当てたインタビューが行われる場合があります。 このインタビューでは、コンピューターのオペレーティングシステムの下位レベルの理解度を評価する質問があります。



正直に言うと、このインタビューは私を驚かせました。 大学でオペレーティングシステムを学んだのは初期の頃でしたが、それ以来、この問題について私の知識があいまいになり、私の特性に影響を与えました。



準備方法



先ほど書いたように、インタビューはあなたのスキルです。 あなたがすでに日々の仕事で優秀なプログラマーであるか、研究で優秀な成績を修めている場合でも、小さなインタビュールームで自分を見つけたときに、スキルを1対1で移行することはできません。 面接の準備と実践との忍耐、繰り返し、一貫性があなたの結果の重要な決定要因になります。



最低限の知識



誰かが私に焦点を当てるべき分野を尋ねたら、私は以下を提案します:





いつ始めるか



タイミングによっては、できるだけ早く開始したい場合があります。 私がインタビューした企業の多くは、失敗した候補者が再申請できるようになるまでに12か月間休止していました。 一方、1年以内に準備ができていないことがわかっている場合は、今すぐプロセスを開始し、面接プロセスを通過するのがどのようなものかを感じて、準備ができたらそれほど怖くないようにすることができます



心配しないで



あなたは成功します。



ソース



テストインタビュー





アルゴリズム





オペレーティングシステム



オペレーティングシステムの基本概念 、本



建築デザイン





行動について






All Articles