Заимствовал следующую статью из http://get-that-job-at-google.blogspot.in/
Знание кодирования C / C ++ и Java являются предпочтительными языками программирования для интервьюеров Google. Вы должны знать хотя бы одного из них очень хорошо. Вы должны будете написать код в интервью на экране телефона, а также в интервью на месте.
Рекомендуемые книги для интервью CS : Введение в алгоритмы - Кормен
Программируемые интервью
Взломать интервью
Алгоритмы для интервью
Рекомендуемые сайты для практики кодирования : InterviewStreet, Topcoder
Big-O Это должно стать отправной точкой в подготовке к алгоритмическому интервью. Вы не должны бороться с базовым анализом сложности, так как это гарантирует, что вас не наймут. Вы должны быть знакомы и понимать обозначения O, Θ и Ω. Я рекомендую прочитать раздел об анализе сложности из книги «Структуры данных и алгоритмы».
Сортировка Вы должны легко писать алгоритмы O (n * lgn), такие как QuickSort и MergeSort. Сравните и поймите лучшие, худшие и средние сложности. Я нашел эту таблицу в вики очень удобной; в нем перечислены важные свойства всех алгоритмов сортировки. Не пренебрегайте базовыми алгоритмами O (n ^ 2), такими как Bubble sort или Insertion sort, так как другие алгоритмы улучшают их. Интервью больше об улучшении основной идеи, алгоритмы сортировки помогут в этом процессе.
Хеш-таблицы Если вы сомневаетесь, подумайте о хеш-таблицах. Они полезны в большинстве проблем и часто помогают нам улучшить временную сложность некоторых проблем за счет кэширования результатов.
Деревья Проходят базовые алгоритмы построения дерева, обхода и манипуляции. Вы должны быть в состоянии реализовать алгоритмы, основанные на бинарных деревьях поиска. Вы должны быть знакомы со сбалансированными деревьями, хотя вы не должны писать для них код в интервью: деревья AVL, красно-черные деревья, три, n-арные деревья и т. Д. Тщательные знания об обходах по порядку, по порядку и по предварительному заказу необходимы, потому что мы можем решить многие проблемы дерева, выполнив простые модификации одного из этих обходов.
Графики
Графики являются очень важной концепцией в области компьютерных наук. Потренируйтесь в трех основных представлениях графиков (объекты и указатели, матрицы и список смежности) и ознакомьтесь с их плюсами и минусами. На собеседовании не так много времени, поэтому не стоит ожидать чего-то очень сложного. Тем не менее, базовые алгоритмы обхода графа (DFS и BFS) являются обязательными, вы должны реализовать их во всех базовых представлениях. Вы должны быть в состоянии реализовать алгоритмы Дейкстры или Флойда-Варшалла, а также алгоритмы минимального связующего дерева (Крускал и Прим). Узнайте о топологической сортировке, так как она удивительно полезна во многих задачах заказа.
Динамическое программирование Это, вероятно, самая важная тема, поскольку реализации невелики. Вы должны быть в состоянии реализовать 2-3 динамических алгоритма за 35-40 минут. Посмотрев ресурсы в этом блоге или в Интернете, вы обнаружите, что вам следует ожидать как минимум один вопрос о динамическом программировании на одно интервью.
Операционные системы Узнайте о процессах, потоках и проблемах параллелизма. Знать о мьютексах, семафорах, мониторах и как они работают. Понять, что такое тупик и livelock и как их избежать. Узнайте о переключении контекста, планировании и т. Д.
Математика Вы должны ознакомиться со счетом, комбинаторикой и вероятностью.
Публикации Google Если у вас есть время, прочитайте новаторские публикации Google, перечисленные ниже. Файловая система Google
Google Bigtable
Google MapReduce