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

По рекламе: @cyberJohnny
Download Telegram
Зачем в multiprocessing на Windows нужен if __name__ == "__main__":?

👾 — Чтобы было быстрее
👍 — Чтобы избежать рекурсивного спавна: Windows использует spawn и повторно импортирует модуль; гард не даст выполнить модульный код в дочернем процессе
🥰 — Нужен для совместимости с Python 2
⚡️ — Он отключает GIL в дочерних процессах

Библиотека задач по Python
Что делает subprocess.run (subprocess.run)(cmd, check=True)?

👾 — Печатает вывод в реальном времени
👍 — Бросает CalledProcessError, если код выхода ≠ 0
🥰 — Автоматически убивает процесс через 10 секунд
⚡️ — Включает shell=True по умолчанию

Библиотека задач по Python
Чем typing.Any отличается от object?

👾 — Any — то же самое, что object
👍 — Any совместим со всем и «протекает» проверки; object — верхний тип, но требует явных проверок/кастов для специфичных методов
🥰 — object запрещает присваивания переменных других типов
⚡️ — Any делает объект неизменяемым

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

👾 — Управляет getattr при отсутствии атрибутов
👍 — Определяет, какие имена экспортируются при from module import *; прямой import module не затрагивает
🥰 — Полностью скрывает имена от любых импортов
⚡️ — Ускоряет импорт, пропуская «лишние» имена

Библиотека задач по Python
Что означает, если __exit__(exc_type, exc, tb) возвращает True?

👾 — Исключение пробрасывается дальше
👍 — Исключение подавляется, блок with не выбросит его наружу
🥰 — Контекстный менеджер перезапускает тело with
⚡️ — Тип исключения меняется на RuntimeError

Библиотека задач по Python
Что будет у functools.lru_cache, если аргумент не хешируемый (например, list)?

👾 — Автоматически скопирует и захеширует любой аргумент
👍 — Построит ключ из args/kwargs; при нехешируемом аргументе бросит TypeError на вызове
🥰 — Нехешируемые аргументы игнорируются при ключе
⚡️ — Учитывает только позиционные аргументы, kwargs игнорируются

Библиотека задач по Python
Что представляют собой генераторы в Python, как функционирует метод send() в этих генераторах и каким образом его можно применять для управления их поведением?

Генераторы в Python представляют собой функции, которые применяют оператор yield для возврата значений и временной приостановки выполнения. С помощью метода send() можно отправлять данные обратно в генератор, которые затем могут быть использованы при следующем возобновлении его работы. Это делает генераторы двусторонними, позволяя не только получать значения, но и передавать данные внутрь.

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

👾 — Использовать select_related / prefetch_related для снижения количества запросов
👍 — Переписать все запросы ORM на raw() SQL
🥰 — Увеличить таймаут подключения к базе
⚡️ — Добавить больше воркеров Gunicorn/Uvicorn, чтобы база обрабатывала запросы быстрее

Библиотека задач по Python
👍1
Все подклассы являются подтипами в объектно-ориентированном программировании.

👾 — True
⚡️ — False
Библиотека задач по Python
В Python при сравнении объектов с оператором is и == есть разница. Что наиболее корректно?

👾 — is сравнивает значения объектов, а == — их идентичность в памяти
👍 — is проверяет идентичность (один и тот же объект в памяти), == — равенство значений
🥰 — Оба оператора работают одинаково, разницы нет
⚡️ — is всегда быстрее и потому используется вместо ==

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

👾 — [7, 19, 45, 89]
👍 — [2, 4, 22, 72]
🥰 — [4, 7, 19, 2, 89, 45, 72, 22]
⚡️ — [2, 4, 7, 19, 22, 45, 72, 89]

Библиотека задач по Python
Ваш Python-сервис должен обрабатывать большое количество одновременных HTTP-запросов. Вы замечаете, что при использовании потоков прироста производительности почти нет. Какой подход наиболее правильный?

👾 — Увеличить количество потоков в ThreadPoolExecutor, чтобы нагрузить CPU
👍 — Перейти на asyncio или uvloop, чтобы эффективно обрабатывать I/O-bound задачи без блокировок
🥰 — Использовать multiprocessing, создавая процесс на каждый запрос
⚡️ — Запускать gc.collect() вручную чаще, чтобы ускорить выполнение потоков

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

Варианты ответа:
👾 — Использовать readlines() для чтения всего файла в список
👍 — Читать файл построчно через итератор (for line in file:)
🥰 — Сначала загрузить файл в pandas.DataFrame, а затем обрабатывать
⚡️ — Использовать json.load() для загрузки файла в память

Библиотека задач по Python
У вас есть Python-сервис, обрабатывающий большие объёмы данных. При профилировании видно, что программа тратит много времени на создание временных коллекций при работе с map, filter и list comprehensions. Какой подход поможет уменьшить расход памяти и повысить эффективность?

👾 — Переписать код на while-циклы с индексами
👍 — Использовать генераторы и выражения-генераторы вместо создания списков
🥰 — Заменить map и filter на вложенные for-циклы
⚡️ — Принудительно вызывать gc.collect() после каждой итерации
Библиотека задач по Python
Что будет у functools.lru_cache, если аргумент не хешируемый (например, list)?

👾 — Автоматически скопирует и захеширует любой аргумент
👍 — Построит ключ из args/kwargs; при нехешируемом аргументе бросит TypeError на вызове
🥰 — Нехешируемые аргументы игнорируются при ключе
⚡️ — Учитывает только позиционные аргументы, kwargs игнорируются

Библиотека задач по Python
В чем разница между модулем и пакетом в Python?

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