Трудоустройство для разработчиков

Теория: Подготовка к интервью

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

В этом уроке мы разберем, к чему программисту готовиться на собеседовании.

Ключевые темы

Ключевые темы на собеседовании на программиста:

  • О себе. Прошлый опыт
  • Прикладные знания
  • Задачи

Разберем каждую тему подробнее.

О себе. Прошлый опыт

Обычно в начале собеседования происходит знакомство. Сначала компания рассказывает о себе, а потом представляется кандидат. Также вам могут задавать вопросы. К ним лучше подготовиться заранее.

На этом этапе будьте готовы ответить на следующие вопросы:

  • Чем вы больше всего гордитесь как программист?
  • Какая самая сложная и интересная задача, которую вы решали в прошлом проекте или в учебном проекте?
  • Как вы тестировали работоспособность кода? Умеете ли вы писать автоматические тесты?
  • Как был построен процесс разработки на прошлом месте?
  • Какую последнюю книгу по программированию вы прочитали?

Чтобы быть готовым к подобным вопросам, создайте заранее несколько проектов на Github, ответьте для себя на вопросы, описанные выше, и познакомьтесь с идеями экстремального программирования. Полезные ссылки:

Прикладные знания

На этом этапе программистов спрашивают о технологиях, с которыми уже приходилось работать. Знания делят на общие и специфичные.

К общим знаниям относятся:

  • Базы данных, SQL. Могут попросить составить запрос. Чаще всего интересует знание соединений (joins)
  • ООП. На базовом уровне имеется ввиду умение создавать классы и умение моделировать
  • Веб-разработчиков могут спросить про DOM Api

В качестве специфичных знаний проверяется знание библиотек, фреймворков, особенностей языков. В интернете созданы списки по каждому возможному стеку:

Задачи

Задачи для программистов бывают разными. Им задают вопросы на логику и воображение, а также на оценку владения профессиональными навыками. Последние в этом уроке разберем подробнее.

Алгоритмы и структуры данных

На этом этапе могут попросить реализовать переворот односвязного списка или выполнить сортировку пузырьком. Более сложные вещи писать не просят, их могут спросить устно. Например:

  • Как найти пропущенное число в отсортированном массиве, который содержит значения от 1 до 100?
  • Чем отличается O(1) от O(n)?
  • Какая алгоритмическая сложность у бинарного поиска?
  • Как определить наличие цикла в односвязном списке?
  • Как эффективно объединить два отсортированных массива?

Этого раздела не стоит пугаться, никто не требует от вас глубокого знания алгоритмов и всего прочитанного Кнута. Достаточно прочитать одну книгу и немного попрактиковаться. Этот опыт не будет лишним — правильно выбранная структура данных в коде сделает вашу жизнь значительно легче.

Рекомендации:

  • Вспомните логарифмы. Они нужны для оценки сложности. Это единственная обязательная математика для книг по алгоритмам
  • изучите основные алгоритмы
  • изучите основные структуры данных
  • напишите сортировку пузырьком
  • познакомьтесь с хеш-таблицами
  • научитесь выполнять бинарный поиск
  • изучите сбалансированные деревья
  • выучите нотацию Big O, научитесь определять сложность простых алгоритмов

Полезные ссылки:

Операционные системы и сети

Сюда входит огромный перечень тем, например: владение командной строкой, понимание tcp/ip, http, dns, event loop и многое другое. Как правило, эти вопросы не задают напрямую. В основном придумывают различные истории или ситуации. Примеры вопросов:

Рекомендации:

  • прочитайте книгу по операционным системам
  • перейдите на 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 с закрытыми глазами. Этот навык поможет не только для прохождения собеседований, но и в реальном программировании.

Рекомендации:

  • потренируйтесь писать код на листочке
  • попробуйте рассуждать вслух во время решения алгоритмических задач
  • найдите удобную платформу и оттачивайте мастерство

Вывод

В этом уроке мы разобрались, как программистам готовиться к собеседованию, чтобы уменьшить волнение при его прохождении. Остается потренироваться и подтянуть слабые стороны. В этом случае вы увеличите вероятность успешного прохождения интервью. В дополнительных материалах мы поделились полезными ссылками, которые помогут лучше подготовиться к интервью.

Рекомендуемые программы