Как подготовиться к собеседованию на должность программиста
Собеседование на должность программиста – важный шаг, и наша редакция взялась помочь выбрать правильный путь изучения материала.
Собеседование по программированию
- Больше практики! Не тратьте время на решение задач и вопросов на TopCoder или CodeForces. Рекомендуем использовать такой ресурс, как LeetCode. Много хороших заданий доступно только премиум пользователям, но можно начать с бесплатного использования, дождаться скидок или купить премиум на месяц, чтобы решить доступные задачи и понять, подходит ли вам такой способ.
- Можете начать с проблем Facebook, LinkedIn, Uber и Airbnb на LeetCode, а потом переключиться на задачи от Google (некоторые из проблем дублируются в разных компаниях). Google-задачи довольно тяжелые, что может заставить вас чувствовать себя растерянно. Для удобства отсортируйте их по дате в порядке убывания, чтобы сначала были новые.
- Не пропускайте простые задачи, т. к. некоторые из них на деле могут оказаться сложнее, чем кажется. Это особенно актуально для задач с такими ограничениями, как “вы не можете использовать деление” и т. п. Кроме того, простые задания могут пригодиться в решении сложных.
- Избегайте использования IDE, а пишите прямо в редакторе LeetCode. Он очень похож на coderpad.io.
- Купите доску или практикуйтесь писать код на бумаге, пока ее не купите. Возможно, не все проблемы, но около 20%, должны быть решены вручную для лучшего понимания. Этот навык понадобится на собеседовании в Google и Facebook, а также для решения вопросов по дизайну в больших компаниях. Написание кода на доске требует четкого понимания процесса, до перехода к программированию, в отличие от IDE, где вы можете легко стереть и переписать код. Написание кода на доске научит, как писать более чистый код.
- Не углубляйтесь сильно в алгоритмы. Вас никогда не попросят написать суффиксное дерево, сбалансированное дерево или даже самый короткий алгоритм Дейкстры. Вам необходимо знать следующие алгоритмы: сортировка (быстрая, слиянием, подсчет), бинарное дерево, DFS, BFS, DSU, очереди, кучи, связные списки, KMP, алгоритм Рабина-Карпа. Полезно понимать, какие операции они позволяют выполнить, и какие есть сложности реализации этих операций.
- Помните о времени и пытайтесь решать задачи как можно быстрее. Обычно у интервьюеров подготовлено несколько задач и вопросов по ним, поэтому нужно показать себя с лучшей стороны.
Собеседование по проектированию системы
Не откладывайте подготовку к собеседованию по проектированию системы. Разумеется, вы могли бы очень быстро “пролистать” все популярные решения и проблемы за неделю до собеседования на должность программиста, но это не даст вам глубокого понимания принципов масштабируемости. Концепции системного дизайна требуют некоторого времени для того, чтобы отложиться в вашем мозгу.
- Можно воспользоваться курсом проектирования системы от educative.io. Курс не бесплатный, но он того стоит. Вы можете найти полезные теоретические материалы и решения для 13 общих вопросов проектирования системы. Лучше сначала попытаться решить проблемы самостоятельно, а затем посмотреть на готовый результат.
- Вводный туториал по NGINX поможет вам получить устойчивое понимание микросервисов.
- System-design-primer – Github репозиторий, содержащий много полезных материалов.
- Подкасты. Вот самые полезные из них: ElasticSearch, Cassandra, задачи Uber по Postgres, реляционные БД.
- Книга по интенсивной обработке данных – хорошая книга по масштабируемости системы.
- Будет большим плюсом, если вы разберетесь с высоко масштабируемыми noSQL базами данных. Cassandra – хороший выбор. DataStax Enterprise предлагает отличный курс и туториал.
- Системы обмена сообщениями – почитайте про XMPP. Есть полезный блог в трех частях о том, как Riot Games создали масштабируемую систему обмена сообщениями, используя ejabberd и Erlang (часть 1, часть 2, часть 3, видеообзор). Вы узнаете, как построить собственный Whatsаpp, расширяемый до 500 млн. пользователей.
- Подборка видео, в которых Slack, BBC, Lyft и другие компании рассказывают об опыте использования AWS в своих проектах.
- 50-минутный ролик с Jackson Gabbard (разработчик интерфейсов и интервьюер из Facebook). Он даст несколько полезных советов, как разбираться с типичными проблемами, и чего от вас ждут интервьюеры.
Как вести себя на собеседовании
- В книге Cracking the Coding Interview приведено 189 вопросов
и ответов для собеседований на должность программиста в IT-компаниях. - Еще один фрагмент с Jackson Gabbard, в котором он рассказывает о собеседованиях и поведении на них.
Макет собеседования
- Мы рекомендуем использовать gainlo.co – это сервис, где за деньги можно организовать макет интервью с инженерами из Google, Facebook, Amazon и Microsoft. Занятия длятся 1 час – 45 минут для составления плана интервью и 15 минут, чтобы предоставить вам реальную обратную связь, задать специалистам любые вопросы.
- На сайте gainlo.co есть блог, в котором вы можете воспользоваться серией статей на тему подготовки к интервью в Google.
Разговоры о зарплате
- Послушайте подкаст с Haseeb Qureshi, желательно более одного раза. Парень смог устроиться на должность программиста и договориться о реальной годовой зарплате в 250 000$, не имея высшего образования, после написания кода для bootcamp и с одним годом опыта.
- Прочтите учебное пособие по выплате вознаграждения, чтобы узнать об опционах, RSU, налогах на капитал и т. д.