Python вопросы с собеседований
25K subscribers
518 photos
18 videos
17 files
414 links
Вопросы с собеседований по Python

@workakkk - админ

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

@pro_python_code - Python

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

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

РКН: clck.ru/3FmrFd
Download Telegram
Как управляется память в Python?

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

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

@python_job_interview
👍21🔥4
Что такое pass в Python?

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

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

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

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

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

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

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

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

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

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

@python_job_interview
👍28👎1
Расскажите о наиболее общих командах 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
👍212🔥2
Используются ли в python спецификаторы доступа?

Ответ:

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


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

@python_job_interview
👍12👎3🤔3🔥2
⚙️ Как делается перегрузка операторов в Python?

Ответ

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

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

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

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

@python_job_interview
👍152👎1🔥1
Что такое пустой класс и как он используется?

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

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

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

Ответ:

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

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

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

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

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

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

Ответ:

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

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

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

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

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

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

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

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

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

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

➡️ Подробнее


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

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

@python_job_interview
👎12👍9🔥3
Где быстрее поиск: в словарях или списках?

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

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

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

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

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

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

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

@python_job_interview
👍25🔥7👎32🥰1
Загрузка из «плохого» 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
👍162👎1🔥1
Что такое итераторы/генераторы/генераторные выражения, чем они отличаются и когда и как все это нужно использовать.

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

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

@python_job_interview
👍18🔥41
Что такое абстрактная фабрика, как ее реализовать и зачем ее применяют?

Ответ

Абстрактная фабрика — порождающий шаблон проектирования, предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов.

Допустим у нас есть 2 операционные системы Mac Os и Linux, нам необходимо реализовать произвольное окно с кнопкой или кнопками в каждой из этих операционных систем. Естественно окна и кнопки в MacOs и linux выглядят по разному, так сказать имеют разные стили оформления.

Наша задача состоит в том, что бы создать универсальный интерфейс который будет создавать окно с кнопкой в не зависимости от того на какой операционной системе запущенна программа.


Т.е. функции которая будет конструировать окно с кнопкой, будет работать вне зависимости от того какое окно мы захотим создать

Для начала опишем класс абстрактной фабрики картинка1.

Обратите внимание на строки return cls.Window(name) и return cls.Button(name), как видите в обоих случаях мы возвращаем некий класс(cls) у которого есть подкласс Window\Button, но в настоящий момент мы не описали ни класс Window, ни класс Button, давайте это сделаем.

➡️ Читать дальше

@python_job_interview
👍12🔥3
Что такое цикломатическая сложность ? Какие бывают метрики для измерения сложности кода ?

Ответ

Цикломатическая сложность — это мера количества независимых путей кода в вашем приложении. Путь — это последовательность операторов, которой интерпретатор может следовать, чтобы добраться до конца приложения.

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

Для поездки вам может понадобиться смена поезда, чтобы добраться до пункта назначения. Железнодорожная система метрополитена Лиссабона в Португалии проста и удобна для навигации. Цикломатическая сложность любой поездки равна количеству линий, по которым вам нужно пройти.

Метрики для измерения сложности
Вот некоторые метрики сложности для языков программирования. Они применимы ко многим языкам, а не только к Python.

Количество строк кода
LOC ( Lines of Code), или Количество строк, является самой грубой мерой сложности. Это спорный вопрос , есть ли прямая связь между количеством строк кода и сложностью приложения, но косвенная корреляция очевидна. В конце концов, программа с 5 строками, вероятно, проще, чем программа с 5 миллионами.

При просмотре метрик Python мы стараемся игнорировать пустые строки и строки, содержащие комментарии.

Количество строк кода можно подсчитать с помощью команды wc в Linux и Mac OS, где file.py — это имя файла, который вы хотите измерить:

$ wc -l file.py
Если вы хотите подсчитать строки во всех файлах в папке путем рекурсивного поиска в файлах *.py, вы можете объединить wc с командой find:

$ find . -name \*.py | xargs wc -l

В ответе вы увидите общее количество строк.

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

В Python рекомендуется размещать по одной инструкции в каждой строке.

➡️ Читать дальше

@python_job_interview
👍15🔥21👎1