Интервью с разработчиками — часть нашей повседневной работы в Rubrain.com. Поэтому мы отлично знаем, как некоторым талантливым программистам сложно одновременно расслабиться психологически, но оставаться сконцентрированными на решении профессиональных задач, которые ставит интервьюер. Чаще всего это происходит из-за недостаточной уверенности в собственных знаниях и страха неожиданных вопросов и задач, которые могут поставить в тупик.
Чтобы разработчики чувствовали себя уверенно на собеседовании в любой организации (будь то небольшой стартап или крупный всемирно известный проект IT-сферы), мы нашли и перевели для вас исчерпывающую инструкцию по подготовке к “coding interview”.
Автор статьи, Ариэль Камю — основатель Microverse, удаленной школы разработчиков ПО, которая базируется в Сан-Франциско и бесплатна для всех учеников, которые пока не нашли работу. С оригиналом статьи можно ознакомиться по ссылке.
*В заданиях статьи автор несколько раз ссылается на книгу Gayle Laakmann McDowell’s “Cracking the Coding Interview”. Издание на русском языке можно найти в интернете под названием «Карьера программиста. Как устроиться на работу в Google, Microsoft или другую ведущую IT-компанию».
**Осторожно, много ссылок (полезных)! 🙂
В этой статье вы найдете все, что вам нужно, чтобы быть готовым к техническим собеседованиям, поведенческим вопросам и переговорам о зарплате. У каждой компании есть свой способ собеседования с кандидатами, и вы должны быть готовы ко всем возможным вариантам.
Чем меньше компания, тем проще структура собеседований. Небольшие фирмы и стартапы, как правило, проводят 1-2 собеседования (интерактивные собеседования с помощью таких инструментов, как Сodepen и IDE, или whiteboard interview (когда перед кандидатом ставят маркерную доску или дают лист бумаги и просят написать код на них) или дают небольшой проект, который вы должны будете выполнить самостоятельно.
Крупные компании, такие как Google или Facebook, начинают с телефонных собеседований с менеджером по персоналу и техническими специалистами (где вы выполняете задания по написанию кода), после чего переходят уже к очным собеседованиям.
Задание № 1: прочитайте раздел «Форматы собеседования» в «Руководстве по техническому собеседованию», созданном сотрудником Facebook Яншуном Тэем, чтобы понять, как разные компании структурируют свои собеседования.
Независимо от структуры и количества собеседований, вы должны быть готовы к следующим типам вопросов:
- Технические вопросы
- Проектирование систем
- Поведенческие вопросы
Давайте рассмотрим каждый тип вопросов и определим основные цели, которые вы должны достичь, чтобы преуспеть на собеседовании.
Технические вопросы
Технические задания могут касаться структур данных и алгоритмов или конкретных технологий, языков и систем, используемых в компании, куда вы устраиваетесь.
А значит вы уже должны быть знакомы с такими платформами, как Hackerrank, Learneroo и Leetcode, изучить структуры данных и алгоритмы. Даже в процессе поиска работы продолжайте ежедневно практиковаться с Leetcode (подробнее об этом позже).
Имейте в виду, что вас могут попросить выполнить технические задания, используя последнюю версию IDE или другой интерактивный инструмент, позволяющий запустить код, в Google Doc или маркерной доске, где вам нужно будет писать код без особых подсказок. Вы должны быть готовы к самым разным задачам.
Когда дело касается конкретных технологий, языков и систем, у вас должен быть хороший опыт в том стеке, который вы для себя выбрали. В Microverse, школе для удаленных разработчиков программного обеспечения, которая бесплатна до тех пор, пока вы не устроитесь на работу, мы преподаем Ruby, Ruby on Rails, JavaScript и React, но на самом деле, не имеет значения, что вы выберете, пока вы не разберетесь в конкретном стеке и не станете действительно хороши в нем.
Я буду исходить из того, что вы уже владеете своим стеком и умеете создавать с его помощью проекты.
Далее мы будем также использовать книгу Gayle Laakmann McDowell’s “Cracking the Coding Interview”. Если у вас еще нет такой книги, я настоятельно рекомендую ее купить или попытаться найти в местной библиотеке.
Задание № 2: прочитайте VI раздел книги “Cracking the Coding Interview”, который называется «Технические вопросы».
Задание № 3: чтобы освежить информацию о структурах данных и алгоритмах, выполните ТОЛЬКО первое задание по кодированию в каждом разделе (т.е. матрица, динамическое программирование, геометрия, графика, хэш-таблица и т. д.) этой страницы, используя выбранный вами язык.
Вы будете использовать новую платформу под названием Leetcode. На странице «Руководства по техническому собеседованию» также содержится обзор каждой структуры данных или алгоритма на случай, если вам понадобятся подсказки. Прочитайте его, прежде чем пытаться выполнить задание по кодированию.
Задание № 4: найдите ресурсы, на которых вы сможете проверить себя в наиболее распространенных концептуальных вопросах о различных технологиях, которые вы знаете. Если вы не разбираетесь в каком-то направлении, используйте Google и изучите этот вопрос, прежде чем пытаться найти решение.
Вот несколько примеров «концептуальных вопросов» для разных языков программирования, которые мы преподаем в Microverse. Если вы работаете на тех же языках, не стесняйтесь использовать эти ссылки. Также вы можете использовать эти сайты, чтобы понять, какие похожие ресурсы вам нужно найти в интернете. Имейте в виду, что концептуальные вопросы отличаются от заданий по программированию тем, что они более теоретичны, то есть вам не придется писать код, чтобы на них ответить (в большинстве случаев).
Алгоритмы и структуры данных (максимум 45 минут)
- https://www.geeksforgeeks.org/commonly-asked-algorithm-interview-questions-set-1/
- https://www.geeksforgeeks.org/commonly-asked-data-structure-interview-questions-set-1/
Ruby & Rails (максимум 45 минут)
- https://www.toptal.com/ruby/interview-questions/
- https://www.upwork.com/i/interview-questions/ruby/
- https://rubygarage.org/blog/how-to-interview-your-ruby-on-rails-developer
HTML & CSS (максимум 45 минут)
- https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/css-questions.md
- https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/html-questions.m
JavaScript (максимум 45 минут)
- https://www.toptal.com/javascript/interview-questions
- https://www.codementor.io/nihantanu/21-essential-javascript-tech-interview-practice-questions-answers-du107p62z
- https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questions.md
React (максимум 45 минут)
- https://www.edureka.co/blog/interview-questions/react-interview-questions/
- https://www.toptal.com/react/interview-questions
Чтобы не затягивать с этими заданиями, установите ограничение по времени в 45 минут для каждого набора вопросов. Не стесняйтесь предложить другу поработать над этими вопросами вместе. Вы можете отвечать по очереди и объяснять ответы друг другу.
Не забывайте проводить тренировочные собеседования, чтобы подготовиться к реальным (подробнее об этом позже), и продолжать практиковаться в ответах на подобные вопросы даже в ходе поисков работы.
Задания по проектированию систем
В этих типах заданий наниматели представляют определенный продукт (например, социальную сеть, поисковую систему, генератор коротких ссылок), и просят вас спроектировать для него систему и архитектуру.
Возможно, некоторые элементы проектирования вам уже знакомы — DNS-сервер, кэширование, распределитель нагрузки, базы данных и т. д. Однако даже опытные разработчики иногда путаются в этих вопросах.
Вы не должны проектировать супер масштабируемую и совершенную систему. Ваш наниматель понимает, что вы начинающий разработчик, который, вероятно, никогда ранее не проектировал крупные промышленные системы.
Этот тип проверки дает вам возможность показать, как вы справляетесь с крупными задачами. Вы можете задавать много вопросов, чтобы подтвердить свои предположения о системе, которую вам предстоит спроектировать, и обращаться за помощью к своему интервьюеру.
Вот список заданий, которые вам необходимо выполнить, чтобы быть готовым к проектированию систем на собеседовании. Выполнение этих задач займет у вас время, но есть вероятность, что вам не будут давать подобных заданий на собеседовании, если вы откликаетесь на вакансии начального уровня.
Тем не менее, вы сможете узнать много нового о реальном мире разработки программного обеспечения. Изучайте и наслаждайтесь, главное — сильно не углубляться! Просматривайте разные разделы и изучайте те, которые вам интересны.
Задание № 5: прочитайте главу 9 книги «Cracking the Coding Interview».
Пожалуйста, прочитайте «Пример проблемы», но пока не пытайтесь отвечать на «Вопросы собеседования».
Задание № 6: Донн Мартин, технический менеджер Facebook, создал еще один замечательный открытый ресурс, чтобы помочь людям готовиться к собеседованиям. Прочитайте раздел «Как подготовиться к вопросам по проектированию систем на собеседовании».
По этой ссылке в разделах 3 и 4 нужно найти компоненты, которые вы сможете использовать для проектирования своей системы, а затем подумать о том, как вы собираетесь ее масштабировать. Давайте рассмотрим основные компоненты и механизмы масштабируемости при проектировании любой системы.
Задание № 7: прочитайте о четырех разных способах масштабирования системы:
- Масштабируемость для чайников — Часть 1: Аналоги
- Масштабируемость для чайников — Часть 2: База данных
- Масштабируемость для чайников — Часть 3: Кэш
- Масштабируемость для чайников — Часть 4: Асинхроннность
Задание № 8: Прочитайте о различных компонентах каждой программной системы (вам не нужно разбираться во всех деталях, но вы должны знать о различных компонентах и концепциях):
- Domain Name System (DNS)
- Content Delivery Network (CDN)
- Load Balancer
- Reverse Proxy
- Application layer
- Cache
- Asynchronism
- Communication
Задание № 9: Выберите 2-3 компании, которые вам нравятся, из этого списка и прочитайте об их архитектурах.
Задание № 10: посмотрите ответы на следующие два вопроса проектирования:
Это подробные ответы, и они отлично подойдут для вакансий начального уровня. Если вам интересно, что ожидается от более опытных разработчиков, взгляните на этот более сложный ответ на вопрос о проектировании URL Shortener.
Задание № 11: Выберите любые 2 вопроса из этого списка заданий по проектированию и письменно или в любом текстовом редакторе попытайтесь ответить на них, как если бы вы были на настоящем собеседовании. Я рекомендую вам попробовать сделать это с другом или коллегой, чтобы вы могли помогать друг другу.
Примечание: я советую вам выполнять задания с другом или коллегой, потому что некоторые из этих вопросов могут быть слишком сложными, да и сам процесс обучения очень непрост. Совместное обучение – основной принцип Microverse: у нас нет учителей и аудиторий, наши студенты распределяются в небольшие команды и занимаются совместным удаленным программированием. Как гласит шведская пословица: общая радость — это двойная радость, общее горе — половина горя.
Поведенческие вопросы
Компании не хотят просто нанимать хороших специалистов, им нужны люди, с которыми будет приятно работать и которые хорошо вписываются в коллектив.
Поэтому на собеседовании интервьюер обязательно задаст вам некоторые поведенческие вопросы, например: «почему вы хотите у нас работать?» или «расскажите о проекте, в ходе которого вы столкнулись с проблемами и смогли успешно решить их».
Этот раздел предназначен для того, чтобы помочь вам легко ответить на любой из этих вопросов.
Задание № 12: прочитайте раздел V книги “Cracking the Coding Interview», который называется «Поведенческие вопросы».
Задание № 13: с помощью Google Docs заполните «Таблицу для подготовки к собеседованию», которая описана в книге. Идеально, если вы будете использовать в основном программные проекты, но, если есть какая-либо поведенческая ситуация, которая будет показательна (проявит ваши лидерские качества), добавьте этот непрограммный проект при заполнении таблицы.
Задание № 14: следуя методологии SAR (Ситуация, Действие, Результат) и общим советам из книги, запишите и добавьте ответы на вопросы из книги (т. е. «слабые стороны» и «расскажите о себе»), а также все вопросы в разделе «Общие» этого списка к документу Google из предыдущего задания.
Поделитесь ссылкой на Google Docs с коллегами и друзьями и попросите их прокомментировать и оставить отзывы к вашим ответам — всегда полезно услышать мнение со стороны. Помните, что ваши ответы должны быть естественными!
Другие вопросы
Несмотря на то, что задания по проектированию, технические и поведенческие вопросы будут наиболее важной частью собеседований, важно помнить и о других нюансах, которые будут учитываться в ходе ваших собеседований.
Вопросы, которые стоит задать
Задавая правильные вопросы на собеседовании, вы не только будете выглядите умнее, но и познакомитесь с компанией и людьми, прежде чем принять какое-либо предложение. Собеседование — это двусторонний процесс, не забывайте это!
Задание № 15: прочитайте вопросы из этого списка и используйте их на своих будущих собеседованиях.
Психологические трюки
Вот некоторые другие психологические советы, которые помогут вам расположить к себе нанимателя на собеседовании.
Советы по ведению переговоров
Когда наступит долгожданный момент, и вы получите предложение о работе, помните, что вы всегда должны уметь договариваться. Вести переговоры — это искусство.
Задание № 16: прочитайте эти 10 правил ведения переговоров и возвращайтесь к ним всякий раз, когда вам нужно договориться о работе.
Обратите внимание — в двух верхних ссылках этой статьи — более подробное описание каждого из правил.
Тренировочные собеседования
Проводить тренировочные собеседования, прежде чем перейти к реальным, — отличная идея! Вы не только будете увереннее отвечать на наиболее распространенные вопросы, но и поймете, как справляться с нервами, чтобы чувствовать себя на собеседовании спокойно и сосредоточенно.
Вот простая электронная таблица, которую мы используем для проведения тренировочных собеседований в Microverse.
Наши студенты используют эту таблицу для проведения собеседований друг у друга. Большинство вопросов относятся к тому стеку, который мы преподаем, но вы можете найти друга или коллегу и попытаться создать для них аналогичный список вопросов, а затем попросить их сделать то же самое для вас.
Вам нужно хорошо разбираться в том, о чем вы будете спрашивать своего друга, поэтому потратьте пару часов на подготовку к тренировочному собеседованию. Используйте Google, чтобы найти оптимальное решение или ответ на каждый вопрос (особенно вопросы кодирования). Так вы сможете направлять своего партнера, пока он не найдет верное решение.
Примечание: мы также рекомендуем вам попробовать попрактиковаться в ответах, особенно поведенческих, перед зеркалом или с резиновым утенком перед тем, как проводить тренировочное собеседование.
Есть две платформы, на которых мне нравится находить людей и проводить тренировочные собеседования. Возможно, вы тоже захотите попробовать: Pramp и Interviewing.io.
Следуя нашему подробному руководству, вы сможете подготовиться к любому собеседованию на получение должности разработчика программного обеспечения. Выполняя все наши рекомендации, вы будете чувствовать себя уверенно, когда придете на собеседование.