the FizzBuzzの問題ではないFizzBuzzタイプの質問はありますか?
私は誰かにインタビューしていますが、FBは比較的よく知られており、暗記するのも難しくありません。そのため、アイデアを探す最初の目的地は私の新しい依存症です。
FizzBuzzのように、候補を除外するために使用される比較的単純なプログラミング問題の小さなリストを見てきました。難易度の高い順に、私が見た問題のいくつかを以下に示します。
これらはJava用であり、標準ライブラリを使用できるため、その一部は非常に簡単です(6など)。しかし、彼らはFizzBuzzのように動作します。プログラミングについての手がかりがあれば、最も早くできるはずです。言語をよく知らなくても、少なくとも何かをする方法の背後にある考えを与えることができるはずです。
このテストを使用して、私の以前のボスの1人は、すべてを非常に迅速に処理した人から、最も迅速に処理できる人、30分後に1つだけに答えられなかった人まで、すべてを見ました。
また、これらのタスクが与えられている間、彼は人々に彼のコンピューターを使用させました。彼らは具体的に、彼らがcould Googleなどを使用するように指示されました。
おそらくこれはあなたの質問に直接答えませんが、別の問題を考え出す必要があるかどうかはわかりません。 「覚えやすい」ことに加えて、FizzBuzzの質問は単なる「簡単」であり、それがポイントです。あなたがインタビューしている人が、FizzBuzzが「よく知られている」人々のクラスにいる場合、彼らはFizzBuzzタイプの質問が除外されない人々のクラスにいます。それはあなたがその場で彼らを雇うことを意味しませんが、それは彼らがそれを通り抜けて、インタビューの肉に着くことができるべきであることを意味します。
別の言い方をすると、時間をかけて コーディングホラー を読む人は、さらにインタビューする価値があります。ソリューションをすぐに書き出して、簡単に話し合い(たとえば、これをどのようにテストしますか)、次の質問に進みます。そして、記事が言っているように、「これは、最も単純なプログラミング作業ができない候補者の数を本当に驚かせています。」
Project Euler の初期のものは、おそらく良いでしょう。
例えば:
問題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開発者にインタビューしています。そして、それがあなたが定期的に遭遇するものでなければ、それはあなたがそれを必要とする数回調べるものの一つです。
(確かに、理想的には、数学コースで途中で遭遇するはずだったという概念ですが、それは別のトピックです。)
それで、私が思いついたのは、想像を絶するような、私が呼ぶものですThrees in Reverse。指示は次のとおりです。
逆順で、1から200の間の3の倍数ごとに出力するプログラムを書きます。
通常の順序で簡単に行うと、200を超える数に達するまでループインデックスに3を掛けてから終了します。終了する反復回数について心配する必要はありません。高すぎる最初の値に達するまで続行します。
しかし、逆方向に進むと、どこから始めればよいのかを知る必要があります。一部の人は、198(3 * 66)が3の最高倍数であるため、66をループにハードコードすることを直感的に理解するかもしれません。他の人は、数学演算(整数除算または200と3の浮動小数点除算のfloor())を使用してその数を計算し、そうすることでより一般的に適用可能なものを提供する場合があります。
本質的に、それはFizzBuzzと同じ種類の問題です(値をループして印刷する、ひねりを加えて)。これは、モジュロ演算と(比較的)難解なものをまったく使用しない、解決すべき問題です。
10秒で実行できるが、文字通りanythingをプログラムできない人々を削除する非常にシンプルなものについては、これを試してください:
質問:2つの変数の値をどのように交換するかを(紙の上で、ホワイトボードの方が良い)見せてください。
これは私の考えではありませんでしたが、 コメントで投稿 Jacobという名前の誰かが ブログ投稿 で、元のFizzBuzzの質問に関するものでした。
ジェイコブは続けてこう言います:
3番目の変数を作成しないstartでない場合は、その人を書き留めることができます。私は、その質問だけで(確かにその時点ではスクリーニングされていない)応募者の3分の1から2分の1を削減できることがわかりました。
3番目の変数(加算/減算、xorなど)を必要とせずにこの変数スワッピングを実行する方法について、そしてもちろん、これをサポートする言語を使用している場合、元のブログ投稿のコメントの後、さらに興味深い議論があります単一のステートメント/操作では、それほど良いテストではないかもしれません。
私のアイデアではありませんが、ここに投稿したかったのは、非常にシンプルで簡単な質問なので、最も簡単なプログラムを書いた人でも10秒以内に答えられるべきです。また、モジューロ演算子のように明らかに曖昧な演算子を使用する必要もありません。それは、かなりまともなプログラマーである多くの人は、単純に慣れていません(私自身の経験から知っています)。
フィボナッチ、文字列の反転、バイトに設定されたビット数のカウントは他の一般的なものです。 Project Euler には、難易度が増加する大きなコレクションもあります。
特定の数の要因を返すアプリを作成するよう依頼します。簡単にできて、短期間でうまくやるのは難しいです。わずかな時間で、彼らのスタイルと問題に対する考え方を見ることができます。
文字列Y内で文字列Xが最初に現れるインデックスを返します
Strstr()を実装するには、巧妙な最適化の機会を提供しながら、言語の基本的な理解が必要です。
C/C++インタビューの場合は、その人がポインターについて知っていることを確認してください。
一般-単純なアルゴリズム([single/double] linked list)。それぞれの場合の追加の複雑さについて質問します(最初、最後、最適化...)?
(一般)わずか3 * N/2の比較で、配列(Nサイズ)から最小値と最大値を見つけるにはどうすればよいですか?
C/C++:複数の "strcat"をバッファに最適化するにはどうしますか?
C++から6.14をチェックしてくださいFAQ Lite:
方法:複数の値を格納するために単一の整数を使用したい。それがどのように機能するか説明してください。
彼らがビットマスクと操作についての手がかりを持っていない場合、おそらく他の問題を解決することはできません。
素数のリストを見つけることはかなり一般的な質問ですが、それはまだいくつかの考えを必要とし、人々が与えるかもしれない答えの程度はさまざまです。
また、Map/Dictionaryタイプのデータ構造を実装するのに苦労している人が多いことに驚かれることでしょう。
候補者に、選択した任意の擬似言語で特定の数の 階乗 を計算するプログラムを作成するように依頼しました。解決するのはかなり簡単な問題であり、再帰についての自然なフォローアップの質問(よく尋ねられる)に役立ちます。