web-dev-qa-db-ja.com

アルゴリズムの質問はインタビューの質問に適していますか?

最近、他のプログラマーと議論しました。彼は新しいポジションについて面接をしていて、この質問をされました:

Xで始まりYで終わる一連の数値を指定しますが、1つの要素が欠落しているため、NはY-X-1です。欠落している要素をO(N)以上で見つけます。

さて、答えはここでは関係ありません(しかし興味深い)。これは、これがインタビュー中に尋ねるのに良い質問でさえあるかどうかについての議論を始めました。

一方:アルゴリズムはプログラミングの継承部分であり、この質問に答える候補者の能力は、この候補者が優れたプログラマーであり、より大きな問題を解決でき、最終的に理解と答えが簡単なほとんどのプログラミングタスクを処理できることをサポートします。

反対側:ゼロからアルゴリズムを作成することは現代のプログラミングではほとんど使用されないため、その人が優れたプログラマーになるかどうかというより大きな問題には無関係です。人はこの質問にうまく答えることができても、より一般的なプログラミングタスクを実行できません。

あなたの考え?良いインタビューの質問かどうか?

25
MBonig

アルゴリズムの質問をすることに同意しますが、特定のbig-O品質レベルを主張することに同意しません。

この種の質問をすることは、その人がどのように問題に取り組み、彼らの試みでどのような落とし穴を考慮するかを見るのは興味深いですが、彼らが何かめちゃくちゃ不正確または非効率的なものを書いていない限り、彼らが書いたものの実際の詳細は彼らが首尾一貫した方法で問題解決/設計ステップを通過します。

私も同様の質問をしますが、私が採用後に最も幸運だったのは、不完全な答えを出したが、彼らのアプローチに正しい考えを持っていた人々です。

20
Bill

アルゴリズムを書く能力は、その人が優れたプログラマーになるかどうかというより大きな問題には無関係であるという考えには同意しません。彼がそれを使用する必要がない場合でも(これは疑わしいことです)、それは、彼がすでに作成されてレイアウトされている単純な要件のセットよりも複雑な問題の論理的な解決策を作成するために必要な精神的な柔軟性を持っているかどうかを示していますクライアントによる詳細。

私はどう考え、分析する方法を知らない人を雇いたくありません。それが、コードモンキーとコンピュータプログラマとの違いです。

9
Mason Wheeler

私はここで、私がインタビューでアルゴリズムの質問をするのが好きな人の一人であることを認めなければなりませんが、質問に対する実際の答えはまったく無関係であることを強調しなければなりません。面接対象者が答えを知っていても、少しでも気にしません。代わりに、私にとって、この質問は次のようなさまざまな側面を対象としています-重要度の順に:

必要条件

そのような質問は意図的に十分に指定されていません。あなたの例では、シーケンスについてこれ以上の詳細はありません。これらの数値が実際に並べ替えられているかどうかを尋ねるインタビュー対象者がいる場合、それは良い兆候です。彼は顧客に詳細を尋ねる正しい考え方を持っているので、より短時間でより良い解決策を見つけるのに役立ちます。候補者はO(n) spaceを使用してN個の数値の配列を格納することもできますが、XとYの詳細について尋ねずにそれを行うべきではありません。 XとYが1から1000の間であることを確認してから、アレイベースのソリューションを起動してください。ただし、間隔が10億から10億であると言った場合、問題はまったく異なるものになります。もう一度強調しましょう、私は解決策を気にしません。候補者がこれらの問題の違いを見つけることができるかどうかを確認したいのですが、これらの問題は大きく異なります。

標準的なテクニック

O(n)の意味すら知らないプログラマーを雇いたくありません。その分野で適切な教育を受けていれば、それは絶対に知っておくべきことです。しかしそれが何を意味するかを知るだけでなく、実際にその知識を適用することも重要です。あなたの例では、私は候補者が彼がソートできないことを認識して欲しいです一般に、ソートに必要なO(n log n)によるデータ(バケットソートまたはその他のO(n)ソートアプローチ)のオプションを対象とした質問をしなくても)。

同様に、他のアルゴリズムの質問は、ツリーやグラフの横断、再帰などの標準的な手法を対象としています。候補者はこれらのテクニックの1つに失敗する可能性があり、これは良い印象を与えません。ただし、そのような場合は、候補者にCSの経歴があるかどうかを調べるために、さらに深く掘り下げたいと思います。もちろん、それはターゲットの位置が何であるかに依存しますが、通常、実行時の複雑さや、一般的なデータ構造とそのトラバーサルについて知らない開発者は役に立ちません。

問題を扱うマインドセット

質問した後、候補者を注意深く監視します。どのように反応しますか?ここでは、最初に問題を解決する方法がまったくわからない候補者から最良の結果が得られます(== --- ==)。その点で、この質問では、後で職場で同様の状況が発生した場合にどうなるかを確認します。開発中にこのような問題が発生する可能性があります。候補者が自分ですべてを解決できない場合でも、候補者がこれらの問題にどのように対処するかを知ることは良いことです。

例:候補者が次の30時間サイレントモードに入るのを望まない!彼がインテリジェントな質問を思い付くことができるかどうかを確認し(要件を参照)、実行できないことに気付いたらすぐに考え始めるかどうかを確認します。 「同僚の電話オプションを使用できますか?」のような「楽しい」対抗質問でも。良い兆候です。

答え方

一般的に、これらの種類の質問に対してあなたができる最良の答えは、反問です!答えをすぐに伝えると、基本的にすべてが失敗し、実際にはまったく良い答えではありません。これらの質問はすべて、答えが意味するトレードオフを示唆しています。トレード・オフ。もちろん、質問の質は候補者によって異なります。

面接の質問に関する一般的な注意として:反問がめったに悪いことではありません。私自身のインタビューの1つで、たとえば次のような質問をしました。「Xを実装する必要がある場合、C++またはJavaを選択しますか、そしてその理由は何ですか?」-私は単に「私はこれら2つに限定されますか?」の。

6
Frank

求職者が仕事のために知っておく必要があるアルゴリズム/式について質問している場合を除いて(たとえば、ポジションに必要な場合、流体力学)、その値はわかりません。候補者はすでに服装や話し方などについて心配している可能性があります...数学の質問にその場で答えられるかどうかは、テレビゲームショーでどのようにうまくいくかを証明するだけです。

インタビューするときは、それ自体は「プログラミング」の質問もしません。私は候補者に彼らの過去のプロジェクト、彼らのコードがどのように目標を達成したか、彼らのアプローチは何であるかなどを説明してもらいます。

5
GrandmasterB

派手な新しいフレームワークでも、プログラマーはアルゴリズムを非常によく理解している必要があることに同意しますが、面接での頭の体操については完全には確信していません。私の最大の懸念は、実際の環境では、非常に異なる条件下でアルゴリズムを作成することです。別名、誰かがあなたのすべてのペンストロークをあなたに見ているというプレッシャーにさらされていません。沈黙の中でそれを考え直すには少なくとも数分かかります。この評価方法を支持する人たちのために、あなたは一般的にどのくらいの期間、人にそれを解決するように与えますか?私はコードが熱狂的な3分の恐怖で解決策を実行することについてはそれほど多くないと信じているので、これが実際に誰かが日常のタスクをどのように処理するかを確認する良い方法であると私を納得させます。

4

その特定の質問の問題は、それがほとんどトリックの質問であることです。 1つの特定の洞察で、O(n)を簡単に思い付くでしょう。 「これはこれまでに見たことがあるか?」

良いアルゴリズムの質問があるかどうかはわかりません。たとえば、グラフ理論に基づいて質問した場合、それはインタビュー対象者がグラフ理論にどれほど精通しているかに依存します。また、彼または彼女を雇えば、彼または彼女はグラフ理論にかなり早く慣れることができます。繰り返しますが、「以前にこれに遭遇したことはありますか?」に戻ります。

定期的な面接で深刻な問題解決を行う時間はありません。座ってWikipediaを使用できる場合は、別の方法でアプローチし、通常は時間をかけて把握します。インタビュアーがインタビュイーが知っていることを詳細に注意深く議論し、適切なアルゴリズムの質問を選ぶ時間はおそらくないでしょう。

2
David Thornley

あなたは候補者への洞察を与える質問を望んでいます。アルゴリズムの質問では、適切な応答が得られる場合とそうでない場合があります。そして、私は彼らがそれに答えることができるかどうかについて言及していません。彼らがそれを通して取り組み、あなたが彼らの推論を理解して従うなら、それは良い指標です。彼らがそこに座っているだけの場合、実際の応答はなく、どこから始めればよいかさえわからないようです。それは悪い指標です(たぶん)。問題は、一部の人がフリーズし、フリーズを問題解決スキルがないことと区別することが難しい場合があることです。

人々は、さまざまな理由で、インタビューで何でも尋ねることについて不満を言うでしょう。申請者はフリーズするかもしれません。申請者はその質問を調べただけかもしれません。申請者は、特定の雑学/技術/何でも知らないかもしれません。これはすべて真実ですが、面接はまだ行われる必要があり、この専門職の私たちの多くはそれを嫌います。私たちは誰かが私たちの判断に座っているという考えを嫌います。私たちは、不当に判断される理由や、テストが偽物やゲームになる可能性がある理由をすぐに思いつきます。要するに、それは問題ではありません。

本当に必要なのは、面接中に提示されるかどうかに関係なく、スキルを決定する能力を持つ面接担当者です。質問は単なるツールです。私にとって、すべてのハンマーは同じに見えます。しかし、彼らと十分に熟練した誰かにとって、私は違いがあると確信しています。

1
Jeremiah Nunn

私は定期的に使用するアルゴリズムのような質問をいくつか持っていますが、その一部は非常に困難です。私はそれらを使用して、彼らが精神的に問題を攻撃する方法を確認し、特定の概念を理解しているかどうかを確認します。 (私は、ポインターを理解していない開発者候補をあまりにも多く見ました。)

1
John Franklin

アルゴリズムの質問が好きです。なぜなら、それが私たちの仕事だからです。私が使用しているので、私は制約が好きです。 Big-Oは特に私の業界に関連しています。

この種の質問に対する答えが「ホワイトボードにコードを書く」ことを要求するのは好きではありません。インタビュイーは、ディスカッションの進行中にインタビュアーが要件を変更するときに、ソリューションへのアプローチについてインテリジェントに話し、進行中のディスカッションに参加できる必要があります。

元の質問が尋ねられ、インタビュイーは、「最初から始めて、「穴」を探して終わりに向かって行進する」と言います。インタビュアーは、Nが巨大なので、それは遅すぎると言います。インタビュー対象者は、バイナリ検索について議論を始めます。インタビュアーは、突然のすべてのデータがソートされなくなったと言います。インタビュー対象者は「並べ替えてから検索」と言います。 「今は遅すぎる」。など.

0
dash-tom-bang