DateTagsPython

В последнее время мне часто доводилось проводить собеседования по языку Python. Конечно, одно только хорошее знание языка - это не повод брать человека: есть еще знания алгоритмов, навыки проектирования систем, опыт работы с распределенными системами, ну и всякий, казалось бы, булшит, вроде "умения работать в команде" и тому подобные вещи. Но все-таки собеседование по основному языку для кандидата является достаточно важным - если человек не знает языка, на котором пишет большую часть времени - это достаточно странно. И есть основание полагать, что если человек хорошо разбирается хотя бы в одном ЯП, то он сможет за конечное время разобраться и в другом произвольном.

Поскольку кандидатов было несколько и их знания и опыт нужно было как-то сравнивать между собой - я написал список вопросов (даже скорее тем для разговора), которые позволяли бы в полной мере оценить опыт работы с языком. Список начинается с самых простых вопросов и ближе к концу уходит в более высокие материи. В списке ниже нет вопросов, которые бы относились к фреймворкам или базам данных - их всегда можно быстро выучить и освоить, а более фундаментальные знания (работа с HTTP, с базами данных и прочее) определяются в других секциях собеседования.

Итак, сам список тем, надеюсь, он кому-нибудь поможет подготовиться или провести собеседование. Ожидаемые ответы на эти вопросы я не буду публиковать, они легко находятся практически в любой книге о языке, а на последние ответы сами приходят с опытом.

  1. Типы данных в Python:

    • Изменяемые типы и неизменяемые.
    • Ссылочные и атомарные.
    • Как устроены переменные в Python.
    • Как работает код вида:
      def foo(a=[]):
          a.append(1)
          print a
      
      foo()
      foo()
      foo()
      
  2. Хэширование:

    • Что такое хэш-функция.
    • Как определить, что можно хэшировать, а что нет (тут важно, чтобы было понимание отличия между хэшируемостью и неизменяемостью).
  3. Генераторы и итераторы:

    • Что такое итератор.
    • Что такое генератор.
    • Что такое генераторное выражение.
    • Чем они отличаются генератор от итератора.
    • Когда и как все это добро нужно использовать.
  4. Декораторы:

    • Что такое декоратор.
    • Зачем нужны декораторы.
    • Как написать простой декоратор.
    • Как написать декоратор, который замеряет время работы функции.
  5. ООП:

    • Инкапсуляция.
    • Слоты.
    • Метаклассы.
  6. Исключения:

    • Что такое исключения.
    • Что такое иерархия исключений.
  7. Тестирование:

    • Pytest, unittest, nose и их возможности.
  8. Строки:

    • Виды строк.
    • Юникод и его реализации.
  9. GIL и многопоточность-прогопроцессорность:

    • Что такое GIL.
    • Как работает GIL.
    • Как эффективно параллельно обрабатывать данные на Python.
  10. Менеджеры контекста:

    • Что такое менеджер контекста.
    • Зачем нужны.
    • Как создать свой менеджер контекста.
  11. Асинхронность:

    • Что такое асинхронные вызовы?
    • Зачем нужна асинхронность и где применима?
    • Средства для написания асинхронного кода в Python (Twisted, Tornado, asyncio).
  12. CPython и другие интерпретаторы/компиляторы:

    • PyPy, Cython, Jython, Stackless и другие.
  13. CPython и расширения на C/C++:.

    • Как создавать.
    • Зачем импользовать.
    • Как расширения взаимодействуют с GIL.
  14. Python2 и Python3:

    • В чем отличия.
    • Готов ли Python3 для продакшена (холивар, разумеется).

Comments

comments powered by Disqus