Библиотека собеса по Python | вопросы с собеседований – Telegram
Библиотека собеса по Python | вопросы с собеседований
5.98K subscribers
703 photos
15 videos
693 links
Вопросы с собеседований по Python и ответы на них.

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Что означают параметры _value и __value?

_value: одиночное подчеркивание в начале имени указывает на то, что этот параметр не предназначен для использования за пределами функции. Это всего лишь соглашение, а не ограничение языка.

__value: двойное подчеркивание в начале имени обозначает, что это имя зарезервировано Python для специальных целей, таких как init для конструктора класса. Такие параметры могут выполнять дополнительные функции.

Библиотека собеса по Python
Что такое замыкание?

Замыкание (closure) — это функция, которая запоминает значения переменных из области видимости, в которой она была создана, и может получить к ним доступ, даже если она будет вызвана за пределами этой области видимости.

Ключевым моментом является то, что замыкание запоминает ссылки на переменные, а не сами значения. Это позволяет обращаться к актуальным значениям переменных даже после того, как функция, создавшая замыкание, завершила работу.

Обычно замыкания используются, если нужно:
— Создать функцию с сохранением некоторого состояния между вызовами.
— Избежать использования глобальных переменных и повысить инкапсуляцию.
— Частично применить функцию без вызова (создание другой функции).

В Python замыкания реализуются элегантно и просто с помощью вложенных функций. Это мощный механизм, позволяющий писать короткий и чистый код.


Библиотека собеса по Python
👍41
Как управлять состоянием в асинхронном Python?

Если речь про AI-агентов, то правильный ответ в 2026 — LangGraph.

Вас спросят:

— Как избежать бесконечных циклов в агенте? (Ответ: recursion_limit).
— Как хранить историю диалога между перезапусками? (Ответ: Checkpointers).
— Как реализовать ветвление логики? (Ответ: Conditional Edges).

Разберитесь в теме сейчас, чтобы уверенно отвечать на собесах.

Записаться на курс

База для подготовки: Смотрите вводный урок бесплатно.
Можно ли объявлять функцию внутри другой функции? Где она будет видна?

Да, функции можно объявлять внутри других функций. Такая вложенная функция будет видна и доступна для вызова только внутри родительской функции, в которой она определена.

Это называется замыканием и позволяет ограничить область видимости вложенной функции, чтобы она не загрязняла глобальное пространство имен.

Вложенные функции могут быть полезны, когда нужно реализовать вспомогательную логику, связанную только с работой родительской функции.


Библиотека собеса по Python
Как решить проблему конфликта зависимостей?

Конфликт зависимостей может возникнуть, когда два разных пакета требуют разные версии одной и той же зависимости.

Эту проблему можно решить с помощью менеджера пакетов pipenv, который автоматически устанавливает версии таким образом, чтобы они не конфликтовали друг с другом.
Вместо requirements.txt pipenv предоставляет файл pipenv с версиями пакетов.

При этом один из недостатков pipenv состоит в том, что создание файла pipenv занимает очень много времени.

Для проверки наличия конфликта зависимостей у пакета можно использовать команду pip check.


Библиотека собеса по Python
👍4❤‍🔥1
В чем разница между модулем, пакетом и библиотекой?

Модуль — это просто файл Python, который предназначен для импорта в скрипты или в другие модули. Он содержит функции, классы и глобальные переменные.

Пакет — это набор модулей, которые сгруппированы вместе внутри папки для обеспечения согласованной функциональности. Пакеты могут быть импортированы точно так же, как модули. Обычно в них есть init.pyfile, который указывает интерпретатору Python обрабатывать их.

Библиотека — это набор пакетов.


Библиотека собеса по Python
👍4
мКак вычислить среднее значение, медиану, моду, дисперсию, стандартное отклонение и различные квантильные диапазоны в Pandas?

✔️ DataFrame.mean(): среднее
✔️ DataFrame.median(): медиана
✔️ DataFrame.mode(): мода
✔️ DataFrame.var(): дисперсия
✔️ DataFrame.std(): стандартное отклонение
✔️ DataFrame.quantile(): для расчета квантильного диапазона, используя значение диапазона в качестве параметра


Библиотека собеса по Python
👍5
Как отвечать на вопросы про LLM-разработку?

Спрос на Python-разработчиков, умеющих работать с агентами, растёт. Курс «Разработка ИИ-агентов» — это способ быстро освоить актуальный стек.

Что изучим на практике:

LangFlow и AutoGen;
— протоколы MCP и A2A;
— интеграцию векторных баз данных;
— безопасность и оптимизацию агентов.

Первая лекция уже доступна. Посмотрите её, чтобы понимать тренды и увереннее чувствовать себя на интервью.

Записаться

Смотреть лекцию
Чем «data»-дескриптор отличается от «non-data», как это влияет на порядок поиска атрибута, и почему @property — это тоже дескриптор?

В Python любой объект с __get__ — дескриптор.

Non-data дескриптор: имеет только __get__. Проигрывает записи в obj.__dict__.
@property — именно non-data дескриптор.

Data дескриптор: имеет __set__ и/или __delete__. Имеет приоритет над obj.__dict__, блокируя прямую подмену.

Порядок разрешения атрибутов (__getattribute__): data-denoscriptor → obj.__dict__ → non-data denoscriptor/атрибут класса → __getattr__.

Пишите свой data-дескриптор для переиспользуемой логики: валидация, типизация, lazy/кэш, связка с внешними ресурсами.


Библиотека собеса по Python
2👍1
Вопрос с собеседования: «Как реализовать память в LLM-приложении?»

Если в 2026 году вы ответите «просто передам всю историю переписки», вы не пройдёте. Контекстное окно всё ещё стоит денег, а RAG стал стандартом.

На курсе мы разбираем профессиональные паттерны: Summary Memory, Vector Store Memory, Entity Memory. Мы учим строить архитектуру, которая эффективна и масштабируема. Это то, что отличает джуна от сильного разработчика.

Что прокачаем:

— Работу с асинхронностью в Python (для стриминга токенов).
— Проектирование сложных пайплайнов на LangGraph.
— Интеграцию агентов с внешними API и базами данных.

Узнать подробности курса
Какой метод использовался до оператора in для проверки наличия ключа в словаре?

До появления оператора in в Python, чтобы проверить, содержит ли словарь определенный ключ, использовался метод словаря has_key().

Этот метод принимал в качестве аргумента проверяемый ключ и возвращал логическое значение - True, если ключ присутствовал в словаре, и False - если нет.

В Python 2.5 появился более понятный и краткий оператор in, поэтому сейчас рекомендуется использовать именно его, а has_key() считается устаревшим.


Библиотека собеса по Python
👍6
Почему @dataclass(eq=True) без frozen по умолчанию не хэшируем?

Потому что при наличии __eq__ и изменяемости нарушается инвариант хэша; Python выставляет __hash__ = None. Нужно либо frozen=True (тогда хэш генерится), либо явно определить __hash__/использовать unsafe_hash=True на свой риск.

Библиотека собеса по Python
👍3
Что такое подгенератор (subgenerator)?

Подгенератор создается с помощью конструкции yield from внутри генератора.

Использование подгенераторов позволяет разбить генератор на несколько частей для упрощения кода и оптимизации памяти. Это полезный инструмент при работе с последовательностями.

Механизм передает значения между генераторами без сохранения всей последовательности в памяти и блокирует основной генератор до полного завершения подгенератора.


Библиотека собеса по Python
🤔4👍2
💻 Что такое миксины?

Миксин — это паттерн проектирования в объектно-ориентированном программировании, при котором в цепочку наследования добавляется вспомогательный класс с небольшой изолированной функциональностью.

Миксины не предназначены для самостоятельного использования — они добавляют дополнительные методы или свойства другим классам через множественное наследование. Их цель — повторное использование кода без создания иерархий, перегруженных логикой.

Пример миксина:
class NowMixin:
def now(self):
return datetime.datetime.utcnow()
Теперь любой класс, унаследованный от NowMixin, будет обладать методом now():
class Logger(NowMixin):
pass

logger = Logger()
print(logger.now())
🚩 Особенности:
— В названиях миксинов часто добавляют суффикс Mixin, чтобы обозначить их вспомогательную природу
— Миксин — это технически обычный класс, но используемый как «добавка» к основному поведению
— Позволяет избежать дублирования кода и сделать архитектуру гибче

Библиотека собеса по Python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52
Что такое сопрограмма (coroutine) в Python?

Сопрограмма (coroutine) — это расширенная подпрограмма, которая может приостанавливать выполнение и позже продолжать с того же места, а также поддерживает несколько точек входа.

🚩 В Python сопрограммы реализуются с помощью генераторов и, начиная с Python 3.5, через ключевые слова `async` и `await`.

🔎 Благодаря сопрограммам мы можем:
— писать асинхронный код без коллбеков
— выполнять неблокирующие операции в одном потоке
— использовать кооперативную многозадачность

🔎Сопрограммы позволяют писать асинхронный код так же просто, как и обычный синхронный, что делает его намного удобнее и понятнее.

Библиотека собеса по 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
👍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
👍1
Как и для чего используется %s?

%s
— это Спецификатор формата и он используется для форматирования строк.
Он позволяет вставлять значения других типов (числа, объекты и т. д.) в строковые выражения, автоматически преобразуя их к строковому представлению.

%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
👍2
System Design интервью для AI-сервисов

Как спроектировать агента, который не «съест» весь бюджет и не упадёт под нагрузкой? Это ключевой вопрос 2026 года. Ответы — в нашем обновлённом курсе

«Разработка AI-агентов».
Ключевые темы:

🔹 Экономика. Роутинг моделей, кэширование, лимиты.

🔹 Надёжность. Human-in-the-loop, runbooks, восстановление состояний.

🔹 Интеграция. Встраивание AI в существующий Python-бэкенд.

Стартуй сейчас!
Не жди потока, материалы доступны сразу.

🎟 Промокод Agent — скидка 10 000 ₽ (до 28 февраля).

👉 Прокачать System Design
1
Вы запускаете высоконагруженный Python-сервис на asyncio. Со временем отклик начинает расти, хотя CPU и память загружены слабо. В чём может быть причина и как подойти к решению?

Обычно это значит, что внутри event loop выполняется блокирующий код (синхронные запросы к БД, тяжёлые вычисления, блокирующие I/O). Их нужно вынести в отдельные процессы/пулы потоков (ProcessPoolExecutor, ThreadPoolExecutor) или заменить на асинхронные аналоги библиотек.

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