По сути, собеседование — это серьезный экзамен, на котором проверяют две вещи: насколько вы подходите компании как специалист и как человек. Конечно, знания важнее всего, но не стоит недооценивать человеческий фактор. О нём потенциальные «айтишники» зачастую забывают. Поэтому с него и начнём. А в продолжении расскажем о том, что нужно и чего не нужно делать на собеседовании, как тренироваться перед собеседованием, а также где найти ответы на типичные вопросы по Java.

Этические нормы, которые нужно соблюдать во время собеседования

  1. Элементарная аккуратность. Простое, но важное правило: соискатель должен принять душ в день собеседования и надеть чистую одежду. Даже если не привык к подобным действиям. Поверьте, человек, который не соблюдает этого правила, изрядно портит первое впечатление (и настроение рекрутеру). Если кому-то кажется, что конкретно ему достаточно принять душ раз в три дня, ответственно заявляем: ему просто кажется. Неопрятность могут простить высококлассному специалисту, новичку же, который ищет свою первую работу — вряд ли.
  2. Дресс-код. Если вы собеседуетесь в современную ИТ-компанию, не нужно слишком заморачиваться фасончиком, в таких местах исповедуют демократичный стиль. Поэтому если вы решите блеснуть на собеседовании, и надеть смокинг, бабочку и цилиндр, вас могут не понять. Хотя если вы обычно так ходите — пожалуйста. Если за эксцентричной манерой одеваться увидят хорошего специалиста, всё будет хорошо.
    Даже если вы попробуете попасть в ИТ-отдел банка, костюм на собеседовании не обязателен (хотя тут он будет вполне уместен, скорее всего, ваши интервьюеры будут в них), достаточно аккуратной рубашки и классических джинсов.
  3. Удержитесь о плохих отзывах о бывших коллегах. Ну вы поняли. Даже если ваш бывший работодатель — отъявленный мерзавец, питающийся кровью девственниц, не стоит об этом упоминать даже в качестве хохмы. Вас ещё не знают, поэтому не могут определить, насколько адекватна ваша оценка. Ещё чего подумают, что вы плохо уживаетесь с людьми и склонны к сплетням. Ну кому нужен такой сотрудник, особенно если к нему ещё не привыкли?
  4. Приходите вовремя. Это очевидное правило часто нарушают, причём в обе стороны. Прийти на полчаса раньше не вариант: скорее всего, у рекрутера и технических специалистов день расписан, а тут вы, как снег на голову. Может статься так, что вас будет даже негде посадить, переговорные заняты другими соискателями и сотрудниками. С опозданием все очевидно: этого лучше не делать. Конечно, может статься всякое, от пробок никто не застрахован. Если вы видите, что вы-таки опаздываете, напишите рекрутеру СМС с указанием приблизительного времени прихода. И обязательно извинитесь перед интервьюерами по приходу, даже если «совсем не вы виноваты, это все пробки».
  5. Будьте вежливы. Помните: вас не знают, ваши интонации могут истолковать неверно. Ваше безобидное «а шотакоэ?» может быть воспринято как грубость. Постарайтесь не перебивать интервьюеров, не употребляйте нецензурную лексику.
  6. Контакт. Во время длинных монологов интервьюера (например, когда она рассказывает о компании), не нужно молча смотреть в одну точку на стене или сверлить её глазами. Необходим ненавязчивый зрительный контакт. Человеку важно понимать, что вы его слышите: не забывайте кивать. Только не переусердствуйте, в китайского болванчика тоже играть не следует.

Чего лучше не делать на собеседовании

  • Выдавать зазубренные ответы. Вы мало кого сможете обмануть, а непонимание выдаст любая мелочь.
  • Торопиться. Пишите код последовательно, постарайтесь не суетиться. Дышите глубже!
  • Отказываться проверять код. После того, как вы закончили писать код на бумаге, «запустите» его у себя в голове, с разными данными, как вы обычно это делаете.
  • Отказываться решать сложную задачу. Даже если вам кажется, что задачка совсем вам не по зубам, вы хотя бы попытайтесь. Если вы поясните специалисту ход ваших мыслей при попытке решения, и он увидит в них рациональное зерно, это будет маленький, но плюс.
  • Отказываться от тестового задания. Если вы неплохо проявили себя, не отказывайтесь от задания на дом. Тем более, если вас попросили сделать его до собеседования. Это прекрасный шанс! Если очень лень работать бесплатно, помните, как минимум, вы получите полезный опыт, как максимум — работу.

Что лучше делать на собеседовании

Эти советы главным образом взяты из письма Google к соискателям и дополнены здравым смыслом.

  • Когда думаете над вопросом/задачей, не стесняйтесь, озвучивайте свои мысли, которые возникают по ходу.
  • Задавайте уточняющие вопросы, если вы не поняли задачу или вам нужно больше информации. В ИТ-компаниях важны не только чистые стопроцентные знания, но умение работать в условиях, когда условие задачи поставлено нечётко/противоречиво.
  • Думайте над тем, как улучшить решение задачи. Чаще всего первое пришедшее в голову решение — не самое рациональное. Если мало времени, хотя бы озвучьте другие пути решения.
  • Проявляйте интерес к продуктам компании (если они известны) и проекту, к которому вам, при счастливом стечении обстоятельств, предстоит присоединиться. Важный момент: если компания не стремится выдавать детали проекта (например, аутсорсинговая контора, которая свои заслуги чаще всего не афиширует), пока не уверена в вас, лучше не давить.

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

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

  • Кодинг на листе бумаги. Вы, скорее всего, уже привыкли к IDE, и даже не замечаете, сколько ошибок она исправляет. Будьте готовы: вместо компилятора и любимой IDE на интервью вам дадут ручку и лист бумаги. И да, писать код придётся именно на ней. В крупных ИТ-компаниях такой подход практикуется очень часто.
    Поэтому важный совет: перед собеседованием тренируйтесь кодить на листе, и только потом набирайте программу на компьютере для проверки. Когда занимаетесь на JavaRush, пробуйте решать хотя бы одну небольшую задачу в день на листочке. Это же лучше всего проделывать и с вопросами к собеседованию, ссылки на которые вы увидите в этой статье ниже.
  • Псевдоитервью со своими. Если у вас есть знакомый ИТ-специалист, попросите его провести с вами собеседование. Это неплохая тренировка: по сути, вам предстоит публичное выступление, и редко какой докладчик откажется от возможности повторить свою речь перед «своими» до того, как действительно оказывается на сцене.
  • Тестировать код на «чистоту». Даже если код работает правильно, он может быть ужасен с точки зрения технических специалистов. Да, джуниору могут простить кое-какие оплошности, но, скажем, дублирование или отказ от использования парадигмы ООП вряд ли сыграет на руку претенденту на должность Java-программиста. Поэтому следите за читаемостью вашего кода, привыкайте к комментариям, не поленитесь и изучите правила хорошего тона Java, какими бы занудными они вам ни казались.
  • Почитать информацию о компании и внимательно изучить вакансию. Если это крупная компания, это нужно сделать обязательно. Вы будете знать, чего ожидать от собеседования, возможно, в этой компании акцентируют на чём-то определённом, и ваши предшественники выложили информацию об этом в сеть. Не стоит ориентироваться исключительно на отзывы в сети, но они не помешают: предупреждён — вооружён.
  • И, конечно, разбирать вопросы, о которых ниже.

Вопросы к собеседованию

Это, конечно, самый главный пункт, но он не универсален, поскольку у каждой компании для каждой должности есть уникальный набор требований. Тем не менее, мы тут с вами учим Java и стараемся вырасти в Java Junior Developer. Поэтому начиная с 21-го уровня, мы ввели лекции с типичными вопросами к собеседованию по Java Core, которые касаются материалов уровней.

Ниже — ссылки на вопросы и ответы на них.

Бонус: общий список требований к программистам в Google

Письмо с требованиями Google рассылает тем, кто прошёл телефонное интервью. Приводим его перевод.
В вопросе проведения собеседований Google перенимает академический подход. То есть, нам интересно понять, как вы мыслите, ваш подход к решению проблем, а также ваши возможности по кодингу.

Техническое интервью

Будьте готовы к вопросам, которые будут проверять вашу подготовку в трех разных сферах:

1. Кодинг

  • вы должны по-настоящему хорошо знать по крайней мере один язык программирования, желательно — объектно-ориентированный. Идеальными вариантами будут С++ или Java (С# тоже подойдет, так как он похож на Java, Python — тоже отлично).
  • если вам предложат решить задачу — написать её код, вы вольны выбирать язык, на котором вам работается лучше всего. Однако есть вопросы, которые гораздо легче и логичнее решить на определенном языке.
  • вы должны знать много подробностей о вашем любимом языке, и уметь обосновать, почему он ваш любимый.
    скорость написания кода для нас действительно важна, но не попадайтесь в типичную ловушку, начиная писать код прежде, чем решение сформируется у вас в голове.
    попрактикуйте кодирование без IDE. На собеседовании у вас её не будет.
  • не будьте слишком педантичны к синтаксису, если это очень замедляет решение задачи, и постарайтесь разобраться в сути задачи.
    примеры заданий: постройте/измените структуры данных, имплементируйте системные подпрограммы.

2. Алгоритмы
Вы должны отлично разбираться в анализе сложности (нотация О-большое) вполне нормально, если первым в голову вам придет нерациональное решение, но оно не должно остаться окончательным ответом всегда ищите решение, которое даст вам решение со сложностью O(n*log(n)) или линейное, что вообще идеально.

  • алгоритмы сортировки и поиска (сортировка слиянием, быстрая сортировка и так далее) знать более одного алгоритма со сложностью O(n* log(n)) знать, как они работают и как их можно оптимизировать относительно времени исполнения и памяти.
  • Hash-таблицы уметь их реализовать, используя только массивы
  • деревья знать, как строятся деревья, обход деревьев и алгоритмы манипуляции над деревьями. Быть знакомыми с двоичными, n-арными и префиксными деревьями,
    быть знакомым с классическими задачами Computer Science (нахождение кратчайшего пути, задача о ранце).

Примечание: большинство этих вопросов просто и подробно рассматривается в курсе Гарвардского Университета CS50 «Основы программирования» (по ссылке — лекции на русском языке, переведенные JavaRush и Vert Dider).

3. Системный дизайн

Вопросы по системному дизайну нужны для того, чтобы протеститровать ваши навыки решения задач. Интервьюерам будет важно понять, как вы мыслите. Поэтому задавайте уточняющие вопросы и будьте готовы к погружению в детали.
Также Google хочет, чтобы вы знали степени двойки и умели быстро считать на листочке, например, для того, чтобы посчитать количество машин некой конструкции. Естественно, компании хочется, чтобы вы любили и знали их продукты. У вас должна быть пара-тройка мыслей, что можно было бы добавить/изменить в back-end (или front-end).

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