MemoSTM関係のことをメモっていこうと思います。この広告は、90日以上更新していないブログに表示しています。AtCoderやろうぜGoogleの(僕から見て)偉い人が立て続けにブログを書いておりctrl-x-s.bloghoge.blogここ数件の僕のブログへの反響を読んでも「Googlerだから特別」みたいな意見が散見され、入社へのハードルが変に高く見られてしまっている気がするので、僕がGoogleに入社する準備として取り組んでいた事とそのレベルを紹介する。程度の低さに安心して欲しい。英語の論文は興味の赴くままに読んでいたため読むことに関してはあまり苦手意識は無いものの、絶対的な英語力に関して言うとTOEIC500点というスコアが端的に表している。これがどれぐらいかというと、得意分野から外れると長文を読む速度と精度がガタ落ちし、リスニングも結構な単語を聞き落とし、文脈からの推測と辛うじて拾えた単語からどうにか会話を成立させているように見せかけれていると本人は思い込んでいる有様である。この文章を読んでいる大半の人のほうがよほど英語力は高いかも知れない。今時であればオンラインの英会話レッスンなどで結構お手軽に学習はできるのだが、一切やらなかった。自信があったわけでも何でもなく、時間があれば他のことがしたかったという理由に尽きる。英語力に関しては入社後でもやっぱり苦労しており、そろそろ勉強せねばならんかと諦めるフェーズに差し掛かっている。競技プログラミング僕は名古屋工業大学という地方都市の国立大学の出身であり、そこで情報工学を履修したのが基礎となっている。授業はよく練られて歯ごたえがあったが競技プログラミングという観点では学生当時は存在すら知らなかった。ツクモ電機で店員のバイトしたり近所のベンチャー企業でアルバイトとしてPICマイコンと戯れたりしていた。2018年の5月頃にやっと興味が出てきたのでチラホラと取り組んでいたら、ちょうどNTTの競技プログラミングに興味がある集団と意気投合したのでほぼ毎晩バーチャルコンテストに打ち込んでいた。https://not-522.appspot.com/ここから誰でもAtCoderの過去問を使ってコンテストを開催することができる。NTTの有志が毎晩コンテストを開いてくれたのでひたすらそれに参加していた。当時の記録をkenkooooさんのサービスで見返して見ると一日3〜4問ぐらいずつ解いているABCの過去問ばかりやっていた。C問題が解けたらハッピー、D問題までできたら最高ってノリで本番より短い1時間の設定で、ヤイヤイと解いたり感想戦したりを日課にしていた。AtCoderのC問題がどの程度のレベル感かというとAtCoder社長のchokudai氏によると何度も言うけど競プロは向き不向きあるし、競プロ出来なくてもITエンジニアとしてやっていけるから、競プロ必須だとは思わない方がいいよ。「ABCのC問題」が解けない人はやっぱITエンジニアとしてはどの分野であろうと全く信用しないし、そこまでは解けるようにしておくべき。2018と威張れるような難度の問題でもなく、頭の体操、もしくは指先の体操ぐらいのノリで解いてしまう人もいるような難度に過ぎない*1。別に超人的な努力を重ねたわけではなく、最低限これぐらいはと言われる難度の問題に1日1時間向き合っていただけである。してAtCoderでやっと緑コーダーになった時点ぐらいでGoogleの面接を受けた*2。逆に言うと緑コーダーでもGoogleのコーディング面接を通過できた。と続いている事を考えるとそこまで自慢できるような実力とは言えない。かしいから書かない」みたいな感じで、まぁ気持ちはわかるけど基本的には書いておいた方が良い、くらいの認識。2019この実力でGoogleに入社できると自信を持っていたわけでは断じてないが、Googleは入社試験に落ちても1年程間を空ければ再度受けられるので刺激を受けに行くつもりぐらいのダメ元で試験に臨んだ。careers.google.com昨年面接を受けた(または応募した)のですが、採用されませんでした。年ほど経験を積んでから再度応募していただくようお願いしています。生涯で受けられる試験の回数上限が決まっているものは数あれどGoogleの入社試験に上限はないので太っ腹である。社内見学ぐらいの軽い気持ちで挑んでみるのもアリである。面接は電話面接x2と対面(オンサイト)面接一日からなっていた。基礎的な内容を一問一答みたいなノリで質問された。問題を直接晒しはしないが、同等レベルの問題を出すならばバブルソートの計算量は?平衡2分木の削除に掛かる計算量は?std::vectorのランダムアクセス1回に掛かる計算量は?幅優先探索ってどういう時に使う?みたいな感じで、大学の授業をちゃんと聞いていれば即答できるようなものばかりであった。僕がややデータ構造オタクだったりしたのも功を奏した。ハンズフリーで通話できるようにし、パソコンの前で待てと言われた。Docs的にリアルタイムに編集が共有できるエディタ上で、出題されたコードをその場で書いてみせた、日本語なので落ち着いて問題に取り組めた。Emacsバインディングを思わず使おうとして新ウィンドウを開きまくる凡ミス*3などをしつつ、難度でいうならLeetCodeのmediumぐらいの物を解いた。劇的に難しいわけでもなく答えも多分20行程である。leetcode.comこのサービスはGAFAを始めとしたテック企業の入社試験で実際に出たとされる過去問を並べていたり、面接の模擬試験を受けれたりとコーディング試験対策に特化したサービスであると同時に毎週日曜日の朝にコンテストが開催されるいい奴である。AtCoderの問題が時々考察ゲー*4だったりするのに対し、LeetCodeではそういうタイプの問題はめったに出てこない。コーディング面接でも考察ゲーは滅多に出題されないからではないかと思う。LeetCodeは無料で1000問以上解けるし、自分好みの問題が多く出るので好きなサービスである*5。有料プランだと更に面接対策に向けたいろんなサービスが受けられるらしいが使ったことはない。オンサイト面接Google名物4〜6人抜きの対面面接である。いっても同時に5人と面談をする逆集団面接のような形ではなく、一対一での比較的長時間な面接を5人分行うというもので、何人目で散々な結果を残そうがとりあえず面接官全員と話す事になる。面接官同士は他人の面接過程が見れないので先入観を排した評価を人数分集めることができる、という利点があるのだと思う。昔からGoogleは面接に力を入れている事は広く公言しており、バスの中に入るゴルフボールの数や国中にあるマンホールの蓋の数の推定をさせてた時期もあったというが、僕の面接の時にはその手の問題は出なかった。Googleが近年採用していると公言しているのは構造化面接法というもので、その詳細はよくわからないが構造があるためか全員から志望動機を訊かれるみたいな事も一切なかった。面接では今でも創造力を試す超難問が出題されていますか?いいえ。した超難問を面接に取り入れても優秀な候補者の判定にはつながらないことがわかったため、現在は出題しておりません。代わりにサンプルテストを実施し、構造化面接法に基づいた質問を行っています。ホワイトボードのある部屋に通され、AtCoderで言うところのA〜Cぐらいの難度の問題が出された。面接官によっては開幕から「この面接では英語しか使いません」と宣言された時もあり、それは内心だいぶテンパった。問題文をホワイトボードに書いてもらえばリスニングスキルが致命傷になることもないと思ったが、筆記体読めないマンであるという自覚を忘れていたので問題文に書かれたsの字をなんて読むのか訊いたりなどした、それで減点を貰ったのかはわからないが結果として通過できた。競技プログラミング的な問題の他にもシステムデザインやオブジェクト指向的なインタフェース設計やシステム周りの問題も出題された。僕に出された問題ではないが架空の問題をでっち上げるなら黒ひげ危機一髪ゲームのインタフェースをオブジェクト指向で設計せよX万人が同時にアクセスしてくる動画配信サービスを想定し、Yという性能のマシンでZという要件を満たすにはどんな設計で何台のマシンを使うか計画せよスピンロックの利点と欠点を述べ、実装せよこんなノリの問題が出る。designとかOperatingSystemとかの項目を見ると似たような過去問や想定解などが並んでいる。他にも直接的にプログラミングの話ではない過去の行動などへの質問なども出るし、そこに応じるための心構えも言いたいことはあるがこの本に軒並み書いてある。安心して実力を出しきれるように脳内でシミュレーションしてみるために必要な情報が詰まった神本である。ついでにGAFAMなどの面接の裏でどういう仕組みが回っているのかも解説しており興味深い。これの第二版にあたるもいいことが書いてあるそうだが僕は読んだことがない。僕の面接に限って言うと出されるなり絶望するような問題は出なかったが常にタイムアップ気味で、後からあそこはもっとうまく答えられたなぁと反省していたら結果として通過判定を貰っていたのでわからないものである。一度受けたら運次第で問題や面接官との相性であっさり落ちるかも知れない。基本的に運ゲーだと割りきって、落ちても悔やまずまた来年受ければいいやと気楽な気持ちでいた方が精神衛生上楽である。kumagiは有名人だから通ったんでしょ?的な声も散見されたが、入社の過程で僕のtwitterでのフォロワー数やQiitaでの記事などが加味されたような様子は特になかった。面接は終始朗らかに進み、中には僕が一方的に知っているような有名人が現れたりして彼ら彼女らと高度な会話ができたのは純粋にエンジニアとして楽しい体験だった。給与交渉そして面接の通過後にオファー額の交渉に入った。僕「謹んで入社させていただきたく存じます(土下座)」というやりとりを経てGoogleに入社した。この給与交渉こそ電話だったが当然英語であり、額面は何かの聞き間違いかと思ったがこの時ほど自分のリスニング能力を歯がゆく思った事は生涯になかった。その後で書面で正確な額を知り2度驚いた。奮ってご応募ください。思ってたけど想像以上に会社が給料とは別枠で保険に入れてくれててものすごい手厚い。約款よく読んだら手厚すぎて任意保険即解約した更新:5人抜きという表現が誤解を招きそうだったので修正*1:当然僕はそれなりに頭をひねらないと解けないのだけど*2:この記事執筆現在はギリギリ水色まで上がっている*3:Ctrl+NはEmacsならカーソルを一つ下にずらす操作だがChromeでは新ウィンドウが作られる*4:一見すごく複雑そうだが問題をよくよく考察すると入力値の偶数奇数だけを判定するだけのコードで答えが出たりする奴。Spanner」の実力は?』についてこんな記事が目に入った。その4引き続き分散システムのデザインパターンの話をしていく。月別アーカイブはてなブログをはじめよう!kumagiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。