FizzBu​​zzに失敗しました。雇ってくれませんか?[閉まっている]


27

私はCSの学位を持つ開発者であり、ほぼ3年間、多数の言語で開発を行った実務経験があります。

今日は面接を受けましたが、全体的に非常にうまくいきました。ほとんどの質問に準備し、何に対してでも準備ができていると感じました。インタビューの終わりに、彼らは私にプログラミングの質問を1つ与えました... FizzBu​​zzのような問題(印刷なしで数字の部分)。私はあまりにも多くの間違いを犯し、それが「失敗」したと信じています。すべての希望が失われていますか?

ここに私のコードがあります:

  void FizzBuzz()
  {
    for(int i = 0; i <= 100; i++)
    {
      bool isThree = i % 3;
      bool isFive = i % 5;

     if (isThree)
     {
         print "Fizz\n";
     }
     else if(isFive)
     {
         print "Buzz\n";
     }
     else
     {
         print "FizzBuzz\n";
     }
  }
 }

ご覧のとおり、構文i%3 == 0;を持つboolsを台無しにしました。正しい質問を覚えている場合は、isThree && isFiveでelseifの代わりにelseを追加します。私はかなりストレスを感じていましたが、それは単純な問題を見逃した言い訳にはなりません。

質問は、経験や性格などの他の要因と比較して、その場で作業コードを作成できることがどれほど重要かということです。たとえば、上記のコードはディールブレーカーになりますか?


31
私はあなたがモジュラス演算子を使用しているという事実は十分に良いと思い
Ryathal

9
また、3の倍数でも5でもない場合、数字を印刷しません。この質問を投稿する際にも言及しなかったという事実は、非常に懐疑的です。
whatsisname

13
インタビュアーに代わって誰がこれに答えることができますか?
PDR

5
接線方向のアドバイス-行うプロジェクトオイラーの問題1-10、あなたはあなたとしての要求されます標準タイプの質問の多くのハンドルを持っているだろう「あなたがプログラムすることができます-このコードを書く」

20
FizzBu​​zzの作成に失敗した人を雇うとは思いませんが、私見ではホワイトボードに完全に構​​文を書くことに失敗しました。
マイケルショー

回答:


44

FizzBu​​zzのポイントは、実際にプログラミングの方法を知っていることを示すことではなく、プログラミングするように求められた言語のすべてのより細かい構文規則を覚えていることではありません(ただし、経験の程度を知りたい場合は重要です)あなたは言語にいます)。

あなたがインタビュー環境のストレスでこれまでのところに行き、あなたが犯した間違いを理解していることを示すことができたら、私はあなたが合格したと思います。


同意して、答えを暗記していたことを暗示しようとしていませんでした。私は非常に有能なプログラマーであると感じていますが、プログラミングの問題が1つしかなく、うまくいかないことは私の能力の本当に悪い反映です。彼らはまた、問題について何も言わなかった。車に乗って家に帰り始めるまで、自分の道の誤りに気づきませんでした。それはOMG whyyy !!でした!反応。
ja_programmer

彼らは最初にFizzBu​​zzの質問をしましたか?彼らがすぐにインタビューを終了しなかった場合、あなたは合格しました。インタビュアーは、単純なコーディングテスト以外の他の要因を考慮します。優秀な雇用主は、批判的に考え、問題を解決する方法を知っている人を求めています。
ロバートハーヴェイ

彼らはほとんどの時間を私の履歴書について尋ね、私が使用したさまざまな技術とそれらをどのように使用したかについて尋ねました。そして、彼らは私にプログラミングの問題を尋ねました。それから、彼らは私について自分に質問をしました。それから私はいくつかの質問をし、彼らの手を振って去った。
ja_programmer

4
優秀なインタビュアーは、あなたを雇用することに興味がなくなったときにインタビューを終了します。これは、テストに失敗した場合、FizzBu​​zzの直後に行われるはずでした。それは彼らがあなたをまだ雇うという意味ではありませんが、あなたが面倒な面接に失敗しなかったことを意味しています。
ロバートハーヴェイ

4
@RobertHarvey-誰もがインタビューを断ち切るわけではありません。FizzBu​​zzに失敗した私の最近の候補者と、私は彼が物事を救うことができるかどうかを確認するためにインタビューを続けました。言い換えれば、私はインタビューのストレスのために運動不足を認めても構わないと思っていました。

26

はい

私がインタビューしたほとんどの人々は、マイナーな構文またはわずかに論理的ではないコード実行部分に失敗し、最終的にはより良い採用となりました。

ロジックの核となるアイデア(あなたがしたこと)をまっすぐに取得し、コードの観点から適切で簡潔なものに変換すること(ほとんどあなたがしたと思います)は、完全に完璧にするよりもはるかに重要です。

IDEを購入するのは、そのための開発者を雇わない構文チェックのためであり、最初のデバッグの瞬間に他の間違いに気付いたでしょう。

最初の要件から最初の試行まで、ひどいことを何もせずにかなり直接的に行った。これは多くの環境で価値があり、フィードバックがなければ完璧です。雇用主があなたが見逃した詳細にこだわっていれば、とにかく来る環境の兆候かもしれません。

タスクが印刷番号のバリアントである場合、詳細の欠落は少し悪いように見えますが、それ以外の位置であなたが好きだった場合、私の決定を変更するのに十分な重みがありません。

[編集]アレックスが指摘したように、反応と落ち着きの側面もあります。個人的には、実際のエクササイズに進む前に、経験を少し外して何かをインタビューしようとすることで、それを邪魔にならないようにしていますが、この2つを組み合わせることもできます。時々、教科書の知識しかなく、理論と背景の問題を真っ直ぐに航行するが、実際の練習をどこから始めるべきかを真剣に考えている人に出会うことがあります。どこから始めればよいかわからない人もいます。

これらの個人は、まさにこの演習で除かれたいものです。

したがって、インタビュアーに要件を明確にするのに20分かかったのでない限り、あなたの解決策は多かれ少なかれあなたが行ったようにいくつかの修正を伴う最初の試みだったと思います。あなたが5分以内に上に置いたものを手に入れたなら、あなたは私の基準に対して十分に考えることができることを示しました。


2
ビル、詳細なフィードバックに感謝します。他の視点を得るのは素晴らしいことです。とても単純なものに間違いを犯し、あなたがそれより優れていることを知ってイライラするだけです。
ja_programmer

1
ビルが言ったことを確認させてください。この種のテストは、主に人々が圧力下でどのように反応するかを見るために設計されています。これらの条件下で作業する場合、完璧なプログラマーになることは期待されていません。あなたは...仕事をすることが期待されています。本当に。落ち着いて、できる限り問題に直面しようとするだけです。それがまさにあなたがしたことです。
AlexBottoni

数字を印刷しないだけでなく、15の多数でFizzまたはBuzzを印刷せず、FizzBu​​zzを印刷できないことも認識できません。問題の内訳はよくありません。「FizzBu​​zz」を印刷するタイミングは、このパズルの最も重要な要素です。
ピーターB

多くの契約住宅に候補者がそれを覚えているので、この特定の例を使用しませんが、これらのエクササイズで「おっと」と間違えた人は一般的に良い同僚になることが私の経験です。彼の論理は正しい場所から始まり、余分ながらくたの束はありません、それは良いことです。彼はあなたが最初のコンパイルで見たであろう何かを見逃した。15分で3回間違えると、30分かかる人よりもいい人が欲しいです。
ビル

@Bill-この問題に対するどのような回答がありますか?プログラミングクラスを1つも持っていない人が、少なくとも私が言ったほど多くのことを知ることができないことを理解していない。多分1分から1分半で書いたが、それがとても長くかかった唯一の理由は、私がホワイトボードで同時に話したり書いたりしていたからだ。
ja_programmer

15

上記のコードは、私が他に何もすることがなければ、おそらく私にとって契約違反になるでしょう。彼らがマイクロソフトのインタビュースタイルに従う場合、この質問をした人はおそらくあなたをブロックします。

私を困惑させるのは、インタビュアーがこのコードについて尋ねなかったことです。優れたインタビュアーは、特に急いでいるときに人々が間違いを犯すことを知るのに十分な独自のコードを見てきました。通常、彼らは「今、このコードに何か問題がありますか?」と言います。「いいえ?まあそれをテストしましょう」。いくつかの結果セットを考え出し、それを関数で実行します。次に、「ああ、それはうまくいきませんでした」と言います。「わかりました、どのように修正しますか...」など。そのダイアログを生き延びた場合、実際には非常に印象的であり、批判的に考え、テストケースを考え出し、独自のコードをデバッグする能力を示しています。

また、彼らは通常「作業コード」を探していないことに注意してください。とにかく最初の試行でそれを作成するのは誰ですか?しかし、エラー処理と適切なテストセットを使用して論理的に正しいことが目標です。

さらに、これはあなたを驚かせるかもしれませんが、あなたはfizzbuzzを始めることさえできない多くの人々と競争しています。私たちは、他の誰もが睡眠中にb +ツリーを走査していると仮定する傾向があります。他の候補者よりもはるかに優れていたことに驚くかもしれません。

私のアドバイスは、それをはがすだけです。最近、大規模なソフトウェア会社(Microsoft、Amazonなど)でインタビューを行いましたが、このような徹底的なインタビュープロセスを経験したのは初めてでした。マイクロソフトのオンサイトインタビューで、主に神経のために私は馬鹿になりましたが、何を期待しているのか、彼らが何を探しているのか正確に知りませんでした。本当に簡単な問題を解決するためだけに、最短経路の問題を特定しました。私はスタックの間違った端から値をポップし、int atoi(char* value)実装を忘れましたint val = value[i] - '0';文字の整数値、およびその他のいくつかの愚かな間違いを教えてくれます。私はインタビューの大部分で満足していましたが、申し出を受けなかった理由を理解しました。これは私の能力を反映したものではなく、神経をマスターできるようになるまで試してみなければならないことを示すものであることに気づかなければなりませんでした。やがて私はインタビューをもっと難しい質問で打ち、夢の仕事を見つけました。実際には、実際に自分が何をしているのかを知っているほとんどの人にとっては、インタビュアーが何を望んでいるかを把握し、自分に自信を持ち、それを与えるだけです。少し時間がかかります。


コードは私にとっても取引のブレイクになることに同意します(コードをレビューする必要があるリードポジションにいたことがあります)。私は、彼らにいくつかのプログラミングの問題を尋ね、必要に応じて問題を解決するような「伝統的な」アプローチだと思ったことをすることを期待していました。「このコードの問題を確認する」とあなたが言ったように、すぐに私をひっくり返したでしょう。私はFizzBu​​zzを期待していませんでしたが、これはスピードのエクササイズだと思いました。そして、私は前の夜に緊張し、あまり眠れなかった。あなたがあなたの夢の仕事を得たことをうれしく思います。私も取得するためにインタビューを続けます!
ja_programmer

@ja_programmer well fizzbuzzはスピードの練習です。2分以内に完了する必要があります。彼らはあなたの問題解決能力をテストするのではなく、単純なコードを素早く書くためのあなたの完全な能力をテストするだけです。また、「このコードに問題はありますか?」コードが完全に正しく、彼らが私の自信を測ろうとしているか、私を怒らせようとしていたとき-まだ決めていませんでした。
ジョナサンヘンソン

良い点は、それが正しければ、彼らは言うことができます。ただし、この場合、「このコードに問題がある場合」に得られるはずの頭の上部に正しいスナックが必要だと思います。私が普通の人のような簡単なテストケースを経験した場合、私の論理が間違っていることに気付くでしょう。また、あなたの質問に関しては、私は両方とも少し行きます;)
ja_programmer

2
+1 No? Well let's test it。候補者にインタビューでフィズバズを書くようお願いします。また、ユニットテストを作成するように依頼します。時々彼らのフィズバズは失敗しますが、彼らのユニットテストはこれを検出し、それを修正するように導きます-これは問題ありません。拒否されるのは、失敗したソリューションを作成し、それを検出できないテストを作成する人です。このテストに満足していますか?
Qwerky

12

私はノーと言う必要がありますが、あなたが与えた理由ではありませんが、FizzBu​​zzセクションを最後に置くことです。コードが機能する方法では、期待どおりにFizzBu​​zzを印刷することはありません。Leeがコメントしたように、3または5で割り切れないすべての値に対して出力します。

しかし、主なポイントは、そこから学ぶことです。私はあなたがここにいて、どうすればもっと良くできたのかを尋ねているという事実が好きです。いくつかのコードパズルを行い、一般的なインタビューの質問を調査してください。また、自分でタイミングをとるか、面接で得ようとしている気持ちをまねることができるように、プレッシャーを高める何かをすることもできます。そして、もしあなたが本当に公園からそれをノックアウトしたいのなら、面接の準備、準備、さらに準備をしてください。


3
いつでもそれはFizzBu​​zzを印刷しますi3または5で割り切れない
リー

1
ええ、私はそれを実現します。私は何を考えていたのか本当に分かりません。
ja_programmer

@Lee申し訳ありません、あなたは正しいです、私は彼がそれを望んだときに決して印刷しないことを意味しました。
デビッドピーターマン

1
@mattnzいいえ、しかし、3年の経験があると主張する人は、機能するifステートメントを書くことができ、たとえそれが間違っていたとしても、どこで間違ったかを正確に教えてくれると期待しています。(OPへの違反はありません。できるだけ正直になろうとしています)
デビッドピーターマン

6
@mattnz:プログラムのロジックが完全に間違っているという事実よりも、バグやコンパイルの心配は少ないでしょう。私はisThree = i%3の間違いで生きることができましたが、「else print FizzBu​​zz」の部分は私のためにそれを殺します。おそらく、インタビューを受けた人にその問題をキャッチして修正できるかどうかを確認するためのちょっとしたアドバイスを与えるでしょう。
ミスコ

9

いいえ。FizzBu​​zzのポイントは、すべてのケースをカバーする基本的な条件付きロジックを実行できるかどうかを確認することです。一部の人々の意見に反して、FizzBu​​zzはモジュラス演算子ではなく、3項演算またはブールオペランドを知っています。条件付きの簡単な演習であり、失敗しました。

この問題は、すべての「エレガントな」コードが少なくとも1つのケースをカバーできないように構成されています。

受け入れられる答え:

if div3 print fizz
if div5 print buzz
if !div3 && !div5 print x


if div3 {
    print fizz;
    if div5 {
        print buzz;
    }
} else {
    if div5 {
        print buzz;
    } else {
        print x;
    }
}

2
2番目の例は非常にわかりにくいです。
ブライアン

7

私は、ホワイトボードでやるべき些細なプログラミングの問題を人々に与えます。結果のコードにバグがないかどうかは、決定点ではありません。代わりに、コードの作成中に示された多くの動作に関心があります。それはインタラクティブであり、私はそれが起こっている間、候補者について多くを学んでいます。

インタビュー中のホワイトボードの「テスト」で詳細に説明します:(ホワイトボード)コードをバックアップする正当な方法ですか?

もちろん、あなたのインタビュアーは私のようなものではないかもしれません。しかし、あなたが私とのインタビューに合格して、ほんの少しだけコードを作成し、同一のコードで失敗する可能性は完全にあります。


1
リンクをありがとう。それは非常に良い読み物でした。数年前にインタビュー準備クラスで聞いたことがすべてです。この過去のインタビューの前にあなたのアドバイスを聞いていたらよかったのに。私は何も質問されませんでしたが、私も間もなく情報を提供しませんでした。まあ少しかもしれませんが、そのほとんどがつぶやかれたと思います。私はあなたのアドバイスを心に留めて、(できればすぐに)将来のインタビューでそれを使用します。ありがとうございました!!
ja_programmer

4

これを評価していた場合、次のものを探していました。

  1. 候補者は、実装に進む前に要件を明確に理解しようとしますか?候補者は私の問題を解決しようとしていますか、それともプログラミングツールボックスでペットツールを使用しようとしていますか?候補者はどのように問題を解決しますか?
  2. 候補者は少なくとも1つのプログラミング言語に堪能ですか?
  3. 候補者はブール論理を把握していますか?
  4. 候補者は、ソリューションの品質を確保するために何をしますか?
  5. 候補者は自分のコードに関するフィードバックにどのように対応しますか?

-

#1で言うのは難しいです。あなたの質問は、あなたの問題には「印刷番号」の部分が含まれていなかったと述べており、実際にはあなたのソリューションにはそれが含まれていません。私はそれを選択するしかありませんが、実際にはどちらでも割り切れない数字を印刷することを含む古典的なFizzBu​​zzの問題であれば、要件を完全に理解する前に解決策に飛びついたようですマークオフになります。

#2と#3の部分的なクレジットを提供します。モジュラス演算子を使用することは知っていて、実用的なソリューションの構造を持っていましたが、両方の一部を見逃していました。

#4をやらなかったように思えます。将来的には、ホワイトボードから一歩下がって、解決策を呼び出す前にソリューションを確認することをお勧めします。また、(プロンプトが表示されることなく)ソリューションの単体テストをいくつか実行します。

彼らはあなたに#5のチャンスを与えませんでした、それは残念です。しかし、ポイントは、これまでに書いたコードのすべての行は改善できない可能性のある純粋な金だと思っている人ではなく、彼の解決策についてのフィードバックを受け入れ、彼のアプローチについて何らかの会話をする人。

-

それで、もし私がこれだけで評価していたら、「No Hire」と投票するでしょう。このようなことは、プログラミング能力はなくパフォーマンスアート測定するようなものですが、それをマスターすることはあなたのキャリアを支援することができます。したがって、将来の技術面接に関する私の推奨事項は次のとおりです。

  1. 面接の前に、できるだけ少ない外部リソースを使用して、これらの種類のエクササイズをいくつか練習してください。ソリューションを暗記するのではなく、好みの言語に慣れていることを確認する

  2. 問題について質問して、仮定を検証します。

  3. ソリューションの完了を発表する前に、ホワイトボードから戻って確認し、いくつかの簡単な単体テストケースを確認してください。


基本的なインタビューの目標としてこれに同意しますが、これはフィズバズのポイントではありません。Fizzbuzzは1つのことと1つのことだけを測定しています。簡単なコードをすばやく正確に書くことができますか?通常、インタビュアーはこの質問を2分未満で完了したいと考えています。それだけではありませんが、それが質問の目的です。
ジョナサンヘンソン

1
fizzBu​​zzのポイントは、インタビュアーが望んでいることです。fizzBu​​zzまたは同様のエクササイズを使用する場合、これは私が探しているものです。
JohnMcG

1
インタビュアーの質問は、インタビュアーが興味のあることを評価するために使用したいものです。私のポイントは、FizzBu​​zzは「正しいコードをすばやく書くことができますか?」クリティカルシンキングスキルを測定するのに十分な技術的な挑戦ではありません。誰かが真剣にこの質問に夢中になった場合、あなたもあなたのチームにそれらを望みますか?基本的な計算ができないエンジニアを雇うようなものです。誰もがエンジニアが彼の基本的な計算を知っていることを確認したいのですが、それは彼がすることは本当に交渉不可能です。
ジョナサンヘンソン

2

改善を許可されていないため、ソリューションに関するフィードバックを取得することなく問題を解決するように誰かに依頼することは疑わしいアプローチです。

このテストは、あなたが非常に優れた「トップオブザヘッド」問題解決スキルを実証しなかったことを示しています。

これはあなたを雇うかどうかの決定の要素の1つかもしれませんが、私にとってはそれが唯一のものではないことは間違いありません。

単体テストまたは実行環境が提供されたとしても、あなたが犯した間違いはあまり許されなかっただろう。


1
あなたの能力を向上させる時間と場所がありますが、就職面接はそうではありません。
RokL

採用担当者は、候補者の能力を気にするべきではないということを意味しますか?
guillaume31

1
自己改善は、1時間以上の時間スケールで行われます。リクルーターにとってそれは重要ではありません。
whatsisname

問題がどれほど簡単だったかを考えると、ストレスにさらされていても間違いを犯すべきではなかったと思います。そうは言っても、インタビュアーが候補者を少し押し上げると、このような問題には「改善」の根拠があると思います。「これをまったく改善できると思いますか?」のような簡単なことでもいいのです。候補者に何かが正しくない、または彼/彼女がもっとうまくやれるというヒントを与えるでしょう。そのようなコメントはありません。
ja_programmer

@whatsisname:リクルーターにとっては重要なことと思いますが、あなたが考える方法ではありません。候補者が辞退した場合、採用担当者は、将来より良い候補者を会社に提示できるようにする理由を理解するためのフィードバックを必要とし、この候補者が将来のより強力な候補者になる方法を指示します。そこには相互利益の余地があると思います。
alroc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.