Формат проведения собеседований
Список терминов:
- Кандидат - человек который проходит собеседование, претендуя на рабочее место в компании tltpro.
Цели собеседования
-
Определить соответствие фактических навыков кандидата относительно заявленных (например в резюме)
-
Определить (в абсолютном выражении) фактические навыки кандидата
-
Определить адекватность (вшивость) кандидата
-
Определить, подходит ли кандидат нашей компании
План проведения собеседования
Поздороваться
Спросить имя, представиться
Попросить выключить камеру
Кандидаты очень часто на "опережение" включают web камеру. Мы online компания, дня нас внешний вид кандидатов не важен.
Убедиться в том, что кандидат находиться за компьютером и может включить демонстрацию экрана
Это потребуется далее. Если таковых возможностей нет, необходимо оповестить об этом кандидата и договориться о переносе собеседования
Включить запись
Необходимо спросить у кандидата, согласен ли он на то, что собеседование будет записано. Важно упомянуть, что записи собеседований хранятся внутри компании, доступны только руководителям отделов (их замам и руководству) и не могут/будут выложены в открытый доступ.
Если кандидат не согласен проходить собеседование с включённой записью - необходимо сообщить кандидату, что, в таком случае, к сожалению, собеседование не может быть произведено и завершить собеседование.
Расспросить про опыт работы
Кандидаты как правило имеют коммерческий и некоммерческий опыт работы. Нас интересует коммерческий, однако в его отсутствие необходимо узнать некоммерческий в формате:
Общие данные:
-
лет в разработке всего
-
используемые технологии
Коммерческий опыт:
-
(для каждой компании)
-
Где работал?
-
Сколько работал?
-
Что делали?
Некоммерческий опыт:
Просто слушаем рассказ, по желанию задаём вопросы
объявить, что кандидат может пользоваться любыми инструментами для написания кода
Однако стоит заметить, что объяснять код кандидат должен самостоятельно: показывать на ответ со stackoverflow или chatGPT со словами "вот ответ на твой вопрос" - явный признак того, что кандидат нам не подходит, так как не умеет/не хочет понимать материал
Попросить включить демонстрацию экрана
Именно экрана, не приложения. Если кандидат включает демонстрацию окна кодового редактора - значит он от вас хочет что-то скрыть, например отсутствие навыка поиска информации. По демонстрации экрана мы можем наблюдать за процессом написания кода, процессом поиска информации и задавать разные вопросы.
Попросить открыть редактор кода
Любой, хоть notepad++
задать вопросы по фундаментальным основам python
Функциональное программирование и его особенности на python
Задача:
"Объяснить функциональное программирование и его особенности на python на примере 2х-3х функций"
Критерии оценки:
-
К1.1 (1б) Кандидат упомянул, что функциональное программирование нужно для улучшения читаемости и лучшей организации (модульности) структуры кода
-
К1.2 (1б) Кандидат упомянул, что функциональное программирование нужно для сокращения повторов в коде
-
К1.3 (5б) Кандидат упомянул, что функциональное программирование нужно для создания и/или использования generic функций (функций общего назначения, то есть функций, обеспечивающих общую логику для разных типов данных, например функция сложения двух чисел может сложить два int, два float, и тд. без изменения структуры кода)
-
К1.4 (3б) Кандидат верно использует аннотации типов для всех аргументов функций и возвращаемых значений / (1б) Кандидат частично использует аннотации типов для аргументов функций и возвращаемых значений или часть аннотации типов неверны
-
К1.5 (3б) Кандидат понимает принципы импортирования модулей в python: кандидат использует логическую конструкцию
if __name__=="__main__"
для запуска главной функции -
К1.6 (5б) Кандидат понимает принцип работы ссылок на объекты в python (изменяемые и не изменяемые объекты): переменная (имя) - это ссылка на объект, ссылок может быть условно неограниченное количество. Если создать объект (например, список) в одной функции (внутри текущей) и передать его в другую функцию (sub'функцию), вызвав её внутри текущей , то, при изменении состояния объекта в sub'функции, в не зависимости от результата её выполнения, состояние объекта изменится и в основной функции (так как обе функции имеют ссылки на один и тот же объект)
Декораторы - основы основ
Задача:
"Рассказать, что такое декоратор в python. Написать самый простой декоратор и продекорировать им функцию. Описать что делает декоратор."
Критерии оценки:
-
К2.1 (3б) Кандидат упомянул, что декоратор - это функция, принимающая функцию или класс и возвращающая объект, который заменит эту функцию / будет существовать под именем этой функции
-
К2.2 (1б) Кандидат написал самый простой декоратор:
python
def simple_decorator(f):
return f
- К2.3 (1б) продекорировал функцию:
python
@simple_decorator
def example_function(a, b):
return a + b
Замыкание
Задача:
"Рассказать, что такое замыкание в python. Написать пример замыкания. Чем является функция в python? В какой момент создаётся функция в python?"
Критерии оценки:
-
К3.1 (5б) Кандидат упомянул, что замыкание в Python - это механизм, который позволяет функции сохранять доступ к переменным, определённым в её окружении, даже после завершения работы этой функции. Это значит, что функция может продолжать использовать переменные из своего окружения, даже если она вызывается в другом контексте, где эти переменные не определены.
-
К3.2 (2б) Кандидат написал пример замыкания:
python
def fabric(a):
def worker(b):
return a + b
- К3.3 (2б) Кандидат продемонстрировал работу замыкания:
python
worket_func = fabric(10)
res = worket_func(15)
print(res) # 25
- К3.4 (4б) Кандидат упомянул, что объекты в python, в том числе и функции, создаются в момент выполнения кода (runtime), а не компиляции.
Декоратор с обёрткой/замыканием
Задача:
"Написать пример декоратора с замыканием (декоратор обёртка/wrapper). Рассказать для чего необходимы"
Критерии оценки:
- К4.1 (4б) Кандидат написал пример декоратора с замыканием:
python
def decorator(f):
def wrapper(*args, **kwargs):
# before root call
res = f(*args, **kwargs)
# after root call
return res
-
К4.2 (4б) Кандидат упомянул, что декораторы с wrapper/замыканием/обёрткой необходимы для:
-
исполнения кода до выполнения функции
-
исполнения кода после выполнения функции
-
просмотра/модификации аргументов функции до её выполнения
-
просмотра/модификации результатов выполнения функции
-
Классы-экземпляры классов
Задача:
"Написать самый простой класс и создать его экземпляр. Что делает метод __init__? Что делает метод __new__? Что такое классовые переменные? Как python создаёт экземпляр класса (что он делает под капотом)?"
Критерии оценки:
- К5.1 (4б) Кандидат написал пример самого простого класса python:
python
class Car:
def __init__(self, name):
self.name = name
- К5.1 (2б) Кандидат создал экземпляр класса:
python
car1 = Car('BMW')
- К5.2 (2б) Кандидат использовал аннотации типов:
python
class Car:
def __init__(self, name: str):
self.name = name
car1: Car = Car('BMW')
-
К5.3 (4б) Кандидат упомянул, что метод __init__ настраивает экземпляр класса в соответствии с данными, переданными в его конструктор.
-
К5.4 (4б) Кандидат упомянул, что метод __new__ создаёт новый объект/экземпляр класса для данного класса
-
К5.5 (5б) Кандидат упомянул, что классовые переменные - это атрибуты объекта класса. Атрибуты объекта класса доступны всем экземплярам данного класса и любым другим объектам ссылающимся на этот класс.
-
К5.6 (4б) Кандидат создал классовую переменную:
python
class Car:
cls_var = []
- К5.7 (5б) Кандидат упомянул, что при создании экземпляра класса, экземпляр класса наследует все ссылки на атрибуты класса (методы и классовые переменные), при этом все объекты-функции в классе становятся объектами-методами(bound method)