FizzBuzz の問題ではない、良い FizzBuzz タイプの質問はありますか?
私は誰かにインタビューしていますが、FB は比較的よく知られており、覚えるのがそれほど難しくないので、アイデアを探す最初の目的地は私の新しい依存症 SO です。
FizzBuzz の問題ではない、良い FizzBuzz タイプの質問はありますか?
私は誰かにインタビューしていますが、FB は比較的よく知られており、覚えるのがそれほど難しくないので、アイデアを探す最初の目的地は私の新しい依存症 SO です。
FizzBuzzのように、候補を取り除くために使用される比較的単純なプログラミングの問題の小さなリストを見てきました。難易度の高い順に、私が見た問題のいくつかを次に示します。
これらはJava用であり、標準ライブラリを使用できるため、一部のライブラリは非常に簡単です(6など)。しかし、それらはFizzBuzzのように機能します。あなたがプログラミングについての手がかりを持っているなら、あなたは最も速くすることができるはずです。言語をよく知らなくても、少なくとも何かをする方法の背後にあるアイデアを与えることができるはずです。
このテストを使用して、私の前のボスの1人は、すべてを非常に迅速に実行した人から、最も迅速に実行できる人、30分後に1人に答えることができなかった人まですべてを見ました。
また、彼は、これらのタスクが与えられている間、人々に自分のコンピューターを使用させました。グーグルなどが使えるように特に指示された。
おそらくこれはあなたの質問に直接答えるものではありませんが、あなたが別の問題を考え出す必要があるかどうかはわかりません。「覚えやすい」だけでなく、FizzBuzzの質問は単純な「簡単」であり、それがポイントです。あなたがインタビューしている人がFizzBuzzが「よく知られている」人々のクラスにいる場合、彼らはFizzBuzzタイプの質問が除外されない人々のクラスにいます。それはあなたがその場で彼らを雇うという意味ではありませんが、それは彼らがそれを通り抜けて面接の要点に乗ることができるはずであることを意味します。
言い換えれば、コーディングホラーを読むのに時間がかかる人は誰でもさらにインタビューする価値があります。解決策をすぐに書いてもらい、簡単に話し合ってから(たとえば、これをどのようにテストしますか?)、次の質問に進みます。そして記事が言うように、「最も単純なプログラミングタスクができない候補者の数は本当に驚くべきものです」。
プロジェクトオイラーの初期のものはどれもおそらく良いでしょう。
例えば:
問題25
フィボナッチ数列は、漸化式によって定義されます。
Fn = Fn−1 + Fn−2, where F1 = 1 and F2 = 1.
したがって、最初の12の用語は次のようになります。
F1 = 1 F2 = 1 F3 = 2 F4 = 3 F5 = 5 F6 = 8 F7 = 13 F8 = 21 F9 = 34 F10 = 55 F11 = 89 F12 = 144
12番目の用語F12は、3桁を含む最初の用語です。
1000桁を含むフィボナッチ数列の最初の項のインデックスは何ですか?
文字列が回文であるかどうかをチェックすることは、まともなウィーダーになる可能性のある非常に単純なものであることがわかりました。
モジュロ演算子を含まない FizzBuzz の質問が必要でした。特に、モジュロ演算子がそれほど頻繁に出てこない Web 開発者にインタビューしていることが多いためです。定期的に遭遇するものではない場合でも、必要なときに数回検索するものの 1 つです。
(確かに、理想的には、途中のどこかの数学コースで遭遇したはずの概念ですが、それは別のトピックです.)
それで、私が思いついたのは、想像を絶する、Threes in Reverseと私が呼んでいるものです。指示は次のとおりです。
1 から 200 までの 3 の倍数ごとに逆順に出力するプログラムを作成してください。
通常の順序で行うのは簡単です。200 を超える数値に達するまでループ インデックスを 3 倍してから終了します。何回繰り返して終了するかを心配する必要はありません。高すぎる最初の値に到達するまで続行します。
しかし、過去にさかのぼるには、どこから始めればよいかを知らなければなりません。198 (3 * 66) が 3 の最大の倍数であることに直感的に気付く人もいるかもしれません。そのため、66 をループにハードコーディングします。他の人は、数学的演算 (整数除算または 200 と 3 の浮動小数点除算での floor()) を使用してその数を計算し、そうすることで、より一般的に適用可能なものを提供する場合があります。
基本的に、これは FizzBuzz と同じ種類の問題です (値をループして出力する、ひねりを加えたものです)。これは、モジュロ演算ほど (比較的) 難解なものを使用しない、解決すべき問題です。
10 秒で実行できる非常に単純なことですが、文字通り何もプログラムできない人を除外するには、次の方法を試してください。
質問: 2 つの変数の値を交換する方法を (紙の上に、ただしホワイトボードの上に) 示してください。
これは私の考えではありませんでしたが、元の FizzBuzz の質問に関するすべてのブログ投稿で、Jacob という名前の誰かがコメントに投稿したものです。
ジェイコブは続けてこう言います。
彼らが3 番目の変数を作成することから始めない場合、その人を無視することができます。その質問だけで、(確かにその時点で選別されていない)応募者の3分の1から半分を削減できることがわかりました.
3 番目の変数 (加算/減算、xor など) を必要とせずにこの変数のスワッピングを実行する方法についての元のブログ投稿へのコメントの後に、さらに興味深い議論があります。もちろん、これをサポートする言語を使用している場合単一のステートメント/操作では、それほど良いテストではない可能性があります。
私の考えではありませんが、これをここに投稿したかったのは、最も単純なプログラムを書いた人でも約 10 秒以内に答えることができる (そしてそうする必要がある) エレガントでシンプルで簡単な質問だからです。また、モジュロ演算子のような一見あいまいな演算子を使用する必要もありません。モジュロ演算子は、他の点ではかなりまともなプログラマーである多くの人々が単に慣れていないだけです (私自身の経験から知っています)。
フィボナッチ、文字列の反転、バイトに設定されたビット数のカウントは、他の一般的なものです。 Project Eulerには、ますます困難になっている膨大なコレクションもあります。
特定の数の因数を返すアプリを作成するように依頼します。短期間でうまくやるのは簡単で、うまくいくのは難しい。彼らのスタイルと問題に対する考え方を短時間で見ることができます。
文字列Y内で最初に出現する文字列Xのインデックスを返します
strstr()を実装するには、巧妙な最適化の機会を提供しながら、言語の基本的な理解が必要です。
C/C++ 面接の場合は、その人がポインターについて知っていることを確認してください。
一般 - 単純なアルゴリズム ([single/double]linked list)。それぞれのケースでの追加の複雑さについて質問してください (最初に、最後に、最適化...) ?
(一般) 3*N/2 の比較だけで配列 (N サイズ) から最小値と最大値を見つけるにはどうすればよいですか?
C/C++: 複数の "strcat" を 1 つのバッファーにどのように最適化しますか?
素数のリストを見つけることはかなり一般的な質問ですが、それでも少し考える必要があり、人々が与える答えの程度はさまざまです。
Map/Dictionary 型のデータ構造を実装するのに苦労している人々の多さに驚かれることでしょう。
C++ FAQ Lite から 6.14 を確認してください。
方法: 単一の整数を使用して複数の値を格納したいと考えています。それがどのように機能するかを説明してください。
ビット マスクと操作についての手がかりがなければ、他の問題を解決できない可能性があります。
私は候補者に、任意の疑似言語で特定の数の階乗を計算するプログラムを作成するように依頼しました。これはかなり簡単に解決できる問題であり、再帰に関する自然なフォローアップの質問 (よく聞かれる可能性があります) に適しています。