web-dev-qa-db-ja.com

面接中に間違った/回答されていない質問にどのように反応しますか?

今日はインターン候補者との最初の面接を行いました。これは主に未解決の質問でしたが、私はそれらのためにいくつかのささいなプログラミングタスクを持っていました:

  • 三角形の辺(すべての整数)a、b、cが 直角三角形 を表すことができる場合にtrueを返す関数を記述します。
  • FizzBu​​zz。
  • 再帰を使用してフィボナッチのN番目の要素を計算します(彼らが Fibonacci が何であるかを知らなかった場合、私はそれらに定義F(n) = F(n-1) + F(n-2); F(1) = 1; F(0) = 1)。
  • 整数の構造体リストを実装し、それを反転する関数を記述します。

これらは明らかに非常に簡単な作業であり、誰かが解決しないようにする準備ができていませんでした。

彼らがこれらの質問に苦しんでいるとき、私はどのように行動すべきですか?答えをあきらめるべきですか?チップごとに与えますか(私はそれを行い、最終的に自分で問題を解決しました)?それとも、インタビューを続行する(または単に停止する)か?

ps。質問に問題があるということは、バグがあるようなものではありません。これはフィボナッチとリストの質問の場合でした。

31
Mykolas Simutis

あなたは質問のインターンのポジションについてインタビューしていると言ったので、これはその観点からです。フルタイムの開発者にとっては、バーは少し高くなるでしょう。

インターンに面接するときは、彼らが彼らの研究を完了していない可能性があること、そして彼らがプログラミングやコンピュータサイエンスの以前の背景なしに大学に入学した可能性があることを覚えておく必要があります。したがって、期待を、誰かが知っていると合理的に期待できるものと、職位の威信の程度に合わせて調整する必要があります(つまり、Googleは、人々が聞いたことのない企業の期待に応えることができます)。

あなたが提示した質問に目を通すと、インタビューでは次のように考えられます。

1)三角形の辺(すべて整数)a、b、cが直角三角形を表すことができる場合にtrueを返す関数を記述します。

単純なコーディングによるジオメトリの基本的なアプリケーション。ほとんどの学生は、それほど簡単にこれを行うことができます。ピタゴラスの定理は、面接のために少しストレスを感じている場合に限り、覚えておく必要があります。これは、インタビューに参加するのが非常に緊張している場合に一部の人々を解決するのに役立つという点で、ほとんど「エゴブースト」問題と見なすことができます。

2) FizzBu​​zz

繰り返しますが、いくつかの基本的な制御ステートメントの別のアプリケーション。モジュラス演算子に慣れていない、またはあまり使用していない学生は、覚えておく必要があるかもしれませんが、問題を解決する実際の問題は発生しません。

3)再帰を使用してフィボナッチのN番目の要素を計算します(フィボナッチが何であるかを知らなかった場合は、次のように定義しますF(n) = F(n-1) + F(n-2); F(1) = 1; F(0) = 1)。

これはかなり一般的な問題になる傾向があるため、ほとんどの(すべてではないにしても)学生は卒業前のある時点でそれを目にします。キャッチは通常、再帰がうまくいくときに再帰が生徒に提示されたときに表示されるか、または再帰的またはループベースのソリューションを比較できるため、コースの順序に応じて異なる学校の生徒が異なる時間にそれを見る可能性があります。実際には、誰かが再帰を思い付くことができなかった場合は、ループを使用した代替案を求め、その人がそれを思い付かなかった場合は、その潜在的な能力をより懸念します。

4)整数の構造体リストを実装し、それを反転する関数を記述します。

この質問は、記述されているため、実際には少々長すぎるかもしれません。そのため、候補者が追加情報を求める方法(たとえば、関数の削除、配列への変換など)を確認することも良い質問ですが、定義された問題ステートメント(「整数の基本的なリスト構造を実装して、数値を最後または任意のインデックスに追加し、削除し、リストの逆のコピーを返す関数を含める」)学生は解決できるはずです。リストが初期のデータ構造コースまたは初期の基本的なコンピュータサイエンスコースで提示される一般的な構造である限り、問題。

候補者とのやりとりに関して、もし彼らが苦労しているなら、彼らがリラックスしていることを確認し、これが彼らの最初の本当の面接かもしれないので、彼らはパフォーマンス不安を持っているかもしれないので、彼らに少し寛大さを与えます問題を解決するためのヒントが必要になる場合があります。ほとんどの場合、最初の2つではなく3番目と4番目の問題の場合です。

また、面接プロセス全体を構造化して、「優雅な出口」ポイントが組み込まれるようにします。たとえば、次のような議題があるとします。

  • 面接の手順を満たし、挨拶します。
  • スタッフプログラマとの短いインタビュー、背景に関する基本的な質問。
  • プログラミングクイズのプレゼンテーション。
  • ブレーク
  • 休憩からの復帰、ふさわしくない一部の候補者の解雇。
  • スタッフプログラマとの面接の延長。
  • 人事面接(必要な場合)。
  • 要約。

この面接フローは、候補者が休憩後に解雇される可能性があることを最初から知っているので、候補者を早期に解任したい場合に適しています。クイズの前の短い面接は、彼らが面接の練習をする試験を受けるために現れていないだけでなく、彼らが彼らが適切でないと決定することを可能にするかもしれないことも意味します。クイズを観察したり候補者を支援したりしている他のプログラマーがいる場合は、短い休憩中に候補者を合格/不合格にする機会も与えられます。

インターンシップの面接で候補者が学生である場合は常に、それらはまだ学生であり、面接の練習があまりない可能性があり(パフォーマンスの不安につながる可能性があります)、学習のポイントに達していない可能性もあります。質問に答えることもできます。つまり、彼らに与えられた問題に対する「理想的な解決策」のコピーを添えて、彼らを途中で送るのは良い考えかもしれません。

36
rjzii

面接の目標は、どちらにいても、同僚と話しているような感覚になってしまうことです。同僚が問題に悩まされているときはいつも私のオフィスに入ります。行き詰まったときは同僚に助けを求めます。だからインタビューでは、そのダイナミックさを再現しようとしています。

言い換えれば、同僚がフィボナッチ数列を実装する必要があり、それが何であるかを知らなかった場合はどうしますか?彼らが自分たちで続けるのに十分把握するまで、彼らに説明します。それが永続的でない限り、無知に恥はありません。

あなたがそのエクササイズを行っても、その人と一緒に働いている自分を想像できない場合、それらは仕事に適していません。

83
Karl Bielefeldt

面接でこのような質問をすることのポイントは、誰かが問題を解決する方法を理解できるかどうかを判断することです。プログラマーになるという仕事は、一般に「これらの要件を取得してコードに実装する」と「実装が要件と一致しない理由を突き止めて修正する」という2つの要素で構成されます。だからあなたが本当に探しているのは、これらの特定の質問に対する解決策ではありませんが、物事を理解する能力

これを理解して、私は誰かを始めるためのヒントを1つまたは2つ与えます。そして、彼らが実際の進歩を遂げているが、どこか詳細を欠いていることが明らかな場合は、さらにもう少しかもしれません。しかし、問題を解決する方法を彼らが理解できないことが明らかになった場合は、あなたの答えがあり、演習を続ける必要はありません。

例を挙げると、現在の仕事でインタビューしたとき、あるノードから別のノードへの最短経路をグラフ上で見つけることについて質問されました。私はダイクストラのアルゴリズムのようなものを使用する可能性が高いと返信しました。大学で1日前に学んだことを覚えていて、それ以来使用していなかったことを漠然と覚えており、質問。インタビュアーは、グラフがわずかに変更された場合、私のソリューションは無限ループに陥り、それが私の記憶を揺さぶるだろうと指摘したので、この問題を回避する正しい方法を説明しました。そして、私は仕事を得ました。

9
Mason Wheeler

インターンのポジションについては、あなたは少し尋ねるかもしれません。

4番目の質問であなたが何を意味しているのか私にはわかりません。再帰の質問をすることについては、それは少し非現実的です。独自のコードベースを調べて、再帰が使用される領域の数を決定してください。面接の状況はストレスが多く、これまでにプログラムするほとんどの事柄と比較して、逆に使用される、めったに使用されない戦略を採用することを候補者に期待することは、特に面接の開始に向けて、不公平です。個人的には、重要な概念の意味や使用方法を説明し、定型の例を提供する必要がある場所について質問します。 XブックまたはGoogle Y検索がコードベースに何かを実装するために必要なすべてを提供することを教えてくれる候補者にもっと興味があります。

7
Ryathal

私の最初の2つの質問は、彼または彼女自身をプログラマーと呼ぶ誰でも、それがジュニアまたはシニアであれ、学校を出ていない、または独学であれ、解けるはずです。

インタビュアーがこれらのいずれかに苦労しているのを見つけたら、問題を言い換えて、彼がそれを完全に理解しているかどうかを確認します。次に、ペンと紙、ホワイトボード、図を描く、または問題に取り組むために彼女が好むあらゆるアプローチを使用するように彼女に勧めます。私はまた、声を出して考え、彼女の思考プロセスを考察し、必要に応じて、彼女が正しい道を進んでいない、または何らかの障害があるかどうかについて少しヒントを与えるように彼女に依頼します。しかし、いくつかのヒントが役に立たない場合、または-先に述べたように-私が彼女の問題を解決してしまう場合は、面接を終了して、時間の無駄をなくすことができます。面接では、候補者が知らないことではなく、知っていることに注目して焦点を合わせるように常に努めていますが、重要な知識が見つからないと思われる場合は、しばらくあきらめます。

3回目と4回目はやや難しいので、ジュニアがうまくいかなくても、問題解決のアプローチと熱意が立証できれば受け入れられます。しかし、高齢者にとって、彼らはまだ必要です。

4
Péter Török

私はあなたが「FizzBu​​zz」で何を意味しているかを調べなければなりませんでした。私はゲームとそのルールについて聞いたことがありますが、その名前ではなく、しばらくの間ではありませんでした。したがって、面接対象者に情報を提供する必要がないとは思わないでください。

とは言っても、これらはすべて基本的なコーディングの問題であり、入門レベルのコーディングポジションでも面接で答えをコーディングできない場合は、面接担当者が面接できると思います。そこで、同じページにいます。あなたの問題への答えは、彼らがそれをどのように間違っているのかに依存しています:

  • マイナーな構文の問題:特定の言語のコードを想定している場合、セミコロンやスペルのミス、または識別子の1つの使用にミスがある場合は、あまり大きくカウントしないでください。ほとんどのIDEはすぐにそれをキャッチし、誰もが時々タイプミスをします。私が何かをコーディングすることが期待されていたほとんどすべてのインタビューでは、アルゴリズムがインタビュアーに適切に伝達され、ロジックが適切である限り、「疑似C風」が許容されました。

  • マイナーロジックの欠陥:アルゴリズムが予想されるシナリオのすべてではなく、ほとんどのシナリオで予想どおりに動作する場合(たとえば、FizzBu​​zzをコーディングする場合、15は「Fizz」または「Buzz」のみとなり、両方ではありませんそれが想定されているように)、「ユニットテスター」になり、そのインスタンスではアルゴリズムが失敗することを指摘し、修正できるかどうかを確認します。彼らはその特定のケースを見落としているか、要件を十分に理解していない可能性があります。どちらも、コーディングで日常的に発生する完全に理解可能なものであり、追加の情報やフィードバックを提供するだけで簡単に解決できます。

  • 主要な論理上の欠陥:アルゴリズムがほとんどまたはすべてのテストシナリオに合格しない場合は、その点も指摘し、アルゴリズムが修正できるかどうかを確認します。これはもっと問題です。彼らはシステムのいくつかの非常に基本的な要件を誤解しているか、ギャップのあるロジックホールを見落としていた。しかし、問題がより詳細に説明されていて、コードがどこで失敗しているかを正確に知らされずに修正できる場合は、要件が不明確になるまでそれをチョークして次に進みます。

  • 開始する場所がわからない/特定の場合にハードコードされた回答/それらの疑似コードを理解できない:これらは赤い旗です。誰かにFizzBu​​zzルールに従うアルゴリズムをコード化するように依頼し、それらのルールを説明してもらい、空を見つめると、インタビューは終了です。同様に、ボードにSOMETHINGを配置できても、問題スペースの大部分で失敗し、失敗の説明と修正方法を説明するときに手を握らなければならない場合は、2番目のインタビューに進みません。 。

4
KeithS

インタビューを受けたことがなく、不安の問題があり、そのような現実の状況に行ったことがないために、ヘッドライトで鹿のように振る舞う可能性のあるインターンが本当にいる場合(通常はボディランゲージから気づきます)、彼らが最後に取り組んだことを彼らに尋ねます。

それから彼の領土になるので、彼はひどく緊張しないかもしれません。適切な場所を見つけたら、「ねえ、どうやってそれを実装しましたか?」と尋ねます。彼が説明できれば、それは彼の考え方への洞察をあなたに与えるかもしれません。

その後、独自のテストをアジェンダに入れます。

3
Raku

Fizzbuzzは絶対的な要件です。彼らがFizzbuzzをコーディングできない場合、彼らを雇ってはいけません。

私は通常、受験者に面接前のコードセッションを依頼します。このセッションでは、Googleドキュメントを使用してプログラミングの問題(通常はFizzbuzz + Fizzbuzzを簡単に完了できる場合はより高いレベルの問題)を処理します。

私は通常、電話またはスカイプでこの間、彼らが問題を完了するのを見ている(そして、彼らが特定の時点で彼らが考えていることについて彼らに話している)ので、彼らがそうしなかったと合理的に確信できる答えをググるだけ。

他の問題が明確に指定されている限り(つまり、それぞれに式を与えれば)、質問は問題ありません。

候補者を面接するとき、私は彼らが遭遇する可能性が高いプログラミングの問題に固執しようとします。文字列操作の問題が大好きです。Webを使用しているとき、ユーザーが直面しているすべてのことは、何らかの文字列操作に関係しているからです。彼らがそれをどのように扱うかは重要です。

2
George Stocker

それはあなたが埋めようとしているポジションの口径に依存します。

あなたが上級開発者のために行くなら、私は彼らがそれらのすべてを知っていることを期待します。彼らがそれを間違えて、私が悪を感じていたなら、私はインタビューを止めるだけです、ありがとう、そしてさようなら。私がもっと礼儀正しい気分だったら、彼らとラッシュに感謝し、残りのインタビューを終えた。

私がジュニア開発者の場合、これらの質問はかなり難しいと考えられます。私は彼らの能力と学ぶ意欲を探求することにもっと興味があります。それで、私は彼らにヒントを与えて、彼らを案内して、彼らがどのように反応するか見てみます。

1
Mongus Pong

インターンの面接は別の種類の面接です。私が通常行うことは、開発者の標準的な質問(提供した質問など)を使用して、彼らが教育のどこにいるかを判断することです。これらの問題を解決する能力は、2年生から年長者まで大きく異なります。

その情報を入手したら、インタビューを他のスキルに焦点を合わせます。たとえば、彼らはチームで作業できるか、彼らは教えることができるか、彼らは私たちの会社でのインターンから利益を得るか、開発/学習に情熱を傾けるかなどです。

私にとって、インターンが他の候補者と一線を画すのは、非技術的なことです。私はむしろ、学期のための仕事を望んでいるだけの人よりも、学び、成長するように駆り立てられている人をコーチング/メンターするために数ヶ月を費やしたいと思います。

1
Brian Dishaw

面接対象者が会社にどのような価値をもたらす可能性が高いかを自問してください。特にfizzbuzzレベルで問題を解決できない場合は、メンターを関与させるコストを考慮してください。答えが意図した給与に見合っていない場合は、それらを雇わないことをお勧めします。

上司に戻って「私たちの会社に十分な付加価値を与えるだけの価値のある候補者はいなかった」と恐れずに言ってください。これは、誰かを絶えず助けてもらうコストがかかるため、実際に負の価値のある人で終わるよりも、より良い行動方針でなければなりません。

私の答えは少し不親切または非難に見えるかもしれませんが、私はそれがうまく機能すると思います。まず、候補者に非常に簡単な質問をします。これは、彼らの信頼を築くのに役立つウォームアップ質問として役立ちます。彼らが成功するかどうかにかかわらず、私はそれほど重要ではなく、仕事に伴うものに直接関係する質問に移ります。

この時点では、それは全部かゼロかです。彼らがそれを通って航行すれば、素晴らしい、問題ありません。彼らが少し苦労している場合、問題はありません。私は彼らを一緒に操り、他の質問に移って他の能力を評価するのを手伝います。

しかし、彼らが完全にそれを解決する能力を欠いている場合、私は先に進み、インタビューの残りの時間を焼いて彼らを助けます。候補者はまだ面接に関与していると感じていますが、面接を異なる、無関係な方向に向ける必要はありません。それは教育的であるかもしれないので、それは候補者にとっても良いことです。

0
Kevin Hsu
  1. それらにニースになるようにしてください。あなたの質問によって、あなたはここでもニースになろうとしていないことがわかります。誰もがこの「fizzbuzz」という用語を知っているべきだと思いますか?それとも、自分で書くのが面倒だったので、ネットを検索する必要がありますか?それどころか、ここの誰もが直角三角形が何であるか知っています。
  2. 「ストラクチャーリスト」とは?知りません。 「リスト構造」を知っています。それはどういう意味ですか?整数のリスト?あなたが意味する整数のリスト?私も、どうやって始めたらいいかわからない。そして、あなたが英語ではないことを話さないでください。私も。そして、私は英語圏の国に行ったことがありませんでした。あなたは確かに複数形の整数が整数になることを知っていますs。ここであなたのイコールで理解しようとしないのであれば、私はあなたがどのようにしているかを想像できますそこで
  3. 文盲のプログラマーなら誰でも、フィボナッチ行が再帰によって行われてはならないことの本の例であることを知っています。それらをあなたに対抗する能力やコーディングスキルについてテストしていますか?あなたの仕事をして、再帰を使用するスキルをテストするためのより良い例を見つけてください。
  4. プログラマーにとって「ストレス下で働く能力」とは、必要なときに夜間働くことができることを意味します。しかし、もしあなたが良いプログラマーを持ちたいのなら、彼らは彼らのチーフがとても素敵で、理解し、親切なフェローになるのを待ちます。そうでないと、優れたプログラマーがいないことになります。彼らはアルファラットの雄ではありません。彼らが何らかの攻撃を感じる場合、彼らは単に彼らの殻で閉じて、何もしません。

だから、私の答えは、自分自身をよりよく準備することです。

追伸あなたはすでにマネージャーなので、あなたは本当にストレスを抱えているはずです。

0
Gangnus