Безусловно, от программирования нужно получать свой кайф. Если вам не интересно заниматься тем, что вы делаете, наверное, это дело лучше бросить. Однако, было бы неплохо конвертировать ваш кайф в какую-нибудь валюту. Даже желательно бы не в православный рубль, а басурманский доллар. Поэтому сегодня обсудим вопросы, которые задают на собеседованиях Python-разработчику и как в целом подготовиться к любому такому собеседованию. Текст написал автор YouTube-канала PyLounge Макс. Поехали!

Условно мы разделим сегодняшний разговор на 2 уровня. Первый уровень это junior/middle, а 2 уровень это senior. Почему так? Требования сильно варьируются от компании к компании. Одна фирма может предъявлять джуну требования крепкого мидла, а другую мидл со знаниями не шибко хорошего джуна вполне устроит. Поэтому ступень junior/middle объединяем. А вот о сениорах поговорим отдельно.

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

Во-первых, не важно junior вы или middle. На любом собеседовании будут вопросы, касающиеся базовых основ языка и каких-то его фишек, которыми этот язык примечателен, какие сразу бросаются в глаза, либо вообще уникальные именно для этого языка. Например, в случае с Python практически на любом собеседовании спрашивают:

  • что такое итераторы и генераторы, и в чём их разница;

  • зачем нужны декораторы и как написать хотя бы простенький декоратор;

  • что такое аргс и кваргс (*args и **kwargs);

  • что такое менеджеры контекста;

  • какие типы данных есть в питоне, какие из них изменяемые и неизменяемые.

  • что такое метаклассы и магические методы.

Существуют и более тонкие вопросы, которые относятся к специфике языка на позиции постарше, например:

  • Method Resolution Order;

  • PEP;

  • Async и корутины;

  • Type annotation , GIL и т.д. Принцип вы поняли. 

Естественно, вопросы могут варьироваться, какие-то будут мелькать чаще, какие-то реже. Однако вопрос про генераторы будет попадаться в 95% случаев. Потому что это – элемент языка за который цепляется глаз. То есть, чтобы подготовиться к вопросам непосредственно по языку, нужно обратить внимание именно на примечательные моменты. Ну и без базы, как, например, типы данных, естественно, тоже никуда.

Во-вторых, это общее знание Computer Science и всяких тем, связанных с программирование в целом, а не с конкретным языком.

Это, например, понимание того:

  • что такое ООП и классы;

  • наследование, множественное наследование;

  • алгоритмы и структуры данных (куда без них).

И чем выше уровень, тем возможно больше требования. Но раз на раз не приходится. Как минимум, про Большое О, список и 1-2 алгоритма сортировки знать стоит.

Так же не будет лишним знать:

  • парадигмы программирования;

  • основы баз данных, SQL;

  • что такое SOLID, DRY, KISS;

  • паттерны проектирования и тому подобное.

То, насколько подобные вопросы буду заводить в дебри зависит от требований работодателя. Иногда вопросы могут формулироваться так, что правильного ответа на него нет. Это своего рода открытый вопрос, нацеленный на то, чтобы послушать рассуждения и ход мыслей подсудимого. Например, вопрос о том, «Считаете ли вы, что распространение ООП – это круто? Если да, то почему?» И другие из этой оперы.

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

Третий пласт вопросов – это вопросы из специфики предметной области, в которой вы хотите работать. Например, общие вопросы этой сферы и более узкие, связанные с тем, как выбранный язык программирования взаимодействует с этой сферой. Например, если вы хотите работать Python Web-разработчиком, заниматься бекендом, стоит ожидать общие вопросы из разряда:

  • как устроен Web в целом, API;

  • что за звери такие HTTP, TCP, DNS, хост;

  • что такое REST API;

  • какие-то архитектурные решения по типу MVC, SOA;

  • про многопоточность, асинхронность;

  • базовые вещи из HTML, CSS, JS и т.д.

То есть всё связанно с тематикой или около того.

Вопросы, отражающие связь Python с выбранной областью (web в нашем случае) могут быть, например, такие:

  • вопросы по популярным веб фреймворкам Django, Flask, aiohttp;

  • что такое DjangoRESTFramework;

  • как отправить запрос GET/PUT и т.д.

Образно, если вы метите в Data Science стоит ожидать вопросов по sklearn и методам оптимизации и т.д. Думаю, тут понятно.

Четвёртая остановочка – это вопросы по технологиям, которыми пользуется компания или которыми, возможно, пользовались вы. И как это не странно, тут всё зависит от того, чем пользуется компания. Соответственно от этого и будет зависеть то, что придётся использовать вам. Если компания в качестве основной базы данных использует MongoDB, то ожидайте вопросов из этой области. Все сидят на Linux? – Значит и вы должны уметь хоть немного им пользоваться. Много кэшируют по вечерам? – Здравствуйте Redis! Если фирма жить не может без Jenkins – будьте добры хотя бы примерно представлять, что это. В общем, это вопрос очень открытый, нужно смотреть непосредственно в вакансиях. Если вы сами использовали те или иные технологии в своих проектах, о них тоже можно рассказать. Таким образом можно дать понять, что вы, оказывается, что-то умеете. Итак, с джуниор-мидлами закончили. Переходим к сеньорам.

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

И напоследок пару советов. Не стоит приукрашивать своих способностей. Если вы в резюме написали, что знаете VueJS, то не будет неожиданностью налететь на вопрос по Vue. Старайтесь рассказать о том, чем вы занимались, возможно о каких-то домашних проектах. Что использовали, как и зачем, какие сложности были и как вы их решили. Ну и хорошо причёсанное портфолио на GitHub лишним не будет. И держитесь увереннее. Это важно.


На самом деле проходить собеседования - это навык, который тоже нарабатывается. Нет ничего смертельно в том, чтобы провалить пару-тройку интервью. Отрицательный результат - тоже результат. Заваленные собесы укажут на ваши слабые стороны и раскроют пробелы в знаниях. Это всё поправимо. Главное не бояться и уже начать собеседоваться, идеальный момент не наступит не когда. Дерзай!

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


  1. Odnokletochnoe
    23.11.2022 09:25
    +2

    Прошу прощения, но "В принципе – раскрываю лайфхак, как подготовиться к абсолютно любому собеседованию и тд гуглится за 2 секунды.)


  1. Yuribtr
    23.11.2022 10:14
    +2

    Поэтому ступень junior/middle объединяем. А вот о сениорах поговорим отдельно

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

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


  1. dimas846
    23.11.2022 10:19
    +3

    В данной статье слово Python можно смело поменять на любой другой язык.


  1. useful_citizen
    23.11.2022 17:08

    Норм статья, 7 человек в закладки добавили, а лайк только 1 (мой).

    Картинка только пугает. Я этот фильм смотрел и не хочу чтобы меня лицом об стол били 0_0


    1. red_dragon
      24.11.2022 14:18
      +1

      Сильно подозреваю, что некоторые люди добавляют в закладки на потом. Заголовок заинтересовал, а читать некогда пока, например.


  1. Pfinash
    23.11.2022 17:08

    Очень полезная статья! (нет)

    Все это выясняется джуном опытным путем на 2ом - 3ем собеседовании. А мидл/сеньоры итак в курсе.