Содержание
Памятка: что должен знать и уметь Python Junior
- Уверенно знать синтаксис Python и базовые конструкции.
- Понимать принципы ООП (классы, наследование, инкапсуляция).
- Уметь работать с Git (commit, push, pull, ветки).
- Знать основы SQL и уметь писать SELECT, JOIN, GROUP BY.
- Иметь опыт работы с хотя бы одним веб-фреймворком (Django/Flask).
- Понимать REST API и уметь отправлять/принимать HTTP-запросы.
- Уметь читать чужой код и разбираться в документации.
- Знать базовые алгоритмы и структуры данных.
- Уметь работать с виртуальным окружением и пакетами (pip).
- Иметь хотя бы один завершенный проект в портфолио.
- Понимать основы HTML/CSS для работы с шаблонами.
- Уметь задавать вопросы и не бояться признавать пробелы в знаниях.
Какие знания нужны для Python Junior-а?
Составляю план на год. Начал изучать Python. Что ещё понадобиться, что бы удаленно работать без запинки уже.
Максим Чернятевич: Имеется ввиду компьютеры вообще? Ну железо собрать/разобрать могу.
Общее по Computer Science и Web Development:
3. Чем отличаются процедурная и объектов-ориентированная парадигмы программирования?
6. Какие есть шесть этапов разработки продукта в Software Development lifecycle и какая разница между Agile и Kanban?
Python:
50. Что знаете из модуля collections, какими еще built-in модулями пользовались?
51. Что такое шаблонизатор и как в нем выполнять базовые операции (объединять участки шаблона, выводить дату, выводить данные с серверной стороны)?
Что стоит знать junior developer’y (python)
Я тут в комментах предложил написать список того, что следует знать джуну-питонисту, ходя на собеседования. Получилось обширно, решил сделать пост. Сам я пишу под django, но его в этом посте не затрагиваю.
Организационная подготовка
Изучите детальнее компанию, в которую собираетесь устраиваться. Всегда приятно впечатляет, когда человек провёл домашнюю работу, разузнал про компанию и принёс с собой что-то полезное на собеседование. Это может быть список ошибок и возможных улучшений для сайта, предложения по улучшению ПО или неточность в тексте вакансии.
Естественно, говорить про это нужно доброжелательно. Ваша цель — показать, что вы внимательно относитесь к компании и стремитесь её улучшить, как если бы уже были её сотрудником (я надеюсь, что такое намерение у вас действительно есть, иначе зачем всё это?)
Про это много раз сказано, но повторю. Если собеседование планируется онлайн, убедитесь, что у вас хороший интернет, что вы не будете в гостях, что к вам не должен прийти курьер или водопроводчик.
Протестируйте заранее программу, в которой будет проходить собеседование.
Если собеседование проходит в офисе, убедитесь, что знаете, как доехать до места, и заложите побольше времени, чтобы не пришлось спешить и нервничать.
Техническая подготовка
Предполагаю, что писать на Python вы уже умеете. Но рекомендую перед собеседованием повторить основные моменты:
Таблица №1
| Тема | Примеры вопросов для джуниор-разработчиков | Примеры вопросов для мидл-разработчиков |
| 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? |
При подготовке рекомендую посмотреть неплохую подборку из 300 вопросов собеседований на Гитхабе.
Рассказ о себе
В начале традиционно вас попросят рассказать о себе. Нужно будет рассказать о своём образовании, релевантном компании опыте, о проектах, в которых вы участвовали. Если таких проектов нет, стоит что-нибудь сделать хотя бы в учебных целях.
Тут рекомендация простая: подготовьте и потренируйте рассказ заранее, чтобы не забыть ничего важного из-за волнения.
Техническая часть собеседования
Иногда это просто теоретические вопросы подряд из серии тех, что показаны в примерах выше. Иногда (и я сейчас чаще предпочитаю такой вариант) вас попросят подробнее рассказать, как устроен ваш проект во всех деталях, начиная от технического стека, устройства базы и заканчивая методами деплоя и работы на продакшене. Если такого проекта у вас нет, могут попросить рассказать, как бы вы его делали.
Написать параметризированный декоратор, который печатает время выполнения декорированной функции. Параметр декоратора — печатать время выполнения в секундах или в миллисекундах.
Тут я рассчитываю услышать про parent_id, materialized path и, особенно круто, про nested sets. Естественно, важно, чтобы кандидат знал (или придумал на собеседовании) суть этих подходов, а не их правильные названия.
У вас в базе данных есть список сотрудников. Нужно отдавать его в API фронтенду постранично. Какой API реализуете?
Решение этих задач обычно помогает понять уровень кандидата — джун перед вами или более-менее уверенный мидл.
В компаниях уровня FAANG (Facebook, Apple, Amazon, Netflix, Google), а также в российских ИТ-гигантах (Яндекс, Рамблер, Мейл) обычно есть секция про алгоритмы, в остальных компаниях это зависит от позиции и предпочтений интервьюера. Я, когда собеседую на позицию «делать веб-проекты на Django», обычно не особо затрагиваю алгоритмы, разве что могу спросить про принцип работы бинарного поиска.
Хорошая подборка алгоритмических задач, по которой можно готовиться, — проект Эйлер.
Важно помнить, что интервьюер будет повышать уровень сложности вопросов, чтобы упереться в ваши границы — и он так будет делать на каждом новом блоке (python, базы и т.д.), поэтому не нужно переживать, когда вы не знаете ответ. Лучше сразу явно сказать, что не знаете или знаете только в теории. Гораздо хуже, когда кандидат говорит, что что-то знает, но пара точных вопросов ставят его в тупик. Нормально, что вы не ответите на ряд вопросов, так должно быть, не стоит об этом переживать.
Иногда будут вопросы, ответы на которые вы вроде бы знаете, но нужно время, чтобы подумать. А иногда интервьюер может специально задать вопрос, на который нет правильного ответа. В таких случаях лучше рассуждать вслух. Редко когда молчание дольше 10 секунд уместно на собеседовании, кроме случаев, когда вам явно дали время на обдумывание задачи.
Может случиться так, что вы завалите целый блок вопросов, однако не факт, что это будет причиной отказа. Например, моя слабая сторона — это алгоритмы, в этой части я никогда не был хорош на собеседованиях. В одну из компаний у меня была серия интервью, одно из которых было по алгоритмам, и его я практически полностью завалил, однако меня всё равно наняли — затащили софт-скилы и опыт в других вопросах.
Первый день джуном (и последний)
Всем привет, хочу поделиться своим первым опытом на позиции Junior программиста.Пишет на днях HR: «Мы заинтересовались в вашем резюме, приходите на собеседование». Ну ок, заинтересовались и хорошо. Пришел. Вопросы были общие, немного по технологиям которые я использовал, по ЯП и что делал или умею делать, к слову опыта и пэт-проектов у меня нету. На собеседованиях, до этого, я был от силы пару раз. Длилось оно 45 минут, и оказалось это не так страшно как я думал. Удивительно то что в вакансии было указано только знание алгоритмов, структур данных и ЯП. Ну да ладно. Через пару дней пришел фидбэк и пообщавшись с работодателем я согласился на стажировку/испытательный срок (trainee), которые должны длиться 2-4 недели. А теперь собственно то что меня сподвигло написать данный пост.
Человек который писал проект до меня (а писал это точно не джун) уволен, проект, на сколько я понял, никто кроме него не знает. И весь мой первый день состоял в том что я сидел, читал документацию и читал про эти технологии. К слову документации на весь проект 100 строк и примерно столько же строк комментов в коде, всего кода в проекте 14000 строк. Возможно мне не показалось бы это таким сложным при наличии менторства, но его не было. Я имею представление о 30% от стэка технологий (который естественно на собеседование никто мне не сообщил). Так что вечером, после этого всего, подумал и решил, что больше туда не вернусь. Действительно ли джуны и стажеры должны заниматься такими вещами или мне просто «повезло»?
Супер-недо Junior Python или история о переквалификации
Итак, доброго вам времени суток, усаживайтесь по удобнее, мы начинаем.
В посте будет описана попытка переквалификации из одной сферы в другую, разобрано что сделано, что находится в работе и какие сложности лично я испытываю в таких условиях.
Сначала будет минутка истории. Представьте самого обычного среднестатистического человека. У него нет высшего образования (бросил/выгнали/нет денег/не сложилось), работает на работе, приходит домой, кормит кошку.
Сначала я пошёл в интернеты и узнал, что такой язык программирования есть (уже маленький успех). Нашёл гайды, мануалы и начал читать. И сразу стоп.
Я начал проходить курс, решать задачи поставленные в нём и иногда проводил супер много времени за этим занятием.
Бонус. Практические задания
1. Спроектировать клон Instagram. Это сервис, который понятен практически любому кандидату, даже если у него нет аккаунта. На высоком уровне он очень прост: картинки, описания, комментарии. Поэтому что-то минимальное сможет описать и джуниор. Если кандидат претендует на высшие позиции, можно бесконечно копать вглубь, касаясь API, тротлинга запросов, защиты от фрода, построения фидов пользователя и тому подобное.
2. Дано рекурсивное определение чисел Фибоначчи, надо написать функцию, которая реализует это определение.
3. Есть база данных из трех таблиц — стандартная many-to-many схема. Нужно написать запрос, который объединяет три таблицы и возвращает определенный результат.
4. Даем ТЗ какого-то полезного микросервиса (сокращалка url-ов, поиск дубликатов картинок, поиск тегов в текстах) или функции (rate limiter). Просим кандидата рассказать, как бы он его реализовал. Это дает возможность узнать, что привык использовать специалист, насколько глубоко он знает и понимает различные технологии.
5. Написать какой-то несложный декоратор (выводит аргументы функции на экран или, например, измеряет сколько времени выполнялась функция).
7. Для Middle+ я люблю давать несложные задачки на рекурсию. Например, есть вложенный список чисел и нужно что-то на нем посчитать (скажем, найти максимум). Также, можно предложить написать аналог deepcopy для конкретной структуры данных (tree, graph).
9. Игра «у юзера что-то не работает». На примере спроектированной системы собеседователь придумывает ошибку с «дикими симптомами», которую очень сложно понять, воспроизвести. Но нужно быстро решить проблему.
10. Задание, которое демонстрирует знание и понимание list и dict comprehensions.
12. Простые задачи на статистику или логику. Например, определить угол между стрелками часов, которые показывают 8:40.
Если вам отказали
Если вы получили отказ, попросите фидбек и проработайте его. Потренируйтесь решать задачи, с которыми не справились, подумайте, что вам нужно изучить лучше к другим собеседованиям. Попросите собеседующего или HR посоветовать вам книгу, статью или какой-то материал для дальнейшей прокачки.
Участие в собеседованиях — это навык, которому нужно учиться. И этот навык, как любой другой, нарабатывается с опытом. Вы можете не пройти по скилам, и это нормально, но постарайтесь оставить о себе приятное впечатление и сохранить контакт.
Будет здорово, если поделитесь примерами хороших вопросов и задач, которые вам задавали или которые вы используете сами в своих интервью.
Часто задаваемые вопросы о навыках Python Junior
Вопрос: Какие базовые знания Python нужны для Junior?
Ответ: Junior должен уверенно владеть синтаксисом, типами данных, циклами, функциями, ООП и основами работы с файлами.
Вопрос: Нужно ли знать фреймворки для старта?
Ответ: Да, обычно требуется знание Django или Flask, а также понимание REST API и работы с базами данных.
Вопрос: Обязательно ли знать алгоритмы и структуры данных?
Ответ: Да, базовые алгоритмы (сортировка, поиск) и структуры (списки, словари, множества) часто проверяют на собеседованиях.
Вопрос: Что такое Computer Science для Junior?
Ответ: Это понимание основ: ОС, сети, базы данных, Git, базовые принципы работы веба.
Вопрос: Нужно ли уметь работать с базами данных?
Ответ: Да, Junior должен знать SQL, уметь писать простые запросы и понимать ORM.
Вопрос: Какие soft skills важны для Junior?
Ответ: Умение задавать вопросы, работать в команде, читать чужой код и воспринимать критику.
Вопрос: Сколько времени нужно на подготовку к позиции Junior?
Ответ: В среднем от 6 до 12 месяцев интенсивного обучения с практикой.
Вопрос: Что делать, если отказали на собеседовании?
Ответ: Проанализировать ошибки, подтянуть слабые места и продолжать отправлять резюме.
Вопрос: Нужен ли английский язык?
Ответ: Да, хотя бы на уровне чтения документации и написания комментариев.
Вопрос: Какие проекты лучше показать в портфолио?
Ответ: Любые законченные проекты: телеграм-бот, веб-приложение, парсер или автоматизация задач.























