テクノロジーインタビューで、「オブジェクト」(引用符に注意)をトラバースするアルゴリズムを作成するように依頼されました。
それでおしまい。それは私が与えられたすべての情報です。
インタビュアーに目的は何かと尋ねましたが、どうやら目標はありませんでした。「オブジェクト」を「トラバース」するだけです。
他の人については知りませんが、これは私にはばかげた質問のようです。 「値を検索していますか?」と再度尋ねました。いいえ。ちょうどそれを「横断」します。
なぜこの「オブジェクト」を際限なくループしたいのでしょうか?たぶん私のプロセッサを溶かすために??
answerインタビュアーによると、私は再帰関数を書くべきだったということでした。
じゃあ、単純に再帰関数を書くように頼んでみませんか?そして、誰も終わらない再帰関数を書くでしょうか?
これはあなたにとって残りの質問です。もしそうなら、私が何が欠けているのかについてのヒントを提供できますか?たぶん、私は現実の問題を解決することについて一生懸命に考えています。私は長い間コーディングに成功していますが、この技術面接プロセスでは、何も知らないような気がします。
それは不可解で無効なインタビューの質問です。面接担当者は、問題の説明を明確にするための適切な試みに有意義に対応するのではなく、探しているものを明確に説明できず、心を読むことを期待していました。仕事に就けなかった幸運を自分で考えてください。
総称的な「オブジェクト」を操作する「トラバース」という動詞の意味は、私の意見ではあいまいです。 Wordオブジェクトのさまざまな異なる名詞の置き換えを開始すると、オブジェクトの走査は、オブジェクトであるものの宇宙の小さなサブセットに対してのみ意味があることがすぐに明らかになります。
「二分木」のノードを「横断」することは理にかなっています。 「道化師」を「横断」することは意味がありません。それでも、オブジェクトは「二分木」を表すことができるのと同じくらい簡単に「道化師」を表すことができます。
ここには3つの可能性があります。
これは大まかな推測ですが、インタビュアーがポインター参照について話していると仮定すると(これはトリックの質問です)、すべての参照が同じオブジェクトを指しているため、トラバースするものはありません。
再帰関数ですか?これは、ツリーをトラバースするためのものです。元の質問では、彼が木について話していることを意味するものは何も見当たりません。
この特定のインタビュアーについて話すことはできませんが、フロントエンドの開発者のポジションインタビューで同様の質問を見たことがあるので、この例で使用する言語はJavaScriptです。
与えられた:
var A = {
key1: 'value1',
key2: 2,
key3: {
innerkey1: 'value3'
}
}
典型的な誤った応答は、最初のレベルのみを「横断」し、印刷/比較する場合があります。
'value1'
2
[Object object]
したがって、すべてのレベルをトラバースする再帰的な例をコーディングしながら、次のようなことを述べます。
したがって、インタビュアーがしようとしていたと私が推測している「解決策」は、多くの高度なトピック(再帰性、ポインター/参照、期待など)を持つ一見単純な質問で会話を始めることでした。
一部の面接担当者は、候補者が次の2つの答えの1つを与えるのに十分なほど賢くて正直であるかどうかを確認するために、特に質問しようとします。
知りません。
または多分:
述べたように私はそれに答えることはできません。
彼らは純粋なBSを仕様として受け入れる候補者を望んでおらず、雇用主の時間を浪費し、それを実装するためにお金を払っています。
これは循環リンクリストに関する(明確に表現されていない)質問のようです。それが何を意味するのか私はおそらく尋ねたでしょう(答えは確かにそれらがすべて同じオブジェクトへの参照であると言うことである上記のものと確実に異なるからです)。
これがリンクリストの質問だった場合、あなた(この場合)はシングルリンクリストを持っています。そこでは、エンドノードがもう一方のエンドを指しています(ただし、あなたが言うように記述されていたとしても、AがBとC-しかし、インタビュアー側の説明がこれを助けるでしょう。
A-> B-> C-> A
また(そしてこれは常に発生します)、インタビュアーはこの質問を読んだ可能性がありますが、「良い」質問であると考えましたが、実際には答え自体(またはそれが何を意味するかさえ)を知りませんでした。
ここでの課題の一部は、ツリー構造が存在すること、およびトラバーサルの実行に関与するコンポーネントが何であるかを明らかにするために特定の質問をすることにより、詳細を取得することです。木以外にトラバースするデータ構造は他にあまりないという仮定があったかもしれませんが、それは私の心には少し飛躍的です。
彼らはあなたが奇妙な問題にどう対処するかを理解しようとするかもしれません。ただし、この場合、「技術面接」とは関係ありません。心理面接のように見えます。
「オブジェクト」(引用符に注意)をトラバースするアルゴリズムを記述します。ここで、AはBと等しく、BはCと等しく、AはCと等しくなります。
ほとんどの人は、A、B、Cはポインタであると想定しているようですが、ピエロになることも同じくらい簡単です。 (またはピエロクラスのメンバー。)または、ピエロの名前である可能性があります。 (またはクラス名。またはクラウンクラスのサブクラス。)
私は表を裏返し、これが開発仕様を通常どのように準備するか、そして開発の要件仕様段階でどのようにそれらを助けることができるかを彼らに話しました。期待の不十分なコミュニケーションは、貧弱な作業成果につながります。彼らがそれを手に入れるか、または手に入れなかったか、彼らが手に入れなかった場合、私は立ち去ります。
質問の文言は不十分で、面接担当者は方向性を明らかにするのに明らかに役に立たなかったが、質問された内容については少し異なる見方をしている。
インタビュアーは、なんらかの反射を使用してオブジェクト構造をトラバースするソリューションを探していたと思います。 3つのオブジェクトが等しいという情報は、オブジェクトID比較の会話(A == Bはオブジェクトがメモリ内の実際に同じオブジェクトであることを意味します)、またはオブジェクト等価比較(A == Bはオブジェクトの値が同じ)。
インタビュアーが答えが「再帰的」機能であると述べたという事実は、おそらく、深いコピーと浅いコピーの比較および比較が期待されることを示していました。
このパーティーに非常に遅く来るが、インタビュアーが誤ってこの質問をしたと思う:
配列をトラバースするアルゴリズムを記述し、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
に回答できます。いいえ、これは効率的なソリューションではありません。
[〜#〜] 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行のコードで解決できることがよくあります。
彼らがしたように言い回し、そして間違った答えを期待することは正常ではありません。この質問は一年前に尋ねられたので。あなたが他の場所で働いてくれたことを本当に望みます。元の投稿から、彼/彼女にどうなるかを聞いてみたいと思います。
これはJavaインタビューの質問でしたか?.
AとAを比較するときに、これらの2つのメソッドをオーバーライドし、オーバーライドされたequalsメソッドを使用して再帰を停止する必要があります。
オーバーライドしないと、「オブジェクト」AからB、AからC、およびAからAの比較はすべてtrueになりますが、オーバーライド後は、オブジェクトAと比較したオブジェクトAがtrueを返し、他の比較はfalseを返します。