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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Как работать с большими строками/байтами без лишних копий и перерасхода памяти?

Не конкатенируйте по одному кусочку; для строк используйте ''.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
Как находить и устранять утечки памяти в долгоживущем сервисе?

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

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