それは私だけですか、またはこれは不可解な技術面接の質問ですか?[閉まっている]


153

バックグラウンド

テクノロジーインタビューで、AがBに等しく、BがCに等しく、AがCに等しい「オブジェクト」(引用符に注意)をトラバースするアルゴリズムを書くように頼まれました。

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

私はインタビュアーに目標を尋ねましたが、どうやら目標はなく、単に「対象」を「横断」するだけでした。

他の人については知りませんが、これは馬鹿げた質問のように思えます。「値を探していますか?」ともう一度尋ねました。いや。それを「トラバース」するだけです。

なぜこの「オブジェクト」を無限にループしたいのですか?多分私のプロセッサを溶かすために??

答えインタビュアーによると、私は再帰関数を書かれている必要があることでした。

それでは、単に再帰関数を書くように頼まないのはなぜですか?そして、誰も終わらない再帰関数を書くでしょうか?

私の質問:

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


197
ここでの唯一の正しい答えは、「質問を理解できません」です。
user16764

16
まあ、彼らが本当にA、B、Cが何であるかを言わず(オブジェクトであるなど)、オブジェクトを引用符で囲むと、独自の用語が存在するように見えます。オブジェクトA を参照するオブジェクトCを参照するオブジェクトBを参照するオブジェクトBを参照するオブジェクトグラフをどのようにトラバースするかを尋ねた場合、わかりやすいはずですが、なぜ再帰的である必要があるのか​​はわかりません。ところで、既に訪れたオブジェクトのリストを保持していれば、無限である必要はありません。しかし、はい、私はそのテストを使用している会社で働くことを心配しています-彼らは混乱しているようです。
psr

77
説明されている質問は無意味であり、答えもそうです。あなたが彼らが尋ねたものを覚えていないか、質問をしている人はばかであり、おそらく彼と一緒に仕事をしない方が良いでしょう。
メイソンウィーラー

26
開発者インタビューはなぜ苦労しなければならないのですか?座ってお互いのコードを見て議論することはできませんか?開発者はこれを行うことで他の開発者がどこにいるかを知ることができ、6時間もかかりません。コードテストは最悪です。出会ったことのない3人の開発者が入力中に私を見ている間、私は最適なソリューションを提供するのが面倒だと認めても構いません。
エリックReppen

19
私はあなたが私と同じ地域に住んでいるかどうかあなたのプロフィールをチェックしなければなりませんでした。なぜなら私がインタビューする仲間が「あなたは詳細志向ですか?」私は「あなたはもっと具体的にできますか?」と答えました。そして彼の返事は、「私はそれを説明することはできませんが、彼らの作品を見たとき、私は詳細志向の人を知っています。」あいまいさが大好きです。
ジェシーC.スライサー

回答:


305

それは不可解で無効なインタビューの質問です。インタビュアーは、彼/彼女が探していたものを明確に明確にすることができず、問題の陳述を明確にする適切な試みに有意義に応答する代わりに、あなたが彼/彼女の心を読むことを期待しました。仕事に就けなかったのは幸運だと思ってください。

私の意見では、一般的な「オブジェクト」に作用する動詞「traverse」の意味はあいまいです。オブジェクトという単語をさまざまな名詞に置き換え始めると、オブジェクトの横断はオブジェクトであるものの宇宙の小さなサブセットに対してのみ意味があることがすぐに明らかになります。

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


9
私は最近、ばかげた質問の名詞を「道化師」+1サーという言葉に置き換える練習を始めました!
rupjones

108
「クラウントラバーサル」-「馬鹿げた技術的な質問」のミームはなんと素晴らしいでしょう。それを渡す!
レーダーボブ

8
うーん、var clown = {hat: "with flower"、hair: "bright red"、nose: "red ball"、mouth: "赤い口は白で囲まれている"、...};)
mplungjan

37
理論的なCS研究の私の全領域には、反復的なピエロトラバーサルが含まれます。

6
@JackManey:道化師を再帰的に横断しなければならないことは誰もが知っています。
アダムロビンソン

39

ここで3つの可能性を見ることができます。

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

7
「私は彼に3ノードグラフをどのように横断するかについて尋ねました...」「オブジェクト」だけです。これは「偽証」の一種です。彼女がこのようなことを書いたら、起訴できる!
エミリオガラヴァリア

9
人の性別が言及されていない場合、女性の代名詞を通常使用しますか?
チャンホーSuh

8
@EmilioGaravaglia:まず第一に、書かれていないかもしれません。第二に、それが書き留められたとしても、あなたは間違いなくそれへのアクセスを得ることは決してないだろう、ただ「私たちはあなたに知らせることを後悔する...」手紙。第三に、インタビューの記録がない限り、インタビュアーが真実を語っていないことをどのように証明しますか?結論:理論的には正しいはずですが、実際には実質的にチャンスはありません。
ジェリーCo

11
@ Chan-HoSuh:OPは彼のコメントの1つで性別について言及しています。
ジェリーCo

4
@JerryCoffin謝罪します。
チャンホーSuh

32

これは単なる予想ではありませんが、インタビュアーがポインター参照について話していると仮定すると(そして、それはトリックの質問です)、答えは次のとおりです。すべての参照が同じオブジェクトを指しているため、横断するものはありません。

再帰関数?それは木を横断するためです。元の質問には、彼が木について話していることを暗示するものは何もありません。


28
進め。より良い会社があります。
shufler

7
いや それは失われた原因です。インタビュアーが自分が間違っていると思ったら、そもそも質問をしなかったでしょう。かつて、私がやりたい言語でサンプルを書くように頼まれました。私にインタビューした人は、擬似コードが有効な選択だと思いました。
ロバートハーヴェイ

8
@Robert Harvey:擬似コードの何が問題になっていますか?
ジェームズ

6
@Robert Harvey:ほとんどの人が望む公平性を保つために、特定の言語の構文を学んだかどうかを見つけないように、問題の解決方法を見つけ出すことです。アルゴリズムが擬似コードで指定されることは非常に一般的です。
ジェームズ

8
擬似コードとPythonの違いは何ですか?:)
デビッドロビンソン

15

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

与えられた:

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

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

'value1'
2
[Object object]

したがって、すべてのレベルを横断する再帰的な例をコーディングしている間、次のようなことに言及します。

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

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


5
それは、WSKidのように意味を成しています。残念ながら、そのコンテキストは提供されませんでした。
マットキャシャット

3
確かに、これは本当にストローを把握しています。彼らは、ユースケース、または例3のオブジェクト、または実際の問題を導くための何かを提示すべきでした。
WSkid

1
私は、Pythonオブジェクトの属性についてのみ同じことを考えていました。どの質問に答えを期待しているのかを知ることは非常に役立ちますが、それは位置のコンテキスト、すなわちpython dev、c#dev、javascript dev、php devなどによって予想される可能性があります
Ken

2
質問が意味をなす文脈を見つけるための+1!
ドナルドフェローズ

9

一部のインタビュアーは、具体的に質問して、候補者が次の2つの答えのいずれかを提供するのに十分賢く正直であるかどうかを確認しようとします。

知りません。

または多分:

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

彼らは、純粋なBSを仕様として受け入れ、雇用主の時間を無駄にして、それを実装しようとする候補者を望んでいません。


6
私たちの人生全体は、このインタビューのようなシナリオでは、質問に答えることができるように条件付けられています。「わからない」(ちなみに私がやった)と言うのが受け入れられるなら、その前にそのことを知らされるべきだった。面接の質問に誠実に答えようとする試みは、不適切な仕様または一連の要件をどのように扱うかと必ずしも同じではありません。そして、これが全体のポイントだと思います、これらのインタビューはコースから外れており、多くの場合、ポイントを逃しています。
マットキャシャット

そのような良い答え。ただし、これを言うには多くの経験が必要であることを忘れないでください。個人的には、インタビューの経験は仕事の重要な部分であると言えます。@MatthewPatrickCashattインタビュアーが「わからない」を受け入れない場合、IMOを議論することはあまりありません。
アリン

2
トリックの質問は、トローリングまたは無能なことです。いずれにせよ、面接官があなたがそこで働きたくないトリックの質問をする場合。
ベンブロッカ

7

これは、循環リンクリストに関する(明確に表現されていない)質問のようです。私はおそらくそれが意味するものなのかと尋ねるだろう(答えは確かに同じものへのすべての参照であるという上記の別のものとは異なるため)。

これがリンクリストの質問である場合、(この場合)エンドノードがもう一方の端を指す単一リンクリストがあります(ただし、あなたが言うように言葉で表現された場合-Aが指す場合、二重にリンクされる可能性があります) BとC-しかし、面接官側の説明はこれを助けるでしょう。

A-> B-> C-> A

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


1
マイッチに感謝します。あなたの最後のポイントが最もありそうだと思います。
マットカシャット

5

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


1
JBキングに感謝します。質問するのは良いことです。この特定のケースでは、私がやった。実際、私はそれが木であるかどうかさえ尋ねました、そして、答えはノーでした!しかし、質問することで可能な限り多くの情報を抽出することは私の責任であるという点を十分に理解しています。
マットキャシャット

3

彼らはあなたが奇妙な問題にどのように対処するかを理解したいと思うかもしれません。しかし、この場合、「技術面接」とは関係ありません。心理的なインタビューのようです。


5
ソフトウェアプロジェクトの技術仕様の例をご覧ください。
チャックD

インタビューがシステマティックアナリストまたは同様の役職向けである場合、これは完全に適切です。あなたの仕事は、顧客が質問に答えるのではなく、質問を明確にするのを助けることです。
-reinierpost

1
@ reinierpost--そうではなかった。
マットキャシャット

3

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

ほとんどの人は、A、B、Cがポインターであると想定しているように見えますが、それらも同様に簡単に道化師になり得ます。(またはピエロクラスのメンバー。)またはピエロの名前の場合もあります。(またはクラス名。またはピエロクラスのサブクラス。)

私はテーブルを回して、これが彼らが通常開発仕様を準備する方法であるかどうかを尋ね、それから私が開発の要件仕様段階でどのようにそれらを助けることができるかを彼らに伝えたでしょう。期待のコミュニケーションが不十分だと、成果物の質が低下します。彼らがそれを手に入れるか手に入れないかのどちらか、彼らが手に入れなかったなら、私は立ち去るでしょう。


2

質問は言葉遣いが乏しく、面接官は方向性を明らかにするのに明らかに役に立たなかったが、私は質問されていることについて少し異なる見解を持っている。

インタビュアーは、何らかのタイプのリフレクションを使用してオブジェクト構造を横断するソリューションを探していたと思います。3つのオブジェクトが等しいという情報は、オブジェクト同一性比較(A == Bはオブジェクトがメモリ内で実際に同じオブジェクトであることを意味します)、またはオブジェクト等価比較(A == Bはオブジェクトの値同じ)。

インタビュアーが答えは「再帰的」関数であると言ったという事実は、恐らく、深いコピーと浅いコピーと比較の議論が期待されたことを示していました。


2

このパーティーに非常に遅れて来ますが、インタビュアーはこの質問を間違って尋ねたと思います:

配列を走査するアルゴリズムを記述し、 AがBに等しく、BがCに等しく、AがCに等しいことをこの順序で決定します。

その場合、正解は再帰アルゴリズムになります。


1

テクノロジーインタビューで、AがBに等しく、BがCに等しく、AがCに等しい「オブジェクト」(引用符に注意)をトラバースするアルゴリズムを書くように頼まれました。

object問題のは部品で構成されA,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再帰関数を使用して質問に答えることができます。いいえ、これは効率的なソリューションではありません。

編集:いくつかの考えの後。いいえ、再帰関数を使用して、すべての等しい部分を含むコレクションをチェックすることはできません。

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

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年前に尋ねられたものです。あなたが他の場所で仕事をすることを本当に願っています。私は元の投稿から彼/彼女にとって物事がどうなるか興味があります。


2
物事は素晴らしいものになりました。その会社からできるだけ早く走り、それ以来ずっと幸せでした。
マットキャシャット

0

これはJavaのインタビューの質問でしたか?もしそうなら、彼は「ハッシュコード」と「等しい」をオーバーライドしてあなたのスキルをテストしたいと思うかもしれません。

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

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

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