面接タスク

私は時々求職者にインタビューします。 候補者の専門的なスキルを決定することに加えて、私の責任には「タスクに従って人を運転する」ことが含まれます。



インタビュー、知人、インターネットリソース、自分の想像力から収集した一連のタスクを共有したいと思います。 これらのタスクの複雑さ/妥当性について意見を聞き、おそらく私のコレクションを補充したいと思います。





グループ1:口頭パズル-愚か者の確認

1.1文を裏返します(「ママソープフレーム」でしたが、「ママソープフレーム」になりました)。 余分なメモリを使用せずにそれを行う



1.2整数の配列が与えられた。 数字の1つが2回現れることが知られています。 O(n)でこの番号を見つけます



1.3たとえば、thisisastringwithoutdelimitersなどの文字列が指定されます。 すべての可能な単語分割を整理する方法は?



1.4 rnd()は1〜5のランダムな整数を返します。rnd()のみを使用すると1〜7のランダムな整数を返すrnd2()を実装します。



1.5ソートされた配列をシャッフルします(つまり、要素をランダムな順序で並べます)。 追加の構造が必要ですか? 難しさは何ですか?



グループ2:ボードに大まかな解決策を書くか描く

2.1パスカルの三角形の中心係数を導き出す。 たとえば、三角形の場合

                                                 1
                                              1 1
                                           1 2 1
                                        1 3 3 1
                                     1 4 6 4 1
                                  1 5 10 10 5 1
                               1 6 15 20 15 6 1
1、1、2、3、6、10、20になります。

最適な方法でこれを行う方法は?



2.2与えられた正方行列。 すべての行列要素を螺旋状に印刷します;たとえば、行列の場合

                                                 1 2 3 
                                                 4 5 6
                                                 7 8 9
1、2、3、6、9、8、7、4、5になります



2.3全体のキューブから、完全に大きなキューブ内に配置された小さなキューブを任意に切り取りました。 結果の図形(内部に空洞のある大きな立方体)を同じ体積の2つの図形に切断する平面を見つける必要があります。



2.4 FIFOスタックのように機能するデータ構造を作成するには、O(1)でpush()およびpop()を実行します。 操作max()も定義されます。これは、構造内の最大要素を返し、O(1)で実行されます。



2.5無制限の数のスタック(FILO)を使用してキュー(FIFO)を実装しますか? そしてその逆(キューのスタックを作る)?



グループ3:大声で考える

3.1ある島には、嘘つきと騎士が住んでいます。 嘘つきは常に真実を語る、騎士-真実。 どちらも「ティック」と「そのような」という言葉でバイナリ質問に答えることができます。 つまり、「はい」という意味です。「いいえ」は不明です(「ティック」は「はい」ですが、「ソ」は「いいえ」ですが、逆も同様です)

あなたが島の住民である前に。 彼に1つの質問をし、答えに応じて、彼が騎士か嘘つきかを判断します。



3.2すべての単語の辞書があります。 辞書のデータ構造と最短時間(できればO(1)が望ましい)でどのアナグラムがこの文字列であるかを決定するアルゴリズムを考え出す必要があります(たとえば、「nnarahamam」は「anagram」という単語のアナグラムです)



3.3英語の文章と悪い単語のリストがあります。 文中のすべての悪い単語をアスタリスクに置き換える必要がありますか? そして、単語のルートのみを置換する方法(たとえば、「この**** ing店員はこんな***穴です!」)?



3.4有名なシーケンスのデータベースがあります(たとえば、2項係数番号、カタロニア語番号、失われた「4 8 15 16 23 42」など)。 これらのシーケンスのストレージを整理する方法と、ユーザー定義のシーケンスによって与えられる番号を決定するために使用するアルゴリズム。 たとえば、ユーザーが34、55、89、144を入力した場合、アルゴリズムはこれらがフィボナッチ数であると言う必要があります。



3.5次の条件を満たすタスクスケジューラを作成する必要があります。

(a)特定の頻度(整数の秒数)でタスクを実行する必要があります。

(b)新しいタスクはいつでも追加できますが、

(c)スケジューラは1つのスレッドで実装する必要があります。

(d)スケジューラは毎秒起動します。

(e)時間タスクが即座に実行されます。

したがって、2つのタスクが追加された場合、AとB、Aの頻度は2秒、B-3秒でスケジューラはAを実行し、3番目-B、4番目-A、5番目-何もない、6番目のAとBで、など

どのくらいのメモリが必要ですか? 現在の秒で完了するタスクの検索時間を最適化する方法は? スケジューラーのステップが1秒であるという事実をどのように活用できますか?



PS

問題を解決する速度/品質が、候補者を完全に特徴付けていないことを理解しています。

インタビューに関するジョエル・スポルスキーの記事もとても気に入っています。



All Articles