Как подготовиться к собеседованию на должность программиста

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

Собеседование по программированию

  • Больше практики! Не тратьте время на решение задач и вопросов на 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, налогах на капитал и т. д.
На должность программиста может претендовать любой желающий. Нужно проявить усидчивость, настойчивость, вооружиться терпением и не жалеть времени.
FavoriteLoadingДобавить в избранное

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *