Привет, Хабр. Меня зовут Дима и я разработчик, тимлид и по совместительству наставник на курсе «Мидл Python-разработчик» в Практикуме.

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

Не буду писать много о себе, скажу лишь одно: я провёл много часов по обеим сторонам стола. Уповаю на то, что смогу кому-то быть полезным в этом нелёгком и, кажется, поднадоевшем деле. Я практически не буду затрагивать другие этапы, сконцентрируюсь только на техническом собеседовании и процессе подготовки к нему.

Г-г-главное н-н-не бояться

Начать хотелось бы с того, что я считаю самой частой «ошибкой» начинающих искателей приключений работы, — это страх отказа. 

Нет. Просто «нет». Не бойтесь. Отказы будут, особенно в начале карьеры. Смиритесь. Отказ — это не приговор, а возможность сделать вывод, поднять навык и двинуться дальше. 

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

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

Прохождение собеседований — это такой же навык, как и разработка. Как и любой навык, он развивается и укрепляется благодаря практике. Ходите по интервью, прокачивайте свои умения. Также вы можете тренироваться в рамках mock-interview — для этого есть специальные сервисы. Например, pramp.com (на англ. языке).

Снова в школу

Многие считают, что собеседование начинается с приветствия и заканчивается прощанием с интервьюером, но это не так. Всё начинается с домашнего задания, а заканчивается работой над ошибками. Кажется очевидным, но не все соискатели это понимают.

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

Будьте готовы ответить на следующие вопросы как себе, так и интервьюеру:

  • У вас есть необходимые навыки? Вы можете их продемонстрировать? Они отражены в вашем резюме?

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

  • Знаете ли вы о компании и чем она занимается? Что вы можете сказать о рынке и об отрасли?

Записывать ответы на эти вопросы не требуется, хоть и не возбраняется. Будет достаточно сформулировать их заранее, чтобы не растеряться в моменте. Предупреждён — значит вооружён. 

Во время подготовки может оказаться, что выбранная вакансия вам не подходит или не интересна. Может, ваша душа не лежит к технологиям, сфере или иной специфике. Если вы передумаете собеседоваться, это может сэкономить время как вам, так и нанимающей стороне. Это норма.

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

Крайне рекомендую взять за практику находить ответы на все вопросы интервьюера, на которые вы не смогли ответить. Решайте все задачи, которые не удалось решить. Выделяйте недостающие компетенции, нехватка которых помешала проявить себя во всей красе. 

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

Собственно сабж

Собеседования отличаются от компании к компании: где-то вас встретят пять зубодробительных собесов на алгоритмы, а где-то вы просто поболтаете час-полтора на околотехнологические темы. С чем бы вы ни столкнулись, вас ждёт та или иная комбинация следующих блоков:

  • Разговоры о вашем опыте

  • Проверка технических знаний

  • Решение задач

  • Вопросы интервьюеру

Рассмотрим каждый из них подробнее.

Опыт, сын ошибок трудных

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

Тут вам и пригодится «домашняя работа»: вы уже знаете, какие навыки требуются в вакансии, какой опыт релевантен для компании и что от вас ожидают. 

Не бойтесь оправдывать ожидания. Вас не просто так позвали на интервью. В вашем резюме нашли нечто нужное компании — вам осталось только это продемонстрировать. 

Например, если компания ищет питониста-бэкендера, то на этом и фокусируйтесь. Нет смысла рассказывать, как вы работали аналитиком, сисадмином, QA. Отсылаться к другим областям знаний нужно только тогда, когда вам не хватает релевантного опыта. При этом всё равно важно выделять именно то, что будет интересно работодателю.

Например в EdTech может быть интересен ваш опыт преподавательской деятельности. В компании, создающей аналитическую платформу, — опыт в маркетинге. Если нанимающий отдел придерживается высоких стандартов качества кода, то им будет интересен ваш опыт разработки unit/e2e-тестов на позиции QA.

Глаголы совершенного вида — ваши лучшие друзья. Формулируйте свой опыт так, чтобы он имел некоторую логическую завершённость. Не «делал», «поддерживал» и «занимался», а «создал», «усовершенствовал», «внедрил». Сосредоточьтесь на том, что вы смогли привнести в проект. Выделяйте конкретные улучшения. Будьте готовы к уточняющим вопросам: вы должны разбираться в деталях того, о чём говорите. Это покажет вашу вовлечённость и понимание проекта.

Назвался груздём — полезай в кузов

Проверка технических знаний подразумевает набор правил, которым стоит следовать для повышения ваших шансов:

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

Не бойтесь чего-то не знать. Знать ответы на все вопросы невозможно, и это нормально. Часто важен именно образ мышления. Постарайтесь просто порассуждать на тему, но не врите и не фантазируйте — даже если интервьюер не подаст виду, заметочку на полях он поставит. 

Владейте базой. Без этого никак. Как правило, в любой области знаний есть джентльменский набор, без которого дальнейший разговор в принципе не заладится. 

Пишу эту статью в контексте Python бэкенд-разработчиков, потому привожу возможные вопросы именно для Python:

  • Что такое декоратор? Как он устроен? Может ли он принимать на вход атрибуты?

  • Генератор и итератор: что это такое, в чём разница?

  • Любимый многими вопрос: что же такое GIL? Как он работает, зачем нужен, что с ним не так?

Возможных вопросов намного больше: про базовые типы, магические методы, мета-программирование, особенности типизации, интерпретируемость, асинхронность, многопоточность и многое-многое другое. Готовьтесь к общим вопросам, но будьте готовы к тому, что вас застанут врасплох и интервьюер спросит о чём-то совершенно невообразимом.

Подготовиться к вопросам просто и одновременно сложно. Просто, потому что достаточно проштудировать гугл по запросу «%my_field% interview questions». Сложно, потому что иногда спрашивают о деталях, которые познаются только на собственных набитых шишках или требуют не просто знания, а какого-то глубинного понимания дебрей вашей области. Опять же, ничего страшного, если вы чего-то не знаете, — успокойтесь и просто порассуждайте на тему.

Всё это касается не только выбранного языка разработки, но и всех навыков и технологий, указанных в вашем резюме.

Нельзя просто так взять и решить задачу

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

Недостаточно просто написать рабочий код. Конечно, зависит от интервьюера, но большинство оценивает не только и не столько ваш код, а именно ход ваших рассуждений.

Схема действий, которую я и многие другие используют на алгоритмических сессиях:

  • Прочитайте условие и поймите условие. Если какие-то моменты вызывают разночтения, не делайте предположений и задайте вопрос интервьюеру. Это общее правило, которое относится не только к алго-задачам: никогда не делайте предположений — часто от вас ожидают дополнительные вопросы.

  • Начните рассуждать вслух. Если задача нетривиальная, предложите наивный или жадный алгоритм — это выиграет время, чтобы подумать над оптимальным. Также это покажет, что вы не просто не знаете, как это делать, а думаете именно в сторону лучшего решения. Иногда интервьюеру не нужен оптимальный алгоритм, и можно сразу переходить к написанию кода. Обязательно проговаривайте алго-сложность.

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

  • Напишите код. Есть разные стили написания: не надо стараться писать идеально, но и нечитаемо тоже не стоит — придерживайтесь хотя бы минимальных стандартов качества. Код должен быть достаточно выразительным, чтобы незнакомый человек (в этом случае интервьюер) смог его прочесть. Хорошим тоном будет проговаривать вслух, что именно вы пишете и как это соотносится с алгоритмом.

  • Убедитесь, что код рабочий. Как только закончили писать, не спешите кричать «Готово!». Остановитесь, испытайте своё творение, проверьте в голове на паре примеров краевые случаи, выходы за пределы массивов и прочее.

Подготовка к решению задач. Ничего нового тут не скажу: LeetCode вам в помощь. В основном обратите внимание на easy и немного на medium для закрепления отдельных топиков. 

Пристального рассмотрения заслуживают следующие темы: типы данных, в первую очередь словари; немного графов; основы динамического программирования и обязательно работа со строками. Благо, на LeetCode есть замечательные подборки. 

Набор правил, которыми я пользуюсь для подготовки к алго-собесам:

  • Не просто решайте, а следуйте той же схеме, что и на реальных собеседованиях. При желании устную часть можно оформлять коммент-блоком. Да, это занимает больше времени, но зато лучше оседает в голове.

  • Не заучивайте наизусть, а честно решайте. Не пытайтесь запомнить условия и алгоритмы конкретных задач, сфокусируйтесь на общих идеях и подходах. Ваша цель — изучить инструменты.

  • Читайте решение или разбор, если упёрлись и никак не идёт. Попытайтесь разобраться и отложите задачу на несколько дней. Потом обязательно к ней вернитесь и попробуйте решить самостоятельно. Не страшно, если снова не получится, — просто вернитесь к началу данного пункта.

Себя показать, на других посмотреть

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

Несколько советов:

  • Задавайте общие вопросы — не частные. Вместо «Используете ли вы тесты?» лучше спросить: «Как устроено тестирование на проекте?». Это позволит интервьюеру раскрыть больше деталей и нюансов. В целом процессы (ревью, тесты, agile, ci/cd и прочие) — это безграничная тема для общения.

  • Не останавливайтесь на одном вопросе — копайте вглубь. После ответа интервьюера уточняйте отдельные моменты, опирайтесь на свой опыт и знания о вакансии. Главное, не переусердствуйте и не превратите это в допрос с пристрастием.

  • Интересуйтесь продуктом. Подумайте, что бы вы хотели узнать о продукте как потребитель и о его внутренней кухне как специалист. Как устроен продукт? Какое место он занимает на рынке? В чём его отличие от конкурентов? Задать подобные вопросы — это редкий шанс. Главное, интересуйтесь, а не критикуйте — вы здесь не за этим :)

  • Узнайте, как устроена работа в компании. Вспомните свои боли на других проектах. Постарайтесь узнать, как всё устроено, но не сравнивайте. Мало кто любит выпады «А у нас было так-то…» — лучше спросить: «А почему у вас именно так, а не этак?»

  • Не спрашивайте про печеньки. Об этом стоит начать разговор уже после оффера, а не во время технического собеседования. Но вы можете спросить у интервьюера, что ему нравится в компании или в отделе. Общие высказывания вроде «дружный коллектив, и задачи интересные» могут оказаться красным флагом, хотя и не обязательно. Думаю, если человек доволен местом работы, он найдёт в себе чуть больше, чем пару заезженных фраз.

Тонко намекну, что часто на стартовые позиции ищут не только решающих кандидатов, но и заинтересованных. Все слышали о тех самых «горящих глазах» — так вот, проявить вашу увлечённость можно и таким незамысловатым образом, с помощью правильных вопросов.

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

TL;DR

Внимательно читайте вакансию и анализируйте результат собеседования. Говоря о себе, фокусируйтесь на релевантном для слушателя. Будьте готовы ответить за обозначенный опыт. Задачи совсем не про код. Задавайте вопросы, интересуйтесь. И помните — «г-г-главное  н-н-не бояться». Успехов!

Комментарии (17)


  1. Qvxb
    21.11.2023 10:28
    +1

    Курс «Мидл Python-разработчик»За 6 месяцев освоите навыки, которые отличают мидл разработчика от новичка
    А как Вы считаете, это возможно, за 6 месяцев стать мидлом на пайтоне?


    1. ovsds Автор
      21.11.2023 10:28
      +4

      А как Вы считаете, это возможно, за 6 месяцев стать мидлом на пайтоне?

      Если коротко ответить на вопрос именно в такой формулировке: нет.

      Если всё же раскрыть мысль, то: нарастить навыки, подтянуть недостающие компетенции, набить руку уверенному джуну так, что б рынок (или текущий работодатель) воспринимал его мидлом - запросто, но придётся пахать. Прям очень много работать, что б уложится в отведённый срок. Мы говорим о 4-6 часах личного времени потраченного на обучение каждый день минимум. Крайне желательно при этом работать в отрасли и применять полученные навыки.

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


      1. Qvxb
        21.11.2023 10:28

        Уверенный джун ==новичок?
        Я вот вижу слово новичок и воображение рисует того кто не знает типы переменных и циклы например.
        Это в целом придирка в каком то смысле, просто тезис выглядит в духе С++ за 21 день xd


        1. ovsds Автор
          21.11.2023 10:28
          +1

          В моей картине мира джун действительно == новичок. Он только научился писать код, что-то может, что-то умеет, но специалистом его ещё рано называть.

          Курс именно для них, там чуть ниже есть блок этому посвящённый как раз:

          Программа рассчитана на тех, кто знаком с основами Python, базами данных и API. Будет большим плюсом, если вы прошли курс Практикума «Python-разработчик» или уже работаете по специальности.

          А ещё чуть ниже про вступительный тест:

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


          В целом тезис взят с промо страницы курса, а не из статьи, потому предлагаю оставить эту дилемму автору лендинга. Со своей стороны лишь добавлю, что C++ за 21 день действительно не изучить, но, справедливости ради, статья посвящена другой теме и данный вопрос вообще никак не затрагивается :)


  1. zodchiy
    21.11.2023 10:28
    +9

    Я на последних интервью стал задавать вопросы - как устроена команда? кто, как и где ставит задачи? кто и как определяет время на выполнение задач или их приоритет? кто и как контролирует их выполнение? как проводится кодревью? сколько времени команда выделяет на закрытие техдолга/рефакторинг?

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


    1. ovsds Автор
      21.11.2023 10:28
      +3

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

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


    1. zergon321
      21.11.2023 10:28
      +1

      Меня после таких вопросов обычно сразу разворачивали


      1. ValeryGL
        21.11.2023 10:28
        +4

        Так отлично, что рано выявили несовместимость


        1. zergon321
          21.11.2023 10:28

          Но по итогу так везде


          1. ovsds Автор
            21.11.2023 10:28
            +2

            Это очень странно, что везде. На моей практике интервьюеры крайне положительно относятся к вопросам. А можете дать больше контекста с примерами дать. Какие вопросы и как задавались, какой был ответ, с какой формулировкой разворачивали?


            1. zergon321
              21.11.2023 10:28
              +1

              — У вас приходится перерабатывать? Участвует ли разработчик в согласовании сроков на задачи?

              — Переработки есть, они не оплачиваются. И вы должны быть on-call 24/7. Мнение разработчика о сроках никто не спрашивает

              — Меня не устраивает такой расклад

              — До свидания


              1. ovsds Автор
                21.11.2023 10:28
                +1

                Звучит как галера, если честно. Я пару раз из интереса собеседовался в такие конторы, но быстро понял, что это не моё, потому начал избегать подобное ещё на просмотре вакансии или разговора с эйчаром, если меня где-то нашли. Благо их не сложно отфильтровать в общем потоке. Опять же, отрасль большая, конечно зависит от вашей специальности (какая если не секрет?) и квалификации, может где и более высокая плотность и они лучше мимикрируют под адекватного работодателя.

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


                1. zergon321
                  21.11.2023 10:28

                  Я собеседовался в крупняк, на продукт. Я понял, что размер компании, её брэнд и т.д. не значат ну вот вообще ничего. По специальности и квалификации я middle backend. Ну, был. Я решил уйти из IT. В нём теперь слишком много дерьма, с которым я справиться не в состоянии. Собеседования с неадекватными техническими вопросами вида "какую ассемблерную инструкцию сгенерирует компилятор Go для инкремента", LeetCode-задачами на роль перегонщика JSON'ов (а ещё всё это в кучу этапов на месяц, если не больше, лол), урезанные сроки, переработки, отсутствие уверенности в завтрашнем дне, постоянный стресс. Всё это совсем не стоит любой зарплаты


                  1. ovsds Автор
                    21.11.2023 10:28
                    +1

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

                    Я видимо с годами перестал близко к сердцу воспринимать что и как меня спрашивают на собеседованиях, а спрашивают действительно разное, порой крайне странное, от вопросов как именно поведёт себя интерпретатор в случаях, когда это явно UB, но этого ответа недостаточно и интервьюер ждёт конкретного поведения зависящего от версии, OS, фазы луны и бог знает чего ещё, вплоть до "а вы не читали вот эту конкретную не самую популярную статью по теме, хотелось бы услышать мнение" когда ответ "нет, не читал" недостаточен и вопросы на тему продолжаются. На фоне этого алгоритмические и system design собесы меньше всего смущают, даже скорее уже стали одной из самых комфортных и спокойных из возможных опций, потому что просто знаешь что ждать, даже если в конечном итоге будешь перекладывать json'ы или ковырять инфру :)

                    По поводу стресса, полностью соглашусь, за деньги здоровье и нервы потраченные на работе потом не купить. Могу лишь пожелать удачи и успехов на новом поприще!


    1. Nialpe
      21.11.2023 10:28
      +1

      хорошие вопросы, я как тех.интервьюер отвечаю на подобные вопросы и встречный интерес проявляю - как работал кандидат.


  1. zaiats_2k
    21.11.2023 10:28

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


    1. ovsds Автор
      21.11.2023 10:28
      +1

      Есть хорошие рекрутёры, есть плохие. Есть подготовленные соискатели, есть пофигисты. В моей картине мира из того что есть плохие интервьюеры, которые некачественно выполняют свою работу, совершенно не следует, что нужно относиться к процессу собеседования на авось со стороны соискателя.
      Хотя опять же, как вы правильно сказали, соискатель никому ничего не должен. Кликбейтного посыла "Ты должен следовать этим 10 простым правилам, и получишь 100 из 100 офферов с ЗП 300к/с" я специально старался избегать. Это лишь мой личный опыт консолидированный в статью поскольку у меня несколько раз конкретно этой темой интересовались начинающие специалисты и для них ряд нюансов как оказалось был неочевиден.
      Если будет кому-то интересно могу написать идентичную статью, где соберу своё сугубо личное мнение по процессу и подготовке к собеседованию со стороны интервьюера.