投稿の構造は次のとおりです。
- 採用担当者が推奨するトピックと情報源
- C / C ++およびPythonの技術的な問題とその解決策
-
私の実際のインタビューの転写(Googleからこれらの資料を公開しないように依頼された)
トピックと情報源
私は長い間、英語版のテキストを残すかどうか疑問に思っていました。 しかし、その場でつつかれることを恐れて、彼はすべてをロシア語に翻訳することに決めました。 したがって、これらは、エンジニアがあなたと通信するときに触れることができるトピックです:
- Google製品(使用するもの)
- プログラミングスキルは、Google Doc(電話インタビュー)またはボード(会社のオフィスでのインタビューの最終段階)を使用してコードを書くように求められます。 言語と標準ライブラリの構文メモリを更新する
- アルゴリズムの設計と分析
- システム設計
- 議論を開き、大声で考え、あなたが尋ねられた問題の詳細を明確にすることを忘れないでください
プログラミング:
- データ構造の作成/受け渡し
- システムルーチンを実装する
- 大規模なデータセットを特異値にまとめる
- あるデータ型から別のデータ型への変換
アルゴリズム設計/分析:
- ラージO解析(漸近的挙動、アルゴリズムの複雑さ)
- ソートとハッシュ、検索
- 非常に大量のデータを使用した管理
- 上記の「プログラミング」からのそれらの複雑性分析
システム設計:
- 機能セット
- インターフェース
- クラス階層
- 特定の条件下でのシステム設計
- シンプルさと信頼性
- 妥協
公開討論
- あなたが遭遇した最も困難な課題を説明してください。
- あなたが見た最高/最悪のデザイン
- パフォーマンス分析と最適化
- 検査
- Google製品を改善するためのアイデア
参照:
グーグルでのインタビュー
Google製品-http://www.google.com/intl/en/options/
投稿(すべて英語):
- Googleの公式ブログ:BabyがGretta Cook(Googleエンジニア)の新しい仕事に踏み出します
- Steve Yegge(Googleエンジニア)の採用方法
- Dan Kegel(Googleエンジニア)に雇われる方法
- Steve Yegge(Googleエンジニア)による電話スクリーンに関する5つの重要な質問
- バイナリ検索- バイナリ検索
- プログラミングの課題-Project Euler
- Googleが求めるアルゴリズムの質問の種類:トップコーダーチュートリアル
- 業界ニュース:検索エンジンの土地
書籍:
書籍番号2は、複数のエンジニアによって推奨されており、非常に代表的な質問を示しています。
- 基本的なアルゴリズムのレビュー:Anany Levitinによるアルゴリズムの設計と分析の概要
- Googleが求めるコーディングの質問の種類:プログラミングインタビュー公開; ジョン・モンガン、ノア・スオジャネン、エリック・ジゲールによる次の仕事を上陸させる秘((プログラマーからプログラマーへ)
(私自身から:私は両方の本を読みます。たとえあなたがGoogleでの仕事に応募するつもりはないが、少なくとも時々プログラムするなら、これらの本を自分で読んでください。)
エンジニアの1人が、インタビュー中にソフトウェアエンジニアに尋ねる人の簡単な概要を説明しました(一部のトピックは、前述のトピックと重複しています)。
- アルゴリズムの複雑さ。 大ああを知る必要があります。 アルゴリズムの基本的な分析に問題がある場合、雇用されないことがほぼ保証されます。 アルゴリズムに関する詳細情報
- コーディング。 少なくとも1つのプログラミング言語を熟知している必要があります。C++またはJavaの方が優れています。 C#も機能します。 Javaに似ています。 面接中にコードを書くことを期待し、言語の構文を知る必要があります。
- 強くお勧めする読書本:プログラミングインタビュー公開; ジョン・モナガンとノア・スオジャネンによる次の仕事の着陸の秘密( Wiley Computer Publishing )
- 並べ替え。 ソート方法を知っています。 泡でソートしようとしないでください。 少なくとも1つのn * log(n)並べ替えアルゴリズム、または2つ以上の並べ替えアルゴリズムを知っている必要があります(クイックソートとマージソートで可能)
- ハッシング データ構造を保存する最も重要な方法の1つと考えられているだけではありません。 ハッシュの仕組みを知る必要があります。 5〜20分以内に、選択した言語を使用して作成する方法を理解します。
- 木々。 それらが何であるか、基本構造、パッセージ、操作を知ってください。 二分木、n進木、三次木を探索します。 少なくとも1種類のバランスの取れたバイナリツリーを知っている:赤/黒檀、スプレイツリー、またはAVLツリー。 作成方法と深さ(DFS)と幅(BFS)を確認し、インオーダー、ポストオーダー、プレオーダーパスの違いを理解します。
- カウント。 Googleにとって非常に重要です。 合計で、メモリ内のグラフを表す主な方法は3つあります。オブジェクトとポインター、マトリックス、隣接リストです。 これらのグラフ表示方法の長所と短所を理解してください。 アルゴリズムを渡す基本的なグラフを知っている:深さ(DFS)と広い(BFS)。 これらのアルゴリズムの複雑さと、プログラミング言語でそれらを書く方法を知ってください。 DijkstraおよびA *アルゴリズムを確認してください
- その他のデータ構造。 できるだけ多くの他のデータ構造とアルゴリズムを調べてください。 巡回セールスマン(TSP)やナップザックの問題など、よく知られたNP完全問題に精通している必要があります。 他のタスクを認識するか、このタスクを既知のタスクに変換します。 NP完了タスクの意味を確認してください。
- 数学 一部の試験官は、離散数学の基礎からタスクを設定します。 これは、問題を数えたり、確率を計算したり、他の数学的パズルに囲まれているため、他の企業よりもGoogleで一般的です。 組み合わせ計算の知識とスキルを更新し、確率、サンプリングなどを見つけます。
- オペレーティングシステム プロセス、スレッド、および競合の問題に注意してください。 ロック、ミューテックス、セマフォ、モニター、およびそれらの機能について理解します。 デッドロックとライブロックの状況、およびそれらを回避する方法について知ってください。 プロセスに必要なリソース、スレッド、コンテキストスイッチングの動作方法、オペレーティングシステムとハードウェアに基づく方法を把握します。 スケジュールに注意してください。 そして、世界が多核化に向かうにつれて、可能な限りそれについて学びます。
- システム設計に関する情報
次の部分では、C、C ++、およびPythonでの特定のタスクとその実装について説明します。