Python вопросы с собеседований
24.7K subscribers
508 photos
15 videos
17 files
403 links
Вопросы с собеседований по Python

@workakkk - админ

@machinelearning_interview - вопросы с собесдований по Ml

@pro_python_code - Python

@data_analysis_ml - анализ данных на Python

@itchannels_telegram - 🔥 главное в ит

РКН: clck.ru/3FmrFd
Download Telegram
Чем отличается pickling от unpickling?


Ответ
Любое руководство по вопросам и ответам на собеседовании по Python не будет полным без этого вопроса. В Python модуль pickle принимает любой объект Python, преобразует его в строковое представление и выгружает его в файл с помощью функции dump. Такой процесс известен как pickling. Для этого процесса используется функция pickle.dump().

С другой стороны, процесс извлечения исходного объекта Python из сохраненного строкового представления называется unpickling. Для этого процесса используется функция pickle.load().

@python_job_interview
Что такое @property

Ответ

Функция property() используется для определения свойств в классах.

Метод property() обеспечивает интерфейс для атрибутов экземпляра класса. Он инкапсулирует атрибуты экземпляров и предоставляет свойства, аналогично тому, как это работает в Java и C#.

Метод property() принимает на вход методы get, set и delete, и возвращает объекты класса property.

Вместо метода property() лучше использовать декоратор property (https://www.tutorialsteacher.com/python/property-decorator).


Параметры:

fget: (опционально) Функция для получения значения атрибута. Значение по умолчанию None.

fset: (опционально) Функция для задания значения атрибута. Значение по умолчанию None.

fdel: (опционально) Функция для удаления значения атрибута. Значение по умолчанию None.

doc: (опционально) Строка, содержащая документацию. Значение по умолчанию None.

Возврат значений:

Возвращает атрибут свойства из заданных геттера, сеттера и функции удаления.

Следующий пример показывает, как создать свойство в Python с помощью функции property().

➡️ Подробнее о property

@python_job_interview
Как вычислять процентили с помощью NumPy?

Ответ
Медиана — это 50 процентиль по определению. 25 процентиль указывает, что 25% наблюдаемых меньше числа в процентиле, то есть n процентов наблюдаемых значений меньше значения в процентиле n.

Мы можем вычислить его с помощью NumPy, используя код на картинке.

@python_job_interview
Как управляется память в Python?

Ответ
В Python оператор присваивания (=) не копирует объекты. Вместо этого он создает связь между существующим объектом и именем целевой переменной. Чтобы создать копии объекта в Python, необходимо использовать модуль copy. Более того, существует два способа создания копий для данного объекта с помощью модуля copy.

Shallow Copy – это побитовая копия объекта. Созданный скопированный объект имеет точную копию значений в исходном объекте. Если одно из значений является ссылкой на другие объекты, копируются только адреса ссылок на них.
Deep Copy – рекурсивно копирует все значения от исходного объекта к целевому, т. е. дублирует даже объекты, на которые ссылается исходный объект.
На картинке показан пример использования сopy и deepcopy.

@python_job_interview
Что такое pass в Python?

Ответ
Pass - представляет собой нулевую операцию в Python. Обычно она используется для заполнения пустых блоков кода, который может выполняться во время исполнения. В примере, приведенном ниже, без оператора pass можно столкнуться с ошибкой как <<IndentationError>> во время выполнения кода.

@python_job_interview
machinelearning_interview - канал подготовит к собеседованию по машинному обучению, статисике ,алгоритмам и науке о данных.

golang_interview - Вопросы с настоящих Golang собеседований, помогут Вам получить успешно пройти интервью.

@data_analysis_ml - аналитика данных на Python.
#Вопросы_с_собеседования

В каких ситуациях пользуются методом rfind()?

Метод rfind() похож на метод find(), но он, в отличие от find(), просматривает строку не слева направо, а справа налево, возвращая индекс первого найденного вхождения искомой подстроки.

@python_job_interview
Какие отличия между массивом и списком в Python?

Массивы содержат только элементы одинаковых типов данных, то есть тип данных массива должен быть однородным. Массивы потребляют меньше памяти.

Списки содержат элементы разных типов данных, то есть тип данных списков может быть неоднородным. Их недостатком является потребление большого объема памяти.

Пример использования массива и списка на картинке.

@python_job_interview
Расскажите о наиболее общих командах Docker

Ответ:
docker push: Закачать репозиторий или образ в Registry;
docker run: Запустить команду в новом контейнере;
docker pull: Скачать репозиторий или образ из Registry;
docker start: Запустить один или несколько контейнеров;
docker stop: Остановить один или несколько контейнеров;
docker search: Поиск образа на DockerHub;
docker commit: Сохранить изменения в новый образ.

Docker exec - выполнить команду в контейнере
Docker ps (-a) - показать запущенные (все контейнеры)
Docker rm - удалить контейнер
Docker images - посмотреть имеющиеся локальные образы


@python_job_interview
Используются ли в python спецификаторы доступа?

Ответ:

Python не использует спецификаторы доступа, такие как private, public, protected и т. д. Однако, в нем есть концепция имитации поведения переменных путем использования одинарного (protected) или двойного подчеркивания (private) в качестве префикса к именам переменных. По умолчанию переменные без подчеркивания являются общедоступными.


Пример использования спецификаторы доступов в Python на картинке.

@python_job_interview
⚙️ Как делается перегрузка операторов в Python?

Ответ

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

Пример использования на картинке.

В примере показано использование перезагрузки операторов. Данные методы не вызываются напрямую, но вызываются встроенными функциями или операторами.

➡️ Читать подробнее

@python_job_interview
Что такое пустой класс и как он используется?

Пустой класс – класс, который не имеет реализацию каких-то методов или же свойств. При пустом классе используется ключевое слово pass для того, чтобы не выдавало ошибок.

Пример использования на картинке.

@python_job_interview
Освобождается ли вся память при выходе из Python?

Ответ:

Выход из Python освобождает все, кроме:

1. модулей с циклическими ссылками;

2. объектов, на которые ссылаются глобальные пространства имен;

3. части памяти, зарезервированной библиотекой C.

➡️ Как работает память в Python

@python_job_interview
✒️ Как передаются аргументы – значения или ссылка?

Ответ:

В Python аргументы передаются по ссылке, т. е. передается ссылка на реальный объект. Но есть два вида передачи объекта в аргументах.

По значению: Передается копия реального объекта. Изменение значения копии объекта не приведет к изменению значения исходного объекта.

По ссылке: Передается ссылка на реальный объект. Изменение значения нового объекта изменит значение исходного объекта.

Пример использования на картинке.

@python_job_interview
🔘 Реализуйте алгоритм сортировки слиянием (Merge Sort) на Python

Сортировка слиянием (Merge Sort) — один из самых известных алгоритмов сортировки. Если вы изучаете информатику, Merge Sort вместе с Quick Sort, вероятно, является первым эффективным алгоритмом сортировки общего назначения, о котором вы слышали. Также классический пример алгоритма «разделяй и властвуй» (divide-and-conquer).

Суть сортировки:

1 Сортируемый массив разбивается на две части примерно одинакового размера.

2 Каждая из получившихся частей сортируется отдельно, например, тем же самым алгоритмом.

3 Два упорядоченных массива половинного размера соединяются в один.

➡️ Подробнее


@python_job_interview
🧲 Напишите программу для проверки и возврата пар заданного массива A, суммарное значение которых равно заданному значению N.

Ответ на картинке

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

Ответ
Поиск значения в списке занимает O(n) времени, потому что нужно пройти весь список.

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

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

@python_job_interview
Назовите пример режимов обработки файлов с помощью Python?
Существуют следующие режимы:

Режим только для чтения (‘r’): открыть файл для чтения. Это режим по умолчанию.
Режим только для записи (‘w’): открыть файл для записи. Если файл содержит данные, они будут потеряны. Создается новый файл.
Режим чтения-записи (‘rw’): открыть файл для чтения, режим записи. Это режим обновления.
Режим добавления (‘a’): открыть для записи, добавить в конец файла, если файл существует.

@python_job_interview
Напишите код, который будет рассчитывать угол между часовой и минутной стрелкой в заданное время. Данная задача покажет логическое мышление кандидата, и как быстро он сможет придумать решение.

Ответ на картинке

@python_job_interview
Загрузка из «плохого» API большого количества данных и их синхронизация с табличкой в БД (например, Postgres). Считаем, что на входе мы скачиваем JSON-массив из N (>100k) объектов (dict) заданной структуры (primary key поле + некоторое количество строковых полей). Считаем, что нам надо раз в некоторое время запускать функцию, которая создаст записи, которые есть в JSON, но их нет в базе, а далее обновит строковые поля там, где что-то поменялось, и пометить удаленными записи, которых нет в JSON, но они все еще есть в базе.

Решение

Есть 3 простых решения. Первое — просто перебрать записи из JSON, выбирая из базы записи по одной по pk, но тогда мы получим N запросов в базу, что может приводить к неконтролируемой пиковой нагрузке. Второе — выбрать из базы полностью таблицу и сравнить 2 массива, что будет работать, скорее всего, быстрее других вариантов, но будет максимально неэффективно по памяти (упрощаем решение задачи выделением дополнительных ресурсов, но, опять же, есть вероятность, что из-за неожиданно большого объема данных памяти может не хватить и выполнение таска прервется). Компромиссный вариант по производительности, нагрузке на базу и памяти — проходить циклом по JSON (или записям базы, но там есть нюансы) бачами по 100-1000 шт., накапливая обработанные id. Это сократит количество запросов на 2-3 порядка, не потребует загрузки в память всех текущих данных, но при этом будет всё ещё достаточно быстро. Также тут можно обсудить варианты реализации чисто средствами базы (временные таблицы, bulk upsert-ы и т.д.)

@python_job_interview
Что такое итераторы/генераторы/генераторные выражения, чем они отличаются и когда и как все это нужно использовать.

Ответ
Здесь важно, чтобы кандидат понимал различие и мог с той или иной степенью погружения рассказать про эти различия. Если кратко, то итератор в Python – это любой объект, который использует метод next() для получения следующего значения последовательности. Генератор – функция, которая производит или выдает последовательность значений с использованием метода yield. Концептуально, итератор — это механизм поэлементного обхода данных, а генератор позволяет отложено создавать результат при итерации. Генератор может создавать результат на основе какого-то алгоритма или брать элементы из источника данных (коллекция, файлы, сетевое подключения и др.) и изменять их.

Подробности доступны в очень большом количестве статей с той или иной степенью погружения в детали, например, здесь.
#junior

@python_job_interview