Собеседование для программиста: 5 вещей, о которых стоит знать
Поиск работы всегда сопровождается стрессом и неуверенностью. Поможем пройти собеседование для программиста, дабы получить должность своей мечты.
Вот неполный список того, что обычно беспокоит программиста перед/на собеседовании:
- "Должен ли я объяснять свой код?”
- “Как правильно вести диалог с собеседником?”
- "Я забыл создать экземпляр моей переменной! Я обречен!”
- "Что собеседник думает о моем ответе?”
- "Ничего, если я скажу/напишу так-то...?”
Это страшный опыт. Чрезвычайно трудно находиться в такой обстановке, когда каждое сказанное слово и код тщательно изучают.
Собеседование для программиста началось, и все сводится к тому, чтобы впечатлить незнакомого человека за 60 минут: настоящая борьба! Но ничего, вы справитесь – мы в вас верим и поможем в этом.
Думайте наперед
Очень часто можно слышать от технического специалиста: “Отлично, я думаю, что это выглядит хорошо, но что бы вы в нем оптимизировали?”. Это очень каверзный вопрос, т. к. его задают для того, чтобы проанализировать вас на тему:
- понимания качества кода;
- способности найти проблемы и узкие места;
- умения масштабировать проект на лету.
Если вы решили поставленную задачу, это не означает, что вам уже сделают job-offer.
Например, когда вы смотрите на фрагмент кода ниже, что он делает? Как бы вы его улучшили? Что может пойти не так?
def traverseArray(arr): numRows = len(arr) numCols = len(arr[0]) addRight = True curStack = [(0, 0)] nextStack = [] while curStack: coords = curStack.pop() if addRight: if coords[1] < numCols - 1: nextStack.append((coords[0], coords[1] + 1)) if coords[1] == 0 and coords[0] < numRows - 1: nextStack.append((coords[0 ] + 1, coords[1])) else: if coords[0] < numRows - 1: nextStack.append((coords[0 ] + 1, coords[1])) if coords[0] == 0 and coords[1] < numCols - 1: nextStack.append((coords[0], coords[1] + 1)) if (not curStack): curStack, nextStack = nextStack,curStack addRight = not addRight m = [ [1], [2], [3] ] traverseArray(m)
Возможность придумать решение – это абсолютный минимум для того, чтобы претендовать на должность. Это базовые вопросы для отделения хороших специалистов от лучших, которые могут мыслить шире заданных рамок.
Подумайте о возможных граничных случаях, проблемах масштабирования и слабых сторонах. Всегда будьте на шаг впереди. Если вы используете рекурсивный подход, что может произойти, если у вас будет огромный фрагмент информации? Если вы используете алгоритм хеширования, как вы справитесь с коллизиями? Насколько вероятно, что это произойдет, и каков наихудший сценарий?
Несколько ответов
Собеседование для программиста всегда включает вопросы, имеющие несколько вариантов решения, некоторые из которых могут быть не оптимальными. Интервьюер ждет от вас не только правильного решения, но и способности написать рабочий код. Более того, он пытается понять, насколько умен собеседуемый, как выводится решение, и насколько креативный подход он использует.
Приведем пример, чтобы проиллюстрировать сказанное выше:
Нужно объединить два отсортированных связных списка. Задачка организована на Leetcode, поэтому можете попробовать ее решить. В принципе, это можно сделать разными способами:
- Переместить все элементы в массив, а затем отсортировать его. Соединить каждый элемент массива вместе и создать указатель.
- Объединить их с помощью манипуляций с указателями. Сравнить два, найти наименьшие, а затем в конце вернуть результаты.
ООП живет и будет жить
ООП – это ужасное и непонятное “нечто” для некоторых людей, очень ценный скил и один из фундаментальных навыков в разработке, который должен знать каждый программист.
Собеседование для программиста обычно заканчивается тем, что многие кандидаты прыгают с головой в проблему программирования, не задумываясь об упрощении кода.
Тем не менее, способность превращать сложные задачи в более простые, управляемые куски ООП – полезный и необходимый навык.
Резюме
Заезженная тема, но куда без нее? Резюме – это ваше лицо, ваша визитка и первое впечатление компании о вас.
Перед тем, как начать искать работу, позаботьтесь о том, чтобы ваше резюме было превосходным. Данный пункт является крайне важным, но его обычно упускают из виду. Довольно часто встречаются молодые специалисты, которые неделями готовились к собеседованию, но не уделили достаточного внимания своему резюме.
Общение
Вам не следует постоянно проговаривать во время написания кода каждую строчку (особенно, если это простой if). С другой стороны, не стоит замолкать, отвечайте на вопросы подробно и развернуто.
Общайтесь так активно, как вам нужно. Всякий раз, когда возникает проблема, поднимайте ее с интервьюером. Это поможет вам определить, направляетесь ли вы в нужном направлении, и, конечно, правильно ли мыслите.
Не “выдавливайте” из себя лишнее слово, т. к. вы сможете описать свой код после того, как допишете его. Если у вас появилось решение еще до того, как было полностью озвучено ТЗ, сообщите об этом интервьюеру – это будет огромным плюсом.
Понятный и простой код
Старайтесь писать понятный код не только для машины, но и для человека. Покажите, что вы с кодом на «ты». Если вам удастся впечатлить собеседника на данную тему, вы заработаете себе дополнительные очки.
Рассмотрим два куска кода:
Часть справа гораздо легче понять и она легче читается. После этого можно заняться реализацией getNeighbors или isEmpty, в зависимости от того, что будет требоваться.
Здесь важно то, что абстракция помогла сохранить код чистым, легким для чтения и простым для понимания.
Дополнительно
И напоследок приведем дополнительный список с очевидными (и не очень) пунктами, которые лучше взять на заметку, чем проигнорировать:
- Внешний вид. Аккуратная прическа, отсутствие щетины/ухоженная борода и чистая выглаженная одежда – это обязательные атрибуты.
- Дресс-код. Уточните перед собеседованием, какие правила в компании насчет одежды: толстовку с шортами могут неправильно расценить.
- Список требований. Освежите в памяти те пункты из требований, которые вы забыли или не знаете, т. к. лучше что-то внятное ответить на вопрос, чем сказать "Не знаю".
- Тестовое задание. Если вы справились/не справились с задачей, попросите указать вам на ошибки, поскольку собеседование – тоже важный опыт.
- Готовый проект или пример кода. Это может пригодиться перед техническим собеседованием для оценки вашего навыка писать код и т. д.
- Используйте профессиональную речь аккуратно: никто не любит "айтишно-молодежный" сленг в каждом слове на первых минутах общения.
- Просите по возможности выслать вам с тестовым заданием список используемых технологий и инструментов, чтобы лучше подготовиться.