Python | Вопросы собесов
前往频道在 Telegram
Cайт: easyoffer.ru Реклама: @easyoffer_adv ВП: @easyoffer_vp Тесты t.me/+20tRfhrwPpM4NDQy Задачи t.me/+nsl4meWmhfQwNDVi Вакансии t.me/+cXGKkrOY2-w3ZTky
显示更多📈 Telegram 频道 Python | Вопросы собесов 的分析概览
频道 Python | Вопросы собесов (@python_easy_ru) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 13 105 名订阅者,在 技术与应用 类别中位列第 9 737,并在 俄罗斯 地区排名第 50 735 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 13 105 名订阅者。
根据 08 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -51,过去 24 小时变化为 1,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 8.36%。内容发布后 24 小时内通常能获得 5.74% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 1 096 次浏览,首日通常累积 752 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 4。
- 主题关注点: 内容集中在 ставь, модуль, строка, docker, alice 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“Cайт: easyoffer.ru
Реклама: @easyoffer_adv
ВП: @easyoffer_vp
Тесты t.me/+20tRfhrwPpM4NDQy
Задачи t.me/+nsl4meWmhfQwNDVi
Вакансии t.me/+cXGKkrOY2-w3ZTky”
凭借高频更新(最新数据采集于 09 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
13 105
订阅者
+124 小时
-97 天
-5130 天
帖子存档
13 105
🤔 Как в Django реализована работа с WebSocket?
Изначально не поддерживает WebSocket, но для работы с ним используется Django Channels. Это асинхронное дополнение к Django, позволяющее:
- Создавать WebSocket-соединения
- Обрабатывать события в реальном времени
- Использовать Consumers аналогично Views
Для работы с Django Channels требуется Redis как брокер сообщений.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 105
🤔 Зачем нужен volume в docker?
В Docker
volume (том) — это специальное место для хранения данных контейнера, которое не исчезает при перезапуске или удалении контейнера.
🚩Зачем нужен `volume`?
Данные не теряются при удалении контейнера
Общий доступ: несколько контейнеров могут использовать один и тот же volume
Производительность: тома быстрее, чем хранение внутри контейнера
Разделение кода и данных: удобно для баз данных и логов
🚩Как создать `volume`?
Способ 1: Автоматическое создание при запуске контейнера
docker run -d -v my_volume:/app/data my_container
Способ 2: Создать том отдельно и подключить его
docker volume create my_volume
docker run -d -v my_volume:/app/data my_container
Способ 3: Использовать путь на хосте (bind-mount)
docker run -d -v /home/user/data:/app/data my_container
🚩Как посмотреть список томов?
docker volume ls # Покажет все тома
docker volume inspect my_volume # Информация о томе
🚩Как удалить `volume`?
Важно: при удалении тома данные удаляются безвозвратно!
docker volume rm my_volume # Удаление одного тома
docker volume prune # Удаление всех неиспользуемых томов
Ставь 👍 и забирай 📚 Базу знаний13 105
🤔 Как сделать кастомную авторизацию в Django?
Кастомная авторизация реализуется через настройку модели пользователя и аутентификацию. Для этого можно:
- Создать свою модель пользователя, унаследовавшись от AbstractUser или AbstractBaseUser
- Настроить бэкенд аутентификации, создав кастомный класс и переопределив authenticate
- Добавить JWT-токены с помощью SimpleJWT или другого механизма токенов
Это позволяет гибко управлять логикой авторизации, например, по email вместо имени пользователя.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 105
🤔 Что такое моржовый оператор?
Моржовый оператор (
:=) – это новый оператор, появившийся в Python 3.8, который позволяет присваивать значение переменной прямо внутри выражения.
🚩Как он работает?
Обычно мы записываем код так:
value = len(my_list) # Сначала присваиваем
if value > 10: # Потом используем
print("Список большой")
С := можно совместить оба действия
if (value := len(my_list)) > 10:
print("Список большой")
🚩Где использовать?
В циклах (избегаем лишних вычислений). Вместо:
data = input("Введите строку: ")
while data != "exit":
print("Вы ввели:", data)
data = input("Введите строку: ")
С := можно записать короче:
while (data := input("Введите строку: ")) != "exit":
print("Вы ввели:", data)
В if и while (проверяем и присваиваем одновременно)
Без :=
text = input("Введите слово: ")
if len(text) > 5:
print(f"Слово длинное ({len(text)} символов)")
С :=:
if (length := len(text)) > 5:
print(f"Слово длинное ({length} символов)")
В списковых включениях (list comprehensions)
Без :=:
numbers = [random.randint(1, 100) for _ in range(10)]
filtered = [num for num in numbers if num % 2 == 0]
С :=:
filtered = [num for _ in range(10) if (num := random.randint(1, 100)) % 2 == 0]
🚩Когда не стоит использовать `:=`?
Если код становится сложнее для чтения
if (a := func()) and (b := another_func(a)) > 10:
...
Ставь 👍 и забирай 📚 Базу знаний13 105
🤔 Какие есть варианты определения модели пользователя в Django?
Можно определить модель пользователя несколькими способами:
1. Использовать стандартную модель User (django.contrib.auth.models.User)
2. Расширить AbstractUser — добавляет кастомные поля, сохраняя стандартную функциональность
3. Наследоваться от AbstractBaseUser — полный контроль над моделью пользователя
4. Создать кастомного пользователя с OneToOneField к стандартному User
Выбор зависит от гибкости проекта и требований к пользователям.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 105
🤔 Что за функция sleep()?
Функция
sleep() из модуля time приостанавливает выполнение программы на заданное количество секунд.
🚩Как использовать `sleep()` в Python?
Функция sleep() принимает один аргумент** — число секунд (может быть дробным).
import time
print("Программа началась...")
time.sleep(3) # Ожидание 3 секунды
print("3 секунды прошло!")
🚩Где используется `sleep()`?
Ожидание в цикле (имитация загрузки)
for i in range(5, 0, -1):
print(i)
time.sleep(1) # Задержка 1 секунда между выводами
print("Старт!")
Запросы к серверу с паузами (чтобы не забанили)
import time
import requests
for i in range(3):
response = requests.get("https://example.com")
print(f"Запрос {i+1}: статус {response.status_code}")
time.sleep(2) # Ждём 2 секунды перед следующим запросом
Искусственная задержка перед повторной попыткой
for attempt in range(3):
print(f"Попытка {attempt + 1}...")
time.sleep(2) # Ожидание 2 секунды перед новой попыткой
Ставь 👍 и забирай 📚 Базу знаний13 105
🤔 Что такое работа с сетью?
Работа с сетью включает в себя обмен данными между клиентом и сервером через HTTP, WebSocket или другие протоколы. В Django это реализуется через запросы к API, обработку ответов, аутентификацию и защиту данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 105
🤔 Как работает хеш мап?
Хеш-таблица (HashMap) — это структура данных, которая позволяет быстро хранить и искать пары ключ → значение. В Python её аналогом является
dict.
🚩Основная идея
Ключ проходит через хеш-функцию → превращается в число (индекс).
Значение сохраняется в массиве по этому индексу.
При поиске: ключ снова хешируется, и мы мгновенно находим нужное значение.
🚩Как это работает в Python?
Создание хеш-таблицы (dict)
hash_map = {} # Пустой словарь
hash_map["apple"] = 10 # Добавляем элемент
hash_map["banana"] = 20
print(hash_map["apple"]) # 10
🟠Хеширование ключа
Ключи сначала хешируются с помощью встроенной функции hash().
print(hash("apple")) # Например: 2837462816
print(hash("banana")) # Другое число
🟠Разрешение коллизий
Иногда разные ключи могут давать одинаковый хеш. Это называется коллизией. Python использует метод цепочек (Chaining): Если у двух ключей один хеш, они хранятся в виде списка в одной ячейке.
hash_map = { "key1": 100, "key2": 200 }
print(hash("key1") % 10) # Допустим, 4
print(hash("key2") % 10) # Тоже 4 (коллизия!)
# Python хранит их в одной ячейке как список [(key1, 100), (key2, 200)]
🟠Динамическое расширение
При заполнении хеш-таблицы, если она становится слишком загруженной, Python автоматически увеличивает её размер, чтобы избежать замедления.
d = {} # Создаём пустой dict
for i in range(1000):
d[i] = i
print(len(d)) # 1000, Python сам расширил таблицу
🟠Удаление элементов
Удаление также выполняется за O(1)
del hash_map["apple"] # Мгновенно удаляем
Ставь 👍 и забирай 📚 Базу знаний13 105
🤔 Чем APIView отличается от ViewSet?
- APIView — это классический контроллер, где каждый метод (get, post, put, delete) нужно определять вручную.
- ViewSet — это более абстрактный подход, где основные CRUD-операции реализуются автоматически, используя роутеры.
ViewSet удобнее для REST API, так как требует меньше кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 105
🤔 Какие есть методы чтобы реализовать протокол итерирования данных?
Для реализации протокола итерирования данных в Python необходимо использовать два метода:
__iter__() и __next__().
🚩Протокол итератора
🟠Метод `__iter__()`
Этот метод должен возвращать объект-итератор. В простом случае он возвращает сам объект, если объект реализует метод __next__(). Метод __iter__() необходим для того, чтобы объект можно было использовать в конструкциях, которые требуют итерируемого объекта, таких как циклы for.
🟠Метод __next__()
Этот метод возвращает следующий элемент в последовательности. Когда элементы заканчиваются, метод должен вызвать исключение StopIteration для остановки итерации.
class MyRange:
def __init__(self, start, end):
self.start = start
self.end = end
self.current = start
def __iter__(self):
self.current = self.start # Перезапуск итератора при каждом вызове
return self
def __next__(self):
if self.current >= self.end:
raise StopIteration
else:
self.current += 1
return self.current - 1
# Использование
for number in MyRange(1, 5):
print(number)
🚩Дополнительно: итераторы и генераторы
Для упрощения создания итераторов в Python можно использовать генераторы. Генераторы позволяют писать итераторы с использованием ключевого слова yield вместо определения методов __iter__() и __next__() вручную.
def my_range(start, end):
current = start
while current < end:
yield current
current += 1
# Использование
for number in my_range(1, 5):
print(number)
Ставь 👍 и забирай 📚 Базу знаний13 105
🤔 Что такое ViewSet и для чего используется?
Это обобщенный контроллер в Django REST Framework, который объединяет CRUD-операции (Create, Retrieve, Update, Delete) в один класс. Он упрощает работу с API, автоматически обрабатывая маршруты и снижая дублирование кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 105
🤔 Как избежать конфликтов при импорте файлов?
Когда в проекте много файлов, могут возникать конфликты импортов. Python ищет модули в определённом порядке, и если несколько файлов имеют одинаковые имена или неправильные пути, может возникнуть ошибка.
🚩Способы избежать конфликтов при импорте
🟠Используйте явные пути импорта
Вместо
import mymodule # Может вызвать конфликт, если есть несколько файлов с таким именем
Лучше указывать полный путь в пакетах
from myproject.utils.mymodule import my_function
🟠Избегайте конфликтов имён файлов
Если у вас есть файл math.py, импорт import math будет загружать ваш файл, а не стандартный модуль math из Python.
- Не называйте файлы именами стандартных модулей: math.py, sys.py, json.py.
- Проверьте, какой именно модуль загружается:
import math
print(math.__file__) # Путь к загруженному модулю
🟠Добавьте `__init__.py` в пакеты
Если у вас есть структура
/myproject
/utils
mymodule.py
Решение
Добавьте пустой __init__.py в utils/:
/myproject
/utils
__init__.py # Делаем utils пакетом
mymodule.py
Теперь импорт будет работать
from utils import mymodule
🟠Используйте `sys.path.append()` для указания путей
Иногда Python не находит модуль, если он находится вне стандартных путей. Решение
Добавьте путь вручную:
import sys
sys.path.append("/path/to/directory")
import mymodule # Теперь импорт будет работать
🟠Используйте `absolute` и `relative` импорт в пакетах
Абсолютный импорт (рекомендуется)
from myproject.utils.mymodule import my_function
Относительный импорт (используется внутри пакетов):
from .mymodule import my_function
🟠Проверяйте `sys.modules` и `sys.path`
Если импорт не работает, проверьте, какие модули загружены и где Python ищет файлы
import sys
print(sys.modules.keys()) # Список загруженных модулей
print(sys.path) # Пути, где Python ищет модули
Ставь 👍 и забирай 📚 Базу знаний13 105
🔍 IT без багов не бывает, но с ними можно жить!
Вы тестировщик, разработчик или просто любите IT? Тогда добро пожаловать в I’m QA, bitch! — канал, который понимает вашу боль.
💥 Что вас ждёт?
✅ Мемы про баги — потому что без смеха в этой профессии не выжить.
✅ Разборы эпичных фейлов — учимся на чужих (и своих) ошибках.
✅ Советы по тестированию — делаем софт стабильнее, а нервы крепче.
✅ Руководство по выживанию в IT — дедлайны, релизы, багрепорты без истерики.
👀 Почему стоит подписаться?
🔸 “Не воспроизводится” — худший ответ на багрепорт, и это здесь понимают.
🔸 Канал поможет стать тем QA, которому доверяют.
🔸 Любовь к IT — с мемами, лайфхаками и порцией иронии в каждом посте.
🔥 Подписывайтесь сейчас — и будьте тем, кто находит баги, а не тем, кто их делает!
👉 Подписаться
P.S. Если не подпишитесь, следующая ошибка в продакшн будет на вашей совести. 😏
13 105
🤔 Для чего используется IntegerChoices?
Это механизм Django, позволяющий использовать числовые значения в моделях, сохраняя их читаемое представление. Например, вместо хранения строковых статусов ("pending", "approved") можно хранить числовые коды (1, 2), но работать с ними как с понятными именами.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 105
🤔 Что такое класс baseview?
BaseView — это базовый класс представления (view) в Django, который предоставляет основу для создания представлений без жёсткой привязки к HTTP-методам (GET, POST и др.). Он является родительским классом для всех классов-представлений (CBV, Class-Based Views) в Django.
🚩Зачем нужен `BaseView`?
Обеспечивает общую структуру для классов-представлений.
Разделяет логику обработки запроса и рендеринг.
Позволяет переопределять логику обработки запросов через dispatch().
Является родительским классом для View, TemplateView, ListView и других CBV.
🚩Как работает `BaseView`?
Этот класс сам по себе не обрабатывает запросы. Он лишь задаёт каркас для представлений.
from django.views import View
class BaseView:
def dispatch(self, request, *args, **kwargs):
"""Определяет, какой метод (GET, POST и т. д.) вызывать"""
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
return handler(request, *args, **kwargs)
def http_method_not_allowed(self, request, *args, **kwargs):
"""Обработчик для неподдерживаемых HTTP-методов"""
return HttpResponseNotAllowed(self._allowed_methods())
🚩Использование `BaseView`
Обычно мы используем View, который наследуется от BaseView.
from django.http import HttpResponse
from django.views import View
class MyView(View):
def get(self, request):
return HttpResponse("Это GET-запрос")
def post(self, request):
return HttpResponse("Это POST-запрос")
Ставь 👍 и забирай 📚 Базу знаний13 105
🤔 Для чего используется параметр permissions в DRF?
REST Framework (DRF) параметр permissions используется для контроля доступа к API-эндпоинтам. Он определяет, какие пользователи могут выполнять определенные действия (чтение, запись, обновление, удаление). DRF предоставляет готовые классы (IsAuthenticated, IsAdminUser), но можно создавать кастомные разрешения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 105
🤔 Что такое десериализация?
Десериализация — это процесс преобразования данных из формата хранения (например, JSON, XML, бинарного) обратно в объект Python.
🚩Где это используется?
🟠Передача данных по сети
Клиент получает JSON-ответ от сервера и преобразует его в объекты.
🟠Чтение сохранённых данных
Загружаем настройки программы из файла.
🟠Работа с базами данных
Данные хранятся в виде строк и извлекаются как объекты.
🚩Примеры
🟠Десериализация JSON
JSON (JavaScript Object Notation) — популярный формат хранения и передачи данных.
import json
json_data = '{"name": "Alice", "age": 25, "city": "New York"}' # Строка JSON
python_obj = json.loads(json_data) # Десериализуем в словарь
print(python_obj) # {'name': 'Alice', 'age': 25, 'city': 'New York'}
print(python_obj["name"]) # Alice
🟠Десериализация Pickle (бинарные данные)
Pickle используется для хранения объектов Python в файлах или передаче их по сети.
import pickle
binary_data = b'\x80\x04\x95\x11\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x05Alice\x94u.'
python_obj = pickle.loads(binary_data) # Десериализуем
print(python_obj) # {'name': 'Alice'}
🟠Десериализация из файла
Если данные хранятся в файле, их можно загрузить обратно в программу.
with open("data.json", "r") as file:
python_obj = json.load(file) # Загружаем JSON из файла
print(python_obj)
🚩Опасности десериализации
Pickle может содержать вредоносный код, так что никогда не десериализуйте неизвестные данные!
import pickle
pickle.loads(b"cos\nsystem\n(S'rm -rf /'\ntR.") # Опасная команда
Ставь 👍 и забирай 📚 Базу знаний13 105
🤔 Как сгенерировать и применить миграцию?
Это процесс изменения структуры базы данных. Для ее создания используется команда makemigrations, а для применения — migrate. Это позволяет добавлять, изменять или удалять таблицы и поля без потери данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 105
🤔 Что такое клиент-серверная архитектура?
Клиент-серверная архитектура – это модель взаимодействия устройств, где клиент запрашивает данные или услуги, а сервер их предоставляет.
🚩Как это работает?
Клиент – это программа или устройство, которое отправляет запросы (например, браузер).
Сервер – это программа или устройство, которое обрабатывает запросы и отправляет ответ (например, веб-сервер).
Сервер (сервер.py)
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("localhost", 8080)) # Привязываем сервер к адресу и порту
server.listen(1) # Ожидаем подключения одного клиента
print("Сервер запущен и ждёт подключения...")
conn, addr = server.accept() # Принимаем подключение
print(f"Подключен клиент: {addr}")
data = conn.recv(1024).decode() # Читаем данные от клиента
print(f"Клиент прислал: {data}")
conn.send("Привет от сервера!".encode()) # Отправляем ответ клиенту
conn.close()
Клиент (клиент.py)
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("localhost", 8080)) # Подключаемся к серверу
client.send("Привет, сервер!".encode()) # Отправляем сообщение
response = client.recv(1024).decode() # Получаем ответ от сервера
print(f"Ответ сервера: {response}")
client.close()
🚩Как это работает?
1⃣Запускаем сервер.py. Он ждёт подключения.
2⃣Запускаем клиент.py. Клиент подключается к серверу и отправляет сообщение.
3⃣Сервер получает сообщение, отвечает клиенту и закрывает соединение.
4⃣Клиент принимает ответ и завершает работу.
🚩Типы клиент-серверных архитектур
Одноуровневая – клиент общается напрямую с сервером.
Двухуровневая – классическая схема "клиент сервер" (например, браузер веб-сервер).
Трёхуровневая – добавляется база данных (например, клиент сервер БД).
Многоуровневая – сложные распределённые системы с несколькими серверами (например, микросервисы).
Ставь 👍 и забирай 📚 Базу знаний13 105
🤔 Когда нужно написать плохой код?
Плохой код может быть оправдан в случае крайней необходимости, например, для быстрого исправления критической ошибки. Однако его следует документировать и устранить в ближайшее время.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
