Библиотека собеса по Python | вопросы с собеседований
6.06K subscribers
683 photos
14 videos
568 links
Вопросы с собеседований по Python и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/6587aafa

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Halloween Special — последний день магии! 👻

Успевай сегодня купить курсы со скидкой 40%!

А также участвуй в розыгрыше MacBook Pro 14 💻

После полуночи останется только тыква 🎃

🔮 Открой портал и выбери курс
Как работать с большими строками/байтами без лишних копий и перерасхода памяти?

Не конкатенируйте по одному кусочку; для строк используйте ''.join(...)/io.StringIO, для байтов — bytearray/io.BytesIO/memoryview (срезы без копий). Стримьте по чанкам, для файлов подойдёт mmap. Помните: срез bytes копирует, memoryview — нет.

Библиотека собеса по Python
1
Когда выбирать typing.Protocol вместо ABC и какие есть ограничения?

Protocol — для структурной типизации («утиная» совместимость) без наследования: достаточно совпадения сигнатур. Работает на уровне тайпчекера; для рантайм-проверок нужен @runtime_checkable и только isinstance/issubclass. Не хранит состояние и не навязывает реализацию — идеален для плагинных интерфейсов.

Библиотека собеса по Python
👍31
Разница между Django OneToOneField и ForeignKey Field?

Оба они являются наиболее распространенными типами полей, используемых в Django. Единственное различие между ними заключается в том, что поле ForeignKey состоит из параметра on_delete вместе с классом модели, поскольку оно используется для отношений «многие к одному», тогда как, с другой стороны, OneToOneField реализует только отношение «один к одному» и требует только класс модели.

Библиотека собеса по Python
Что делает функция scandir?

Функция os.scandir() в Python предназначена для получения итератора объектов os.DirEntry, которые представляют записи в указанном каталоге. Записи возвращаются в случайном порядке, при этом специальные записи '.' и '..' всегда будут находиться в начале списка.

Библиотека собеса по Python
Что такое old-style и new-style классы и в чем их различия?

— Old-style классы наследуются напрямую от класса type, тогда как new-style классы имеют наследование от класса object.

— New-style классы предлагают дополнительные функции, такие как дескрипторы, свойства и слоты, которые недоступны в old-style классах.

— В new-style классах метод __init__ вызывается при наследовании, в отличие от old-style классов.

— New-style классы являются предпочтительными, так как они полностью поддерживают принципы объектно-ориентированного программирования. Большинство библиотек требуют именно их использование.

Рекомендуется применять new-style классы, унаследованные от object, поскольку они обладают расширенными возможностями и лучше интегрируются с другими объектами.


Библиотека собеса по Python
Как реализовать корректный graceful shutdown в asyncio-сервисе без потери данных?

Ловите SIGTERM/SIGINT (Unix — loop.add_signal_handler), ставьте общий флаг/Event, отменяйте воркеры через TaskGroup/cancel(), ждите их в try/except CancelledError/finally. Давайте тайм-аут на дренаж очередей и завершение in-flight операций, корректно закрывайте пулы (БД/HTTP). В ASGI используйте lifespan-хуки (startup/shutdown).

Библиотека собеса по Python
👍1
Как находить и устранять утечки памяти в долгоживущем сервисе?

Включите tracemalloc и снимайте снэпшоты до/после нагрузки, ищите рост по трассам; проверяйте циклы gc.get_objects() и gc.garbage, избегайте __del__ на участниках циклов, используйте weakref для обратных ссылок. Ограничивайте кэши (lru_cache(maxsize=…)), следите за «вечно живущими» задачами asyncio, закройте пулы/соединения и проверяйте, что обработчики событий не держат замыкания на большие объекты.

Библиотека собеса по Python
😁1
Как спроектировать контекстные менеджеры так, чтобы ресурсы гарантированно освобождались даже при отмене/исключениях (sync/async)?

Реализуйте __enter__/__exit__ или __aenter__/__aexit__, делайте освобождение идемпотентным и безопасным к повторному вызову, в __exit__ не глотайте исключения без нужды (возвращайте False). Для композиции используйте contextlib.ExitStack/AsyncExitStack, для потоков/соединений — async with/aclose. В корутинах без менеджера — try/finally. Критические закрытия при отмене можно кратко «экранировать» (shield) ради целостности.

Библиотека собеса по Python
Как делать атомарную запись и надёжную фиксацию файла при сбоях и конкурирующих записях?

Пишите во временный файл в том же каталоге, flush() → os.fsync(tmp) → os.replace(tmp, target) (атомарный rename), затем os.fsync(dir). Для множественных писателей используйте файловый lock (fcntl/msvcrt/portalocker) или координацию через очередь/БД; не перезаписывайте «на месте».

Библиотека собеса по Python
😁1
Как спроектировать безопасную плагинную систему без «грязных» импортов?

Определите стабильный интерфейс (например, Protocol), открывайте плагины через importlib.metadata.entry_points() по своему namespace, проверяйте версию/метаданные и оборачивайте инициализацию в таймаут/изоляцию. Недоверенные плагины гоняйте в отдельном процессе с IPC (gRPC/stdio), ошибки — в карантин, ведите allowlist/подписи и телеметрию.

Библиотека собеса по Python
😁1
🖤 ЧЕРНАЯ ПЯТНИЦА: СКИДКА 40%

Что общего между Black Friday и подготовкой к собесам? Оба случаются раз в год, и оба нельзя пропустить! 😎

🔥 Курсы со скидкой 40% до конца ноября:

🐍 Python
📐 Математика
🤖 AI
🔢 Алгоритмы и структуры

Пока другие покупают кофемашины и телевизоры, инвестируй в себя📈
Как реализовать надёжные ретраи без «DDOS-эффекта» и с идемпотентностью?

Разделяйте retryable/неповторяемые ошибки, ставьте таймауты, экспоненциальный бэкофф с джиттером и предел попыток, ограничивайте конкуренцию (семафор/пул), используйте идемпотентные ключи/dedup на стороне получателя, включайте circuit breaker и метрики попыток/успехов.

Библиотека собеса по Python