В последнее время мне часто доводилось проводить собеседования по языку Python. Конечно, одно только хорошее знание языка - это не повод брать человека: есть еще знания алгоритмов, навыки проектирования систем, опыт работы с распределенными системами, ну и всякий, казалось бы, булшит, вроде "умения работать в команде" и тому подобные вещи. Но все-таки собеседование по основному языку для кандидата является достаточно важным - если человек не знает языка, на котором пишет большую часть времени - это достаточно странно. И есть основание полагать, что если человек хорошо разбирается хотя бы в одном ЯП, то он сможет за конечное время разобраться и в другом произвольном.
Поскольку кандидатов было несколько и их знания и опыт нужно было как-то сравнивать между собой - я написал список вопросов (даже скорее тем для разговора), которые позволяли бы в полной мере оценить опыт работы с языком. Список начинается с самых простых вопросов и ближе к концу уходит в более высокие материи. В списке ниже нет вопросов, которые бы относились к фреймворкам или базам данных - их всегда можно быстро выучить и освоить, а более фундаментальные знания (работа с HTTP, с базами данных и прочее) определяются в других секциях собеседования.
Итак, сам список тем, надеюсь, он кому-нибудь поможет подготовиться или провести собеседование. Ожидаемые ответы на эти вопросы я не буду публиковать, они легко находятся практически в любой книге о языке, а на последние ответы сами приходят с опытом.
Типы данных в Python:
- Изменяемые типы и неизменяемые.
- Ссылочные и атомарные.
- Как устроены переменные в Python.
- Как работает код вида:
def foo(a=[]): a.append(1) print a foo() foo() foo()
Хэширование:
- Что такое хэш-функция.
- Как определить, что можно хэшировать, а что нет (тут важно, чтобы было понимание отличия между хэшируемостью и неизменяемостью).
Генераторы и итераторы:
- Что такое итератор.
- Что такое генератор.
- Что такое генераторное выражение.
- Чем они отличаются генератор от итератора.
- Когда и как все это добро нужно использовать.
Декораторы:
- Что такое декоратор.
- Зачем нужны декораторы.
- Как написать простой декоратор.
- Как написать декоратор, который замеряет время работы функции.
ООП:
- Инкапсуляция.
- Слоты.
- Метаклассы.
Исключения:
- Что такое исключения.
- Что такое иерархия исключений.
Тестирование:
- Pytest, unittest, nose и их возможности.
Строки:
- Виды строк.
- Юникод и его реализации.
GIL и многопоточность-прогопроцессорность:
- Что такое GIL.
- Как работает GIL.
- Как эффективно параллельно обрабатывать данные на Python.
Менеджеры контекста:
- Что такое менеджер контекста.
- Зачем нужны.
- Как создать свой менеджер контекста.
Асинхронность:
- Что такое асинхронные вызовы?
- Зачем нужна асинхронность и где применима?
- Средства для написания асинхронного кода в Python (Twisted, Tornado, asyncio).
CPython и другие интерпретаторы/компиляторы:
- PyPy, Cython, Jython, Stackless и другие.
CPython и расширения на C/C++:.
- Как создавать.
- Зачем импользовать.
- Как расширения взаимодействуют с GIL.
Python2 и Python3:
- В чем отличия.
- Готов ли Python3 для продакшена (холивар, разумеется).
Comments
comments powered by Disqus