Python | Вопросы собесов
Cайт: easyoffer.ru Реклама: @easyoffer_adv ВП: @easyoffer_vp Тесты t.me/+20tRfhrwPpM4NDQy Задачи t.me/+nsl4meWmhfQwNDVi Вакансии t.me/+cXGKkrOY2-w3ZTky
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Python | Вопросы собесов
تُعد قناة Python | Вопросы собесов (@python_easy_ru) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 13 107 مشتركاً، محتلاً المرتبة 9 737 في فئة التكنولوجيات والتطبيقات والمرتبة 50 735 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 13 107 مشتركاً.
بحسب آخر البيانات بتاريخ 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) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
x = "глобальная" # Global
def outer():
x = "охватывающая" # Enclosing
def inner():
x = "локальная" # Local
print(x) # Поиск начинается отсюда (L)
inner()
outer()
Вывод
локальная🚩Глобальные переменные (`global`) Если нужно изменить глобальную переменную внутри функции, используем
global
x = 10 # Глобальная переменная
def modify_global():
global x
x = 20 # Меняем глобальную переменную
modify_global()
print(x) # 20
🚩Переменные из внешней функции (`nonlocal`)
Если в вложенной функции нужно изменить переменную из enclosing-области, используем nonlocal
def outer():
x = 10 # Переменная из enclosing-области
def inner():
nonlocal x
x = 20 # Меняем `x` в `outer()`
inner()
print(x) # 20
outer()
🚩Что если переменная отсутствует во всех областях?
Если переменная не найдена в LEGB, Python выдаст NameError
def func():
print(y) # Ошибка: y не объявлена!
func()
Ошибка
NameError: name 'y' is not defined🚩`Built-in` — встроенные функции Python в последнюю очереде проверяет встроенные функции (
print(), len(), sum() и т. д.).
print = "Ошибка!" # Переопределили встроенную функцию
print("Hello") # TypeError: 'str' object is not callable
Ставь 👍 и забирай 📚 Базу знанийx = 10
print(id(x)) # 140735598722544 (адрес в памяти)
x = x + 5 # Создаётся новый объект!
print(id(x)) # 140735598722704 (новый адрес)
Пример: str неизменяемая
s = "hello"
print(id(s)) # 140735598723664
s = s + " world" # Создаётся новая строка!
print(id(s)) # 140735598724240 (новый адрес)
🚩Изменяемые (`mutable`) типы
Можно менять их содержимое без создания нового объекта.
lst = [1, 2, 3]
print(id(lst)) # 140735598722544
lst.append(4) # Изменяем список
print(id(lst)) # 140735598722544 (адрес остался тот же!)
Пример: dict изменяемый
d = {"name": "Alice"}
print(id(d)) # 140735598723664
d["age"] = 25 # Добавляем ключ
print(id(d)) # 140735598723664 (адрес не изменился!)
🚩Почему это важно?
Неизменяемые объекты безопаснее для ключей dict и set
d = {}
d[[1, 2, 3]] = "Ошибка!" # ❌ TypeError: unhashable type: 'list'
Используем tuple вместо list (он неизменяемый)
d[(1, 2, 3)] = "OK"
Ошибки с изменяемыми значениями по умолчанию
def add_item(lst=[]): # ❌ Опасный код!
lst.append(1)
return lst
print(add_item()) # [1]
print(add_item()) # [1, 1] ❌ Список не создаётся заново!
Используем None вместо списка
def add_item(lst=None):
if lst is None:
lst = []
lst.append(1)
return lst
🚩Копирование объектов (`copy()` vs `deepcopy()`)
copy() делает поверхностную копию (новый объект, но старые вложенные элементы).
deepcopy() делает глубокую копию (всё новое).
import copy
lst1 = [[1, 2, 3], [4, 5, 6]]
lst2 = copy.copy(lst1) # Поверхностная копия
lst2[0][0] = 99
print(lst1) # [[99, 2, 3], [4, 5, 6]] ❌ Исходный список изменился!
Используем deepcopy() для полной независимой копии
lst3 = copy.deepcopy(lst1)
lst3[0][0] = 100
print(lst1) # [[99, 2, 3], [4, 5, 6]] ✅ Не изменился!
Ставь 👍 и забирай 📚 Базу знанийCREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL -- Поле name обязательно
);
Нельзя вставить NULL в name
INSERT INTO users (id, name) VALUES (1, NULL); -- Ошибка!
🚩`UNIQUE` (Гарантирует уникальность значений)
Запрещает дубликаты в столбце
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE -- Email должен быть уникальным
);
Попытка вставить одинаковый email вызовет ошибку
INSERT INTO users (id, email) VALUES (1, 'test@example.com');
INSERT INTO users (id, email) VALUES (2, 'test@example.com'); -- Ошибка!
Создание UNIQUE на нескольких колонках
CREATE TABLE orders (
user_id INT,
product_id INT,
UNIQUE (user_id, product_id) -- Запрещает заказывать один товар дважды
);
🚩`PRIMARY KEY` (Главный ключ, уникальный идентификатор)
Объединяет NOT NULL + UNIQUE и гарантирует, что строка уникальна.
CREATE TABLE users (
id INT PRIMARY KEY, -- Уникальный идентификатор
name VARCHAR(50)
);
Можно создать PRIMARY KEY на нескольких колонках
CREATE TABLE enrollments (
student_id INT,
course_id INT,
PRIMARY KEY (student_id, course_id) -- Один студент не может записаться дважды на один курс
);
🚩`FOREIGN KEY` (Связь таблиц)
Создаёт связь между таблицами и поддерживает ссылочную целостность.
Есть таблица пользователей (users) и таблица заказов (orders), где user_id в orders должен ссылаться на id в users.
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id) -- Связь с таблицей users
);
Что делать при удалении пользователя?
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
Ставь 👍 и забирай 📚 Базу знанийdict) — это структура данных, которая хранит пары "ключ → значение".
🟠Создание словаря
Через {} (фигурные скобки)
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
Изменение значения
my_dict["age"] = 26 # Меняем возраст
del — удаление по ключу
del my_dict["city"]
Перебор ключей (for key in dict)
for key in my_dict:
print(key, my_dict[key])
Проверка наличия ключа
if "name" in my_dict:
print("Ключ существует!")
🟠Генерация словарей (Dictionary Comprehension)
Создадим словарь квадратов чисел
squares = {x: x**2 for x in range(1, 6)}
print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
🟠Ключи должны быть хешируемыми (неизменяемыми)
Нельзя использовать list как ключ!
my_dict[[1, 2, 3]] = "Ошибка" # TypeError: unhashable type: 'list'
Можно использовать tuple, int, str, frozenset
my_dict[(1, 2, 3)] = "OK"
Ставь 👍 и забирай 📚 Базу знанийSELECT
id,
месяц,
продавец,
сумма,
SUM(сумма) OVER (PARTITION BY месяц) AS общий_доход_в_месяц
FROM sales;
🟠`ROW_NUMBER()` – Нумерация строк
Пронумеруем продажи каждого продавца в порядке убывания суммы.
SELECT
id,
продавец,
сумма,
ROW_NUMBER() OVER (PARTITION BY продавец ORDER BY сумма DESC) AS номер
FROM sales;
🟠`RANK()` и `DENSE_RANK()` – Рейтинг с учётом одинаковых значений
Если два продавца получили одинаковую сумму, RANK() пропустит следующий номер, а DENSE_RANK() – нет.
SELECT
продавец,
сумма,
RANK() OVER (ORDER BY сумма DESC) AS ранг_1,
DENSE_RANK() OVER (ORDER BY сумма DESC) AS ранг_2
FROM sales;
🟠3. `LAG()` и `LEAD()` – Доступ к предыдущей и следующей строке
LAG() даёт предыдущее значение, LEAD() – следующее.
SELECT
месяц,
продавец,
сумма,
LAG(сумма) OVER (PARTITION BY продавец ORDER BY месяц) AS предыдущий_месяц,
LEAD(сумма) OVER (PARTITION BY продавец ORDER BY месяц) AS следующий_месяц
FROM sales;
🟠Использование оконных функций с `FRAME` (ограничение окна)
Иногда нужно анализировать не всю группу, а только несколько соседних строк.
SELECT
месяц,
продавец,
сумма,
AVG(сумма) OVER (PARTITION BY продавец ORDER BY месяц ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS скользящее_среднее
FROM sales;
Ставь 👍 и забирай 📚 Базу знаний[1] Скачать файл... (3 сек) [2] Обработать файл... (2 сек) [Готово за 5 секунд]Пример с параллелизмом (оба процесса выполняются одновременно) Если у нас 2 ядра процессора, можно выполнить задачи одновременно.
[1] Скачать файл... (3 сек) ──► Готово! [2] Обработать файл... (2 сек) ──► Готово! [Готово за 3 секунды] ✅ Быстрее!🚩Как реализовать параллелизм в Python? 🟠`multiprocessing` – настоящий параллелизм В Python
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("Все процессы завершены")
🟠`threading` – многопоточность (НЕ параллельность в Python!)
Python не может выполнять потоки параллельно из-за GIL, но threading всё же полезен для задач ввода-вывода.
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("Все потоки завершены")
🟠`asyncio` – асинхронность (НЕ параллелизм, но эффективное переключение задач)
Асинхронность позволяет не ждать выполнения операции, а переключаться на другие задачи.
import asyncio
async def task(name):
print(f"Начал {name}")
await asyncio.sleep(2) # НЕ блокирует другие задачи
print(f"Закончил {name}")
async def main():
await asyncio.gather(task("Задача 1"), task("Задача 2"))
asyncio.run(main())
🚩Виды параллелизма
🟠Параллелизм на уровне инструкций (ILP, CPU-level)
Процессор выполняет несколько инструкций одновременно. Например, в современных процессорах есть конвейер (pipeline), который выполняет несколько операций параллельно.
🟠Параллелизм на уровне данных (Data Parallelism)
Одна операция применяется к разным данным одновременно (используется в нейросетях, GPU).
import numpy as np
arr = np.array([1, 2, 3, 4])
result = arr * 2 # Все элементы умножаются одновременно (векторизация)
print(result) # [2 4 6 8]
Ставь 👍 и забирай 📚 Базу знанийGunicorn, Daphne).
Если проект синхронный → работает через WSGI (wsgi.py).
Если проект асинхронный → через ASGI (asgi.py).
GET /hello/ HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
🟠Django создаёт `HttpRequest` объект
Django превращает HTTP-запрос в объект HttpRequest, который передаётся в view.
def my_view(request):
print(request.method) # 'GET'
print(request.path) # '/hello/'
print(request.GET) # {'name': 'Alice'}
🟠Middleware (промежуточная обработка)
Прежде чем запрос дойдёт до view, Django проходит через мидлвари, которые могут:
Проверять авторизацию (AuthenticationMiddleware).
Защищать от CSRF (CsrfViewMiddleware).
Перенаправлять запросы (CommonMiddleware).
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
]
🟠Поиск `view` в `urls.py`
Django ищет, какая функция (view) должна обработать этот URL.
from django.urls import path
from myapp.views import hello_view
urlpatterns = [
path("hello/", hello_view), # Запрос "/hello/" попадёт в hello_view
]
🟠Выполнение `view` (контроллера)
Когда Django находит подходящее представление (view), оно вызывается.
from django.http import HttpResponse
def hello_view(request):
return HttpResponse("Привет, мир!")
🟠Формирование и обработка ответа
Django берёт HttpResponse и передаёт его обратно через middleware (например, сжатие, защита, заголовки безопасности).
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 12
Привет, мир!
🟠WSGI/ASGI сервер отправляет ответ клиенту
На последнем этапе WSGI/ASGI-сервер отправляет ответ обратно браузеру или API-клиенту.
🚩Краткая схема обработки запроса
Клиент (браузер) → WSGI/ASGI → Django Middleware → URL Dispatcher → View → Response → КлиентСтавь 👍 и забирай 📚 Базу знаний
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
