アルゴリズムの質問は面接の質問に適していますか?[閉まっている]


25

最近、仲間のプログラマーと議論をしました。彼は新しいポジションのためにインタビューをしていて、この質問をされました:

Xで始まりYで終わる数字のシーケンスを指定しますが、1つの要素が欠落しているため、NはYX-1であり、O(N)以上で欠落している要素を見つけます。

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

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

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

あなたの考え?良い面接の質問かどうか?


申し訳ありませんが、このコンテキストで「またはより良い」find the missing element in O(N) or betterとはどういう意味ですか?これは、ループしながら、シンプルで解決されるだろう事のようなものらしいが、とにかく私は理解していない-それはどちらかだ解くではない解決右、?
カミロマーティン

「より良い」とは、パフォーマンスを意味します-O(ln(n))ソリューションの方が良いでしょう。
エセルエヴァンス

実際、アルゴリズムの質問は、プログラミングまたは技術面接で予想される質問の1つです。Gayle Laakmaan McDowellは、アルゴリズムに関する専用セクションがある「Cracking the Coding Interview」という本を書いています。
-hagubear

回答:


20

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

この種の質問をすることは、その人が問題にどのようにアプローチし、どのような落とし穴を試みて考えるのかを見るのは興味深いですが、彼らが異常に間違っているか非効率的な何かを書いていない限り、彼らが書くことの実際の詳細は彼らが実際に言っているほどではありません問題解決/設計ステップを首尾一貫した方法で進めます。

私も同様の質問をしますが、採用後に最高の幸運を得た人々は、欠陥のある答えを出したが、アプローチに正しい考えを持っていた人々です。


9

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

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


6

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

必要条件

そのような質問は、意図的に不十分に指定されています。この例では、シーケンスについてこれ以上の詳細は提供されていません。これらの数値が実際にソートされているかどうかを尋ねるインタビュー対象者がいる場合、それは良い兆候です。彼は顧客に詳細を尋ねる正しい考え方を持っているので、より短い時間でより良いソリューションを見つけることができます。候補者は、O(n)空間を使用して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つに限定されていますか?」と反論しました。そのような反問に対して、インタビュアーからどのような反応を得るか、そしてインタビュアーに何ができるかを実際に示すことがどれほど簡単かを自分で推測してください。


なぜ「私は電話-同僚のオプションを使用できますか?」良い兆候?これは、インタビューを受けた人が問題に取り組む方法を知らず、常に助けを求めていることを示していませんか?
うおお

インタビュイーが単に答えることができない質問が常にあります。その場合、それは良い兆候ですが、当然のことながら、インタビュー対象者はいくつかの質問に対してその行動を繰り返すべきではありません。難しいタスクは、その1つのスイートスポットにヒットしたかどうか、候補者が知識を持っていない場合(許容範囲)、または一般的な困難な問題から抜け出そうとしている場合(許容範囲外)を見つけることです。
フランク

誰かが、ジュニア開発者とシニア開発者の違いは、シニア開発者がすぐに助けを求めるだろうと私に言ったことがある。Phone-a-coworkerは重要なスキルです。この業界には多くのエゴがあり、「わからない」と言うのは良い兆候です。私がこれまでに設計/作成した最高のコードのいくつかは、私自身のアイデアだけでなく、人々との共同作業から生まれました。
MBonig

5

あなたが候補者が仕事のために知る必要があるアルゴリズム/式について質問をしていない限り(例えば、位置がそれを必要とするなら、流体力学)、私はそれらの価値を見ません。候補者はすでに服装や話し方などを心配している可能性があります...その場で数学の質問に答えることができるかどうかは、テレビゲームショーでどのようにうまくいくか以外には何も証明しません。

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


4

プログラマーは、派手な新しいフレームワークであっても、アルゴリズムを非常によく知っている必要があることに同意しますが、インタビューで頭の体操について完全に確信しているわけではありません。私の最大の懸念は、実際の環境では、非常に異なる条件でアルゴリズムを書くことです。別名、誰かがあなたをペンストロークごとに見ているというプレッシャーにさらされているわけではありません。この評価方法を提唱する人にとって、一般的にどのくらいあなたにそれを解決するために人に与えますか?コードは、熱狂的な3分間の恐怖の中で解決策を作り出すことほど重要ではないと考えているので、これが実際に誰かが日常のタスクをどのように処理するかを確認する良い方法であると確信します。


2

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

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

定期的なインタビューで深刻な問題解決を行う時間はありません。座ってウィキペディアを使用し、一般的に物事を理解するのに時間がかかる場合、私は物事に異なるアプローチをします。おそらく、インタビュアーがインタビュイーが知っていることを詳細に注意深く議論し、適切なアルゴリズムの質問を選ぶ時間はないでしょう。


1
O(n)であるという特定の洞察は何ですか?本質的にO(n)の問題として、「欠落している値についてN個の連続値のソート済みリストを検索する」ことがわかります。どうやってそれを悪化させたのでしょうか?(正直なところ、私は興味があり、O(n)解がどのように非自明であるかわかりません。O(log n)でさえも明らかです。)
ダッシュトムバン

@ dash-tom-bang:リストがソートされているとは思っていませんでした(何か誤解しましたか?)ので、O(n log n)ソリューションはソートおよびスキャンされ、O(n)は数値の合計になりますアップ。
デビッドソーンリー

ああ、そうかもしれない-リストがソートされていないとは考えていなかった。:)(「リストはXで始まり、Yで終わります。」)
ダッシュトムバン

2
クイック選択のバリアントもここで機能します。(上+下)/ 2にピボットすると、不足しているエントリの半分がどれであるかを簡単に確認できます。これは、各半分の大きさがわかっているためです。不足している要素が見つかるまで繰り返します。
ポールハンキン

1
質問は、Xで始まりYで終わるシーケンス(セットなどではなく)を指すので、アイテムがソートされていることを意味すると思います。かなり些細な質問のようです。
-FinnNk

1

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


犬のようなポインター、そうですか?:)
JoshD

1

候補者への洞察を与える質問が必要です。アルゴリズムの質問は、良い回答を与える場合もあれば、そうでない場合もあります。そして、私は彼らがそれに答えられるかどうかに言及していません。彼らがそれを乗り越えて、あなたが彼らの推論を理解して従うなら、それは良い指標です。彼らがただそこに座っているだけで、本当の反応がなければ、どこから始めればよいかさえわからないようです。問題は、一部の人々がフリーズすることであり、フリーズアップと問題解決スキルがないことを区別することは難しいかもしれません。

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

本当に欲しいのは、面接中に提示される場合とされない場合があるスキルを判断する能力を持つ面接官です。質問は単なるツールです。私にとって、すべてのハンマーは同じように見えます。しかし、それらに十分に熟練した誰かには、違いがあると確信しています。


0

私はアルゴリズムの質問が好きです。それは私たちが使用するものだからです。Big-Oは私の業界で特に重要です。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.