Этот пост будет не про Антона. Но поскольку я знаю, что блог читают не только бабушки, то решила написать, вдруг кому-то пригодится. Итак, как проходить техническое интервью в Silicon Valley?
Сразу скажу, что ничего общего с собеседованиями в Харькове это не имеет (кроме разве что желания получить job offer), поэтому на сегодняшний день и существует так много книг/онлайн курсов/блогов etc посвященных этой теме. Реалии таковы, что рассылка резюме совершенно не гарантирует, что с вами свяжутся - уж слишком большая здесь конкуренция и множество позиций закрываются за счет реффералов. Но если все же вам повезло, и вам ответили, то вот примерная последовательность событий:
1) первый телефон с рекрутером - обычные вопросы про визу/статус, зарплату, текущий проект, возможно "хотелки".
После вашу кандидатуру представят хайринг менеджеру и если он решит двигаться дальше, то
2) второй раунд - технические телефоны (1 или больше - зависит от компании). На этом этапе вы будете общаться с техническими людьми на технические темы. Как правило вам звонят в оговоренное время, "шарят" документ, дают задачку и вы пишете код. Продолжительность ~45 минут на раунд. Из того, что попадалось мне - закодить хип и основные операции на нем (remove_min, add), написать класс singly/doubly linked list и метод для удаления нода, написать класс для графа и поиск в ширину на нем и прочие классические алгоритмические задачки. В зависимости от компании и позиции, телефон может быть и без кодинга, но с коварными вопросами типа "чем мьютекс отличается от семафора?" (это вопрос на тестерскую позицию). Если вы прошли, то
3) третий раунд - онсайт интервью. Это "веселье" как правило на целый день (~6 часов), когда вы приезжаете в саму компанию, где вас ожидает порядка 6-8 интервью один за другим. Здесь можно ожидать как вопросы на кодинг (с фломастером на вайт борде), так и вопросы на ООП и дизайн паттерны, архитектуру и фреймворки. Если вы прошли, то
4) вас может ожидать еще один онсайт - если компания выбирает между вами и кем-то еще, либо же job offer или "извините, вы нам не подошли".
Если у кого-то сложилось ощущение, что можно пройти без подготовки, то шансы у вас примерно нулевые. Даже если вы кодер хоть куда, помимо технической составляющей не менее важную роль играют еще и soft skills. И это как раз то, с чем у нас проблемы. Очень часто мы отвечаем чистосердечно на коварные не технические вопросы, тем самым зарабатывая себе red flags (например, как вас достал текущий проект или какой вы мега-крутой инженер, а все коллеги вас не ценят и не прислушиваются). Поэтому готовиться нужно - как по технической части, так и по части психологической.
Итак, техническая часть. Конечно, невозможно подготовиться ко всему, но будьте на 100% уверены, что алгоритмы - это обязательная составляющая, без которой не проходит ни один "собес". Здесь вам поможет ресурс coursera.org, а именно курсы от
Тима Рафгардена и
Роберта Седжвика. Это база, без которой, я считаю, двигаться дальше нет смысла. А дальше идут книжки (настольные для многих инженеров, которые уже прошли интервью):
классика жанра с разбором задач, которые любят задавать интервьюверы (мне попалось 2 задачи из этой книжки на последнем онсайте). Даже если не попадется ничего, то все-равно очень полезно прорешать все задачки.
менее распространенная, но не менее полезная книжка с меньшим количеством задач. Здесь авторы очень доходчиво объясняют ход мыслей при решении. Highly recommended, одним словом.
Также не могу не упомянуть такие полезные ресурсы, как:
- geeksforgeeks.org
- glassdoor.com
- careercup.com
По части не технической, вот весьма неплохой курс, который стартовал недавно на той же курсере -
Mastering the Software Engineering Interview
ЗЫ: Независимо от позиции, выучите как "отче наш" KMP (алгоритм Кнута-Морриса-Пратта) - уж очень часто спрашивают задачку на поиск подстроки в строке и брут-форсным решением вы себе баллы не заработаете.
ЗЫ: Моя подготовка длилась полгода и увенчалась iOffer'ом :)