Собеседование — одна из наиболее стрессовых тем для разработчиков, но только первые двадцать раз :)
Привет! Меня зовут Руслан, я один из наставников курса «Мидл Python-разработчик» в Яндекс.Практикуме. Около 12 лет я занимаюсь разработкой, из них девять — на Python. За это время я собеседовался на разные позиции десятки раз и сам провёл примерно пару сотен собеседований. Не всегда успешно :/ В этой статье поговорим о том, как снизить вероятность провалов и к чему быть готовым.
Предположим, что вы уже определились с потенциальным работодателем и вам предстоит собеседование.
В посте я расскажу про три основных этапа:
Изучите детальнее компанию, в которую собираетесь устраиваться. Всегда приятно впечатляет, когда человек провёл домашнюю работу, разузнал про компанию и принёс с собой что-то полезное на собеседование. Это может быть список ошибок и возможных улучшений для сайта, предложения по улучшению ПО или неточность в тексте вакансии.
Естественно, говорить про это нужно доброжелательно. Ваша цель — показать, что вы внимательно относитесь к компании и стремитесь её улучшить, как если бы уже были её сотрудником (я надеюсь, что такое намерение у вас действительно есть, иначе зачем всё это?)
Про это много раз сказано, но повторю. Если собеседование планируется онлайн, убедитесь, что у вас хороший интернет, что вы не будете в гостях, что к вам не должен прийти курьер или водопроводчик.
Протестируйте заранее программу, в которой будет проходить собеседование.
Если собеседование проходит в офисе, убедитесь, что знаете, как доехать до места, и заложите побольше времени, чтобы не пришлось спешить и нервничать.
Предполагаю, что писать на Python вы уже умеете. Но рекомендую перед собеседованием повторить основные моменты:
По всем темам вопросы могут идти по нарастанию сложности, вот мои примеры вопросов средней сложности для джунов и мидлов:
При подготовке рекомендую посмотреть неплохую подборку из 300 вопросов собеседований на Гитхабе.
Обычно собеседование проходит так:
Рассмотрим все этапы.
В начале традиционно вас попросят рассказать о себе. Нужно будет рассказать о своём образовании, релевантном компании опыте, о проектах, в которых вы участвовали. Если таких проектов нет, стоит что-нибудь сделать хотя бы в учебных целях.
Тут рекомендация простая: подготовьте и потренируйте рассказ заранее, чтобы не забыть ничего важного из-за волнения.
Теоретические вопросы
Иногда это просто теоретические вопросы подряд из серии тех, что показаны в примерах выше. Иногда (и я сейчас чаще предпочитаю такой вариант) вас попросят подробнее рассказать, как устроен ваш проект во всех деталях, начиная от технического стека, устройства базы и заканчивая методами деплоя и работы на продакшене. Если такого проекта у вас нет, могут попросить рассказать, как бы вы его делали.
Вопросы про проект, которые вам могут задать:
Задачи
Помимо вопросов могут попросить решить задачу.
По Python я обычно даю такую:
Пример задачи по базам данных:
Тут я рассчитываю услышать про parent_id, materialized path и, особенно круто, про nested sets. Естественно, важно, чтобы кандидат знал (или придумал на собеседовании) суть этих подходов, а не их правильные названия.
Пример задачи по архитектурным решениям:
Решение этих задач обычно помогает понять уровень кандидата — джун перед вами или более-менее уверенный мидл.
Алгоритмы
В компаниях уровня FAANG (Facebook, Apple, Amazon, Netflix, Google), а также в российских ИТ-гигантах (Яндекс, Рамблер, Мейл) обычно есть секция про алгоритмы, в остальных компаниях это зависит от позиции и предпочтений интервьюера. Я, когда собеседую на позицию «делать веб-проекты на Django», обычно не особо затрагиваю алгоритмы, разве что могу спросить про принцип работы бинарного поиска.
Хорошая подборка алгоритмических задач, по которой можно готовиться, — проект Эйлер.
Если не знаете ответ
Важно помнить, что интервьюер будет повышать уровень сложности вопросов, чтобы упереться в ваши границы — и он так будет делать на каждом новом блоке (python, базы и т.д.), поэтому не нужно переживать, когда вы не знаете ответ. Лучше сразу явно сказать, что не знаете или знаете только в теории. Гораздо хуже, когда кандидат говорит, что что-то знает, но пара точных вопросов ставят его в тупик. Нормально, что вы не ответите на ряд вопросов, так должно быть, не стоит об этом переживать.
Иногда будут вопросы, ответы на которые вы вроде бы знаете, но нужно время, чтобы подумать. А иногда интервьюер может специально задать вопрос, на который нет правильного ответа. В таких случаях лучше рассуждать вслух. Редко когда молчание дольше 10 секунд уместно на собеседовании, кроме случаев, когда вам явно дали время на обдумывание задачи.
Может случиться так, что вы завалите целый блок вопросов, однако не факт, что это будет причиной отказа. Например, моя слабая сторона — это алгоритмы, в этой части я никогда не был хорош на собеседованиях. В одну из компаний у меня была серия интервью, одно из которых было по алгоритмам, и его я практически полностью завалил, однако меня всё равно наняли — затащили софт-скилы и опыт в других вопросах.
Помимо технических вопросов будет ещё блок о том, насколько ваши ценности, подход к работе, софт-скилы соответствуют компании и вашей будущей позиции — то, что англоязычные эйчары называют «Culture Fit».
Я обычно задаю такие вопросы:
Вряд ли к этой секции можно подготовиться заранее, ведь здесь речь идёт о ваших моральных и организационных качествах. Но общие рекомендации по ответам в этом блоке такие:
И ещё — это не «официальная рекомендация ведущих софтскилогов», а моё личное мнение — прокачать софт-скилы в целом помогают публичные выступления на мероприятиях: вебинарах, хакатонах, конференциях, демо-презентациях. Живые выступления предъявляют к вам кучу требований, начиная с опрятности, дисциплины и навыков выражать свои мысли, заканчивая самим фактом того, что вас пригласили где-то выступить, — это хороший критерий.
Как выступать на публичных мероприятиях — это отдельный навык и тема отдельной статьи, но короткий и 100% рабочий совет — делать больше итераций. Если первые два–три выступления могут оказаться провалом, то на пятый–шестой раз вы вполне можете сорвать овации (или несколько предложений от эйчаров интересных компаний =).
«Делать больше итераций» — это в целом хорошая практика, чтобы прокачаться в собеседованиях, а также лучше узнать рынок, на котором вы работаете.
Обязательно задавайте свои вопросы собеседующим. Спросите про потенциальные задачи, стек, команду, например:
Иногда бывает так, что вас собеседует один человек, а на практике фактическим руководителем окажется другой. Также бывает, что спрашивают про одни технологии, а в вашем проекте используются другие. Мне знаком случай, когда парня гоняли на собеседовании по Python и структурам данных, а потом дали задачи по допиливанию Битрикса. Всё это важно узнать на собеседовании.
Если вы получили отказ, попросите фидбек и проработайте его. Потренируйтесь решать задачи, с которыми не справились, подумайте, что вам нужно изучить лучше к другим собеседованиям. Попросите собеседующего или HR посоветовать вам книгу, статью или какой-то материал для дальнейшей прокачки.
Участие в собеседованиях — это навык, которому нужно учиться. И этот навык, как любой другой, нарабатывается с опытом. Вы можете не пройти по скилам, и это нормально, но постарайтесь оставить о себе приятное впечатление и сохранить контакт.
Будет здорово, если поделитесь примерами хороших вопросов и задач, которые вам задавали или которые вы используете сами в своих интервью.
Привет! Меня зовут Руслан, я один из наставников курса «Мидл Python-разработчик» в Яндекс.Практикуме. Около 12 лет я занимаюсь разработкой, из них девять — на Python. За это время я собеседовался на разные позиции десятки раз и сам провёл примерно пару сотен собеседований. Не всегда успешно :/ В этой статье поговорим о том, как снизить вероятность провалов и к чему быть готовым.
Предположим, что вы уже определились с потенциальным работодателем и вам предстоит собеседование.
В посте я расскажу про три основных этапа:
- Подготовка к собеседованию: какую домашнюю работу провести, чтобы собеседование прошло легче.
- Собеседование: как оно проходит и какие вопросы ждать джунам и мидл-разработчикам.
- Что делать после собеседования и как быть, если вам отказали.
Подготовка к собеседованию
Организационная подготовка
Изучите детальнее компанию, в которую собираетесь устраиваться. Всегда приятно впечатляет, когда человек провёл домашнюю работу, разузнал про компанию и принёс с собой что-то полезное на собеседование. Это может быть список ошибок и возможных улучшений для сайта, предложения по улучшению ПО или неточность в тексте вакансии.
Естественно, говорить про это нужно доброжелательно. Ваша цель — показать, что вы внимательно относитесь к компании и стремитесь её улучшить, как если бы уже были её сотрудником (я надеюсь, что такое намерение у вас действительно есть, иначе зачем всё это?)
Про это много раз сказано, но повторю. Если собеседование планируется онлайн, убедитесь, что у вас хороший интернет, что вы не будете в гостях, что к вам не должен прийти курьер или водопроводчик.
Протестируйте заранее программу, в которой будет проходить собеседование.
Если собеседование проходит в офисе, убедитесь, что знаете, как доехать до места, и заложите побольше времени, чтобы не пришлось спешить и нервничать.
Техническая подготовка
Предполагаю, что писать на Python вы уже умеете. Но рекомендую перед собеседованием повторить основные моменты:
- Python (синтаксис, модули стандартной библиотеки);
- знание основного фреймворка в вашей специальности (Django, Flask, aiohttp, aiogram, numpy, etc);
- понимание баз данных (реляционных и нереляционных);
- понимание алгоритмов;
- работа с серверами (линуксы, nginx-ы).
По всем темам вопросы могут идти по нарастанию сложности, вот мои примеры вопросов средней сложности для джунов и мидлов:
Тема | Примеры вопросов для джуниор-разработчиков | Примеры вопросов для мидл-разработчиков |
Python | ||
Общее | Что такое list comprehension? Как работают декораторы? | Как работают декораторы? Что такое __slots__? Как во множественном наследовании отрабатывается поиск атрибута? |
Типы данных | Какие типы данных бывают? В чем отличие list от tuple? | Как реализован тайп-чекинг в Python? Какие библиотеки для этого знаете? Как хранятся в памяти list/tuple/dict/set? |
Тестирование | Что такое TDD? | Какие тесты приходилось писать? Что такое мок-объекты? Приходилось ли использовать? |
Асинхронный код | Какие знаете способы выполнять код параллельно/асинхронно? | В чём отличие асинхронности от многопоточности? В каких задачах использовать асинхронность необходимо? В каких бессмысленно? |
Django | Как работают сигналы? Как в request появляется атрибут user? Что такое дата-миграция? | В последние версии Django подвезли асинхронищу, как это работает? ORM тоже асинхронный? |
Алгоритмы, паттерны проектирования | ||
Общее | Как работает бинарный поиск? Сортировка вставками? | Как высчитывается сложность алгоритма? Что такое бинарное дерево? |
Паттерны, подходы | Что такое паттерны проектирования? Какие знаете? | Как считается расстояние Левенштейна? Как устроен паттерн PubSub? Где в Django применяется паттерн мост? |
Базы данных | ||
В целом | Что такое транзакция? Как работают JOIN-ы? Зачем нужны и как работают индексы? Напишите запрос с GROUP BY. | Как дебажить медленный запрос? (в ответе ожидаем услышать про EXPLAIN и план запроса). Как обслуживать PostgreSQL-базу? Как настраивать репликацию? |
NoSQL | С какими NoSQL работали? Как работает Redis? |
Зачем нужен ElasticSearch? Что будет, если размер данных превысит размер ОЗУ при использовании Redis? |
Администрирование | ||
В целом | Как устроен DNS? Что такое nginx? Как установить nginx на linux? | Как устроен CI/CD в gitlab или github, либо любой знакомый вам? В чём отличие http от https? Чем обеспечить ротацию логов? |
Другие тулы | ||
Git | Что делает git cherry pick? | Что такое gitflow? Что делают команды rebase, fixup, stash, revert? |
Docker | Приходилось ли использовать docker/docker-compose? | Что такое и зачем нужен docker volumes? |
Что будет на собеседовании
Обычно собеседование проходит так:
- знакомство и рассказ о себе;
- техническая часть;
- вопросы про софт-скилы;
- ваши вопросы интервьюеру.
Рассмотрим все этапы.
Рассказ о себе
В начале традиционно вас попросят рассказать о себе. Нужно будет рассказать о своём образовании, релевантном компании опыте, о проектах, в которых вы участвовали. Если таких проектов нет, стоит что-нибудь сделать хотя бы в учебных целях.
Тут рекомендация простая: подготовьте и потренируйте рассказ заранее, чтобы не забыть ничего важного из-за волнения.
Техническая часть собеседования
Теоретические вопросы
Иногда это просто теоретические вопросы подряд из серии тех, что показаны в примерах выше. Иногда (и я сейчас чаще предпочитаю такой вариант) вас попросят подробнее рассказать, как устроен ваш проект во всех деталях, начиная от технического стека, устройства базы и заканчивая методами деплоя и работы на продакшене. Если такого проекта у вас нет, могут попросить рассказать, как бы вы его делали.
Вопросы про проект, которые вам могут задать:
- Где хранится код, как устроены ветки в репозитории?
- Как проект запускается на сервере?
- Как появляется задача, как поступаете, когда непонятны требования?
Задачи
Помимо вопросов могут попросить решить задачу.
По Python я обычно даю такую:
Написать параметризированный декоратор, который печатает время выполнения декорированной функции. Параметр декоратора — печатать время выполнения в секундах или в миллисекундах.
Пример задачи по базам данных:
Как хранить иерархическую структуру в базе (например, такую)?
Тут я рассчитываю услышать про parent_id, materialized path и, особенно круто, про nested sets. Естественно, важно, чтобы кандидат знал (или придумал на собеседовании) суть этих подходов, а не их правильные названия.
Пример задачи по архитектурным решениям:
У вас в базе данных есть список сотрудников. Нужно отдавать его в API фронтенду постранично. Какой API реализуете?
Решение этих задач обычно помогает понять уровень кандидата — джун перед вами или более-менее уверенный мидл.
Алгоритмы
В компаниях уровня FAANG (Facebook, Apple, Amazon, Netflix, Google), а также в российских ИТ-гигантах (Яндекс, Рамблер, Мейл) обычно есть секция про алгоритмы, в остальных компаниях это зависит от позиции и предпочтений интервьюера. Я, когда собеседую на позицию «делать веб-проекты на Django», обычно не особо затрагиваю алгоритмы, разве что могу спросить про принцип работы бинарного поиска.
Хорошая подборка алгоритмических задач, по которой можно готовиться, — проект Эйлер.
Если не знаете ответ
Важно помнить, что интервьюер будет повышать уровень сложности вопросов, чтобы упереться в ваши границы — и он так будет делать на каждом новом блоке (python, базы и т.д.), поэтому не нужно переживать, когда вы не знаете ответ. Лучше сразу явно сказать, что не знаете или знаете только в теории. Гораздо хуже, когда кандидат говорит, что что-то знает, но пара точных вопросов ставят его в тупик. Нормально, что вы не ответите на ряд вопросов, так должно быть, не стоит об этом переживать.
Иногда будут вопросы, ответы на которые вы вроде бы знаете, но нужно время, чтобы подумать. А иногда интервьюер может специально задать вопрос, на который нет правильного ответа. В таких случаях лучше рассуждать вслух. Редко когда молчание дольше 10 секунд уместно на собеседовании, кроме случаев, когда вам явно дали время на обдумывание задачи.
Может случиться так, что вы завалите целый блок вопросов, однако не факт, что это будет причиной отказа. Например, моя слабая сторона — это алгоритмы, в этой части я никогда не был хорош на собеседованиях. В одну из компаний у меня была серия интервью, одно из которых было по алгоритмам, и его я практически полностью завалил, однако меня всё равно наняли — затащили софт-скилы и опыт в других вопросах.
Вопросы, чтобы понять, подойдёте ли вы команде
Помимо технических вопросов будет ещё блок о том, насколько ваши ценности, подход к работе, софт-скилы соответствуют компании и вашей будущей позиции — то, что англоязычные эйчары называют «Culture Fit».
Я обычно задаю такие вопросы:
- Расскажите о каком-нибудь большом факапе, который вы совершили?
- Расскажите пример из вашей практики, когда вы успешно решили проблему?
- Как относитесь к ежедневным скрам-митингам?
- Как вы планируете свою работу?
- Вечер воскресенья, вы заходите на сайт веб-сервиса, над которым работаете, а он выдаёт ошибку. Ваши действия?
Вряд ли к этой секции можно подготовиться заранее, ведь здесь речь идёт о ваших моральных и организационных качествах. Но общие рекомендации по ответам в этом блоке такие:
- Не высказывайтесь критично о своих предыдущих работодателях.
- Не высказывайтесь критично о каких-либо технологиях (например, «php — отстой»).
- Будьте открыты, отвечайте честно, даже если вам кажется, что ответ не понравится собеседующему.
И ещё — это не «официальная рекомендация ведущих софтскилогов», а моё личное мнение — прокачать софт-скилы в целом помогают публичные выступления на мероприятиях: вебинарах, хакатонах, конференциях, демо-презентациях. Живые выступления предъявляют к вам кучу требований, начиная с опрятности, дисциплины и навыков выражать свои мысли, заканчивая самим фактом того, что вас пригласили где-то выступить, — это хороший критерий.
Как выступать на публичных мероприятиях — это отдельный навык и тема отдельной статьи, но короткий и 100% рабочий совет — делать больше итераций. Если первые два–три выступления могут оказаться провалом, то на пятый–шестой раз вы вполне можете сорвать овации (или несколько предложений от эйчаров интересных компаний =).
«Делать больше итераций» — это в целом хорошая практика, чтобы прокачаться в собеседованиях, а также лучше узнать рынок, на котором вы работаете.
Ваши вопросы
Обязательно задавайте свои вопросы собеседующим. Спросите про потенциальные задачи, стек, команду, например:
- Каким проектом я буду заниматься?
- В какой команде я буду и в какой роли?
- Какие технологии мне надо будет использовать в работе?
Иногда бывает так, что вас собеседует один человек, а на практике фактическим руководителем окажется другой. Также бывает, что спрашивают про одни технологии, а в вашем проекте используются другие. Мне знаком случай, когда парня гоняли на собеседовании по Python и структурам данных, а потом дали задачи по допиливанию Битрикса. Всё это важно узнать на собеседовании.
Если вам отказали
Если вы получили отказ, попросите фидбек и проработайте его. Потренируйтесь решать задачи, с которыми не справились, подумайте, что вам нужно изучить лучше к другим собеседованиям. Попросите собеседующего или HR посоветовать вам книгу, статью или какой-то материал для дальнейшей прокачки.
Участие в собеседованиях — это навык, которому нужно учиться. И этот навык, как любой другой, нарабатывается с опытом. Вы можете не пройти по скилам, и это нормально, но постарайтесь оставить о себе приятное впечатление и сохранить контакт.
Будет здорово, если поделитесь примерами хороших вопросов и задач, которые вам задавали или которые вы используете сами в своих интервью.