Saturday, January 8, 2011

Собеседование в Google

В конце мая мы постепенно готовились к неумолимо надвигающейся свадьбе, до которой оставалось три месяца. Но когда в почтовый ящик упало письмо с заголовком "Hello from Google", проигнорировать его было нельзя.

Вообще-то я пытался туда устроиться три с половиной года назад, после института. Так вышло, что звонок от рекрутёра состоялся на следующий день после того, как я вышел на работу в Рамблер, и дальше первого разговора дело не пошло - синица в руке в итоге оказалась неплохим вариантом. В частности, там я и познакомился с человеком, который, устроившись в Google, порекомендовал меня.

Рекрутёр предложил мне рассмотреть позицию Site Reliability Engineer (SRE). Отчасти она совпадала с моей деятельностью в Рамблере, отчасти нет. Поскольку терять мне было абсолютно нечего, а приобретённый опыт мог оказаться очень ценным, я обновил резюме, перевёл его на английский и откликнулся через пару дней.

Подготовка


В ожидании ответа стал зачитывать от корки до корки все полезные книги. Нужно пройтись по всем пунктам в описании вакансии.

TCP/IP
  • Лучшего источника, чем книги У. Стивенса TCP/IP Illustrated, пожалуй, нет.
  • В ней постоянно используется tcpdump для иллюстрации материала. Владение этим инструментом тоже крайне желательно, эта статья поможет с ним неплохо познакомиться
Unix
  • Устройство Unix хорошо изложено в книге А. Робачевского с соавторами. Она неплохо укладывает в голове многие внутренние механизмы - от системы процессов до устройства inode, знание unix на таком уровне очень желательно.
Алгоритмы

  • В первую очередь - классика Н. Вирта, "Алгоритмы и структуры данных". Основы основ, по ней нас учили информатике на первом курсе.
  • Однако потребуется большее - более сложные и утончённые алгоритмы, а также умение анализировать их сложность. Да-да, O-нотация обязательна к пониманию. Фундаментальной книгой является "Алгоритмы. Построение и анализ" (Кормен, Лейзерсон, Ривест, Штайн). Она охватывает очень много материала, уделите ей несколько недель.
  • Лично мне, кроме того, очень помогли лекции MIT Introduction to Algorithms по этой книге. Одним из лекторов был как раз Ч. Лейзерсон, один из соавторов. Каждой главе посвящена одна полноценная лекция, около полутора часов, видео идёт со слайдами. Я, например, загрузил всё это в ipod. Учтите, что это полноценнный семестровый курс и времени понадобится соответственно. Кроме того, это отличный способ потренировать свой английский, хотя бы на восприятие.
  • И, наконец, для разминки и набора хорошей формы рекомендую прорешать пару десятков задачек с Project Euler - это и упражнения в первую очередь на поиск интересных и оптимальных алгоритмов, но потренироваться писать код никогда не вредно.
Архитектура больших систем

Здесь я полагался на свой накопленный опыт, так что отдельно ничего не изучал. Могу порекомендовать ряд технических блогов: Twitter, Facebook, Netflix, High Scalability, Last.fm. И не стоит обделять вниманием Bigtable, GFS и MapReduce - это тот минимум, который необходимо прочесть из публикаций Google.

Закономерный вопрос - а хватит ли времени? Во-первых, я очень рекомендую подтянуть свои знания в этих областях ещё до отправки своего резюме. Во-вторых, между телефонными собеседованиями будет около недели - как раз об этом далее и последует рассказ.

Первый этап

Весь процесс общения происходит на английском. Сперва предстоит телефонный разговор с рекрутёром, phone screen. Во время него будьте готовы ответить на элементарные технические вопросы, чтобы подтвердить, что вы на самом деле тот, за кого себя выдаёте. Я, разумеется, не буду приводить ни один вопрос дословно, но на данном этапе пригодится хорошее знание книги Вирта, например - в структурах данных, алгоритмах и их сложности вы должны ориентироваться свободно в любом случае. Если данный этап будет пройден успешно, то предстоит два телефонных интервью и собеседование в том офисе, на который вы нацелитесь. Мне был предложен выбор из Цюриха, Лондона и Дублина; по ряду причин я выбрал Дублин, европейскую штаб-квартиру.

Телефонные собеседования

Телефонное собеседование длится около часа. Его проводит уже непосредственно инженер из той команды, в которую вы хотите попасть. Будьте готовы и к алгоритмическим задачам общего плана, и к конкретным техническим вопросам.

Оба раза со мной разговаривали инженеры из Америки, из разных офисов. Зарядите телефон, по которому будете беседовать, чтобы разговор не оборвался на полуслове; убедитесь в том, что интернет будет работать. Я немного ударился в паранойю и подстраховался даже от выключения света, воткнув в ноутбук второй аплинк - Йоту (а то всякое бывает). Убедитесь в том, что правильно поняли вопрос, не стесняйтесь переспрашивать и уточнять.

Задача может уточняться и усложняться по мере того, как вы будете её решать, это нормально. Основная цель собеседования - выяснить, в чём ваши сильные стороны, а не в том, чтобы сразу же завалить. Ценится в первую очередь ход суждений и размышлений, поэтому не стоит надолго замолкать - нужно показать интервьюёру, в каком направлении вы двигаетесь, даже если оно окажется неправильным. Если вы в итоге допустили ошибку, нет ничего страшного в том, чтобы тут же самому её исправить.

В собеседовании придётся на ходу писать код, именно для этого потребуется интернет - для доступа к расшаренному документу. Можно писать на тех языках, которые перечислены в описании вакансии (С, C++, Java, Python). Задачи разумного объёма, их можно решить в несколько десятков строк (в зависимости от языка). Я писал на C++; вот тут будьте очень внимательны и аккуратны. Учтите, что компилятора нет, поэтому безошибочно пишите все имена переменных, функций, не забывайте про синтаксис. Не нужно волноваться и нервничать, нужно просто хорошо сделать то, что вы умеете - написать правильный код. Мелочи вроде off-by-one могут негативно сказаться на общем впечатлении. Не стесняйтесь вслух отладить программу на паре тестовых примеров.

Ответа каждый раз следует ожидать около недели. Это ожидание у меня отняло гораздо больше нервов, чем сам процесс; ничего не поделаешь, такая процедура. В любом случае надейтесь на лучшее и используйте время для продолжения подготовки.

Собеседование на месте

Если первые два раунда проходят успешно, то вас вызывают в офис, on-site interview. Google оплачивает перелёт и гостиницу, кроме того, можно возместить некоторые расходы - так что есть вероятность, что на эту поездку вы не потратите ни копейки.

Накануне можно подкрепить уверенность в своих силах, прорешав несколько задач с TopСoder - всегда приятно видеть положительный результат от своих действий, и это успокаивает.

Интервью занимают целый день, их 5 по 45 минут - три до обеда и два после. На обед проводят маленькую экскурсию по офису, это отличная возможность пообщаться с инженерами в неформальной обстановке.

Собеседования проходят один на один. Темы покрывают всё перечисленное в описании вакансии, паззлов и загадок нет - только технические вопросы. Нужно будет писать много кода на доске, потренируйтесь заранее. Код, опять-таки, на языке по вашему выбору. Не бойтесь того, что будут записывать чуть ли не каждое ваше слово, и уж тем более всё, что вы напишете на доске - эти заметки необходимы для принятия решения. Принципы те же - покажите максимум из того, на что вы способны. Если не знаете ответ на вопрос сразу, попытайтесь найти подходные пути.

Разумеется, перед собеседованием нужно хорошо выспаться и прийти со свежей головой. Нервов и паники быть не должно - расценивайте это не как экзамен, а как возможность пообщаться с коллегами на интересные темы и попробовать решить нетривиальные задачи. Интервьюёры - такие же инженеры, как и вы. Не стоит думать, что эта возможность - единственная и больше шанса не будет. Не секрет, что в Google высокий уровень false negative - подходящему кандидату просто не повезло в конкретный день с конкретными вопросами. Как учили меня в институте, оценка за экзамен не говорит ни о чём, кроме готовности в данный конкретный день ответить на данные конкретные вопросы, а не о знании всего предмета в целом. В самом деле, невозможно знать всё и не допускать ошибок. Многие кандидаты повторно пробуют свои силы снова и снова, рекомендуется выдержать интервал примерно в год. Поэтому не стоит волноваться при любом ходе собеседования.

Если поискать, то можно найти много подобных статей об интервью, как с положительным, так и отрицательными исходами. Самой полезной я бы назвал Get that job at Google - собственно, взгляд с другой стороны баррикад. Очень хорошо настраивает на нужный лад, и подчёркивает основные пункты, на которые нужно обратить внимание.

После собеседований рекрутёр опишет вам алгоритм действий, ожидание ответа займёт ещё пару недель.

Результат

В лучшем случае - разумеется, job offer. В моём случае от первого phone screen до получения предложения о работе прошло около двух с половиной месяцев, но следует учесть, что промежуток между вторым собеседованием по телефону и вылетом в Дублин прошло несколько недель - я сам попросил такой график, так что можно, наверное, пройти этот путь и быстрее.

Если сразу не получится - ничего страшного не произойдёт. В любом случае опыт прохождения серьёзного многоступенчатого интервью на английском лишним не будет. Проштудировав материал для подготовки, можно серьёзно поднять свой уровень. От попытки вы ничего не потеряете, но можете многое приобрести. Удачи!

No comments:

Post a Comment