インド人女性のリクルータが、「ハロー、Software Engineer, Products のポジションでインタビューしてみませんか」と突然電話をしてきたので、私が「はい、ぜひお願いします」と答えると、その場でいきなり問題を出してきました。
リクルータ:「Java で、サブクラスでのメソッドの override を禁止するために、どんな修飾子をつける?」という感じでイントロが終わり、後日、 Google の 1st round の電話インタビューと同じ日に Facebook の電話インタビューもスケジュールされました。で、リクルータさんとの電話のあとに Software Engineer, Products の job description を見てみると、PHP と Python、Javascript の知識を有していることとあります。あれ?どの言語もかけだしで、実際の開発で使ったこともないから、履歴書に載せてないんですけど。なんでコンタクトしてきたんだろ?と不思議に思いました。
私:「final ですか?」
リクルータ:「そうね、じゃあ class に final をつけるとどうなる?」
私:「そのクラスからの継承が禁止されるのでは?」
リクルータ:「そう。じゃあ今度は、バブルソートの best case の実行速度と worst case の実行速度は?」
私:「Worst case は O(n^2) で、best case はおそらく全部ソートされているときで、あれ?でもその場合も一応要素同士の比較が生じるから、best case も O(n^2) ・・・だと思います」
リクルータ:「ほんと?」
私:「はい」
リクルータ:「Best case は比較も発生しないから O(n) なの。じゃあ、これが最後の問題。配列に 1000 個の整数があって、ソートされています。ある要素を探したいときに最悪何回 lookup する必要がある?」
私:「えと、バイナリーサーチをしますから、lg(1000) = 3 lg(10) で、最悪10回の lookup が必要だと思います」(lg は log base 2 の略記です)
リクルータ:「はいここまで。いいでしょう、では、次のインタビューに進んでもらいます。電話インタビューのスケジュールを決めますので、あいてる日付と時間をメールしてください」
私:「分かりました」
当日、Facebook の newsfeed の開発をしているというエンジニアのお兄さんから電話がかかってきました。履歴書の自分のバックグラウンドを話したあと、お兄さんは「じゃあ、Yuki の PHP の開発経験を聞かせてもらえるかな?」とたずねてくるので、私は「いえ、PHP での開発経験はありません。」と答えました。お兄さんは「そっか、じゃあ Python と Javascript、仕事で使った経験は?」と聞くので、「いえ、それもありません。」と答えると、お兄さんは「あ、そう・・・」と言って「それじゃあ、アルゴリズムとコーディングの問題に移ろう」という感じで話を次に進めました。もうこの時点で、私はなんだか場違いな雰囲気をひしひしと感じていました ;(
アルゴリズムは、配列とリストに関する基本的な問題でした。コーディングはFacebook のサイト上に特別に用意されたページで行いました。自分のアカウントを使ってログインし、お兄さんが関数のプロトタイプを書いてくれました。問題は C で singly-linked list をリバースしてね、ということでした。条件として、iterative と recursive の両方のバージョンを書いてほしい、とも言われました。そのときのコーディングの痕跡が残っていたので、そのままひっぱってきました。
// provided by the interviewer例によって、また再帰バージョンで頭がこんがらがりかけた記憶がありますが、Google との電話インタビューで再帰が絡んだキューの問題を解いた後だったので、この問題は自力で解けました。こうして最初の電話インタビューが終わり、その4日後に rejection のメールが来ました。私としては、むしろ驚くこともなく、そもそもなんで最初にコンタクトしてきたんだろうと頭の中が「?」でいっぱいでした。
typedef struct Node {
int data;
struct Node *next;
} Node;
// iterative version
Node *iterativeReverse(Node *head) {
if (!head) return NULL;
if (!(head->next)) return head;
Node *curr = head;
Node *prev = NULL;
Node *temp = NULL;
while (curr) {
temp = curr->next;
curr->next = prev;
prev = curr;
curr = temp;
}
head->next = NULL;
head = prev;
return head;
}
// recursive version
Node *recursiveReverse(Node *head) {
if (!head) return NULL;
if (!(head->next)) return head;
Node *tail = recursiveReverse(head->next);
head->next->next = head;
head->next = NULL;
return tail;
}
というわけで、今回はあまりつっこんだ反省記が書けずに申し訳ないです。Facebook とインタビューしていた友人もほとんど知らないので、具体的なインタビュープロセスすらよくわかりませんが、職場のここが好きここが嫌いをぶっちゃけている こんなサイト や あんなサイト を見てみると Facebook の評価はかなりいいですね。日本法人も設立される予定ですし、興味のある方はチャレンジしてみる価値ありです!
就職活動はもう少しだけ続きます。なので、ピッツバーグにはもう一か月くらいいると思います。
P.S.
完全に時期はずれですが、MSE の Tony 先生から去年の Thankgiving の写真をいただきました。Tony 先生宅にお邪魔したのは3回目で、3回お邪魔した生徒は私が初めてだそうで。毎年お世話になり本当にありがとうございます。
▲恒例の集合写真
0 件のコメント:
コメントを投稿