Баннер мобильный (1) Пройти тест

Топ вопросов с собеседований по Python

От базовых до продвинутых

Собеседование

19 апреля 2024

Поделиться

Скопировано
Топ вопросов с собеседований по Python

Содержание

    Вы уже прошли несколько курсов, уверенно пишете код на Python, разбираетесь в алгоритмах, разрабатываете собственный пет-проект и ищете работу мечты. В один прекрасный день вам приходит сообщение с приглашением на собеседование, но что там будет? В этой статье собрали самые популярные и интересные вопросы с технических интервью на позицию Python-разработчика.

    Это база: легкие вопросы, ответы на которые должен знать каждый

    На техническом интервью не всегда бывают сложные вопросы. Если вы претендуете на позицию джуна, то от вас не будут требовать глубоких знаний Python. Достаточно будет разбираться в стандартной библиотеке языка. К тому же собеседование может начаться с самых простых вопросов и усложняться по мере правильности ваших ответов. Помните, что у собеседующего нет цели завалить вас. Он хочет понять предел ваших знаний и оценить вашу пользу для компании.

    Будет очень обидно подготовиться к сложным вопросам и лайвкодингу, но разволноваться на базовых парадигмах Python. Старайтесь периодически освежать знания и повторять даже простые вопросы. Ниже привели самые популярные из них.

    Что такое Python?

    Python — высокоуровневый язык программирования с динамической типизацией. Он интерпретируемый и мультипарадигменный. Python направлен на повышение читаемости кода и производительности разработчика. Язык программирования применяется во многих сферах, включая веб-разработку, машинное обучение, анализ данных, разработку прикладного ПО и игр. Python активно используется в образовании из-за относительно простого синтаксиса.

    Работу с какими типами данных поддерживает Python?

    Стандартная библиотека Python включает поддержку следующих типов данных:

    • числовые: целые числа (int), числа с плавающей точкой (float) и комплексные числа (complex);
    • строковые: str;
    • коллекции: списки (list), кортежи (tuple), множества (set) и словари (dict);
    • булевы: bool.

    Что такое PEP 8?

    PEP 8 (Python Enhancement Proposal 8) — это рекомендации по разработке на Python. В документе описаны основные соглашения по стилю кода, которые помогают поддерживать порядок в проекте и делают его расширяемым. PEP 8 дает рекомендации по именованию сущностей, отступам, импорту стороннего кода, длине строк и комментариям.

    Как в Python работает умножение строк?

    Если умножить строки на n, то Python вернет новую строку, в которой n раз будет повторяться исходная строка. К примеру, если умножить ‘Python’ на 2, то в итоге мы увидим строку PythonPython:

    'Python' * 2
    => 'PythonPython'

    Как в Python работает умножение списков?

    Если умножить список на n, то Python вернет новый список, в котором n раз будет повторяться исходный список. Рассмотрим на примере:

    [3, 2, 1] * 2
    => [3, 2, 1, 3, 2, 1]

    В чем разница между списками и кортежами?

    Списки (list) и кортежи (tuple) в Python используются для работы с упорядоченными наборами элементов. Они отличаются тем, что список можно изменять, а кортеж — нет. Если один раз создать кортеж, то после в него нельзя будет вносить новые данные и удалять уже имеющиеся. Это ускоряет работу с элементами.

    Списки и кортежи в Python создаются с помощью разных видов скобок:

    new_tuple = (1, 2, 3, 4, 5) # кортеж
    new_list = [1, 2, 3, 4, 5] # список

    Поддерживает ли Python ООП?

    Python полностью поддерживает объектно-ориентированное программирование (ООП). Разработчикам доступны все принципы этого подхода, включая полиморфизм, наследование и инкапсуляцию.

    Как проверить Python-файл на синтаксические ошибки, но не запускать его?

    В экосистеме Python есть утилита py_compile. С ее помощью можно проверить файл на синтаксические ошибки, но не запускать его. Для этого в терминале необходимо ввести следующую команду: 

    python -m py_compile file.py

    На месте file.py должно быть название вашего файла. Перед вызовом утилиты py_compile надо обязательно указать флаг -m.

    Как развернуть список в Python?

    В Python есть функция reverse(), с помощью которой можно быстро развернуть список. Важно отметить, что функция не возвращает новый список.

    new_list = ['a', 'b', 'c']
    
    new_list.reverse()
    print(new_list)
    
    => ['c', 'b', 'a']

    Чем is отличается от двойного равенства (==)?

    Важно помнить, что с помощью == можно проверить равенство, а с помощью is — идентичность. Для примера создадим несколько списков:

    list_a = [1, 2, 3]
    list_b = list_a
    list_c = [1, 2, 3]

    Теперь проверим списки на равенство:

    print(list_a == list_b)
    print(list_a == list_c)
    
    => True
    => True

    Далее проверим их идентичность:

    print(list_a is list_b)
    print(list_a is list_c)
    => True
    => False

    Выходит, что списки равны, потому что в них содержатся одинаковые наборы данных. Но list_a и list_c — разные, ведь это два самостоятельных списка.

    Вопросы посложнее

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

    Здесь мы собрали только общие вопросы о языке программирования Python. Список может расширяться в зависимости от сферы. К примеру, для веб-разработчиков или специалистов по машинному обучения могут добавиться вопросы по конкретным фреймворкам и технологиям.

    Как работает функция range?

    В Python функция range() используется для генерации списка целых чисел. Ее можно использовать тремя способами, исходя из задачи:

    • range(stop) — создает список от 0 до stop;
    list(range(10))
    => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    • range(start, stop) — создает список от start до stop;
    list(range(2, 10))
    => [2, 3, 4, 5, 6, 7, 8, 9]
    • range(start, stop, step) — создает список от start до stop с шагом step.
    list(range(2, 10, 2))
    => [2, 4, 6, 8]

    Чем func отличается от func()?

    Для правильного ответа на вопрос важно понимать, что любая функция в Python может быть объектом. Поэтому func() представляет собой обычную функцию в классическом ее понимании, а func — объект, представляющий функцию. Его можно передать другой функции или переменной.

    Как объединить списки?

    Для объединения списков в Python используют операцию сложения. 

    list_a = [10, 9]
    list_b = [8, 7, 6]
    
    list_a + list_b
    
    => [10, 9, 8, 7, 6]

    Чем многопоточное приложение отличается от многопроцессорного?

    Многопоточные приложения выполняются в рамках одного процесса, но разделены на потоки. Это значит, что каждый поток имеет доступ к общим ресурсам: файлам, памяти, сети и ресурсам машины. Многопроцессорные приложения делятся на отдельные процессы. У каждого собственный изолированный набор ресурсов.

    В Python для реализации многопроцессорного подхода используют библиотеки concurrent.futures и multiprocessing, а для многопоточности — threading.

    Что можно использовать в качестве ключа словаря?

    Для ключей словаря можно использовать любой неизменяемый объект, например кортеж или число.

    new_dict = {1: 'one', 'two': 2, (3, 4): 'three four'}

    При этом ключи должны быть уникальными. Если использовать два одинаковых ключа, то Python перезапишет значение:

    new-dict = {1: 'one', 1: 'one again'}

    После этого по ключу 1 будет доступна строка ‘one again’.

    Для чего используется метод id?

    В Python метод id() используется для получения идентификатора объекта. Сам идентификатор можно использовать для сравнения объектов. Если в коде есть две переменные, которые ссылаются друг на друга, то с помощью id() это можно проверить:

    list_a = [1, 2, 3]
    list_b = list_a
    
    print(id(list_a)) # идентификатор списка list_a
    print(id(list_b)) # идентификатор списка list_b

    Как в Python работает сборщик мусора?

    В Python автоматическая сборка мусора. Это значит, что разработчику не надо явно следить за выделением и освобождением памяти. Система сама управляет памятью объектов без ссылок.

    Автоматический сборщик запускается с установленной периодичностью и ищет такие объекты. Они помечаются как мусор и удаляются из памяти. Сам процесс поиска похож на счетчик. Его значение увеличивается при каждом создании новой ссылки на него. Если счетчик становится равен нулю, то объект удаляется.

    Иногда несколько объектов могут ссылаться друг на друга. В этих случаях Python использует функцию обнаружения циклов, которая находит такие объекты и удаляет зацикленные ссылки.

    Каким образом можно перезагрузить модуль, импортированный в проект?

    Для перезагрузки импортированных модулей в библиотеки importlib есть функция reload(). Ее лучше не использовать в продакшене, но можно применять для тестирования или отладки:

    from importlib import reload
    import new_module
    
    reload(new_module)

    Как выполняется код на Python?

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

    Вот как это происходит под капотом:

    • при первом запуске кода на Python интерпретатор компилирует его в байт-код;
    • после этого виртуальная машина Python (PVM) выполняет его;
    • байт-код хранится в папке pycache, у таких файлов расширение .pyc;
    • периодически Python проверяет, есть ли у файла .py скомпилированный байт-код в формате .pyc. Если его нет или он старше основного файла, то процесс компиляции запускается снова.

    Условный процесс компиляции кода на Python осуществляется с помощью интерпретатора. Полученный байт-код выполняется PVM.

    Что такое pycache и файлы с расширением .pyc?

    Этот вопрос в некоторой мере повторяет предыдущий, но тоже важен для понимания принципов работы Python.

    Файлы с расширением .pyc — это скомпилированные байт-коды. Они хранятся в папке pycache и используются для ускорения процесса компиляции интерпретатором. Благодаря этому код выполняется быстрее. Кроме того, файлы .pyc можно использовать для распространения проектов без необходимости делиться исходным кодом. Вместо этого пользователь получит скомпилированный байт-код.

    Разработчику не нужно работать с папкой pycache и ее содержимым. Этот процесс автоматизирован. Также важно помнить, что файлы .pyc не взаимозаменяемы между версиями Python.

    Где поиск выполняется быстрей: в списках или словарях?

    В списках во время поиска надо пройтись по всем значениям. Это занимает O(n) времени. Поиска в словаре по ключу занимает O(1), потому что в основе используется хэш-таблица.

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

    Чем пакеты отличаются от модулей?

    Пакет представляет собой коллекцию модулей, а модуль — файл или набор файлов.

    Вот так импортируется пакет:

    from package import module

    А так — модуль:

    import module

    Как удалить дубликаты из списка?

    Если в списке есть дубликаты, то можно преобразовать список в набор и обратно:

    new_list = [1, 1, 1, 2, 2, 3, 3, 3]
    new_list = list(set(new_list))
    print(new_list)
    
    => [1, 2, 3]

    Как проверить, что в строке только буквы?

    Если надо проверить, что в строке содержатся только буквы, то можно использовать функцию isalpha():

    'python'.isalpha()
    
    => True

    Как проверить, что в строке только цифры?

    Для этой задачи в Python предусмотрена функция isnumeric():

    '4561298'.isnumeric()
    
    => True

    Как проверить, что в строке только цифры и буквы?

    Для этого есть функция isalnum():

    '456python1298'.isalnum()
    
    => True

    Как Python обрабатывает исключения?

    Обработка исключений в Python реализуется с помощью конструкции tryexceptfinally:

    try:
        # Python пробует выполнить эту часть кода
    except:
        # к этому блоку переходит, если не получилось выполнить try
    finally:
        # этот блок выполняется всегда

    Для чего используется флаг -O?

    Флаг -O в Python полностью называется pythonoptimize и применяется для оптимизации скомпилированного кода. С его помощью можно удалить отладочную информацию, что в итоге ускоряет выполнение кода. Обычно -O удаляет из скомпилированного байт-кода docstrings и assert statements.

    Так это выглядит на примере:

    python -O name.py

    Что такое лямбда-функция?

    Лямбда-функция — функция, которую можно определить в одной строке и без ключевого слова def. Это полезно для случаев, когда нужно быстро определить функцию. Еще ее используют в качестве аргументов других функций.

    Лямбда-функция определяется следующим образом:

    double = lambda x: x * 2

    Полезные ссылки

    Никогда нельзя заранее узнать вопросы, которые будут на собеседовании. Для его успешного прохождения надо четко понимать Python и то, как на нем пишется код. Статьи как наша можно использовать, чтобы освежить материал в памяти или найти слабые места. Если вы прочитали вопрос и не знаете правильного ответа, то стоит обратиться к документации и еще раз повторить тему. 

    Собеседование

    Поделиться

    Скопировано
    0 комментариев
    Комментарии