Позичено наступну статтю з http://get-that-job-at-google.blogspot.in/
Кодування знань C / C ++ та Java є бажаними мовами програмування для Google Interviewers. Ви повинні добре знати принаймні одну з них. Від вас, як очікується, будете писати код в інтерв'ю на екрані телефону та в інтерв'ю на місці.
Рекомендовані книги для інтерв'ю з CS : Вступ до алгоритмів - Кормен
Програмовані інтерв'ю, що виставляються
Злаштування інтерв'ю з кодування
Алгоритми інтерв'ю
Рекомендовані веб-сайти для практики кодування : InterviewStreet, Topcoder
Big-O Це має стати відправною точкою при підготовці до алгоритмічного інтерв'ю. Ви не повинні боротися з базовим аналізом складності, оскільки це гарантуватиме не наймання на роботу. Ви повинні бути знайомими і розуміти позначення O, Θ і Ω. Рекомендую прочитати розділ про аналіз складності з книги даних та структури алгоритмів.
Сортування Ви повинні мати можливість легко писати такі алгоритми O (n * lgn), як QuickSort та MergeSort. Порівняйте та розумійте найкращі, найгірші та середні складності випадку. Я знайшов цю таблицю на вікі дуже зручною; в ньому перераховані важливі властивості всіх алгоритмів сортування. Не нехтуйте основними алгоритмами O (n ^ 2), такими як сортування бульбашок або сортування вставки, оскільки інші алгоритми покращуються над ними. Інтерв'ю стосується вдосконалення основної ідеї, алгоритми сортування допоможуть у цьому процесі.
Таблиці хешу Коли ви сумніваєтесь, придумайте хеш-таблиці. Вони корисні у більшості проблем і часто допомагають нам покращити складність у часі деяких проблем шляхом кешування результатів.
Дерева проходять основні алгоритми побудови дерев, обхід та маніпуляції. Ви повинні мати можливість реалізовувати алгоритми на основі двійкових дерев пошуку. Вам слід ознайомитись із збалансованими деревами, хоча від інтерв'ю не передбачається писати код для них: дерева AVL, червоно-чорні дерева, трійки, n-ary дерева і т.д. ми можемо вирішити багато проблем із деревом, зробивши прості модифікації одного з цих траверсалів.
Графіки
Графіки - дуже важливе поняття в галузі інформатики. Практикуйте три основні подання графіків (об’єкти та покажчики, матриця та список суміжності) та ознайомтесь із їхніми плюсами та мінусами. Часу на співбесіді не так багато, тому не варто чекати чогось дуже складного. Однак основні алгоритми переходу графіків (DFS та BFS) є обов'язковими, ви повинні їх реалізувати у всіх основних уявленнях. Ви повинні мати можливість реалізувати алгоритми Дейкстра або Флойда-Варшалла, а також алгоритми мінімального діапазону дерев (Крускал і Прим). Дізнайтеся про топологічне сортування, оскільки це напрочуд дуже корисно у багатьох проблемах із замовленням.
Динамічне програмування Це, мабуть, найважливіший предмет, оскільки реалізації невеликі. Ви повинні мати можливість реалізовувати 2-3 динамічні алгоритми протягом 35-40 хвилин. Перевіряючи ресурси в цьому блозі або в Інтернеті, ви побачите, що вам слід очікувати принаймні одного питання щодо динамічного програмування за інтерв'ю.
Операційні системи Дізнайтеся про процеси, потоки та проблеми одночасності. Знайте про мутекси, семафори, монітори та про те, як вони працюють. Зрозумійте, що таке тупик та життєвий шлях, і як їх уникнути. Дізнайтеся про зміну контексту, планування тощо.
Математика Ви повинні ознайомитись із підрахунком, комбінаторикою та ймовірністю.
Публікації Google Прочитайте публікації Google, перелічені нижче, якщо у вас є час. Файлова система Google
Google Bigtable
Google MapReduce