en
Feedback
Python | Вопросы собесов

Python | Вопросы собесов

Open in Telegram

📈 Analytical overview of Telegram channel Python | Вопросы собесов

Channel Python | Вопросы собесов (@python_easy_ru) in the Russian language segment is an active participant. Currently, the community unites 13 108 subscribers, ranking 9 738 in the Technologies & Applications category and 50 761 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 13 108 subscribers.

According to the latest data from 07 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -52 over the last 30 days and by -3 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 6.21%. Within the first 24 hours after publication, content typically collects 5.90% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 814 views. Within the first day, a publication typically gains 773 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 4.
  • Thematic interests: Content is focused on key topics such as ставь, модуль, строка, docker, alice.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
Cайт: easyoffer.ru Реклама: @easyoffer_adv ВП: @easyoffer_vp Тесты t.me/+20tRfhrwPpM4NDQy Задачи t.me/+nsl4meWmhfQwNDVi Вакансии t.me/+cXGKkrOY2-w3ZTky

Thanks to the high frequency of updates (latest data received on 08 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

13 108
Subscribers
-324 hours
-147 days
-5230 days
Posts Archive
🤔 Что делать если нужно перехватить исключение, выполнить действия и опять возбудить это же исключение? Если нужно: Перехватить исключение Выполнить какие-то действия (лог, очистка, уведомление и т. д.) Снова выбросить это же исключение
try:
    x = 1 / 0  # Ошибка деления на ноль
except ZeroDivisionError:
    print("Ошибка! Записываем в лог...")
    raise  # Повторно выбрасываем то же исключение
Вывод
Ошибка! Записываем в лог...
Traceback (most recent call last):
  File "script.py", line 2, in <module>
    x = 1 / 0
ZeroDivisionError: division by zero
Пример: Логирование перед повторным выбросом
import logging

logging.basicConfig(filename="errors.log", level=logging.ERROR)

try:
    user_input = int("abc")  # Ошибка ValueError
except ValueError as e:
    logging.error(f"Ошибка: {e}")  # Записываем в лог
    raise  # Повторно выбрасываем исключение
Пример: Очистка ресурсов перед выбросом исключения
try:
    file = open("data.txt", "r")
    data = file.read()
except FileNotFoundError:
    print("Файл не найден. Освобождаем ресурсы...")
    raise  # Снова выбрасываем исключение
finally:
    file.close()  # Гарантированно закроет файл
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что происходит, когда у access-токена истекает время? Когда токен истёк: - Сервер отклоняет запрос с ошибкой авторизации (чаще всего 401). - Клиент должен использовать refresh токен (если есть), чтобы получить новый access токен. - Если refresh токена нет или он тоже просрочен — требуется повторная авторизация пользователя. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

📺 Уникальная база IT собеседований 456+ реальных собеседований на программиста, тестировщика, аналитика и прочие IT профы. Е
📺 Уникальная база IT собеседований 456+ реальных собеседований на программиста, тестировщика, аналитика и прочие IT профы. Есть собесы от ведущих компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и т.д. 🎯 Переходи по ссылке и присоединяйся к базе, чтобы прокачать свои шансы на успешное трудоустройство!

🤔 В чем отличие текстовых и бинарных файлов? Текстовые и бинарные файлы — это два типа файлов, которые хранят и обрабатывают данные по-разному. Разберем их отличия. 🚩**Текстовые файлы Текстовые файлы хранят данные в виде обычного текста, используя кодировку (например, UTF-8, ASCII). Они читаются и редактируются текстовыми редакторами (Notepad, VS Code). - .txt — обычный текстовый файл - .csv — таблица в текстовом формате - .json, .xml, .html — текстовые форматы данных Каждый символ в файле представлен в кодировке (например, в UTF-8 буква "А" занимает 1 байт). В Python текстовые файлы открываются в режиме t (text mode).
# Запись в текстовый файл
with open("example.txt", "w", encoding="utf-8") as file:
    file.write("Привет, мир!")

# Чтение текстового файла
with open("example.txt", "r", encoding="utf-8") as file:
    content = file.read()
    print(content)  # Выведет: Привет, мир!
🚩Бинарные файлы Бинарные файлы хранят данные в машинном формате (набор байтов). Они не предназначены для чтения человеком и требуют специальных программ для обработки. - .exe — исполняемый файл - .png, .jpg — изображения - .mp3, .mp4 — аудио и видео файлы - .dat, .bin — файлы с произвольными данными Байты записываются напрямую без конвертации в текст. Например, число 123 может храниться в 4-байтовом формате (например, 01111011 в двоичном коде). В Python бинарные файлы открываются в режиме b (binary mode).
# Запись бинарных данных
data = b'\x48\x65\x6C\x6C\x6F'  # "Hello" в байтах
with open("example.bin", "wb") as file:
    file.write(data)

# Чтение бинарных данных
with open("example.bin", "rb") as file:
    content = file.read()
    print(content)  # Выведет: b'Hello'
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое conflict management? Conflict management — это процесс обнаружения, анализа и разрешения конфликтов: - В разработке: слияние кода, разные изменения в одной строке, ветке или файле. - В команде: несогласие между участниками — решается через коммуникации, правила, арбитраж. - В системах данных: конфликт версий, репликаций или состояния. В DevOps и разработке чаще говорят о разрешении конфликтов в Git, при merge или rebase. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Почему вычислять большие значения в асинхронной функции плохо? Асинхронность (asyncio) в Python не выполняет код параллельно, а переключается между задачами во время ожидания (I/O-bound). Если в async-функции делать тяжёлые вычисления (CPU-bound), это блокирует asyncio, потому что в Python есть GIL (Global Interpreter Lock). 🚩Асинхронность в Python подходит для ввода-вывода (I/O-bound) Асинхронность позволяет выполнять задачи без блокировки, но только если они ждут чего-то (файлы, сеть, БД).
import asyncio
import aiohttp

async def fetch(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.text()

async def main():
    urls = ["https://example.com"] * 5
    results = await asyncio.gather(*(fetch(url) for url in urls))

asyncio.run(main())
🚩Проблема с `async` и тяжёлыми вычислениями (CPU-bound) Если в async-функции делать тяжёлые вычисления, Python не сможет переключаться между задачами.
import asyncio

async def heavy_task(n):
    print(f"Вычисляю {n}...")
    total = sum(i**2 for i in range(n))  # Долгий процесс
    return total

async def main():
    await asyncio.gather(heavy_task(10**7), heavy_task(10**7))

asyncio.run(main())
🚩Как правильно выполнять вычисления в `async`? 🟠Использовать `asyncio.to_thread()` (делегирование в потоки) В Python 3.9+ можно выполнять CPU-задачи в отдельных потоках, не блокируя asyncio.
import asyncio

def heavy_computation(n):
    return sum(i**2 for i in range(n))

async def main():
    result = await asyncio.to_thread(heavy_computation, 10**7)
    print(result)

asyncio.run(main())
🟠Использовать `multiprocessing` (запуск на нескольких ядрах) Так как Python использует GIL, единственный способ выполнять настоящий параллелизм — это multiprocessing.
import asyncio
import multiprocessing

def heavy_computation(n):
    return sum(i**2 for i in range(n))

async def main():
    loop = asyncio.get_running_loop()
    with multiprocessing.Pool() as pool:
        result = await loop.run_in_executor(pool, heavy_computation, 10**7)
        print(result)

asyncio.run(main())
Ставь 👍 и забирай 📚 Базу знаний

🤔 За что отвечает Meta в сериализаторе? Класс Meta в ModelSerializer определяет настройки сериализатора, включая: - model – модель, с которой работает сериализатор - fields – список полей, которые нужно включить или исключить - exclude – поля, которые не нужно включать - read_only_fields – поля, которые нельзя изменять Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое type? В Python type — это встроенная функция и метакласс, который: Определяет тип объекта (type(obj)). Создаёт новые классы динамически (type(name, bases, attrs)). 🟠1. `type(obj)`: Определение типа объекта Функция type(obj) возвращает класс (тип) объекта.
print(type(42))         # <class 'int'>
print(type("hello"))    # <class 'str'>
print(type([1, 2, 3]))  # <class 'list'>
if type(42) is int:
    print("Это целое число!")
🟠`type(name, bases, attrs)`: Создание класса динамически Функция type может создавать новые классы "на лету".
MyClass = type("MyClass", (object,), {"x": 10, "hello": lambda self: "Hello!"})

obj = MyClass()
print(obj.x)       # 10
print(obj.hello()) # Hello!
🟠`type` как метакласс В Python type — это метакласс для всех классов, то есть классы тоже являются объектами type.
class A:
    pass

print(type(A))  # <class 'type'>
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что может быть декоратором? К чему он может быть применён? Декоратором может быть функция или объект с методом call. Применяется к функциям, методам и классам. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🔍Тестовое собеседование на Middle Python-разработчика в четверг 15 мая(в четверг) в 19:00 по мск приходи онлайн на открытое
🔍Тестовое собеседование на Middle Python-разработчика в четверг 15 мая(в четверг) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика. Как это будет: 📂 Даня, старший разработчик в Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Даня будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Дане Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2Vtzqx9SMAk

🤔 Что такое паттерн Заместитель (Proxy)? Это структурный шаблон проектирования, который предоставляет объект, управляющий доступом к другому объекту. Этот паттерн создаёт суррогат или заместителя для другого объекта и контролирует доступ к нему. 🚩Зачем нужен паттерн Заместитель 🟠Управление доступом Когда необходимо контролировать доступ к ресурсу. 🟠Отложенная инициализация Когда необходимо отложить создание ресурсоёмких объектов до момента их первого использования. 🟠Управление ресурсами Для управления ресурсами, такими как память или сетевые соединения. 🟠Логирование и кэширование Для добавления дополнительной функциональности, такой как логирование или кэширование, без изменения кода основного объекта. 🚩Типы заместителей 🟠Управляющий заместитель (Virtual Proxy): Контролирует доступ к объекту, создавая его по требованию. 🟠Защитный заместитель (Protection Proxy): Контролирует доступ к объекту, ограничивая права пользователей. 🟠Удалённый заместитель (Remote Proxy) Управляет доступом к объекту, находящемуся в другом адресном пространстве. 🟠Кэш-прокси (Cache Proxy) Кэширует результаты запросов к объекту для повышения производительности. 🚩Как используется паттерн Заместитель Заместитель реализует интерфейс основного объекта и перенаправляет вызовы к реальному объекту, добавляя при этом дополнительную функциональность. В этом примере класс Proxy контролирует доступ к классу RealSubject, добавляя проверку доступа и логирование.
from abc import ABC, abstractmethod

class Subject(ABC):
    @abstractmethod
    def request(self):
        pass

class RealSubject(Subject):
    def request(self):
        print("Реальный объект: Обработка запроса.")

class Proxy(Subject):
    def __init__(self, real_subject):
        self._real_subject = real_subject

    def request(self):
        if self.check_access():
            self._real_subject.request()
            self.log_access()

    def check_access(self):
        print("Заместитель: Проверка доступа перед выполнением запроса.")
        return True

    def log_access(self):
        print("Заместитель: Логирование времени запроса.")

# Клиентский код
real_subject = RealSubject()
proxy = Proxy(real_subject)

proxy.request()
Ставь 👍 и забирай 📚 Базу знаний

Сегодня QA.GURU анонсировали закрытый вебинар «Как Python открывает новые горизонты в карьере тестировщика». Обещают последние тренды QA, блок с лайфкодингом и живую сессию вопросов. ▶ По этой ссылке можно зарегистрироваться для бесплатного участия в этот четверг в 8 вечера мск. В программе: — Зачем ручным тестировщикам разбираться в автоматизации и почему Python — оптимальный старт; — Какие навыки выводят QA в топ в 2025 году (спойлер: нейросети пока не конкуренты); — Практика: пишем ручной тест, автоматизируем на Python, сравниваем Playwright, Selenium и Selene, запускаем с Pytest и без. Спикер, Станислав Васенков — QA, за плечами которого больше 10 лет автоматизации, ex-Head of QAA pflb.ru и автор библиотеки allure-notifications. Победитель хакатона по автоматизации тестирования от EPAM. Организатор конференций, спикер Heisenbug, основатель QA.GURU и AUTOTESTS.AI. Стас знает, о чём говорит — и умеет научить. 🔗 Забирайте ссылку. Кто успеет — тот в игре.

Современная магистратура от Центрального университета 4 офлайн программы, онлайн-магистратура по ML. Гранты до 1,2 млн руб. С
Современная магистратура от Центрального университета 4 офлайн программы, онлайн-магистратура по ML. Гранты до 1,2 млн руб. Стажировки, диплом гос. образца и фокус на твоей карьере в ЦУ Подать заявку #реклама 16+ apply.centraluniversity.ru О рекламодателе

🤔 Что такое generator comprehension? Это компактная форма записи генератора, аналогичная генераторной функции, но записываемая как выражение в круглых скобках. Она похожа на list comprehension, но не создаёт список, а возвращает итератор, который генерирует значения по мере запроса. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

⚡ Новые каналы с вакансиями и стажировками для джунов В этих каналах публикуются все свежие вакансии и стажировки 🔺 ВАКАНСИИ
Новые каналы с вакансиями и стажировками для джунов В этих каналах публикуются все свежие вакансии и стажировки 🔺 ВАКАНСИИ
Горячие вакансии с привлекательными офферами для джуниор разработчиков, аналитиков, дизайнеров и QA-специалистов.
👉 ПОДПИСАТЬСЯ 🔺СТАЖИРОВКИ
Стажировки для начинающих специалистов в IT независимо от возраста!
👉 ПОДПИСАТЬСЯ 🔺IT interns
Свежие стажировки для junior специалистов в топовых компании России и мира
👉 ПОДПИСАТЬСЯ 🔺Junojobs
Вакансии и стажировки для junior-разработчиков на удалёнке.
👉 ПОДПИСАТЬСЯ 🔺БИГТЕХ
Junior вакансии и стажировки в крупнейших IT-компаниях мира: NVidia, Apple, T-банк, Яндекс, Google и т. д.
👉 ПОДПИСАТЬСЯ 🔺Ква инженер - QA junior
Отборные джун вакансии и стажировки для QA, тестировщиков.
👉 ПОДПИСАТЬСЯ

🤔 Какие есть минусы у Monkey Patch если использовать не в тесте? Monkey Patching — это изменение или замена кода существующих классов и функций во время выполнения программы. Хотя этот метод бывает полезен, особенно в тестировании, его использование в продакшене может привести к опасным и непредсказуемым последствиям 🚩Ломает предсказуемость кода Когда ты изменяешь поведение встроенных библиотек или сторонних модулей на лету, программисты, читающие код, не смогут понять, почему стандартные функции ведут себя не так, как ожидалось.
import datetime

# Меняем поведение метода now()
def fake_now():
    return datetime.datetime(2000, 1, 1)

datetime.datetime.now = fake_now  # Monkey Patch

print(datetime.datetime.now())  # Выведет 2000-01-01 00:00:00
🚩Может вызвать неожиданные ошибки после обновления библиотек Если библиотека обновится, и её внутренняя логика изменится, Monkey Patch может перестать работать или, что ещё хуже, привести к багам. Ты сделал Monkey Patch метода json.dumps, а потом библиотека json обновилась и поменяла его сигнатуру. Теперь твой патч сломается или будет работать некорректно. 🚩Трудно отлаживать и поддерживать Monkey Patching меняет поведение кода в скрытом режиме, поэтому сложно понять, почему что-то работает не так. Если баг возник из-за патча, отладка может занять часы или даже дни. Ты исправил баг с str.split(), заменив его через Monkey Patch, но через 6 месяцев разработчик обновил код, забыл про патч, и всё сломалось. 🚩Может затронуть весь код проекта (глобальное изменение) Monkey Patching меняет поведение для всей программы, а не только в одном модуле или файле. Это делает код хрупким и непредсказуемым. Если ты изменишь метод dict.get(), он будет вести себя по-другому во всех модулях программы. Это может привести к критическим ошибкам.
original_get = dict.get

def patched_get(self, key, default=None):
    print(f"Запрашивается ключ: {key}")
    return original_get(self, key, default)

dict.get = patched_get  # Monkey Patch

d = {"a": 10}
print(d.get("a"))  # Работает, но теперь с побочным эффектом
🚩Нет гарантии, что это сработает во всех окружениях Monkey Patch может работать на одной версии Python или библиотеки, но сломаться на другой. В продакшене, где есть разные серверы и окружения, это может вызвать непредсказуемые ошибки. Ставь 👍 и забирай 📚 Базу знаний

🤔 Назовите основные команды Docker? - Запуск, остановка, удаление контейнера. - Сборка образа. - Просмотр логов, ресурсов. - Работа с томами, сетями. Эти команды позволяют управлять жизненным циклом контейнеров и инфраструктурой на основе образов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как в питоне реализуется многопоточность. Какими модулями? Многопоточность в Python реализуется с помощью модуля threading, но из-за GIL (Global Interpreter Lock) потоки не могут выполняться параллельно на нескольких ядрах. 🟠Модуль `threading` (многопоточность, но с GIL) Модуль threading позволяет запускать несколько потоков (threads) в одном процессе.
import threading
import time

def task(name):
    print(f"{name} начал работу")
    time.sleep(2)  # Имитация задержки
    print(f"{name} завершил работу")

# Создаём два потока
t1 = threading.Thread(target=task, args=("Поток 1",))
t2 = threading.Thread(target=task, args=("Поток 2",))

t1.start()
t2.start()

t1.join()
t2.join()
print("Все потоки завершены")
Вывод
Поток 1 начал работу
Поток 2 начал работу
(пауза 2 секунды)
Поток 1 завершил работу
Поток 2 завершил работу
Все потоки завершены
🟠Модуль `multiprocessing` (настоящая параллельность) В отличие от threading, модуль multiprocessing создаёт отдельные процессы, которые могут выполняться на разных ядрах процессора.
import multiprocessing
import time

def task(name):
    print(f"{name} начал работу")
    time.sleep(2)
    print(f"{name} завершил работу")

if __name__ == "__main__":
    p1 = multiprocessing.Process(target=task, args=("Процесс 1",))
    p2 = multiprocessing.Process(target=task, args=("Процесс 2",))

    p1.start()
    p2.start()

    p1.join()
    p2.join()
    print("Все процессы завершены")
🟠Модуль `concurrent.futures` (более удобный API) Этот модуль позволяет легко управлять потоками (ThreadPoolExecutor) и процессами (ProcessPoolExecutor).
from concurrent.futures import ThreadPoolExecutor
import time

def task(n):
    time.sleep(2)
    return f"Готово: {n}"

with ThreadPoolExecutor(max_workers=2) as executor:
    results = executor.map(task, [1, 2, 3])
    
for result in results:
    print(result)
Пример ProcessPoolExecutor (процессы)
from concurrent.futures import ProcessPoolExecutor

def square(n):
    return n * n

with ProcessPoolExecutor() as executor:
    results = executor.map(square, [1, 2, 3, 4])

print(list(results))  # [1, 4, 9, 16]
🟠Модуль `asyncio` (асинхронность, не потоки!) Модуль asyncio не создаёт потоки или процессы, а работает через "корутины" и цикл событий (event loop).
import asyncio

async def task():
    print("Начало")
    await asyncio.sleep(2)  # Не блокирует другие задачи
    print("Конец")

async def main():
    await asyncio.gather(task(), task())

asyncio.run(main())
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое cookie? Cookie — это небольшой фрагмент данных, который браузер хранит от имени сайта. Используется для: - Хранения сессий и авторизации. - Сохранения настроек пользователя. - Отслеживания поведения (например, в аналитике). Cookie автоматически передаётся при каждом запросе к соответствующему домену. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Почему поиск по ключам в словаре работает быстро? В Python словари (dict) работают очень быстро, потому что они используют хеш-таблицы. Это позволяет находить значения по ключу в константное время O(1) в большинстве случаев. Давайте разберемся, как это работает. 🟠Как устроен словарь в Python? Словарь (dict) — это структура данных, которая хранит пары ключ → значение. Например:
data = {"name": "Alice", "age": 25, "city": "New York"}
print(data["age"])  # 25
🟠Как работает хеш-таблица? Основной принцип: Хеш-функция (hash()) вычисляет уникальное число (хеш) для ключа. Используется массив (таблица), где данные хранятся по индексам, связанным с хешем. Поиск по ключу — это просто вычисление хеша и обращение к нужному индексу.
print(hash("age"))  # Например, вернет 328847234 (будет разным при каждом запуске)
Когда мы пишем
value = data["age"]
🟠Почему поиск занимает O(1)? Нет линейного поиска: вместо перебора всех элементов Python сразу вычисляет, где находится нужное значение. Операция доступа занимает фиксированное время: hash() + обращение по индексу. Даже при большом количестве элементов скорость остается высокой. Добавим 1 миллион элементов и посмотрим скорость поиска:
import time

data = {i: i * 2 for i in range(1_000_000)}

start = time.time()
print(data[999_999])  # Быстро находит ключ!
end = time.time()

print("Время поиска:", end - start)  # Около 0.000001 сек
🟠Что если хеши совпадут? (Коллизии) Иногда два разных ключа могут иметь одинаковый хеш (редко, но возможно). Тогда Python использует связанный список (chaining) или перехеширование.
print(hash("abc") % 10)  # Например, 5
print(hash("xyz") % 10)  # Тоже 5 (редко, но бывает)
Ставь 👍 и забирай 📚 Базу знаний