Первое собеседование на должность программиста – источник постоянного стресса независимо от возраста. Во время собеседования начинают забываться элементарные вещи, а некоторые вопросы ставят в тупик. Совсем убрать волнение невозможно, но подготовка к интервью может его уменьшить.
В этом уроке мы разберем, к чему программисту готовиться на собеседовании.
Ключевые темы
Ключевые темы на собеседовании на программиста:
- О себе. Прошлый опыт
- Прикладные знания
- Задачи
Разберем каждую тему подробнее.
О себе. Прошлый опыт
Обычно в начале собеседования происходит знакомство. Сначала компания рассказывает о себе, а потом представляется кандидат. Также вам могут задавать вопросы. К ним лучше подготовиться заранее.
На этом этапе будьте готовы ответить на следующие вопросы:
- Чем вы больше всего гордитесь как программист?
- Какая самая сложная и интересная задача, которую вы решали в прошлом проекте или в учебном проекте?
- Как вы тестировали работоспособность кода? Умеете ли вы писать автоматические тесты?
- Как был построен процесс разработки на прошлом месте?
- Какую последнюю книгу по программированию вы прочитали?
Чтобы быть готовым к подобным вопросам, создайте заранее несколько проектов на Github, ответьте для себя на вопросы, описанные выше, и познакомьтесь с идеями экстремального программирования. Полезные ссылки:
- Книги, которые стоит читать любому программисту
- Список тестовых заданий от разных компаний
- Проекты Хекслета
Прикладные знания
На этом этапе программистов спрашивают о технологиях, с которыми уже приходилось работать. Знания делят на общие и специфичные.
К общим знаниям относятся:
- Базы данных, SQL. Могут попросить составить запрос. Чаще всего интересует знание соединений (joins)
- ООП. На базовом уровне имеется ввиду умение создавать классы и умение моделировать
- Веб-разработчиков могут спросить про DOM Api
В качестве специфичных знаний проверяется знание библиотек, фреймворков, особенностей языков. В интернете созданы списки по каждому возможному стеку:
- java
- frontend
- python
- javascript
Задачи
Задачи для программистов бывают разными. Им задают вопросы на логику и воображение, а также на оценку владения профессиональными навыками. Последние в этом уроке разберем подробнее.
Алгоритмы и структуры данных
На этом этапе могут попросить реализовать переворот односвязного списка или выполнить сортировку пузырьком. Более сложные вещи писать не просят, их могут спросить устно. Например:
- Как найти пропущенное число в отсортированном массиве, который содержит значения от 1 до 100?
- Чем отличается O(1) от O(n)?
- Какая алгоритмическая сложность у бинарного поиска?
- Как определить наличие цикла в односвязном списке?
- Как эффективно объединить два отсортированных массива?
Этого раздела не стоит пугаться, никто не требует от вас глубокого знания алгоритмов и всего прочитанного Кнута. Достаточно прочитать одну книгу и немного попрактиковаться. Этот опыт не будет лишним — правильно выбранная структура данных в коде сделает вашу жизнь значительно легче.
Рекомендации:
- Вспомните логарифмы. Они нужны для оценки сложности. Это единственная обязательная математика для книг по алгоритмам
- изучите основные алгоритмы
- изучите основные структуры данных
- напишите сортировку пузырьком
- познакомьтесь с хеш-таблицами
- научитесь выполнять бинарный поиск
- изучите сбалансированные деревья
- выучите нотацию Big O, научитесь определять сложность простых алгоритмов
Полезные ссылки:
- Грокаем алгоритмы
Операционные системы и сети
Сюда входит огромный перечень тем, например: владение командной строкой, понимание tcp/ip, http, dns, event loop и многое другое. Как правило, эти вопросы не задают напрямую. В основном придумывают различные истории или ситуации. Примеры вопросов:
- Может ли существовать такой ip адрес: 283.12.30.111?
- Что происходит, когда пользователь вбивает в браузер адрес google.com?
- Можно ли в HTTP запросы указывать одновременно query и post параметры?
Рекомендации:
- прочитайте книгу по операционным системам
- перейдите на Linux, например, Ubuntu
- изучите сети на базовом уровне: tcp/ip, dns, http
Операции с числами
Популярные задачи на системы счисления и битовые операции:
- Как определить четность числа не выполняя деления?
- Как поменять две переменные местами, не используя третью переменную?
Чтобы ответить на подобные вопросы, рекомендуем изучить системы счисления и битовые операции.
Problem-Solving задачи
Problem-Solving — самый интересный тип задач. В них моделируется реальная ситуация. Вам предстоит придумать способ решения в рамках каких-то ограничений. С помощью Problem-Solving задач работодатель проверяет навыки кандидатов в решении поставленных задач и оценивает его способности.
Например, вас могут попросить реализовать редактор так, чтобы он открывал с одинаковой скоростью файлы любых размеров.
Фактически все задачи на работе — это Problem-Solving. Только в жизни мы можем тратить на это большую часть времени, оптимизировать решение, долго обдумывать. А на собеседовании на это дается намного меньше времени. Поэтому при решении таких задач важно не волноваться и сосредоточиться на проблеме, которую нужно решить.
Написание кода
Чем меньше у вас опыта, тем выше вероятность того, что вас попросят написать код. Обычно просят написать его на листочке или в среде подобной repl.it. На задачу дают 10-20 минут. Примеры:
- напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти, — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»
- напишите программу, которая переворачивает строку. Предложите несколько способов
- напишите программу, которая проверяет сбалансированность скобок в строке
- реализуйте программу, которая удаляет директорию со всеми вложенными файлами и директориями — задача на рекурсию
Во время решения могут попросить рассуждать над задачей вслух. Собеседующий хочет проследить за вашим ходом мыслей.
Эти задачи показывают насколько у интервьюируемого хорошо с логикой, алгоритмическим мышлением, как он владеет базовыми конструкциями языка. Они позволяют отсеивать слабых кандидатов, но не помогают определить сильных.
В интернете созданы десятки сервисов, которые специализируются на подобных задачах. Обязательно включите их в свой список для подготовки. Научитесь проходить задачи уровня easy с закрытыми глазами. Этот навык поможет не только для прохождения собеседований, но и в реальном программировании.
Рекомендации:
- потренируйтесь писать код на листочке
- попробуйте рассуждать вслух во время решения алгоритмических задач
- найдите удобную платформу и оттачивайте мастерство
Вывод
В этом уроке мы разобрались, как программистам готовиться к собеседованию, чтобы уменьшить волнение при его прохождении. Остается потренироваться и подтянуть слабые стороны. В этом случае вы увеличите вероятность успешного прохождения интервью. В дополнительных материалах мы поделились полезными ссылками, которые помогут лучше подготовиться к интервью.
Дополнительные материалы
- Искусство проведения интервью (Джоэль Спольски)
- Что руководители и опытные программисты ожидают от джуниора
- Что требуют от джуниоров работодатели: анализ вакансий
- Что нужно знать программисту перед собеседованием и как успешно его пройти
- 15 Вопросов на собеседовании в Google, из-за которых вы можете почувствовать себя глупым
- Логические задачи
- Гайд по системам счисления
- FizzBuzz, или почему программисты не умеют программировать
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.