Python | Вопросы собесов
Cайт: easyoffer.ru Реклама: @easyoffer_adv ВП: @easyoffer_vp Тесты t.me/+20tRfhrwPpM4NDQy Задачи t.me/+nsl4meWmhfQwNDVi Вакансии t.me/+cXGKkrOY2-w3ZTky
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Python | Вопросы собесов
تُعد قناة Python | Вопросы собесов (@python_easy_ru) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 13 108 مشتركاً، محتلاً المرتبة 9 738 في فئة التكنولوجيات والتطبيقات والمرتبة 50 761 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 13 108 مشتركاً.
بحسب آخر البيانات بتاريخ 07 يونيو, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -52، وفي آخر 24 ساعة بمقدار -3، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 6.21%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 5.90% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 814 مشاهدة. وخلال اليوم الأول يجمع عادةً 773 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 4.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل ставь, модуль, строка, docker, alice.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Cайт: easyoffer.ru
Реклама: @easyoffer_adv
ВП: @easyoffer_vp
Тесты t.me/+20tRfhrwPpM4NDQy
Задачи t.me/+nsl4meWmhfQwNDVi
Вакансии t.me/+cXGKkrOY2-w3ZTky”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 08 يونيو, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
n-1 сравнений
- На второй: n-2 сравнений
- На третьей: n-3 сравнений
- …
- Всего: (n-1) + (n-2) + ... + 1 = O(n²)
Количество обменов (swap) в худшем случае:
- Если массив полностью перевёрнут, на каждой итерации будет максимальное количество перестановок → O(n²).
🚩Оптимизированная пузырьковая сортировка (`O(n)`)
Если на проходе по массиву не было перестановок, значит массив уже отсортирован.
def bubble_sort(arr):
n = len(arr)
for i in range(n):
swapped = False # Флаг, отслеживающий перестановки
for j in range(n - i - 1):
if arr[j] > arr[j + 1]: # Если элементы в неправильном порядке, меняем местами
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
if not swapped:
break # Если перестановок не было, завершаем сортировку
arr = [1, 2, 3, 4, 5] # Уже отсортированный массив
bubble_sort(arr)
print(arr) # [1, 2, 3, 4, 5]
Ставь 👍 и забирай 📚 Базу знанийGET /index.html HTTP/1.1
🟠Заголовки (headers) Дополнительная информация о запросе.
Host: www.example.com User-Agent: Mozilla/5.0 Accept: text/html
🟠Тело запроса (body) Используется в некоторых методах (например, POST), чтобы передать данные на сервер.
name=John&age=30
🚩
Структура HTTP-ответа 🟠Стартовая строка Указывает версию протокола, код состояния и текстовое описание.
HTTP/1.1 200 OK
🟠Заголовки (headers) Дополнительные данные, например, тип содержимого.
Content-Type: text/html Content-Length: 348
🟠Тело ответа (body) Содержит данные, которые сервер отправляет клиенту (например, HTML-страница).
<html>
<body>Hello, world!</body>
</html>
🚩Основные HTTP-методы
🟠GET
Запрашивает данные с сервера. Данные передаются в URL.
🟠POST
Отправляет данные на сервер (например, формы).
🟠PUT
Обновляет данные на сервере или создаёт, если они отсутствуют.
🟠DELETE
Удаляет данные на сервере.
🟠HEAD
Аналог GET, но возвращает только заголовки без тела ответа.
🟠OPTIONS
Возвращает информацию о поддерживаемых методах для ресурса.
🟠PATCH
Частичное обновление ресурса.
Ставь 👍 и забирай 📚 Базу знанийfor — перебирает элементы последовательности (list, tuple, dict, range() и т. д.).
while — выполняется, пока условие True.
🚩Цикл `for` (перебор последовательностей)
Простой пример for
for i in range(5):
print(i)
Вывод
0 1 2 3 4Перебор списка
names = ["Alice", "Bob", "Charlie"]
for name in names:
print(name)
Вывод
Alice Bob CharlieПеребор словаря (
dict)
user = {"name": "Alice", "age": 25}
for key, value in user.items():
print(f"{key}: {value}")
Вывод
name: Alice age: 25🚩Цикл `while` (работает, пока `True`) Пример
while
x = 0
while x < 5:
print(x)
x += 1
Вывод
0 1 2 3 4*
while с input() (бесконечный цикл)
while True:
command = input("Введите команду: ")
if command == "exit":
break # Выход из цикла
print(f"Вы ввели: {command}")
🚩3. Управление циклами (`break`, `continue`)
break — выход из цикла
for i in range(10):
if i == 5:
break # Прерывает цикл, если i == 5
print(i)
Вывод
0 1 2 3 4
continue — пропуск итерации
for i in range(5):
if i == 2:
continue # Пропускаем 2
print(i)
Вывод
0 1 3 4🚩`else` в циклах (`for` / `while`)
else выполняется, если цикл завершился без break
for i in range(5):
print(i)
else:
print("Цикл завершён!")
Вывод
0 1 2 3 4 Цикл завершён!Но если сработает
break, else не выполняется
for i in range(5):
if i == 3:
break
print(i)
else:
print("Цикл завершён!") # Не выполнится!
Вывод
0 1 2Ставь 👍 и забирай 📚 Базу знаний
try...finally используется в случаях, когда нужно гарантировать выполнение кода в finally, независимо от того, возникло исключение или нет.
🟠Закрытие файла
Если файл открыт, его нужно закрыть в любом случае, даже если в процессе работы произойдёт ошибка.
try:
file = open("data.txt", "r")
data = file.read()
finally:
print("Закрываем файл...")
file.close() # Файл закроется даже при ошибке
🟠Освобождение ресурсов (например, соединение с базой данных)
Если программа работает с базой данных, соединение нужно закрыть, даже если произошла ошибка.
import sqlite3
conn = sqlite3.connect("database.db")
try:
cursor = conn.cursor()
cursor.execute("SELECT * FROM users") # Ошибка, если таблицы нет
finally:
print("Закрываем соединение с БД...")
conn.close() # Закроет соединение в любом случае
🟠Разблокировка ресурсов (например, файл или поток)
Допустим, есть блокировка файла, которую нужно снять в любом случае.
import threading
lock = threading.Lock()
try:
lock.acquire()
print("Ресурс заблокирован")
# Код, который использует ресурс
finally:
print("Разблокируем ресурс")
lock.release() # Освободит блокировку даже при ошибке
Пример 4: Остановка таймера, даже если произошла ошибка
import time
try:
start_time = time.time()
x = 1 / 0 # Ошибка деления на ноль
finally:
elapsed_time = time.time() - start_time
print(f"Программа выполнялась {elapsed_time:.2f} секунд")
Ставь 👍 и забирай 📚 Базу знанийdocker rm), все данные, хранящиеся внутри него, исчезнут навсегда.
docker run --name mydb -e MYSQL_ROOT_PASSWORD=secret -d mysql
docker stop mydb
docker rm mydb # Удаляем контейнер – все данные пропали!
🚩Проблемы с обновлением и масштабированием
Если база данных хранится внутри контейнера, обновить версию MySQL/PostgreSQL будет сложно. При пересоздании контейнера все данные потеряются, и их придется восстанавливать из резервной копии.
🚩Низкая производительность I/O
Хранение данных внутри контейнера может снизить скорость работы базы, потому что Docker использует копию на запись (Copy-on-Write, CoW).
Решение — использовать прямые тома (volumes) или монтировать каталог хоста.
docker run --name mydb -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql
🚩Проблемы с резервным копированием
Если база находится внутри контейнера, то сделать бэкап или восстановить данные сложно.
Лучшее решение: использовать volumes + делать бэкапы через mysqldump или pg_dump.
docker exec mydb mysqldump -u root -psecret mydatabase > backup.sql
Ставь 👍 и забирай 📚 Базу знанийhttps://example.com/users, браузер отправляет:
GET /users HTTP/1.1 Host: example.comОтвет сервера
[
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"}
]
🚩Особенности GET-запроса
🟠Читаемый URL
параметры передаются в строке запроса (например, ?id=123).
🟠Безопасен
GET не изменяет данные на сервере.
🟠Можно кэшировать
браузеры и серверы могут сохранять результаты GET-запросов.
🟠Ограниченная длина URL
слишком длинные запросы могут не работать.
🟠Не подходит для конфиденциальных данных
передача пароля в URL (?password=123) небезопасна.
🚩GET-запрос с параметрами
Если нужно передать параметры, они добавляются в URL:
GET /search?q=python&page=2
В Python можно отправить GET-запрос с помощью библиотеки requests
import requests
response = requests.get("https://api.example.com/users", params={"id": 123})
print(response.json()) # Получаем ответ в JSON
Ставь 👍 и забирай 📚 Базу знаний__del__(). Деструктор используется для выполнения операций очистки, таких как освобождение ресурсов или выполнение завершающих действий перед тем, как объект будет удален из памяти.
🚩Определение и использование деструктора
Определяется внутри класса с помощью метода __del__().
class FileManager:
def __init__(self, filename):
self.file = open(filename, 'w')
print(f"Файл {filename} открыт для записи.")
def write_data(self, data):
self.file.write(data)
def __del__(self):
self.file.close()
print("Файл закрыт.")
🟠Класс FileManager имеет конструктор __init__(), который открывает файл для записи.
🟠Метод write_data() записывает данные в файл.
🟠Деструктор __del__() закрывает файл, когда объект FileManager уничтожается.
🚩Создание и уничтожение объекта
Когда объект класса создается, вызывается конструктор. Когда объект больше не нужен, вызывается деструктор:
manager = FileManager('example.txt')
manager.write_data('Hello, world!')
# Когда объект manager больше не нужен, вызывается деструктор и файл закрывается
🚩Важные замечания
🟠Сборка мусора
Python использует механизм сборки мусора для автоматического управления памятью. Когда объект больше не используется (например, нет активных ссылок на него), сборщик мусора удаляет объект и вызывает его деструктор.
🟠Неопределенное время вызова
Точное время вызова деструктора зависит от работы сборщика мусора. Это означает, что нельзя гарантировать момент вызова деструктора. Поэтому для критических операций лучше использовать явное управление ресурсами, например, с помощью контекстных менеджеров (with).
🟠Контекстные менеджеры
Для явного управления ресурсами и их освобождения в предсказуемый момент лучше использовать контекстные менеджеры.
with open('example.txt', 'w') as file:
file.write('Hello, world!')
# Файл автоматически закрывается после выхода из блока with
Ставь 👍 и забирай 📚 Базу знаний
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
