Почему @dataclass(eq=True) без frozen по умолчанию не хэшируем?
Потому что при наличии __eq__ и изменяемости нарушается инвариант хэша; Python выставляет __hash__ = None. Нужно либо frozen=True (тогда хэш генерится), либо явно определить __hash__/использовать unsafe_hash=True на свой риск.
Библиотека собеса по Python
Библиотека собеса по Python
👍3
Что такое подгенератор (subgenerator)?
Подгенератор создается с помощью конструкции yield from внутри генератора.
Использование подгенераторов позволяет разбить генератор на несколько частей для упрощения кода и оптимизации памяти. Это полезный инструмент при работе с последовательностями.
Механизм передает значения между генераторами без сохранения всей последовательности в памяти и блокирует основной генератор до полного завершения подгенератора.
Библиотека собеса по Python
Использование подгенераторов позволяет разбить генератор на несколько частей для упрощения кода и оптимизации памяти. Это полезный инструмент при работе с последовательностями.
Механизм передает значения между генераторами без сохранения всей последовательности в памяти и блокирует основной генератор до полного завершения подгенератора.
Библиотека собеса по Python
🤔4👍2
Миксин — это
Миксины не предназначены для
class NowMixin:
def now(self):
return datetime.datetime.utcnow()
class Logger(NowMixin):
pass
logger = Logger()
print(logger.now())
— В названиях миксинов часто добавляют суффикс Mixin, чтобы
— Миксин — это технически
— Позволяет избежать
Библиотека собеса по Python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
Сопрограмма (coroutine) — это
— писать асинхронный код без коллбеков
— выполнять неблокирующие операции в одном потоке
— использовать кооперативную многозадачность
Библиотека собеса по Python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Что такое GIL в CPython, как он влияет на многопоточность, и какие практики выбирать для CPU-bound и I/O-bound задач?
GIL — глобальная блокировка интерпретатора в CPython: одновременно байткод исполняет только один поток.
CPU-bound: потоки не масштабируются по ядрам → берите процессы (multiprocessing/процесс-пулы), векторизацию/библиотеки, которые освобождают GIL (напр. NumPy), нативные расширения или вынос в отдельные сервисы.
I/O-bound: потоки подходят (блокирующие I/O обычно отпускают GIL); альтернативно — asyncio с неблокирующими вызовами.
Важно: asyncio не ускоряет CPU-bound; смешивайте — тяжёлое CPU выносите в процессы/С, блокирующее I/O — в пул потоков; измеряйте и следите, чтобы в async-код не просачивались блокировки.
Имплементации: поведение касается CPython; в других реализациях Python механизм отличается.
Библиотека собеса по Python
CPU-bound: потоки не масштабируются по ядрам → берите процессы (multiprocessing/процесс-пулы), векторизацию/библиотеки, которые освобождают GIL (напр. NumPy), нативные расширения или вынос в отдельные сервисы.
I/O-bound: потоки подходят (блокирующие I/O обычно отпускают GIL); альтернативно — asyncio с неблокирующими вызовами.
Важно: asyncio не ускоряет CPU-bound; смешивайте — тяжёлое CPU выносите в процессы/С, блокирующее I/O — в пул потоков; измеряйте и следите, чтобы в async-код не просачивались блокировки.
Имплементации: поведение касается CPython; в других реализациях Python механизм отличается.
Библиотека собеса по Python
👍3
Объясни, как Django управляет транзакциями: autocommit, transaction.atomic() (savepoint’ы и «broken» состояние), ATOMIC_REQUESTS, когда нужен select_for_update(), и что учитывать с CONN_MAX_AGE/PgBouncer.
По умолчанию autocommit: каждый ORM-запрос, меняющий БД, — своя транзакция. atomic() начинает транзакцию (или создаёт savepoint при вложенности); исключение помечает блок как broken → откат до ближайшего savepoint/транзакции; при выходе — commit или rollback. ATOMIC_REQUESTS=True автоматически оборачивает view, но может растягивать транзакции (долгие I/O, внешние вызовы) — применять выборочно. select_for_update() требует активной транзакции (atomic()), в Postgres можно nowait/skip_locked для борьбы с блокировками. Изоляция — та, что у БД (обычно READ COMMITTED). Соединения: CONN_MAX_AGE удерживает их открытыми; в проде обычно PgBouncer (session/transaction mode), следи за совместимостью с server-side курсорами и длительными транзакциями.
Библиотека собеса по Python
Библиотека собеса по Python
👍1
Как и для чего используется %s?
%s — это Спецификатор формата и он используется для форматирования строк.
Он позволяет вставлять значения других типов (числа, объекты и т. д.) в строковые выражения, автоматически преобразуя их к строковому представлению.
%s заменяется на строковое представление переданного значения в процессе форматирования. Это удобный способ интерполяции строк.
Помимо простой интерполяции, %s полезен для оформления вывода данных в консоль, логгирования, составления SQL-запросов с подстановкой значений и других задач работы со строками.
Библиотека собеса по Python
Он позволяет вставлять значения других типов (числа, объекты и т. д.) в строковые выражения, автоматически преобразуя их к строковому представлению.
%s заменяется на строковое представление переданного значения в процессе форматирования. Это удобный способ интерполяции строк.
Помимо простой интерполяции, %s полезен для оформления вывода данных в консоль, логгирования, составления SQL-запросов с подстановкой значений и других задач работы со строками.
Библиотека собеса по Python
👍1
Вы разрабатываете высоконагруженный сервис на FastAPI. При нагрузочном тестировании видно, что время отклика сильно растёт, хотя CPU и память используются не полностью. Какие могут быть причины и как вы будете решать проблему?
Чаще всего проблема в блокирующем коде (синхронные запросы к БД, внешним API или тяжёлые вычисления), который “забивает” event loop. Нужно вынести такие операции в ThreadPoolExecutor/ProcessPoolExecutor или заменить их на асинхронные аналоги (например, httpx.AsyncClient, databases, async-драйверы для SQL/NoSQL). Также стоит проверить конфигурацию Uvicorn/Gunicorn (число воркеров, workers-per-core) и настроить connection pooling.
Библиотека собеса по Python
Библиотека собеса по Python
👍2
System Design интервью для AI-сервисов
Как спроектировать агента, который не «съест» весь бюджет и не упадёт под нагрузкой? Это ключевой вопрос 2026 года. Ответы — в нашем обновлённом курсе
«Разработка AI-агентов».
Ключевые темы:
🔹 Экономика. Роутинг моделей, кэширование, лимиты.
🔹 Надёжность.
🔹 Интеграция. Встраивание AI в существующий Python-бэкенд.
Стартуй сейчас! Не жди потока, материалы доступны сразу.
🎟 ПромокодAgent — скидка 10 000 ₽ (до 28 февраля).
👉 Прокачать System Design
Как спроектировать агента, который не «съест» весь бюджет и не упадёт под нагрузкой? Это ключевой вопрос 2026 года. Ответы — в нашем обновлённом курсе
«Разработка AI-агентов».
Ключевые темы:
🔹 Экономика. Роутинг моделей, кэширование, лимиты.
🔹 Надёжность.
Human-in-the-loop, runbooks, восстановление состояний.🔹 Интеграция. Встраивание AI в существующий Python-бэкенд.
Стартуй сейчас! Не жди потока, материалы доступны сразу.
🎟 Промокод
👉 Прокачать System Design
❤1
Вы запускаете высоконагруженный Python-сервис на asyncio. Со временем отклик начинает расти, хотя CPU и память загружены слабо. В чём может быть причина и как подойти к решению?
Обычно это значит, что внутри event loop выполняется блокирующий код (синхронные запросы к БД, тяжёлые вычисления, блокирующие I/O). Их нужно вынести в отдельные процессы/пулы потоков (ProcessPoolExecutor, ThreadPoolExecutor) или заменить на асинхронные аналоги библиотек.
Библиотека собеса по Python
Библиотека собеса по Python
👍2
Как FastAPI обрабатывает зависимости с Depends, и как происходит их разрешение в контексте асинхронных и синхронных функций?
FastAPI строит граф зависимостей рекурсивно при старте приложения. При обработке запроса оно вызывает зависимости в порядке topological sort. Асинхронные зависимости вызываются с await, синхронные — через обычный вызов. FastAPI автоматически определяет тип зависимости по сигнатуре. Повторно используемые зависимости кэшируются внутри одного запроса. Исключения в зависимостях прерывают цепочку и оборачиваются в HTTP-ответ.
Библиотека собеса по Python
Библиотека собеса по Python
👍1
Что спросят на собеседовании AI-инженера в 2026 году?
«Как написать промпт» — этот вопрос уже никто не задаёт. На сеньорских собесах теперь спрашивают: как защитить агента от бесконечного цикла, как настроить time-travel в LangGraph и как парсить кривые таблицы для RAG.
Мы полностью обновили наш курс по AI-агентам. Это мощный инженерный гайд, который закроет все пробелы в System Design LLM-приложений и подготовит вас к сложным продакшн-задачам.
Что вы заберёте в свой арсенал:
🔹 хардкорный RAG: продвинутые подходы к извлечению данных и улучшению поисковых запросов;
🔹 оркестрация: human-in-the-loop, восстановление состояний и runbooks;
🔹 LLMOps: тестирование, оценка качества, логирование и выявление регрессий;
🔹 экономика ИИ: жёсткий контроль токенов, кэш и переключение производительности;
🔹 легальный деплой: как разворачивать агентов строго по 152-ФЗ.
До 28 февраля действует скидка 10 000 рублей по промокоду
Участвуйте в акции «3 курса по цене 1» и получайте ещё два направления бесплатно.
Прокачать навыки для Senior AI Engineer
«Как написать промпт» — этот вопрос уже никто не задаёт. На сеньорских собесах теперь спрашивают: как защитить агента от бесконечного цикла, как настроить time-travel в LangGraph и как парсить кривые таблицы для RAG.
Мы полностью обновили наш курс по AI-агентам. Это мощный инженерный гайд, который закроет все пробелы в System Design LLM-приложений и подготовит вас к сложным продакшн-задачам.
Что вы заберёте в свой арсенал:
🔹 хардкорный RAG: продвинутые подходы к извлечению данных и улучшению поисковых запросов;
🔹 оркестрация: human-in-the-loop, восстановление состояний и runbooks;
🔹 LLMOps: тестирование, оценка качества, логирование и выявление регрессий;
🔹 экономика ИИ: жёсткий контроль токенов, кэш и переключение производительности;
🔹 легальный деплой: как разворачивать агентов строго по 152-ФЗ.
До 28 февраля действует скидка 10 000 рублей по промокоду
Agent.Участвуйте в акции «3 курса по цене 1» и получайте ещё два направления бесплатно.
Прокачать навыки для Senior AI Engineer
К чему может быть применен декоратор?
Декораторы можно применять к:
— Обычным функциям, определенным с помощью def.
— Методам классов.
— Статическим методам и методам класса внутри классов.
— Lambda функциям.
— Методам встроенных типов в Python (например, к методам списков, словарей).
Библиотека собеса по Python
— Обычным функциям, определенным с помощью def.
— Методам классов.
— Статическим методам и методам класса внутри классов.
— Lambda функциям.
— Методам встроенных типов в Python (например, к методам списков, словарей).
Библиотека собеса по Python
👍2❤1
💼 Что спросят про AI-агентов на Python-собеседовании в 2026 году?
Просто знать
📚 В программе для профи:
— промышленный
—
— экономика агентов: стратегии снижения затрат на инференс моделей;
— юриспруденция: как работать с персональными данными в рамках законодательства РФ.
Начните подготовку к карьере AI-инженера уже сегодня — вводные материалы доступны сразу.
⏳ Специальные условия до 28 февраля:
— введите промокод
— участвуйте в **акции «3 курса по цене 1» — два курса в подарок.
👉 Получить доступ к курсу и подаркам
Просто знать
LangChain уже мало. Работодатели ищут тех, кто понимает архитектуру LangGraph, умеет оптимизировать токены и знаком с 152-ФЗ. Мы обновили наш курс, чтобы вы могли уверенно отвечать на вопросы про промышленный RAG и трассировку ошибок.📚 В программе для профи:
— промышленный
RAG: как обосновать выбор методов извлечения данных;—
LangGraph: понимание механизмов time-travel и восстановления состояний;— экономика агентов: стратегии снижения затрат на инференс моделей;
— юриспруденция: как работать с персональными данными в рамках законодательства РФ.
Начните подготовку к карьере AI-инженера уже сегодня — вводные материалы доступны сразу.
⏳ Специальные условия до 28 февраля:
— введите промокод
Agent для получения скидки 10 000 рублей**; — участвуйте в **акции «3 курса по цене 1» — два курса в подарок.
👉 Получить доступ к курсу и подаркам
Как обеспечить строгую согласованность кэша при записи в Django/DRF под высокой нагрузкой?
Короткий ответ: Делайте запись в БД в транзакции, фиксируйте событие в outbox и только после коммита инвалидируйте/перестраивайте кэш (write-through), используя версионирование ключей. Защищайтесь от stampede через короткие TTL + jitter и распределённые локи в Redis. Для чтения с реплик учитывайте лаг и маршрутизируйте горячие чтения на мастер или используйте read-your-writes токены/версии.
Библиотека собеса по Python
Библиотека собеса по Python
В чём разница между is и == в Python, и когда использовать is?
is проверяет тождество (это один и тот же объект), == — равенство значений (через __eq__). Используйте is только для None, булевых (True/False) и собственных «сентинелов». Для чисел/строк/списков — ==; на совпадение is из-за интернирования полагаться нельзя.
Библиотека собеса по Python
Библиотека собеса по Python
👾1
Каковы способы настройки функциональности интерфейса администратора Django?
Существует несколько способов настройки функциональности интерфейса администратора Django. Вы можете использовать форму добавления/изменения, которая автоматически генерируется Django, вы можете добавлять модули JavaScript с помощью параметра js. Этот параметр в основном представляет собой список URL-адресов, указывающих на модули JavaScript, которые должны быть включены в ваш проект в теге <noscript>. Вы также можете написать представления для администратора, если хотите. Хотите глубже изучить основы Python? Добро пожаловать на курс: https://proglib.academy/python
Библиотека собеса по Python
Библиотека собеса по Python
Какова амортизированная сложность push_back у динамического массива при удвоении ёмкости и почему?
O(1) амортизированно. Редкие дорогостоящие копирования «распределяются» на множество дешёвых вставок; потенциал/агрегатный анализ показывает, что суммарная стоимость m операций ≤ 3m. Кстати, у нас сейчас действует 40% скидка на курс Алгоритмы и структуры данных .
Библиотека собеса по Python
Библиотека собеса по Python
За год мы провели три потока курса по ИИ-агентам, а теперь запускаем масштабное обновление!
В новом, четвёртом потоке мы учли все пожелания студентов, добавили большой блок про
В программе:
— практика с первого занятия:
— оркестрация в
— продвинутый
— контроль экономики агентов: маршрутизация и кеширование запросов;
— развёртывание локальных опенсорс-моделей с соблюдением 152-ФЗ.
В честь старта продаж действует спецпредложение: 3 курса по цене 1 (два дополнительных курса в подарок).
Доступ к материалам для предварительной подготовки откроется сразу после оплаты.
По промокоду
👉 Присоединиться к четвёртому потоку и вывести агентов в прод
В новом, четвёртом потоке мы учли все пожелания студентов, добавили большой блок про
AgentOps и сместили фокус с базовых концепций на суровый инжиниринг. Рассказать про GIL и декораторы на собеседовании легко, а вот сделать так, чтобы Python-агент не падал в проде и не галлюцинировал — задача со звёздочкой.В программе:
— практика с первого занятия:
Jupyter-ноутбуки с автопроверкой;— оркестрация в
LangGraph: human-in-the-loop и механизм time-travel;— продвинутый
RAG для продакшена и парсинг сложных документов;— контроль экономики агентов: маршрутизация и кеширование запросов;
— развёртывание локальных опенсорс-моделей с соблюдением 152-ФЗ.
В честь старта продаж действует спецпредложение: 3 курса по цене 1 (два дополнительных курса в подарок).
Доступ к материалам для предварительной подготовки откроется сразу после оплаты.
По промокоду
Agent забирайте скидку 10 000 ₽ (89 000 ₽ вместо 99 000 ₽). Успейте занять место до 28 февраля!👉 Присоединиться к четвёртому потоку и вывести агентов в прод
В чем разница между локальными и глобальными переменными в SQL?
Локальные переменные могут быть доступны только внутри функции, в которой они были объявлены. А глобальные переменные, будучи объявленными вне какой-либо функции, хранятся в фиксированных структурах памяти и могут использоваться во всей программе.
Библиотека собеса по Python
Библиотека собеса по Python
👍3
Как избежать «висячих» задач и утечек при отмене в asyncio?
Используйте TaskGroup и asyncio.timeout, всегда await-ьте созданные задачи; при отмене ловите CancelledError, делайте cleanup в finally, закрывайте ресурсы (aclose/async with), а shield применяйте только к коротким критическим секциям.
Библиотека собеса по Python
Библиотека собеса по Python
👍3❤1