Python задачи и вопросы
1.23K subscribers
427 photos
1 file
153 links
Задачи и вопросы с собеседований по python разного уровня сложности

По рекламе: @cyberJohnny
Download Telegram
Нужно задать таймаут для блока асинхронных операций так, чтобы по истечении времени корректно произошло отмена вложенных await’ов и наверху ловился TimeoutError без «проглатывания» отмен. Что выбрать?

👾 — await asyncio.wait_for(coro, timeout=5)
👍 — async with asyncio.timeout(5): ...
🥰 — signal.alarm(5) в том же потоке
⚡️ — Оборачивать всё в собственный try/except CancelledError

Библиотека задач по Python
Какой будет вывод следующего фрагмента кода?

s = {1, 2, 3, 3, 2, 4, 5, 5}
print(s)

👾 — {1, 2, 3, 3, 2, 4, 5, 5}
👍 — {1, 2, 3, 4, 5}
🥰 — None
⚡️ — {1, 5}

Библиотека задач по Python
Как работает хэш-таблица?

Хэш-таблица в Python реализована в виде словаря (dict). Вот как это работает:

— Хэширование ключей: Когда вы добавляете пару ключ-значение в словарь, Python сначала вычисляет хэш-код ключа с помощью встроенной функции hash(). Хэш-код — это целое число, представляющее «отпечаток» ключа.

— Разрешение коллизий: Если два разных ключа имеют одинаковый хэш-код (коллизия), Python использует механизм разрешения коллизий для размещения значений в памяти. Одним из наиболее распространенных методов разрешения коллизий является метод цепочек, когда для каждого «ячейки» хэш-таблицы выделен список, в который добавляются все значения с одинаковыми хэш-кодами.

— Поиск значения: При поиске значения по ключу Python сначала вычисляет хэш-код ключа и затем использует его для определения соответствующей «ячейки» в хэш-таблице. Затем происходит поиск значения внутри этой «ячейки» (или цепочки).
Библиотека задач по Python
Что выведет код сверху?

👾 — 3:27
👍 — 2:8
🥰 — 8
⚡️ — 27

Библиотека задач по Python
👍1
Как работает select_related в Django ORM?

👾 — Выполняет отдельный запрос для каждой связанной модели
👍 — Делает SQL JOIN и подтягивает связанные объекты сразу
🥰 — Кэширует связанные объекты в памяти на уровне Python
⚡️ — Автоматически превращает ForeignKey в ManyToMany

Библиотека задач по Python
👍1
Что произойдёт при await asyncio.gather(a(), b(), return_exceptions=False), если a() уже отменена (CancelledError), а b() всё ещё выполняется?

👾 — Вернётся список с CancelledError на месте a(), b() продолжит выполняться
👍 — Будет проброшена CancelledError, при этом gather отменит b() и дождётся её завершения/cleanup
🥰 — Будет проброшена CancelledError, но b() оставят работать в фоне
⚡️ — Поведение не определено и зависит от версии

Библиотека задач по Python
В asyncio родительский таск сделал token = var.set(1) и затем создал два таска t1, t2; в t1 внутри выполняется var.set(2). Как ContextVar ведёт себя по умолчанию?

👾 — Общее на все таски — t1 меняет значение и для родителя, и для t2
👍 — Контекст копируется при создании таска — t1 видит 1, может сменить на 2 только для себя; родитель и t2 остаются с 1
🥰 — Значение видно только в пределах одного await
⚡️ — Требуется вручную вызывать copy_context(), иначе ContextVar не работает

Библиотека задач по Python
Что делает os.rename()?

В Python функция os.rename() используется для переименования файла или директории в операционной системе. Она входит в модуль os.
Библиотека задач по Python
Что делает os.rename()?

В Python функция os.rename() используется для переименования файла или директории в операционной системе. Она входит в модуль os.
Библиотека задач по Python
Что верно для Python ≥3.7 про завершение генератора и yield from?

👾 — raise StopIteration(x) эквивалентен return x; yield from игнорирует значение
👍 — Явный raise StopIteration внутри генератора превращается в RuntimeError (PEP 479), а return x задаёт StopIteration.value=x; выражение yield from sub() возвращает это x
🥰 — return x приводит к RuntimeError; корректно только raise StopIteration(x)
⚡️ — yield from всегда возвращает None

Библиотека задач по Python
Что выведет код?

👾 — ['first': 'sunday', 'second': 'monday', 1: 3, 2:4]
👍 — ['first': 'sunday', 'second': 'monday']
🥰 — [1: 3, 2: 4]
⚡️ — Ничего из вышеперечисленного
Библиотека задач по Python
Что выведет код?

👾 — [[4, 5], [1, 2, 3], [6, 7, 8, 9]]
👍 — [[6, 7, 8, 9], [1, 2, 3], [4, 5]]
🥰 — [2, 3, 4]
⚡️ — [3, 5, 9]

Библиотека задач по Python
В asyncio вы делаете task.cancel(), а внутри корутины стоит:

try:
await do_io()
except Exception:
log("error")

👾 — Отмена не поймается, т.к. CancelledError — потомок BaseException
👍 — Отмена будет поймана этим except, и если не пере-бросить, задача завершится «успехом», фактически проглотив отмену
🥰 — Отмена превратится в TimeoutError
⚡️ — Исключение поднимется мимо except и всегда завершит задачу как отменённую

Библиотека задач по Python
Что возвращает a[:] для списка?

👾 — Новую (поверхностную) копию
⚡️ — Ссылку на исходный список
🥰 — Новую глубокую копию

Библиотека задач по Python
🐍 Что такое сцепление исключений?

Сцепление исключений представляет собой метод, который позволяет сохранить первоначальную причину ошибки при её дополнительной обработке.

Когда возникает исключение, его можно перехватить с помощью блока try/except и затем вызвать другое исключение в процессе обработки. При этом первоначальное исключение сохраняется как причина для нового.

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

Библиотека задач по Python
Что гарантирует GIL в CPython?

👾 — Отсутствие гонок данных в пользовательском коде
⚡️ — Параллельное выполнение CPU-bound задач в потоках
🥰 — Единовременное выполнение байткода одним потоком интерпретатора
👍 — Что все I/O операции неблокирующие

Библиотека задач по Python
Что делает параметр response_model в декораторе маршрута? (FastAPI)

👾 — Ограничивает типы входных параметров
⚡️ — Валидирует и сериализует ответ, отсекая лишние поля
🥰 — Меняет код ответа по умолчанию
👍 — Включает автодокументацию

Библиотека задач по Python
Что выведет код?

👾 — Неверный синтаксис для наследования
👍 — Ошибка, так как при создании объекта необходимо передать аргумент
🥰 — Ничего
⚡️ — A disp()
Библиотека задач по Python
В каких ситуациях возникает исключение NotImplementedError?

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

Примечание: в стандартной библиотеке Python есть объект array, но здесь мы специально будем обсуждать массив из популярной библиотеки Numpy.

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

Арифметические действия в списках добавляют или удаляют элементы из списка. Арифметические действия на массивах соответствуют функциям линейной алгебры.

Массивы используют меньше памяти и обладают значительно большей функциональностью.
Библиотека задач по Python