FizzBuzzの問題ではない、良いFizzBuzzタイプの質問がありますか?
私は誰かにインタビューしています。FBは比較的よく知られていて、覚えるのはそれほど難しくありません。そのため、アイデアの検索で最初にやめたのは、私の新しい中毒SOです。
FizzBuzzの問題ではない、良いFizzBuzzタイプの質問がありますか?
私は誰かにインタビューしています。FBは比較的よく知られていて、覚えるのはそれほど難しくありません。そのため、アイデアの検索で最初にやめたのは、私の新しい中毒SOです。
回答:
FizzBuzzのように、候補を除外するために使用される比較的単純なプログラミング問題の小さなリストを見ました。ここに私が見たいくつかの問題を難易度の高い順に示します。
これらはJava用であり、標準ライブラリを使用できるため、それらの一部は非常に簡単です(6など)。ただし、FizzBuzzのように機能します。あなたがプログラミングについての手がかりを持っているなら、あなたはほとんどかなり速く行うことができるはずです。言語をよく知らない場合でも、少なくとも何かを行う方法の背後にある考えを与えることができるはずです。
このテストを使用して、私の前のボスの1人は、すべてを非常に迅速に実行した人から、非常に迅速に実行できる人、30分後に1つに答えられなかった1人の男まで、すべてを見ました。
また、注意が必要です。彼は、これらのタスクが与えられている間、人々に自分のコンピューターを使用させました。彼らはグーグルなどを使うことができると明確に指示された。
多分これはあなたの質問に直接答えませんが、私はあなたが別の問題を思い付く必要があるかどうか確信がありません。「覚えるのが簡単」であることに加えて、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桁を含むフィボナッチ数列の最初の項のインデックスは何ですか?
文字列が回文かどうかをチェックするのは、かなりシンプルなものでかなりシンプルなものであることがわかりました。
scalar(reverse 'foo') == 'foo'
ます。
モジュロ演算子を含まないFizzBuzzの質問が必要でした。特に私は通常、モジュロ演算子があまり頻繁に出てこないWeb開発者にインタビューしているためです。そして、それが定期的に遭遇するものではない場合、それはあなたがそれを必要とする数回調べているものの一つです。
(確かに、それは理想的には途中で数学のコースに出会うべきであるという概念ですが、それは別のトピックです。)
だから、私が思いついたのは、想像を超えて、スリーズインリバースです。手順は次のとおりです。
1から200までの3の倍数ごとに、逆の順序で出力するプログラムを記述します。
通常の順序でそれを行うのは簡単です。ループインデックスに3を掛けて、200を超える数値に到達したら、終了します。終了する反復の数を心配する必要はありません。高すぎる最初の値に到達するまで続けるだけです。
しかし、逆に言えば、どこから始めればよいかを知る必要があります。198(3 * 66)は3の最高の倍数であるため、66をループにハードコードすることを直感的に理解する人もいます。他の人は、数学的演算(整数除算または200と3の浮動小数点除算のfloor())を使用してその数を計算し、そうすることで、より一般的に適用できるものを提供します。
基本的に、それはFizzBuzzと同じ種類の問題です(値をループして、ひねりを加えて出力します)。これは解決すべき問題であり、モジュロ演算として(比較的)難解なものをまったく使用しません。
print [x for x in xrange(3, 200, 3)][::-1]
フィボナッチ、文字列の反転、バイトに設定されたビット数のカウントは、他の一般的なものです。 プロジェクトオイラーには、難易度が高くなるコレクションも多数あります。
10秒でできる非常にシンプルなもので、文字通り何もプログラムできない人を削除する場合は、次のコードを試してください。
質問:2つの変数の値をどのように交換するか(紙では、しかしホワイトボードではより良い)を見せて
これは私の考えではありませんでしたが、元のFizzBuzz質問に関するブログ投稿の Jacobという名前の誰かのコメントに投稿されました。
ジェイコブは続けて言う:
彼らが3番目の変数の作成から始まっていない場合は、その人をほとんど書くことができます。私はその質問だけで私の(私は確かにその時点でスクリーニングされていない)応募者の3分の1から半分に削減できることを発見しました。
3番目の変数(加算/減算、xorなど)を必要とせずにこの変数スワッピングを実行する方法について、そしてもちろん、これをサポートする言語を使用している場合、元のブログ投稿のコメントの後にさらに興味深い議論があります単一のステートメント/操作では、それほど良いテストではないかもしれません。
私の考えではありませんが、これはとてもエレガントでシンプルで簡単な質問なので、ここに投稿したいと思います。これは、最も単純なプログラムでさえ書いた人なら10秒以内に答えることができるはずです。また、かなり適切なプログラマーである多くの人々が単純に馴染みのない(私自身の経験から知っています)、モジュロ演算子のように見かけ上不明な演算子を使用する必要もありません。
与えられた数の因子を返すアプリを書くように彼らに頼んでください。それは簡単で、短期間でうまくやるのが難しいです。あなたは彼らのスタイルと彼らが問題を通して考えている方法を短時間で見ることができます。
C / C ++インタビューの場合は、その人がポインタについて知っていることを確認してください。
一般-単純なアルゴリズム([single / double] linkedリスト)。それぞれの場合の追加の複雑さについて質問します(最初、最後に、最適化...)?
(一般)ちょうど3 * N / 2の比較で配列(Nサイズ)から最小値と最大値をどのように見つけますか?
C / C ++:複数の "strcat"をどのようにバッファーに最適化しますか?
C ++ FAQ Liteから6.14を確認してください。
方法:単一の整数を使用して複数の値を格納したい。それがどのように機能するかを説明してください。
ビットマスクと操作についての手掛かりがない場合は、おそらく他の問題を解決できません。