Как пройти собеседование в ИТ-компании
Я бэкендер в центре разработки Т-Банка в Челябинске — и год провожу собеседования с бэкендерами, фронтендерами и SRE.
За это время провел примерно 60 интервью. Я отвечаю за проверку технических навыков кандидатов, даю задачи на знание алгоритмов уже после того, как соискателя отобрал рекрутер.
Т-Банк — не первое место, где я работаю: первая вакансия нашла меня сама, потом я проходил много собеседований в больших ИТ-компаниях. И практически везде процесс отбора был одинаковым.
Опираясь на свои знания и опыт, расскажу, как новичку или джуну эффективнее подготовиться к интервью в ИТ-сфере. Что-то из материала пригодится и мидл-разработчику.
План, который подходит для прохождения собеседования на большинство ИТ-специальностей
Составляем резюме
Чтобы попасть даже на начальное собеседование с рекрутером, нужно выделиться из потока кандидатов. Для этого понадобится хорошее резюме. В Т—Ж есть материал о том, как составить резюме, я же выделю пару важных моментов исходя из своего опыта. На мой взгляд, качественное резюме прежде всего хорошо структурировано и правдиво.
Четкая структура. Постарайтесь сделать резюме читабельным, включите в него действительно важную информацию: победа на олимпиаде по информатике в восьмом классе, вероятно, будущего работодателя не заинтересует. Также никому не интересно, сколько багов вы пофиксили: важно, что нового и полезного создали для компании.
Чтобы найти самое ценное, попробуйте конкретизировать свои достижения: на прошлых работах, стажировках, учебе. Уточнить поможет такой прием: выделите крупную задачу вроде разработки функциональности сервиса, вспомните, за что конкретно отвечали, как выполняли работу, и — главное — сформулируйте конечный результат. Так рекрутер быстро увидит ценность сделанного и с большей вероятностью выцепит кандидата из потока.
Правдивость. Пишите правду, только правду и ничего кроме правды. Указывайте технологии, языки, библиотеки и базы данных, с которыми взаимодействовали и работали. Компании часто ищут людей с определенным набором навыков — сэкономьте время себе и рекрутерам, не притворяйтесь тем, кем не являетесь.
В конечном счете такой поступок все равно себя не оправдает, ведь на собеседовании я могу зацепиться за любую строчку и начать спрашивать в глубину. Вообще, когда задают глубокие вопросы — это хорошо, потому что правильные ответы поднимают оценку кандидата на собеседовании. Если же он теряется, когда спрашивают что-то связанное с резюме, появляется повод задуматься, не соврал ли потенциальный сотрудник.
Проходим начальное собеседование с рекрутером
Собеседование с рекрутером во многом строится на базе того, что он увидел во время скрининга. Скрининг — это процесс отбора резюме из потока других. Так что на собеседовании нужно подготовиться к более общим вопросам о вас как о человеке и профессионале. Проверка базовых софт-скиллов начинается уже здесь, ведь рекрутер не только смотрит, соответствуют ли знания кандидата тому, что указано в резюме, но и оценивает коммуникативные навыки.
Здесь совет один: не бояться и идти на контакт.
Рекрутер — такой же человек, в его задачи не входит напугать кандидата и вогнать его в жуткий стресс. Конечно, люди бывают разные, но в большинстве случаев нанимающий просто хочет пообщаться — профессионально и дружелюбно, в рамках интересов бизнеса. Также помните, что разговор с рекрутером — возможность рассказать, чем именно хочется заниматься в компании, обозначить свои амбиции, направления и проекты, над которыми было бы интересно поработать.
Дополнительные технические вопросы тоже возможны, но сильно не переживайте: самое страшное — с алгоритмами и кодом — впереди. Иногда на этапе скрининга предлагают небольшое техническое тестирование с вопросами базового уровня сложности, так отсеиваются совсем неготовые кандидаты. Главное — не оказаться среди них.
Так что перед собеседованием на всякий случай повторите, что такое, к примеру, многопоточность, и вспомните самые популярные структуры данных.
Процесс отбора резюме — взгляд рекрутера
Ваше резюме должно быть подробным и структурированным, но в то же время достаточно кратким и емким. Рекрутер не будет читать CV на три страницы, у него их миллион. Подсвечивайте свои самые сильные стороны и навыки, они не должны пропасть в море менее важной информации: указывайте опыт, релевантный для ИТ-среды, а про то, как вы работали официантом, можно не писать.
Можете просто создать резюме на «Хедхантере» и скачать его оттуда, у них приятная и понятная структура, привычная глазу рекрутера. А еще всегда оставляйте свой телеграм — сейчас это самое популярное средство быстрой связи с людьми.
Напомню о том, что кажется очевидным, но, как показывает практика, не для всех: не нужно ставить в резюме фотографию, где вы лежите на пляже. Не обязателен и строгий официальный портрет, как на паспорт, можете приложить какую-то лайфстайл-фотографию, где хорошо видно ваше лицо: это очень располагает к себе.
Рекрутер не только проводит скрининг, но и назначает все технические секции, организует финальное интервью с командами, а также занимается некоторыми вопросами трудоустройства. Он принимает решение, вести кандидата дальше или нет, анализирует его результаты по всем секциям и сопровождает вплоть до момента трудоустройства.
Если рекрутер прислал вам материалы и попросил подготовиться по ним, то, конечно, это необходимо сделать. Если вы подключаетесь к интервью и сразу показываете, что не открывали ни одну ссылку, присланную рекрутером, — это большой минус. Готовьтесь ко всему, что касается ваших навыков, специализации и позиции, на которую вы хотите попасть.
Важно задавать рекрутеру все вопросы, которые вас интересуют, и выяснять все нюансы. Не бойтесь рассказывать, что вы ищете в плане работы и вакансии, на каком проекте действительно хотели бы работать и чем заниматься в компании.
Если вы в другой стране и вас интересует порядок получения зарплаты или конкретный вид трудоустройства — не стесняйтесь, честно обсудите это с рекрутером с самого начала. Не говорите то, что, как вам кажется, от вас ожидают услышать, иначе рекрутер может подобрать совсем не ту позицию, о какой вы на самом деле мечтаете, а потом будет долго грустить из-за вашего отказа от оффера или увольнения спустя две недели после выхода на работу.
Будьте открыты, честны и доброжелательны при общении: мы, рекрутеры, такие же люди. Из-за потока кандидатов мы привыкаем держать тон на «вы», но совсем не против, когда кандидат сам предлагает перейти на «ты», если это уместно: такое обращение в целом распространено в ИТ-среде и делает атмосферу во время собеседования более непринужденной. Почему бы и нет, особенно если между вами и рекрутером нет большой возрастной разницы и есть обоюдный дружелюбный настрой.
Главное — показать, что вы искренне заинтересованы в работе, на которую собеседуетесь. Поверьте, если вы с ходу заявляете, что пробуетесь на какую-то позицию в компании, просто чтобы оценить свои навыки, дальше вы не пройдете. Как минимум это огромное неуважение к людям, которые вас собеседуют.
Не надейтесь на собственную уверенность или какие-то высшие силы, не думайте, что все априори пройдет легко, если вы просто придете на интервью: это одна из крайностей многих кандидатов. Даже если вы великолепны, потратьте время на подготовку. Если же вы честно подготовились, но чего-то не знаете и сомневаетесь в ответе на вопрос рекрутера — скажите об этом. А если вы знаете ответ, старайтесь излагать свои мысли подробно, объемно и глубоко.
Пробираемся через техническую секцию
Ура, после интервью и легкого теста рекрутер пригласил вас на следующий этап. Теперь придется немного попотеть. Секция программирования обычно состоит из двух-трех подсекций:
- Языковой секции, где проверяется знание языка, который был указан в качестве рабочего.
- Секции алгоритмов с написанием кода, где проверяют способность решать с помощью программирования базовые задачи — рабочие или не очень.
- При собеседовании на позицию сеньора или тимлида будет еще и архитектурная секция.
Практически все собеседования в ИТ сегодня проходят удаленно: вы открываете «Зум» и, сидя в любимом кресле, в режиме реального времени показываете работу над кодом в каком-нибудь редакторе для кодинга. Писать алгоритм ручкой на бумаге, как это было принято раньше, может, и не заставят, но не исключено, что попросят нарисовать пару схем, объяснить и визуализировать ход мысли.
Я, готовясь к собеседованиям, часами решал задачи на LeetCode и повторял курс по алгоритмам из университета: знал, что из них состоит отдельная секция. Занятия придали мне уверенности в себе, ведь я понимал, какие могут попасться задачи, как их классифицировать и найти решение.
Как всегда, не забудьте про софт-скиллы: собеседование проводит живой человек, который будет подробно спрашивать о том, что вы делаете на экране своего компьютера.
Секция языка. В ней кандидат разбирается с языками и платформами, на которых ведется разработка. Необходимо знать и понимать их особенности, уметь о них рассказать.
Здесь могут задать теоретические вопросы, показать код и попросить объяснить, что он делает, как его улучшить и какие есть проблемы. Или предложат написать код, который не только будет работать, но и подсветит особенности языка, на котором вы пишете. Вот о чем чаще всего спрашивают в теоретической части:
- о примитивах языков;
- о многопоточности;
- об известных фреймворках;
- о реализации типовых задач;
- о моделях памяти.
Стратегия подготовки здесь одна: читать, смотреть, изучать то, что кажется полезным и применимым.
В отличие от секции алгоритмов, секцию по языку в Т-Банке я прошел не лучшим образом. Было две задачи, в обеих были затронуты достаточно важные аспекты C++ — на теорию и на понимание кода: нужно было указать на проблемы, если они есть, и предложить решение. Также мне нужно было что-то запрограммировать на этом языке. Здесь я потратил много времени на несколько не самых сложных аспектов, поэтому на части посложнее его не хватило.
Но в конечном счете все оказалось в порядке: заминки были не такими серьезными, чтобы помешать мне пройти дальше.
Как я уже говорил, сейчас код во время собеседований пишут в онлайн-редакторах, а формат «написать код на листочке» уходит в прошлое. Хотя почему бы и нет: если ты каждый день пишешь код на компьютере, то можешь вспомнить, где поставить скобку, где точку с запятой и так далее.
Для подготовки к языковой секции я читал статьи о том, что спрашивают на собеседованиях, смотрел курс по C++ на «Ютубе». Когда проходил собеседования, старался запоминать вопросы, понять, на что я ответил, а на что нет. Потом изучал то, с чем не справился, чтобы на следующих собеседованиях быть лучше.
Секция алгоритмов. Задача здесь — за определенное время придумать решение, объяснить его интервьюеру и написать работающий и более-менее оптимизированный код. Чаще дают небольшое задание, которое может встретиться на работе. Вряд ли спросят что-то совсем специфичное вроде конкретного алгоритма поиска кратчайших путей в графе.
Во время прохождения алгоритмической секции лучше проговаривать все решения, которые приходят в голову. Даже если они максимально простые и неэффективные, дайте понять, что вы знаете: задачу можно решить и так. И если собеседующий говорит, что нужен более эффективный способ, начинайте смотреть по сторонам.
Бывает, что кандидат придумал решение, но держит его в голове, поскольку оно не оптимальное. А на самом деле оно достаточно хорошее — и интервьюер разрешил бы пойти с ним дальше.
На собеседовании в Т-Банке я хорошо прошел секцию алгоритмов, это помогло вытянуть себя после не самой блестящей языковой секции. Сыграло роль также то, что интервьюер вел себя профессионально: это повлияло на мое решение не только принять оффер от компании, но и самому начать проводить собеседования. Человек, который меня собеседовал, вскоре написал: «Ты хорошо прошел секцию алгоритмов, после испытательного срока можешь начинать проводить собеседования сам».
Ресурсы для подготовки к собеседованию на позицию бэкенд-разработчика
Курсы по алгоритмам:
Сайты, где можно потренироваться в решении алгоритмических задач:
- LeetCode — платформа с задачами;
- Codewars — тоже для кодинга и задач, но с возможностью посоревноваться с другими пользователями;
- HackerRank — сервис, помогающий кодить в рамках подготовки к интервью;
- Codeforces — сайт соревнований и конкурсов по кодингу.
Литература:
- «Алгоритмы. Построение и анализ» — все о злосчастных алгоритмах. На «Озоне» книга стоит от 6000 до 8000 ₽;
- Cracking the Coding Interview: 189 Programming Questions and Solutions — рассказывает, как справиться с типовыми задачами, которые часто попадаются на интервью в ИТ.
Часто соискатели невнимательно читают условия задачи, а это важнейший момент, потому что там кроются подсказки и ключевые детали. Недавно был такой случай: дан отсортированный массив, нужно проделать с ним определенные манипуляции. И кандидат пытался придумать, как отсортировать массив, хотя в условии было сказано, что он и так отсортирован.
Порой важно задавать уточняющие вопросы, ведь задача может быть сформулирована так: дан набор чисел, сделайте с ним то-то и то-то. Но из условия непонятно, набор каких чисел: отрицательных, вещественных? Это небольшая проверка внимательности и софт-скиллов, такие ситуации предполагают коммуникацию и взаимодействие.
Общие советы для языковой и алгоритмической секций
По максимуму ознакомьтесь с тем, чего компания хочет от кандидата. Наверняка рекрутер пришлет полезные ссылки для подготовки. Часто у крупных компаний есть заготовки заданий, чтобы соискатель заранее узнал, как все проходит. Не игнорируйте их, обязательно посмотрите и изучите все, на что предлагают обратить внимание: это в ваших интересах. И лучше делать это не вечером перед собеседованием, а заранее. У некоторых компаний, например у Т-Банка, вся информация есть в открытом доступе.
Потратьте время на подготовку. Если у вас есть материал, присланный рекрутером, выделите все, чего не знаете или не понимаете. Попробуйте проработать эти аспекты, исключить ситуацию «меня спросили именно о том, чего я не знал, вот неудача».
Если материала нет, попробуйте определить свои слабые стороны, пробелы в знаниях. В этом помогут краткие технические тесты наподобие тех, что иногда дают рекрутеры на первом этапе. Попробуйте нагуглить что-то вроде «какие вопросы задают на собеседованиях по C++, Python, Golang» и ответьте хотя бы на парочку из них.
Дайте себе день отдыха перед собеседованием и постарайтесь снизить общий уровень стресса. Пригодится, чтобы сконцентрироваться на том, что действительно требуется. Планируйте время и постарайтесь сделать так, чтобы до собеседования оставалась пара свободных часов. Заварите чай, пролистайте методичку от рекрутера еще разок, подышите, лениво и расслабленно потянитесь в кресле.
Не прибегайте на собеседование запыхавшись, в попытке срочно переключиться с одного на другое и с постоянными мыслями о том, как сильно у вас вспотела спина. У меня был такой опыт: однажды я прибежал за минуту до начала, голова была не на месте — результат оказался плачевным, я многое завалил.
Будьте вежливы. Если прийти на секцию программирования со словами «что я эти алгоритмы решать буду, они все равно на работе никогда не встретятся», хорошо она не закончится. Не начинайте так взаимодействие с тем, кто вас интервьюирует. Лучше познакомьтесь, поймите, кто перед вами, попытайтесь выстроить начальный диалог. Задайте пару вопросов. Любые попытки разрядить атмосферу встретят с взаимностью.
Выбирайте для работы и собеседования язык, на котором вы хорошо умеете писать. Кажется очевидным, но в реальности не все следуют этому правилу. В Т-Банке мы не ограничиваем людей в языках программирования: можно писать на C++, на Python, на JavaScript и на многих других языках. Главное, чтобы решение соискателя было верным.
Кроме того, на собеседовании мы просим не приступать к коду, пока кандидат не объяснит решение на словах. Он должен представлять, как будет выглядеть решение, перед тем как его писать. По сути, вся наша работа состоит из этого: сначала придумываешь, потом начинаешь делать.
Не бойтесь спрашивать, рассуждать и предлагать. Собеседующий разработчик не заинтересован в том, чтобы кандидат просто показал готовое сухое решение, поэтому продемонстрируйте ход мыслей, умение рассуждать и искать разные варианты. Важны не только знания, но и то, как ими пользуются, применяют на практике. Именно это и делает из вас профессионального разработчика.
Архитектурная секция, или дизайн распространенных систем, — сложный этап для сеньоров или тимлидов. Я пока не проходил и не собеседовал по ней, но наблюдаю за коллегами, за их опытом и понемногу готовлюсь сам. В этой секции нужно не просто решить какую-то задачу, а спроектировать сложную систему, задизайнить решение для комплексного проекта. Глубже и подробнее об этой секции рассказывал CTO Т-Банк Александр Поломодов.
По моим наблюдениям, это важная секция не столько в плане технических навыков, сколько с точки зрения софт-скиллов. Нужно задавать вопросы собеседующему: чем больше удастся узнать о системе, которую предстоит спроектировать, тем будет проще.
Я слышал об одном хорошем подходе. Например, на собеседовании вам ставят какую-то высокоуровневую задачу: спроектировать ленту публикаций, как в «Твиттере», или что-то в этом духе. Сначала нужно узнать функциональные требования, потом нефункциональные требования к системе. А потом уже по кусочкам, по частям собирать ее. При выборе каждого инструмента, каждой части системы стоит объяснить, почему выбираете именно его и чем он лучше остальных.
То же относится к выбору базы данных. Например, я хочу использовать реляционную базу. Но выясняется, что она по каким-то причинам не подходит. Значит, я должен выбрать другую и обосновать выбор в связи с особенностями и нуждами проекта.
Есть хорошая книжка, которая в народе называется «книжка с кабанчиком», — Designing Data-Intensive Applications Мартина Клеппмана. Она дает введение в высоконагруженные системы, в принципы их работы и взаимодействия. Также в интернете много статей, видео и платформ с типовыми задачами этой секции. Примеры можно поискать на Architectural Katas, а на System Design Primer есть базовые темы по дизайну систем, упражнения по объектно ориентированному анализу и проектированию.
Сама секция обычно проводится, например, в Sketchboard — это сервис для создания схем.
Собеседования с тимлидом или командой
Если техническая секция пройдена успешно, рекрутер назначает дату собеседования с тимлидом или с целой командой, куда хочется попасть. Это расхожая практика в больших компаниях: сначала команды выбирают кандидата, а потом кандидат выбирает команду.
У меня было три собеседования с командами, но знаю ребят, у которых выбора не было. Каждый новый сотрудник выбирает по-своему: кому-то хочется работать в драйвовой группе, а кто-то ищет спокойствия и умиротворения.
Если здесь что-то и проверяют, то исключительно софт-скиллы. Мучить никто не будет, все просто хотят познакомиться, узнать, кто вы такой, как с вами общаться и что вас интересует в профессиональной среде.
Советую не относиться к этому этапу с большим напряжением: расслабьтесь и получайте удовольствие от общения с потенциальными коллегами. Задавайте вопросы, чтобы узнать больше о работе, поинтересуйтесь спецификой процессов внутри компании и так далее. Помните, что это ваш шанс окончательно понять, хотите ли вы эту работу, и выбрать свою команду, если их несколько.
Если у команды не возникнет возражений, рекрутер пришлет официальный оффер — после того как вы сами захотите, чтобы вас приняли. А дальше — вперед и за работу.
Что делать, если собеседование не принесло результата
Предлагают грейд ниже. В больших компаниях есть критерии и грейды, по которым определяется успешность кандидата на собеседовании. И случается так, что кандидат заваливает архитектурную секцию, но все равно получает оффер — если хорошо прошел два предыдущих этапа. Например, соискатель целился на позицию сеньора, а ему предложили мидла. Возможно, он хорошо знает язык и решает определенные задачи, но ему негде было получить опыт по архитектуре.
Такое предложение спокойно можно принять. Во многих компаниях есть программы повышения квалификации и подготовки для будущих сеньоров и тимлидов, куда входят не только технические дисциплины, но и курсы по психологии и софт-скиллам. Там можно набраться опыта — и через некоторое время повысить грейд. Если же в такой ситуации кричать, что «в предыдущей компании я работал тимлидом», в отчете собеседующего точно появится строка о плачевном состоянии софт-скиллов.
Мне скандальные соискатели ни разу не встречались: в основном люди понимают, что их ждет, на что они способны и на что могут рассчитывать. Зато попадались слишком уверенные в себе кандидаты, которые не могли подтвердить квалификацию из резюме. В конце концов это сказывалось на технической части итогового грейда.
Не взяли на работу. Если вы не прошли секцию программирования или вас не взяли дальше по какой-то другой причине, не расстраивайтесь — хотя, конечно, говорить такое всегда просто. Если вы не подошли одной компании, это не значит, что не подходите всем остальным. А если это была компания мечты, через некоторое время можно попробовать еще раз: в Т-Банке иногда делают повторные предложения о работе спустя полгода после собеседования.
Не переживайте, что здесь и сейчас вы не смогли что-то сделать. Возможно, просто был не ваш день. Попробуйте подать резюме в другие компании или получше подготовиться к форматам, с которыми не удалось справиться: попросите у рекрутера советы и развернутую обратную связь. Можно решать те же задачи по алгоритмам, читать о том, что спрашивают на секции по языку. У каждого свой подход к развитию, я бы продолжил готовиться.
Жизнь не кончается.
Новости из мира образования, советы по карьере и учебе, вдохновляющие истории — в нашем телеграм-канале: @t_obrazovanie.