Что нужно python junior
100+ вопросов по Python для Junior, Middle и Senior
Хочешь знать больше о Python?
Подпишись на наш канал о Python в Telegram!
Представляем перевод списка типичных вопросов по Python, которые задают на собеседованиях кандидатам. Этот список собрала редакция сайта DOU.UA, пообщавшись с разработчиками, которые проводят технические собеседования Python-специалистов.
Вопросы для Junior-разработчика
Джуниор должен знать и уметь применять базовые структуры данных и модули, делать простые запросы к базам данных, знать простейшие команды системы контроля версий и тому подобное.
Общее для Computer Science и Web Development:
1. Что такое инженерия и процесс разработки в целом?
2. Какие знаете принципы программирования?
3. Чем отличаются процедурная и объектно-ориентированная парадигмы программирования?
4. Каковы основные принципы ООП (наследование, инкапсуляция, полиморфизм)?
5. Что такое множественное наследование?
6. Назовите шесть этапов разработки продукта в Software Development lifecycle и расскажите, в чем разница между Agile и Kanban.
7. Какие есть методы HTTP-запросов и чем они отличаются друг от друга?
8. Как выглядят HTTP-request/response?
9. Что такое авторизация и как она работает?
10. Что такое cookies?
11. Что такое веб-уязвимость?
12. Какие классические базы данных вы знаете?
13. Как читать спецификацию в конкретном языке (например, PEP8 в Python)?
14. Как происходит взаимодействие клиента и сервера?
15. Какие есть подходы к проектированию API?
16. Как использовать паттерны программирования?
17. Что такое Acceptance Testing и зачем его используют?
18. Что такое модульные и интеграционные тесты, API-тесты?
19. Как писать unit-тесты?
20. Какие есть best practices в написании автотестов?
21. Каковы базовые команды системы контроля версий?
22. Как использовать Git?
23. В чем разница между хешированием и шифрованием?
Python:
24. Python — интерпретируемый язык или компилириуемый?
25. Какие есть изменяемые и неизменяемые типы данных?
26. Что такое область видимости переменных?
27. Что такое introspection?
29. Разница между __init __() и __new__()?
30. В чем разница между потоками и процессами?
31. Какие есть виды импорта?
32. Что такое класс, итератор, генератор?
33. Что такое метаклассы, переменная цикла?
35. Чем отличаются друг от друга staticmethod и classmethod?
36. Как работают декораторы, контекстные менеджеры?
37. Как работают dict comprehension, list comprehension и set comprehension?
38. Можно ли использовать несколько декораторов для одной функции?
39. Можно ли создать декоратор из класса?
40. Какие есть основные популярные пакеты (requests, pytest, etc)?
41. Что такое lambda-функции?
42. Что означает *args, **kwargs и как они используются?
43. Что такое exceptions,
44. Что такое PEP (Python Enhancement Proposal), какие из них вы знаете (PEP 8, PEP 484)?
45. Напишите hello-world сервис, используя один из фреймворков.
46. Какие есть типы данных и в чем разница между list и tuple, зачем они?
47. Как использовать встроенные коллекции (list, set, dictionary)?
48. В чем заключается сложность доступа к элементам dict?
49. Как создается объект в Python, для чего __new__, зачем __init__?
50. Что знаете из модуля collections, какими еще built-in модулями пользовались?
51. Что такое шаблонизатор и как в нем выполнять базовые операции (объединять участки шаблона, выводить дату, выводить данные со стороны сервера)?
52. Как Python работает с HTTP-сервером?
53. Что происходит, когда создается виртуальное окружение?
Базы данных:
54. Каковы базовые методы работы с SQL-базой данных в Python?
55. Что такое SQL-транзакция?
56. Как сделать выборку из SQL-базы с простой агрегацией?
57. Как выглядит запрос, выполняющий JOIN между таблицами и к самим себе?
58. Как отправлять запросы в SQL-базу данных без ORM?
Алгоритмы:
59. Что такое алгоритмы (например, Big-O notation)?
61. Что такое Bubble Sort и как это работает?
62. Что такое линейная сложность сортировки?
Вопросы для Middle-разработчика
Если джуниору все надо подсказывать и помогать, то мидл может самостоятельно взять что-то новое и быстро его изучить и понять. У него накоплено достаточно знаний и опыта, чтобы быстро овладевать новыми. Он может прийти и обсудить что-то с опытным разработчиком, проконсультироваться, но окончательных решений не принимает.
Обычно у мидлов спрашивают:
63. Ориентируетесь ли вы в *nix, можете писать скрипты/автоматизацию для себя и коллег?
64. Что такое многопоточность?
65. Что такое архитектура веб-сервисов?
66. Как работает современное нагруженное веб-приложение (нарисовать и обсудить примерную архитектуру, например, Twitter или Instagram)?
67. Что нужно для сайта/сервиса среднего размера (redis\celery\кэш\логирование\метрики)?
68. Как написать, задеплоить и поддерживать (микро) сервис?
69. Как масштабировать API?
71. Что такое абстрактная фабрика, как ее реализовать и зачем ее применяют?
72. Что такое цикломатическая сложность?
Python:
73. Async Python: как работает, зачем, что под капотом?
74. Сравните асинхронные web-фреймворки.
75. Что такое модель памяти Python?
76. Что такое SQLAlchemy (Core и ORM частей) и какие есть альтернативы?
77. Принципы работы и механизм Garbage collection, reference counting?
78. Как работает thread locals?
79. Что такое _slots_?
80. Как передаются аргументы функций в Python (by value or reference)?
81. Что такое type annotation?
82. Для чего используют нижние подчеркивания в именах классов?
83. Статические анализаторы: Flake8, Pylint, Radon.
Базы данных:
84. Разница между SQL и NoSQL?
85. Как оптимизировать SQL-запросы?
86. Какие есть уровни изоляции транзакций?
87. Какие есть виды индексов?
88. Точечные вопросы по выбору БД, двигателей БД.
89. Front-end: есть ли опыт работы с «современным» JS (Babel, Webpack, TS, ES)?
90. DevOps: работали ли вы с Docker-контейнерами? Объясните основные термины K8s (кластер, pod, node, deployment, service). Что такое Kibana?
91. Алгоритмы: что такое временная сложность алгоритма (time complexity)?
92. Углубленные знания Linux: как зайти на внешний сервер, работать с пакетами, настроить среду и выполнять операции?
93. Специфично для Data Science: как работать с пакетами для обработки и визуализации данных (NumPy, Pandas и другие)?
Вопросы для Senior
На собеседованиях с сеньорами обычно мало говорят о теоретической стороне технологии, больше обсуждают конкретный опыт разработчика. Поэтому формализованных вопросов здесь нет. Однако примером могут быть:
94. Что такое @property?
95. Каким образом можно запустить код на Python параллельно?
96. Как работать с stdlib?
97. Какие задачи решали с помощью метаклассов?
98. Что такое дескрипторы?
99. Знание других языков, кроме Python (опыт).
100. Каковы технологические особенности реализации распределенных систем?
101. Какие есть низкоуровневые особенности языков и фреймворков?
102. Способы и методы управления памятью.
Бонус. практические задания
1. Спроектировать клон Instagram. Это сервис, который понятен практически любому кандидату, даже если у него нет аккаунта. На высоком уровне он очень прост: картинки, описания, комментарии. Поэтому что-то минимальное сможет описать и джуниор. Если кандидат претендует на высокие позиции, можно бесконечно копать вглубь, касаясь API, тротлинга запросов, защиты от фрода, построения фидов пользователя и тому подобное.
2. Дано рекурсивное определение чисел Фибоначчи, надо написать функцию, которая реализует это определение.
3. Есть база данных из трех таблиц — стандартная many-to-many схема. Нужно написать запрос, который объединяет три таблицы и возвращает определенный результат.
4. Дайте ТЗ какого-то полезного микросервиса (сокращалка url-ов, поиск дубликатов картинок, поиск тегов в текстах) или функции (rate limiter). Просим кандидата рассказать, как бы он его реализовал. Это дает возможность узнать, что привык использовать специалист, а также насколько глубоко он знает и понимает различные технологии.
5. Написать какой-нибудь несложный декоратор (выводит аргументы функции на экран или, например, измеряет сколько времени выполнялась функция).
6. Джуниору можно предложить реализовать задачу FizzBuzz test.
7. Для Middle+ я люблю давать несложные задачки на рекурсию. Например, есть вложенный список чисел и нужно что-то на нем посчитать (скажем, найти максимум). Также можно предложить написать аналог deepcopy для конкретной структуры данных (tree, graph).
8. Для сеньора — игра «спроектировать за 5 минут …» Это может быть Google, FB, Twitter, высоконагруженный интернет-магазин, сервис поиска, продажи и бронирования билетов, сайт новостей и тому подобное. Такая задача помогает понять, как кандидат решает проблемы, ход его мыслей, умеет ли отделять главное от второстепенного, понять, какого он типа ( «в глубину» или «в ширину»).
9. Игра «у юзера что-то не работает». На примере спроектированной системы интервьюер придумывает ошибку с «дикими симптомами», которую очень сложно понять и воспроизвести. Но нужно быстро решить проблему.
10. Задание, демонстрирующее знание и понимание list и dict comprehensions.
11. Задача. Есть три функции, в которых выполняются базовые операции (сортировка, фильтрация, возведение массива в квадрат). Нужно упорядочить эти три функции в порядке возрастания времени, идущего на их выполнение.
То есть на входе все функции имеют одинаковые данные, на выходе выдают одинаковый результат. Но из-за того, что внутри операции выполняются в разном порядке, время выполнения будет отличаться. Здесь нужно ориентироваться в алгоритмах и понимать, что происходит с твоими данными в процессе. Эту задачу может решить Junior, а может не решить и Middle. Казалось бы, такая мелочь, но когда мы работаем с большим количеством данных, важно, чтобы код был оптимизирован и программа выполнялась максимально быстро.
12. Простые задачи на статистику или логику. Например, определить угол между стрелками часов, которые показывают 8:40.
Что нужно знать, уметь и понимать, чтобы не иметь проблем с поиском работы питонистом
Язык — лишь малая часть того, что вам нужно знать. Может быть около 5%, а то и меньше.
Эта статья повторяет и дополняет содержание моего выступления «Что отличает джуниора от сеньора или как питонисту не иметь проблем с поиском работы» на последнем MoscowPython Meetup 39. Многие обращались ко мне после выступления с вопросами и я обещал опубликовать статью на Хабре и обсудить в комментариях.
Под катом вы найдете ответ на тему статьи и немного оффтопа. Имейте ввиду, что эта статья написана мной лично, по моему практическому опыту, так как у меня редко когда-либо возникали трудности с поиском работы. Она может отличаться от опыта других людей и я буду очень рад любым дополнениям и исправлениям, если я в чем-нибудь неправ.
Ответы будут чуть ниже
Сперва расскажу о результатах опроса с митапа (если кто был там или слушал трансляцию):
Кто же приходит на митап?
Из поднявших руки примерно по трети — джуниоров, мидов и сеньоров и совсем немного — тимлидов и технических директоров. При этом подняли руки примерно половина и кто остальные — остается загадкой
Есть ли вообще проблема?
Далее на митапе я спрашивал есть ли у присутствующих проблема поиска работы. Для неуверенного большинства проблем нет, но соотношение, на вскидку, примерно 60/40 (из тех кто поднял руки). Так что тема определенно актуальна и статья многим может стать полезной.
Как устроиться работать джуниором?
Это почти самый популярный вопрос, на который я отвечу так: работодатель вряд ли наймёт вас, если вы вообще ничего не знаете и не имеете никакого опыта. Весьма редко работодатели нанимают джуниоров и это зачастую что-то типа экперимента — вдруг поймаем реально таланта, который резко станет мидом, а мы сможем платить ему зп джуниора? Поэтому мой вам совет: не старайтесь устроиться джуниором, а лучше как следует изучите то, что здесь написано и сразу цельтесь в миды. Многие не знают и половины того, что надо и их берут только из-за «опыта» (зачастую бестолкового). Короче не бойтесь и не считайте себя ни на что не способными, вооружайтесь знаниями, практикуйтесь и ничего не бойтесь!
Что нужно знать
Пожалуй, единственное что я настоятельно рекомендую, это освоить какой-нибудь фреймворк и сделать что-нибудь реальное, что можно будет показать. Готовый сайт, пусть даже простой, выложенный на хостинге — это показатель того, что вы освоили каждый из множества небольших шагов на пути.
Что нужно уметь?
Что нужно понимать
Помните, что для работодателя вы — инструмент решения бизнес-задач, которые в будущем должны принести ему выгоду. Поэтому фактически ваша задача на собеседовании убедить его, что платить вам зарплату — выгодное вложение денег. Вас нанимают не по клавиатуре стучать, а генерировать прибыль.
Язык — лишь малая часть того, что вам нужно знать. Может быть около 5% или даже меньше.
Таблица соответствия того, что нужно работодателю и как вы можете ему с этим помочь
Мечта работодателя | Что от вас требуется |
---|---|
делегирование — поставил задачу и её сделали правильно без твоего участия | не боитесь брать на себя ответственность и достаточно компетентны |
скорость разработки (основное преимущество питона) | владеете языком, знаете сторонние библиотеки и понимаете, что скорость разработки очень важна |
надежность системы | тэстирование собственного кода насколько это возможно или требуется |
поддерживаемость (еще одно преимущество синтаксиса и рекомендаций питона) | знакомство с гайдлайнами (pep, import this) и по возможности следование им |
эффективность системы | знакомство со свежими технологиями, библиотеками и другими приложениями |
эффективность разработчика | заинтересованы в проекте. Тут я советую действительно выбирать проекты, которые интересны. |
предсказуемость, возможность планирования | ваши планы на ближайший год ясны |
Интересно что он ей такое сказал на самом деле?
Советы
Помимо собеседований рекомендую играть в мафию (только не по турнирным правилам, а таким, когда возможна дискуссия, но чтобы без балагана — это очень круто тренирует нервы и навык общения), ходите на хакатоны, митапы, конференции. Не пропустите, кстати, Moscow Conf, такие конференции даже не каждый год бывают — это вам не митап двухчасовой, а реально можно за день наобщаться с опытными ребятами, позадавать вопросы спикерам.
UPD: В комментариях выразили мнение, что эта статья относится только к веб-разработке на питоне. Это не совсем так, просто веб-фреймворк Django, который я советую к изучению является самым востребованным на данный момент в чем легко можно убедиться. Вы можете запросто выбрать другое направление и большая часть статьи так же останется актуальной, но легко ли вам будет найти работу — я не знаю. Более того, совет про изучение других популярных библиотек именно на то и нацелен, чтобы вы не ограничивались только лишь Django и расширяли свои знания по другим направлениям.
Буду бесконечно признателен за любые дополнения и постараюсь оперативно добавлять их в статью! Про орфографию пишите, пожалуйста, в личку, чтобы не засорять комментарии.
Что должен знать разработчик на Python без опыта?
Язык программирования Python является одним из наиболее популярных и востребованных. Освоить его относительно просто, плюс на рынке труда вакансий очень много: те же сайты HH или Rabota предлагают сотни вакансий. Если же вспомнить, что Python разработчик получает зарплату в районе 70 000 — 300 000 рублей (особенно высока зарплата в Москве и Санкт-Петербурге), то становится понятно, что игра стоит свеч. Однако в реальности все зависит от опыта, и до такого заработка еще надо «дорасти». Но, как и любой генерал когда-то был простым солдатом, так и любой Senior-программист когда-то был джуниором или стажером. В этой статье мы рассмотрим, что требуют современные работодатели на собеседованиях у начинающих программистов на Python.
Какое должно быть образование?
В большинстве случаев резюме на позицию джуниора подают выпускники университетов либо студенты 4-5 курсов технических специальностей. Важны и соответствующие курсы, пройденные как очно, так и онлайн. Это могут быть курсы от Otus, Stepic, Coursera и т. п. В данном случае речь идет о получении дополнительного профильного образования, а образования много не бывает.
Когда цель соискателя — получить работу разработчика Python в сфере Data Science, пригодятся хорошие знания математики, опыт выступления на конференциях, магистерская степень либо аспирантура, а также наличие авторских научно-технических публикаций.
Однако работодатели могут взять на позицию Джуниора не только разработчика программного обеспечения без опыта, но и программиста без высшего образования — такие случаи бывают. Но следует учесть, что для этих кандидатов возможно проведение дополнительных испытаний.
Чтобы получить работу, нужен опыт, чтобы получить опыт, нужна работа
Тот, кто имеет опыт неудачных собеседований при попытке попасть в IT, хорошо знает, как непросто бывает прорваться в эту сферу. Что уж греха таить — попадание в IT для многих становится счастливым билетом в более качественную жизнь, где зарплата высока, социальный пакет приятен, а ежегодный отпуск в теплые страны находится в порядке вещей. Следовательно, желающих с каждым годом становится все больше, в результате чего растут требования к соискателям, причем растут гораздо быстрее, чем заработная плата. Некоторые утверждают, что современный джун должен иметь знания на уровне мидла 10-летней давности.
Очень часто, когда ищут специалистов без опыта, работодатели все же слегка лукавят. К примеру, они требуют, чтобы вы имели опыт от полугода или, по меньшей мере, чтобы за вашими плечами была стажировка в ИТ-компании (то, что вы должны иметь за плечами пройденные курсы, даже не обсуждается — это уже давно из серии «must have»).
Но что делать, если образование есть, знания есть, сертификат после курсов есть, а вот опыта нет от слова совсем? В таком случае вы должны иметь в своем активе какие-нибудь завершенные личные либо учебные проекты. Такие проекты весьма важны, т. к. работодатель на их основании сможет сделать вывод о вашей реальной заинтересованности в предметной сфере и о вашей стремлении к развитию. Поэтому:
— будьте готовы опубликовать свои проекты на GitHub или на личном сайте-портфолио;
— будьте готовы рассказать на собеседовании, какая задача стояла, какие технологии вы выбрали, почему именно их и т. д.
Важно помнить, что дополнительные проекты не только выделят вас из толпы соискателей, но и позволят дополнительно прокачать собственные навыки разработки на Python.
Какие soft skills особенно важны?
При работе на реальном проекте программисту Python недостаточно иметь необходимые технические навыки и уметь решать поставленные задачи. Не менее важны различные социальные и личностные качества:
— умение коммуницировать с людьми;
— умение работать в команде;
— стремление к профессиональному росту;
— повышенное чувство ответственности;
— умение управлять своим рабочим временем.
Все это — базовые soft skills, необходимые почти на любой должности в сфере IT.
Если речь идет о кандидате без опыта, претендующего на позицию джуниора, то тут можно сделать акцент на следующих навыках:
— умение быстро осваивать много нового материала, способность учиться;
— умение вникать в суть поставленных задач;
— умение быстро схватывать, что от тебя хотят;
— отсутствие страха перед рутинными задачами.
На собеседовании могут спросить об отношении соискателя к рутинным задачам, и это неспроста, т. к. работа нередко включает в себя монотонные процессы. Задавая этот вопрос, работодатель просто желает убедиться, что на вас стоит тратить время, то есть вы не заскучаете через 2 месяца и не сбежите, т. к. «неинтересно». Идеальный ответ — что-то вроде: «Сейчас такие задачи для меня — это реальная возможность получить опыт и отработать свои навыки. В перспективе этот опыт позволит мне справляться с более сложными задачами».
Также могут спросить, по какой причине вы желаете работать именно в этой компании, именно на этом проекте, именно на этой должности. Чтобы высказать искреннюю заинтересованность и произвести наиболее благоприятное впечатление, желательно заранее изучить:
— будущие задачи, проекты, продукты;
— особенности компании, ее корпоративную культуру;
— условия работы и т. п.
Выберите, что для вас действительно важно. Неплохие ответы звучат так:
— «В вашей компании я смогу полностью реализовать свои компетенции и получить ценный опыт»;
— «Моя кандидатура прекрасно подходит под ваши требования, так как я владею следующими техническими навыками…»
Какие технические навыки нужны?
Самое главное — это знание языка программирования Python и умение писать на нем код. Порой требуются разработчики (developers), которые имеют базовые навыки программирования и на других языках: C++, Java, Golang и т. п.
Обычно на собеседованиях проверяют еще и общую IT-грамотность. Вы должны знать, как работает компьютер и программные приложения (мобильные, десктопные), как функционирует интернет, иметь понимание работы сетей передачи данных, разбираться в алгоритмах и структурах данных. Вдобавок к этому, желательно:
— уметь работать с базами данных;
— знать фреймворки (хотя бы общее понимание должно присутствовать);
— понимать принципы асинхронного и многопоточного программирования;
— уметь работать в командной строке, иметь начальные навыки системного администрирования (простейшие команды в Linux не должны вас пугать).
Если речь идет о брендовой компании, то собеседование делится на несколько этапов, на каждом из которых проверяется определенный пул навыков, в результате чего отбираются лучшие.
Иногда разработчика Python ищут под задачи Machine learning. Когда речь идет об отборе Data Science-специалиста, дополнительно проверяются знания алгоритмов машинного обучения. Соискатель должен уметь их применять, идеально, если он участвовал в хакатонах или Kaggle-соревнованиях по Python. Не обойтись и без математики: не должны вызывать затруднений ни теория вероятности, ни линейная алгебра, ни математический анализ.
Что повторить?
Ниже представлен краткий список того, что нужно повторить перед собеседованием:
Подытожив, скажем, что далеко не всегда на собеседовании будут задавать вопросы из всех вышеперечисленных разделов. Но важно понимать, что от кандидата на позицию Junior Developer ждут, если не досконального знания, то хотя бы общего понимания сути описанных процессов. Вдобавок к этому, всегда смотрят, в правильном ли направлении вы мыслите, пытаясь ответить на неизвестный вопрос. И чем более подготовленным будет соискатель, тем больше шансов получить работу разработчика на Python — работу, которая по мере накопления знаний станет для вас действительно высокооплачиваемой.
Примеры вакансий разработчиков на Python можно посмотреть на Jobsora.