Googleで働きたい! 電話インタビュー(部1)

こんにちはHabr! 長い間書いていません はい、これは理解できます。 論文の防衛、博士号の取得、および現在の積極的な求人検索-これらすべてに貴重な時間がかかります。 しかし、今日の会話はそれについてではありません。 皆さん、親愛なるハブラの人々、リソース、Googleとの電話による技術面接の準備プロセスの説明を共有したいと思います。最初の技術段階はすでに通過しました。



投稿の構造は次のとおりです。

  1. 採用担当者が推奨するトピックと情報源
  2. C / C ++およびPythonの技術的な問題とその解決策
  3. 私の実際のインタビューの転写 (Googleからこれらの資料を公開しないように依頼された)




トピックと情報源





私は長い間、英語版のテキストを残すかどうか疑問に思っていました。 しかし、その場でつつかれることを恐れて、彼はすべてをロシア語に翻訳することに決めました。 したがって、これらは、エンジニアがあなたと通信するときに触れることができるトピックです:





プログラミング:





アルゴリズム設計/分析:





システム設計:





公開討論





参照:

グーグルでのインタビュー



Google製品-http://www.google.com/intl/en/options/



投稿(すべて英語):





書籍:

書籍番号2は、複数のエンジニアによって推奨されており、非常に代表的な質問を示しています。

  1. 基本的なアルゴリズムのレビュー:Anany Levitinによるアルゴリズムの設計と分析の概要
  2. Googleが求めるコーディングの質問の種類:プログラミングインタビュー公開; ジョン・モンガン、ノア・スオジャネン、エリック・ジゲールによる次の仕事を上陸させる秘((プログラマーからプログラマーへ)


(私自身から:私は両方の本を読みます。たとえあなたがGoogleでの仕事に応募するつもりはないが、少なくとも時々プログラムするなら、これらの本を自分で読んでください。)



エンジニアの1人が、インタビュー中にソフトウェアエンジニアに尋ねる人の簡単な概要を説明しました(一部のトピックは、前述のトピックと重複しています)。



  1. アルゴリズムの複雑さ。 大ああを知る必要があります。 アルゴリズムの基本的な分析に問題がある場合、雇用されないことがほぼ保証されます。 アルゴリズムに関する詳細情報
  2. コーディング。 少なくとも1つのプログラミング言語を熟知している必要があります。C++またはJavaの方が優れています。 C#も機能します。 Javaに似ています。 面接中にコードを書くことを期待し、言語の構文を知る必要があります。
  3. 強くお勧めする読書本:プログラミングインタビュー公開; ジョン・モナガンとノア・スオジャネンによる次の仕事の着陸の秘密( Wiley Computer Publishing
  4. 並べ替え。 ソート方法を知っています。 泡でソートしようとしないでください。 少なくとも1つのn * log(n)並べ替えアルゴリズム、または2つ以上の並べ替えアルゴリズムを知っている必要があります(クイックソートとマージソートで可能)
  5. ハッシング データ構造を保存する最も重要な方法の1つと考えられているだけではありません。 ハッシュの仕組みを知る必要があります。 5〜20分以内に、選択した言語を使用して作成する方法を理解します。
  6. 木々。 それらが何であるか、基本構造、パッセージ、操作を知ってください。 二分木、n進木、三次木を探索します。 少なくとも1種類のバランスの取れたバイナリツリーを知っている:赤/黒檀、スプレイツリー、またはAVLツリー。 作成方法と深さ(DFS)と幅(BFS)を確認し、インオーダー、ポストオーダー、プレオーダーパスの違いを理解します。
  7. カウント。 Googleにとって非常に重要です。 合計で、メモリ内のグラフを表す主な方法は3つあります。オブジェクトとポインター、マトリックス、隣接リストです。 これらのグラフ表示方法の長所と短所を理解してください。 アルゴリズムを渡す基本的なグラフを知っている:深さ(DFS)と広い(BFS)。 これらのアルゴリズムの複雑さと、プログラミング言語でそれらを書く方法を知ってください。 DijkstraおよびA *アルゴリズムを確認してください
  8. その他のデータ構造。 できるだけ多くの他のデータ構造とアルゴリズムを調べてください。 巡回セールスマン(TSP)やナップザックの問題など、よく知られたNP完全問題に精通している必要があります。 他のタスクを認識するか、このタスクを既知のタスクに変換します。 NP完了タスクの意味を確認してください。
  9. 数学 一部の試験官は、離散数学の基礎からタスクを設定します。 これは、問題を数えたり、確率を計算したり、他の数学的パズルに囲まれているため、他の企業よりもGoogleで一般的です。 組み合わせ計算の知識とスキルを更新し、確率、サンプリングなどを見つけます。
  10. オペレーティングシステム プロセス、スレッド、および競合の問題に注意してください。 ロック、ミューテックス、セマフォ、モニター、およびそれらの機能について理解します。 デッドロックとライブロックの状況、およびそれらを回避する方法について知ってください。 プロセスに必要なリソース、スレッド、コンテキストスイッチングの動作方法、オペレーティングシステムとハードウェアに基づく方法を把握します。 スケジュールに注意してください。 そして、世界が多核化に向かう​​につれて、可能な限りそれについて学びます。
  11. システム設計に関する情報




次の部分では、C、C ++、およびPythonでの特定のタスクとその実装について説明します。



All Articles