Как программисту подготовиться к собеседованию
Собеседование для программиста – важный шаг в развитии его карьеры. Я решил поделиться информацией, которая поможет подготовиться к собеседованию как новичку, так и профессионалу мечтающему попасть в крупную компанию.
[sendpulse-form id=”278″]
Собеседование по программированию
- Практика и еще раз практика! Я рекомендую использовать такой ресурс, как LeetCode. Можно начать с бесплатного использования, чтобы решить доступные задачи и понять, подходит ли вам такой способ. Многие опытные разработчики советуют его использовать при подготовке к собеседованию особенно в крупные компании.
- Не пропускайте простые задачи, т. к. некоторые из них на деле могут оказаться сложнее, чем кажется. Это особенно актуально для задач с такими ограничениями, как “вы не можете использовать деление” и т. п. Кроме того, простые задания могут пригодиться в решении сложных.
- Не пишите прямо в редакторе LeetCode. Если вдруг что-то случится, то вы можете потерять все написанное. Лучше всего сначала решите проблему с помощью любимого IDE, но лучше всего текстового редактора. Затем уже переносите в редактор LeetCode.
- Практикуйтесь писать код на бумаге или на доске, если есть такая возможность. Этот навык понадобится на собеседовании в 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, видеообзор).
- Подборка видео, в которых 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, налогах на капитал и т. д.
На должность программиста может претендовать любой желающий. Нужно проявить усидчивость, настойчивость, вооружиться терпением и не жалеть времени.