Python вопросы с собеседований
24.9K subscribers
511 photos
16 videos
17 files
408 links
Вопросы с собеседований по Python

@workakkk - админ

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

@pro_python_code - Python

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

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

РКН: clck.ru/3FmrFd
Download Telegram
🖥 Как вставить объект, чтобы он оказался под определенным индексом?

Ответ


Сначала создадим список:

>>> a=[1, 2, 4]
Затем используем метод insert(). В нем первым аргументом будет индекс, под которым вставляется объект, а вторым — значение объекта:

>>> a.insert(2,3)
>>> a
[1, 2, 3, 4]


@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Если мы не поставим двоеточие в конце строки для цикла "do-while", он все равно сработает?

Ответ


В питоне такой цикл не реализован. Это вопрос из тех, которые с подвохом, когда упоминают элементы других языков.

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🌃 Big Data - действительно полезный блог для всех, кто работает с данными на Python.

- огромный набор бесплатных наборов данных
- инструменты для работы с данными
- обучающие материалы для датасаентистов
- перевод книг и статей

🔥 Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Расскажите про методы __str__ и __repr__

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

str — используется для красивого вывода информации об объекте. Вызывается, например, функциями print() и format().

repr — выводит подробную об информацию об объекте, очень полезно при отладке. Бывает, можно получить такой же объект, если запихнуть результат в eval(str).

Если метод str не определён, то используется repr и наоборот.

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Можете назвать десять встроенных функций питона?

Функция complex() создает комплексное число:

>>> complex(3.5,4)
(3.5+4j)

Функция eval() исполняет строку:

>>> eval("print(max(22,22.0) — min(2,3))")
20

Функция filter() отфильтровывает элементы, для которых заданное условие верно.

>>> list(filter(lambda x: x%2 == 0,[1, 2, 0, False]))
[2, 0, False]


Функция format() помогает задать формат строки:

>>> print("a = {0} but b = {1}".format(a, b))
a = 2 but b = 3

Функция hash() возвращает хэш-значение объекта:

>>> hash(3.7)
644245917

Функция hex() преобразовывает число в шестнадцатеричное число:

>>> hex(14)
"0xe"

Функция input() читает ввод и возвращает строку:

>>> input("Enter a number")
Enter a number7
"7"

Функция len() возвращает число, показывающее длину строки:

>>> len("Ayushi")
6

Функция locals() возвращает словарь с локальной таблицей имен:

>>> locals()
{"__name__": "__main__", "__doc__": None, "__package__": None, "__loader__": <class "_frozen_importlib.BuiltinImporter">, "__spec__": None, "__annotations__": {}, "__builtins__": <module "builtins" (built-in)>, "a": 2, "b": 3}

Функция open() открывает файл:

>>> file = open("tabs.txt")

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Что такое pickle?

Ответ

Pickle — это модуль сериализации и десериализации объектов в Python.

В примере ниже мы сериализуем и десериализуем список словарей:

import pickle

obj = [
{'id':1, 'name':'Stuffy'},
{'id':2, 'name': 'Fluffy'}
]

with open('file.p', 'wb') as f:
pickle.dump(obj, f)

with open('file.p', 'rb') as f:
loaded_obj = pickle.load(f)

print(loaded_obj)
#=> [{'id': 1, 'name': 'Stuffy'}, {'id': 2, 'name': 'Fluffy'}]


Еще вопрос о pickle

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Как увеличить и уменьшить целое число в Python?

Ответ


Инкремент и декремент можно сделать с помощью += и -=

value = 5

value += 1
print(value)
#=> 6

value -= 1
value -= 1
print(value)
#=> 4



@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 В чем разница между append и extend?

append добавляет значения в список, а extend добавляет в список значения из другого списка

a = [1,2,3]
b = [1,2,3]

a.append(6)
print(a)
#=> [1, 2, 3, 6]

b.extend([4,5])
print(b)
#=> [1, 2, 3, 4, 5]


@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Почему мы используем enumerate() при итерации последовательности?

Ответ

enumerate() позволяет отслеживать индекс при итерации последовательности. Это более нативный способ, чем определение и приращение целого числа, представляющего индекс:

li = ['a','b','c','d','e']

for idx,val in enumerate(li):
print(idx, val)
#=> 0 a
#=> 1 b
#=> 2 c
#=> 3 d
#=> 4 e


@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Преобразуйте следующий цикл for в генератор списков (list comprehension)

Дан следующий цикл for:

a = [1,2,3,4,5]

a2 = []
for i in a:
a2.append(i + 1)
print(a2)
#=> [2, 3, 4, 5, 6]


Результат:

a3 = [i+1 for i in a]

print(a3)
#=> [2, 3, 4, 5, 6]


Генератор списка обычно считается более каноническим способом в Python, если он остается понятным.

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Как разбить список на фрагменты и разделить его на меньшие части.

Ответ

def chunk(my_list, size):
return [my_list[i:i+size] for i in range(0,len(my_list), size)]
my_list = [1, 2, 3, 4, 5, 6]
chunk(my_list, 2) # [[1, 2], [3, 4], [5, 6]]


Пишите свои варианы в комментариях

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Задание от Сбербанка

В этой таблице безымянная частичная выгрузка перемещения пользователей по сайту. Один user_id — один пользователь. Расскажите нам всё, что сможете понять по такой выгрузке

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

Попробуйте определить общие паттерны у тех пользователей, кто перестал учиться на платформе, и у тех, кто продолжает учиться. Вероятно, на основе этих данных вы сможете сделать предложения по адаптации платформы? Каких данных вам не хватает, чтобы провести более детальный анализ?

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

⭐️ Датасет
🖥 Решение

@machinelearning_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Задание на позицию Backend-разработчик на python

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

Решение

def calc_angel(t: datetime.time) -> float:
h = t.hour
if h > 12:
h -= 12
hour_angle = 0.5 * (h * 60 + t.minute)
minute_angle = 6 * t.minute
angle = abs(hour_angle - minute_angle)
return min(angle, 360 - angle)


❤️ , если вам нравятся практические задачи

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Что делать если нужно перехватить исключение, выполнить действия и опять возбудить это же исключение.

Ответ
Для того, чтобы в обработчике исключения выполнить определённые действия, а затем передать исключение дальше, на один уровень обработчиков выше (то есть, выбросить то же самое исключение ещё раз), используется ключевое слово raise без параметров.

try:
1 / 0
except ZeroDivisionError:
# some logic
raise

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Что такое фабрика декораторов?

Ответ

Это функция, которая возвращает декоратор. Например, вам нужен декоратор для проверки прав. Логика проверки одинакова, но прав может быть много. Чтобы не плодить копипасту, напишем фабрику декораторов.

from functools import wraps

def has_perm(perm):
def decorator(view):
@wraps(view)
def wrapper(request):
if perm in request.user.permissions:
return view(request)
else:
return HTTPRedirect('/login')
return wrapper
return decorator

@has_perm('view_user')
def users(request):
...


@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Что такое сериализация
Сериализация – это процесс сохранения объектов в двоичном или строковом виде для хранения, передачи и восстановления. Обратный процесс называется десериализацией. Термины-синонимы маршалинг/анмаршалинг

json.dumps / json.dump , json.loads / json.load
Функция dumps модуля json сохраняет JSON-представление объекта в строку. Функция dump – в текстовый файл. Функция loads модуля json загружает объект из строки. Функция load – из текстового файла.

Что делать если нужно сериализовать данные, которые не поддерживаются стандартным модулем json
Можно использовать pickle или расширить классы JSONEncoder и JSONDecoder.

pickle.dumps / pickle.dump, pickle.loads / pickle.load
Функции dump, dumps, load и loads модуля pickle аналогичны по своему предназначению соответствующим функциям модуля JSON, но работают с байтовыми строками и бинарными файлами.

Опциональный параметр protocol данных функций задаёт версию протокола. Последнюю версию протокола можно получить как константу pickle.HIGHEST_PROTOCOL, текущую версию по умолчанию – pickle.DEFAULT_PROTOCOL.

На момент написания данного текста существует пять версий протокола:

0 и 1 – это устаревшие версии, которые использовались в Python 2.2 и ниже;
2 – это основная версия протокола для Python 2;
3 – версия протокола, которая появилась в Python 3, стандартный протокол в Python 3 на текущий момент, не может быть десериализован в Python 2;
4 – версия протокола, появившаяся в Python 3.4, поддерживает очень большие по объёму памяти объекты, поддерживает большее количество типов объектов, добавлены некоторые оптимизации.
5 - версия протокола, появившаяся в Python 3.8. Он добавляет поддержку данных out-of-band и ускорение для in-band данных. PEP 574 более подробно описывает изменения.

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Опишите алгоритм работы CSRF middleware

#django
Ответы

На каждый запрос система генерирует уникальный токен и выставляет его в куках. В каждой форме размещается скрытое поле csrf-token с этим же токеном. При отправке формы методом POST Джанго проверяет, что поле формы и значение в куках совпадают. Если нет, это значит, что запрос подделан или отправлен с другого домена.

Чтобы освободить какую-то вьюху от проверки (если это API, например), достаточно обернуть ее декоратором csrf_except.

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Что такое сигналы? Зачем нужны? Назовите основные?

Ответ
#django

Сигналы – это события в экосистеме Джанго. С помощью сигналов подсистемы оповещают приложение о том, что случилось. Чтобы читать сигналы, программист регистрирет обработчики сигналов. Сигналы распространяются синхронно. Это значит, подписав на один сигнал сотню обработчиков, мы увеличим время, необходимое на отдачу ответа.

Основные сигналы это начало запроса и его окончание, перед сохранением модели и после, обращение к базе данных.

Важно: сигналы моделей работают поштучно, то есть для одной модели. При пакетной обработке, например, queryset.all().delete() или queryset.all().update({'foo'=42}), события об удалении или изменения не будут вызваны.

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Возможно ли множественное наследование? Что такое MRO?

Ответ
Да, можно указать более одного родителя в классе потомка.

MRO – method resolution order, порядок разрешения методов. Алгоритм, по которому следует искать метод в случае, если у класса два и более родителей. Алгоритм линеизирует граф наследования. Коротко можно описать так: ищи слева направо. Поэтому чем правее стоит класс, тем меньше у него приоритет при поиске метода.


Что такое миксины?

Ответ
Миксин (mix-in, анг. “примесь”), паттерн проектирования в ООП, когда в цепочку наследования добавляется небольшой класс-помощник. Например, есть класс

class NowMixin(object):
def now():
return datetime.datetime.utcnow()
Тогда любой класс, наследованный с этим миксином, будет иметь метод now().

@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM