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

По рекламе: @cyberJohnny
Download Telegram
Что выведет код?

👾 — {1}
👍 — {9}
🥰 — {KeyError}
👏 — {1} или {9}

Библиотека задач по Python
Нужно запустить долгую корутину и дать вызывающему коду таймаут, но при истечении времени задача не должна отменяться, а продолжить выполняться в фоне. Что выбрать?

👾 — await asyncio.wait_for(op(), timeout=5)
👍 — t = asyncio.create_task(op()); await asyncio.wait_for(asyncio.shield(t), timeout=5)
🥰 — Запуск через ThreadPoolExecutor
— await asyncio.gather(op(), return_exceptions=True) с таймаутом

Библиотека задач по Python
Нужно вызвать блокирующую функцию (нет async-аналога) из обработчика на asyncio, не блокируя event loop. Что выбрать?

👾 — Просто вызвать функцию напрямую в корутине
👍 — await asyncio.to_thread(func, *args, **kwargs)
🥰 — Обернуть функцию в async def и вызвать await func()
— Запустить функцию через time.sleep для «уступки» циклу

Библиотека задач по Python
👍1
Как в FastAPI (SQLAlchemy 2.0 async) корректно обеспечить «сеанс на запрос» с авто-rollback при исключении и гарантированным закрытием соединения?

👾 — Создать один глобальный AsyncSession и шарить его между хэндлерами
👍 — Использовать зависимость с yield
🥰 — Открывать/закрывать сессию вручную в каждом хэндлере try/except
— Класть сессию в app.state на старте приложения и переиспользовать

Библиотека задач по Python
В FastAPI сервисе при нагрузке появляются предупреждения Unclosed client session/connector is closed, растёт число открытых файловых дескрипторов. Вы используете aiohttp для внешних HTTP-запросов. Какой подход корректный?

👾 — Создавать aiohttp.ClientSession() на каждый запрос и не закрывать — пусть GC разберётся
👍 — Создать один ClientSession на старте приложения (lifespan), переиспользовать во всех хэндлерах и корректно закрыть на shutdown
🥰 — Заменить на синхронный requests внутри run_in_executor — тогда дескрипторы не утекут
— Для каждого запроса создавать новый TCPConnector(force_close=True) и сразу закрывать сессию

Библиотека задач по Python
Что из перечисленного не является ключевым словом в языке Python?

👾 — pass
👍 — eval
🥰 — assert
⚡️ — nonlocal

Библиотека задач по Python
Нужно задать таймаут для блока асинхронных операций так, чтобы по истечении времени корректно произошло отмена вложенных 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