История Дениса: Начало

Всем привет!

Меня зовут Денис. Я работаю программистом с 2002-го года. И сегодня я расскажу о том, как я собеседовался в большие ИТ компании, и что из этого получилось.

Подготовка в Google

Идея попробовать получить работу в Google появилась у меня где-то в октябре 2014-го года, примерно года через полтора после того как мы всей семьёй переехали в Вену. Плюс, большой офис Google был совсем рядом – в Цюрихе.  Наверное потому это перестало быть какой-то неосуществимой мечтой, и я подумал “Почему бы и нет?”.

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

Для начала я начал выделять какие-то основные темы и изучать их достаточно глубоко. Я старался не отвлекаться и не перескакивать на другие интересные темы, так как это сильно отвлекало. Начал я с прочтения Cracking the Coding Interview, и параллельно повторял все, что когда-то изучал в курсе Computer Science. Чуть позже, ф прошёл 2 курса по алгоритмам на Coursera (algs4partI и algs4partII). Мне это помогло освежить и структурировать информацию по алгоритмам, очень рекомендую. Плюс, курсы на Coursera дали понимание того, что теория гораздо лучше усваивается с практикой. И того, что именно практики мне в тот момент и не хватало.

Недостаток практики сразу проявился на тестовом интервью. Первую лёгкую задачку я вроде как сделал, но делал долго и не особо уверенно. До второй задачи мы с интервьюером, к счастью, не дошли, так как у интервьюера было мало времени из-за каких-то срочных дел. Я понял, что надо больше решать тестовые задачки, так как именно под такие задачи и заточены собеседования. И еще я решил практиковаться на Java, так как на C# в Google не пишут.

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

У меня процесс подготовки растянулся до марта 2015-го. Именно тогда я уже устал каждый вечер что-то учить или решать тестовые задачки. Решил, что время пришло и попросил Ларису выступить рефералом и заслать моё резюме в Google. Но тут я немного не рассчитал. Оказалось, что резюме моё тоже было не готово: ошибки, плохое форматирование, непонятное описание того, что делал и куча ненужной воды. Кстати, Лариса потом написала несколько хороших статей о том, как надо составлять резюме и каких ошибок стоит избегать.

Интервью с Google

После вычистки резюме и нескольких дней ожидания мне назначили разговор с рекрутером. Я, конечно, не знал чего ждать и сильно нервничал. Оказалось, что это просто небольшой приветственный разговор чтобы познакомиться, рассказать что ждёт на собеседованиях, выбрать язык, на котором будут технические собеседования (пришлось выбрать Java, так как C# не принимался), ну и немного проверить, насколько готов кандидат. Например, меня спросили вычислительную сложность quick sort, а я с нервов натупил и сказал O(N log N) — подумал про 3 way quick sort почему-то.

Потом было первое телефонное техническое собеседование. Опять же, нервничал я жутко, что явно не лучшим образом сказалось на результатах. Первая задача была поиск и вывод анаграм в огромном списке слов. Вторую задачу я уже и не помню, но тоже что-то не сильно сложное.  Собеседующий был дружелюбным и старался направлять в сторону ответа. В общем, было вроде неплохо, но ощущения остались смешанные. Т.е., с одной стороны, я решил обе задачи и вполне разумно рассуждал о вычислительной сложности и необходимой памяти, но было несколько огрехов, и вел себя не так уверенно, как ожидают от человека с 10-ти летним опытом.

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

Второе собеседование прошло ещё менее гладко. Если честно, мне показалось, что я чем-то сразу не понравился собеседующему, хотя я могу и ошибаться. Первый вопрос был: «Расскажи мне про метрики на строках». Я нервничал сильно и так, а тут ещё вопрос, на который я то ли не знаю ответа, то ли не понимаю вопроса. Начал задавать уточняющие вопросы и, похоже, нужно было реализовать нечёткое сравнение строк. Так, чтобы порядок букв имел значение, а небольшие ошибки не давали бы сильного эффекта. Я сказал, что где-то год назад читал про расстояние Левенштейна и скопировал код с Википедии, разобравшись в том, что он делает, но я не помню точно, как он работает. Меня попросили предложить что-то попроще, чтобы оно выполнило задачу. Я пытался изобрести что-то “на лету”, но у меня не сильхо хорошо получилось. К тому же, забыл один метод в TreeSet. И потом со второй задачей тоже справился так себе.

Через несколько дней рекрутер сказала, что хочет со мной поговорить и назначила время через 2 дня. Ещё ожидание, нервы, надежды. “Если хотят голосом поговорить, то, наверное, позовут собеседовать дальше” – надеялся я. Но нет. Второй собеседующий не рекомендовал продолжать процесс. Почему это нельзя было написать в письме, хоть убейте, не понимаю. Никаких деталей на тему «почему и что бы мне такое подтянуть» мне не дали.

Но на этом моя история не закончилась. Продолжение завтра!