10/15/2016

GoogleのDirector of Engineeringの雇用テスト

Hacker Newsより(なんと900のコメントが付いた)。GoogleのDirector of Engineeringの雇用テストを受けた人のブログ

最近、私はGoogleの人材スカウト業者(リクルータ)から電話でインタビューを受けた。私はインタビューに自信はあったが、テストの通過には失敗した。このブログはその問題と想定される回答を載せている。もし、Googleからあなたにある日電話があったら、役立ててほしい。

意見の役立てるため、私は37年前にプログラミングを始め(私は11歳だった)、それ以来やめることはなかった。24年前にR&D Directorとして任命され(私は24歳だった)、多くの他の仕事の間で、私はその後TWDのR&Dプロジェクトの最も骨の折れる仕事を設計し実装した。それら全てが商品となった:

  • Global-WAN (カスタムカーネルバイパスのIPスタックと我々自身の次の量子暗号を使ったC/VHDL分散型L2 VPN)
  • G-WAN (C/C++、C#、Objective-C、Java、Go、PHPなど17のスクリプト言語を持つ200KBアプリケーションサーバ)
  • Remote-Anything (138の国に展開され、2800万ランセンスされた特許権を有するエンタープライズネットワーク管理ソリューション)

Googleの代理人はマネージメントと最新のコーディングスキルの両方が要求されると言った(ミックスはまれ)。しかし、前者は20年以上、後者は40年やってきたが、それで十分ではなかった: 私は正解を答えることに失敗した。Googleの水準が高過ぎるのか、あるいは募集スタッフは査定するはずのスキルが欠けていたのか?

それでは見ていこう!

Googleの「Director of Engineering」Q&Aテスト


ここにはかなり専門的な質問と回答がある。ただし、私が仕事に適合していないことは明らかだったので、テストが中断されるまで。

  1. C言語で、malloc()の反対の関数は何ですか?
    私: free()
    リクルータ: 正解
    意見: 40歳のC言語で35年間プログラミングしてきたことに自信を持つはずの滅多にない瞬間だと思う

  2. ソケットに接続を受けとらせるUnixの関数は何ですか?
    私: listen()
    リクルータ: 正解
    意見: この質問は、ネットワーク・グルとして本当に私が適任なだと分かるのだろうか?

  3. MACアドレスを保持するのに何バイト必要ですか?
    私: 6バイト
    リクルータ: 正解
    意見: イーサネットバッジを獲得したと思う...

  4. 次を処理時間順に並べて下さい: CPUレジスタ読み出しみ、ディスクシーク、コンテキストスイッチ、システムメモリ読み出し
    私: CPUレジスタ読み出し、システムメモリ読み出し、コンテキストスイッチ、ディスクシーク
    リクルータ: 正解
    意見: 典型的なコンピュータサイエンスの大学(1年目)の講義

  5. Linuxのinodeは何ですか?
    私: 任意のファイルシステムのユニークなファイル識別子
    リクルータ: 不正解、ファイルのメタデータです
    私: inodeはファイルシステム上のファイルを一意的に識別するインデックスで、ファイルサイズ、作成時間、所有者、パーミッションのようなファイル属性を引き出すためにこのインデックスを検索できます。また、ファイルシステム上に自身の属性を加えることもできます
    リクルータ: 不正解、"属性"ではなく"メタデータ"です
    意見: "メタデータ"は"ファイル属性"よりも有益って本当?

  6. パスを受け取り、inodeを返すLinux関数は何ですか?
    私: 私はG-WAN向けにカスタムLIBCを書きました。しかし、inodeを返すシステムコールを思い出すことができません
    リクルータ: stat()
    私: stat()、fstat()、lstat()、fstatat()、全てエラーコードを返し、inodeではありません。それらは以前お話ししたファイル属性を保持する状態構造体に埋め、単にファイルのinodeインデックスだけではありません
    リクルータ: それは回答ではありません。inodeはあらゆるメタデータを含んでいます
    意見: Googleは極悪非道のMicrosoftのTay AIボットを密かにライセンスしたのか?

  7. KILLシグナルの名前は何ですか?
    私: #define文が9に設定されているのがSIGKILLです
    リクルータ: いいえ、それは"TERMINATE(終了)"です
    私: SIGTERM(15)はKILLシグナル(9)とは違いますよ
    リクルータ: それは私が持っているペーパーの答えではありません
    意見: AIボットが気晴らしための麻薬を見つけた時にこうなると思う

  8. なぜクイックソートが最高のソーティング手法なのですか?
    私: それはいつも当てはまるとは限りません、適切ではない場合もあります
    リクルータ: クイックソートは最高O()(ビッグ・オー)を持っています
    私: O()はデータストレージのレイテンシ、トポロジ、ボリューム、利用可能なメモリを無視しますし、全てのCPUインストラクションの計算可能なコストさえも与えられた実装に関連します。代わりに、アルゴリズム上の演算数を数えているに過ぎません! O()はアルゴリズムの設計時に役立つ目安にはなりますが、最高のパフォーミングとスケーリングのソリューションは特定の問題や環境の制限事項に依存します
    リクルータ: 不正解、私にクイックソートはO()スコアと言うべきです
    意見: OMS(世界保健機構?)はいつ学者によって公衆精神衛生にもたらしたダメージの中にタバコスキャンダルのパターンを認めるだろうか? (Googleが信頼する) Linuxカーネルは、クイックソートよりもメモリの利用が少なく、より予測可能な実行時間であるヒープソートの方が選んだ...

  9. 1万個の16ビット値があります。最も効率よくビットを数えるにはどうしますか?
    私: 64ビットワードで右にビットをシフトするカーニハン法です
    リクルータ: いいえ
    私: マスクで64ビットワードを処理するより高速な手法がありますが、私は電話越しには説明できません。コードを書かせて下さい
    リクルータ: 正しい答えはルックアップテーブルを使って、結果を合計するです
    私: どんなCPUでも? なぜベンチマークで私のコードとあなたの回答を比較させてくれないのですか?
    リクルータ: それはこのテストの核心ではありません
    私: このテストの核心は何ですか?
    リクルータ: 私はあなたが正しい答えを知っているかをチェックしなければなりません
    意見: このくだらない質問がいつまで続くのだろうか? 64ビットのマスクベースの手法は一度に8バイトワードを処理できるのに、8ビットのルックアップテーブルは次々にバイトを処理する(その上、今のCPUインストラクチャは移植性が関係なければ、10倍速く128ビットワードを処理させられる)。64ビットのルックアップテーブルは今日のコンピュータにもできないことなので、何が一番速いかは確信が持てる

  10. TCP接続を確立するために交換されるパケットのタイプは何ですか?
    私: 16進数で: 0x02、0x12、0x10、訳すと、同期と確認応答です
    リクルータ: 不正解、SYN、SYN-ACK、ACKです。もし、Googleがダウンしたら、何が問題かを診断するためにこれを知っている必要があります。あなたがネットワークアプリケーションを書くあるいはレビューするのに必要となるスキルを持っていないことが明らかになったので、我々はここでやめます。もし、しばらくしてあなたが再びインタビューされることがあるなら、あなたはLinuxの関数呼び出し、どのようにTCP/IPスタックが動いているか、O()は適切な手段であることを学ぶべきです。幸運を、さようなら
    意見: 何が起こったかを見つけるために16進数のパケットダンプを読み取る必要がある場合、3文字の記憶法は故障したネットワークサービスを修理するための助けにはならない。おそらく、Googleは慣習は仕事に必要ではないということを伝えるべきだろう

    一方、私のスコアは4/10で、今までで私の最高のGoogleページランク**よりは良かった!

(*) GoogleとTWDは双方1998年に創業した
(**) Googleページランク: 現実より高い検索結果のランク付けを後押しする超秘密の数式デモ