web-dev-qa-db-ja.com

それは私だけなのか、これは不可解な技術インタビューの質問なのか?

バックグラウンド

テクノロジーインタビューで、「オブジェクト」(引用符に注意)をトラバースするアルゴリズムを作成するように依頼されました。

それでおしまい。それは私が与えられたすべての情報です。

インタビュアーに目的は何かと尋ねましたが、どうやら目標はありませんでした。「オブジェクト」を「トラバース」するだけです。

他の人については知りませんが、これは私にはばかげた質問のようです。 「値を検索していますか?」と再度尋ねました。いいえ。ちょうどそれを「横断」します。

なぜこの「オブジェクト」を際限なくループしたいのでしょうか?たぶん私のプロセッサを溶かすために??

answerインタビュアーによると、私は再帰関数を書くべきだったということでした。

じゃあ、単純に再帰関数を書くように頼んでみませんか?そして、誰も終わらない再帰関数を書くでしょうか?

私の質問:

これはあなたにとって残りの質問です。もしそうなら、私が何が欠けているのかについてのヒントを提供できますか?たぶん、私は現実の問題を解決することについて一生懸命に考えています。私は長い間コーディングに成功していますが、この技術面接プロセスでは、何も知らないような気がします。

154
Matt Cashatt

それは不可解で無効なインタビューの質問です。面接担当者は、問題の説明を明確にするための適切な試みに有意義に対応するのではなく、探しているものを明確に説明できず、心を読むことを期待していました。仕事に就けなかった幸運を自分で考えてください。

総称的な「オブジェクト」を操作する「トラバース」という動詞の意味は、私の意見ではあいまいです。 Wordオブジェクトのさまざまな異なる名詞の置き換えを開始すると、オブジェクトの走査は、オブジェクトであるものの宇宙の小さなサブセットに対してのみ意味があることがすぐに明らかになります。

「二分木」のノードを「横断」することは理にかなっています。 「道化師」を「横断」することは意味がありません。それでも、オブジェクトは「二分木」を表すことができるのと同じくらい簡単に「道化師」を表すことができます。

307
Matt

ここには3つの可能性があります。

  1. 彼女は完全に無能でした。これについては、これ以上言うことはありません。
  2. 彼女は意図的に曖昧にして、あなたが何をすべきか、彼女が本当に何をしていたのかを理解するためにあなたが質問をするのにどれだけうまくいくかを見ました。
  3. 何らかの理由で、彼女はあなたが雇うことを望んでいないと決定したので、彼女は与えられたように答えられない質問をしました。彼女はあなたのスキルについて尋ねられたとき、その部分を飛ばして次のようなことを言いました:「私は3ノードグラフをトラバースする方法について彼に尋ねました、そして彼は完全に困惑していました-しませんでした開始の手がかりさえありません。明らかに彼は大まかに無能です!彼を雇うことさえ考えるべきではありません。」
40
Jerry Coffin

これは大まかな推測ですが、インタビュアーがポインター参照について話していると仮定すると(これはトリックの質問です)、すべての参照が同じオブジェクトを指しているため、トラバースするものはありません。

再帰関数ですか?これは、ツリーをトラバースするためのものです。元の質問では、彼が木について話していることを意味するものは何も見当たりません。

32
Robert Harvey

この特定のインタビュアーについて話すことはできませんが、フロントエンドの開発者のポジションインタビューで同様の質問を見たことがあるので、この例で使用する言語はJavaScriptです。

与えられた:

var A = {
    key1: 'value1',
    key2: 2,
    key3: {
        innerkey1: 'value3'
    }
}

典型的な誤った応答は、最初のレベルのみを「横断」し、印刷/比較する場合があります。

'value1'
2
[Object object]

したがって、すべてのレベルをトラバースする再帰的な例をコーディングしながら、次のようなことを述べます。

  • 循環参照の処理
  • 配列の処理方法(再帰的にトラバースする必要がありますか?)
  • 関数を評価し、その戻り値を処理する必要がありますか?
  • JavaScriptの場合:プロトタイプが一致する必要があり、継承されたプロパティも比較する必要がありますか?

したがって、インタビュアーがしようとしていたと私が推測している「解決策」は、多くの高度なトピック(再帰性、ポインター/参照、期待など)を持つ一見単純な質問で会話を始めることでした。

15
WSkid

一部の面接担当者は、候補者が次の2つの答えの1つを与えるのに十分なほど賢くて正直であるかどうかを確認するために、特に質問しようとします。

知りません。

または多分:

述べたように私はそれに答えることはできません。

彼らは純粋なBSを仕様として受け入れる候補者を望んでおらず、雇用主の時間を浪費し、それを実装するためにお金を払っています。

9
hotpaw2

これは循環リンクリストに関する(明確に表現されていない)質問のようです。それが何を意味するのか私はおそらく尋ねたでしょう(答えは確かにそれらがすべて同じオブジェクトへの参照であると言うことである上記のものと確実に異なるからです)。

これがリンクリストの質問だった場合、あなた(この場合)はシングルリンクリストを持っています。そこでは、エンドノードがもう一方のエンドを指しています(ただし、あなたが言うように記述されていたとしても、AがBとC-しかし、インタビュアー側の説明がこれを助けるでしょう。

A-> B-> C-> A

また(そしてこれは常に発生します)、インタビュアーはこの質問を読んだ可能性がありますが、「良い」質問であると考えましたが、実際には答え自体(またはそれが何を意味するかさえ)を知りませんでした。

7
Maich

ここでの課題の一部は、ツリー構造が存在すること、およびトラバーサルの実行に関与するコンポーネントが何であるかを明らかにするために特定の質問をすることにより、詳細を取得することです。木以外にトラバースするデータ構造は他にあまりないという仮定があったかもしれませんが、それは私の心には少し飛躍的です。

5
JB King

彼らはあなたが奇妙な問題にどう対処するかを理解しようとするかもしれません。ただし、この場合、「技術面接」とは関係ありません。心理面接のように見えます。

3
BenjaminB

「オブジェクト」(引用符に注意)をトラバースするアルゴリズムを記述します。ここで、AはBと等しく、BはCと等しく、AはCと等しくなります。

ほとんどの人は、A、B、Cはポインタであると想定しているようですが、ピエロになることも同じくらい簡単です。 (またはピエロクラスのメンバー。)または、ピエロの名前である可能性があります。 (またはクラス名。またはクラウンクラスのサブクラス。)

私は表を裏返し、これが開発仕様を通常どのように準備するか、そして開発の要件仕様段階でどのようにそれらを助けることができるかを彼らに話しました。期待の不十分なコミュニケーションは、貧弱な作業成果につながります。彼らがそれを手に入れるか、または手に入れなかったか、彼らが手に入れなかった場合、私は立ち去ります。

3
Jim

質問の文言は不十分で、面接担当者は方向性を明らかにするのに明らかに役に立たなかったが、質問された内容については少し異なる見方をしている。

インタビュアーは、なんらかの反射を使用してオブジェクト構造をトラバースするソリューションを探していたと思います。 3つのオブジェクトが等しいという情報は、オブジェクトID比較の会話(A == Bはオブジェクトがメモリ内の実際に同じオブジェクトであることを意味します)、またはオブジェクト等価比較(A == Bはオブジェクトの値が同じ)。

インタビュアーが答えが「再帰的」機能であると述べたという事実は、おそらく、深いコピーと浅いコピーの比較および比較が期待されることを示していました。

2
Lucas

このパーティーに非常に遅く来るが、インタビュアーが誤ってこの質問をしたと思う:

配列をトラバースするアルゴリズムを記述し、AがBに等しく、BがCに等しく、AがCに等しいことを確認しますこの順序で

次に、正しい答えは再帰的アルゴリズムになります。

2
pgthew

テクノロジーインタビューで、「オブジェクト」(引用符に注意)をトラバースするアルゴリズムを作成するように依頼されました。

問題のobjectA,B and Cの部分で構成され、triangleを形成します。人は、オブジェクト(コレクション)にすべての等しい部分が含まれているかどうかを単に尋ねています。

インタビュアーは、パーツが提示されているかどうかを知りたいA, B and C無限ループに陥ることなく、それらがすべて等しいかどうかを確認できます。この質問は愚かに単に理解することであり、それでも彼らはそれを尋ねるのにそれをなんとかしました***。

A == B && B == C && A == Cのときはすべて等しいですが、A == B && A == Cに単純化できます。

質問の単純さは混乱を招きました、そしてそれは本当にひどい言い方をされました。

正しい言い回しがあったはずです。

コレクションの部分をチェックして、それらがすべて互いに等しいかどうかを確認するアルゴリズムを記述します。無限ループに陥らないように注意する必要があります。例えば;パーツAがBに等しく、BがCに等しく、AがCに等しい場合、問題が発生する可能性があります。


インタビュアーによると、私は再帰関数を書くべきだったと答えました。

はい、再帰関数を使用して質問are all my parts equalに回答できます。いいえ、これは効率的なソリューションではありません。

[〜#〜] edit [〜#〜]:少し考えてから。再帰関数を使用して、コレクションに等しい部分がすべて含まれていることを確認することはできません。

最も効率的なソリューションは次のとおりです。

function are_all_equal(parts)
{
   for(int i=1; i < parts.length; i++)
       if parts[i] is not same as parts[0]:
           return false;
   return true;
}

print are_all_equal(parts) ? "yes" : "no";

この問題はプログラミングで発生し、コレクションをテストするためのアルゴリズムを作成するように誰かに依頼することは完全に正常です。プログラミング言語によっては、この問題は1行のコードで解決できることがよくあります。

彼らがしたように言い回し、そして間違った答えを期待することは正常ではありません。この質問は一年前に尋ねられたので。あなたが他の場所で働いてくれたことを本当に望みます。元の投稿から、彼/彼女にどうなるかを聞いてみたいと思います。

1
Reactgular

これはJavaインタビューの質問でしたか?.

AとAを比較するときに、これらの2つのメソッドをオーバーライドし、オーバーライドされたequalsメソッドを使用して再帰を停止する必要があります。

オーバーライドしないと、「オブジェクト」AからB、AからC、およびAからAの比較はすべてtrueになりますが、オーバーライド後は、オブジェクトAと比較したオブジェクトAがtrueを返し、他の比較はfalseを返します。

0
rpatali