Python | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Ko'proq ko'rsatish📈 Telegram kanali Python | Вопросы собесов analitikasi
Python | Вопросы собесов (@python_easy_ru) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 12 631 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 9 915-o'rinni va Rossiya mintaqasida 51 035-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 12 631 obunachiga ega bo‘ldi.
16 Oktabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -115 ga, so‘nggi 24 soatda esa -6 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 6.29% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 4.30% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 794 marta ko‘riladi; birinchi sutkada odatda 543 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 2 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent ставь, модуль, строка, docker, alice kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 17 Oktabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
# Целевой интерфейс (Target)
class PrinterInterface:
def print(self, text):
pass
# Адаптируемый класс (Adaptee)
class OldPrinter:
def print_old(self, text):
print(f"OldPrinter: {text}")
# Адаптер (Adapter)
class PrinterAdapter(PrinterInterface):
def __init__(self, old_printer):
self.old_printer = old_printer
def print(self, text):
self.old_printer.print_old(text)
# Клиентский код
def client_code(printer: PrinterInterface):
printer.print("Hello, world!")
# Использование
old_printer = OldPrinter()
adapter = PrinterAdapter(old_printer)
client_code(adapter)
Преимущества:
1️⃣ Повышенная совместимость: Позволяет работать с классами, которые иначе были бы несовместимыми.
2️⃣ Упрощение интеграции: Легко интегрировать старые классы с новым кодом без изменения исходных классов.
3️⃣ Поддержка существующего кода: Минимизирует изменения в клиентском коде.
Недостатки:
1️⃣ Дополнительная сложность: Введение адаптера добавляет новый слой абстракции, что может усложнить структуру кода.
2️⃣ Ограниченная производительность: Использование адаптера может в некоторых случаях влиять на производительность из-за дополнительного уровня косвенности.
🤔 Виды:
1️⃣ Класс-адаптер (Class Adapter):
➕ Реализуется через наследование.
➕ Преобразует интерфейс с помощью множественного наследования.
➕ Ограничение: Работает только с адаптируемым классом и его подклассами.
2️⃣ Объект-адаптер (Object Adapter):
➕ Реализуется через композицию.
➕ Преобразует интерфейс, делегируя вызовы методам адаптируемого объекта.
➕ Более гибкий, так как может работать с любыми классами, поддерживающими целевой интерфейс.
Класс-адаптер:
class OldPrinter:
def print_old(self, text):
print(f"OldPrinter: {text}")
class PrinterAdapter(OldPrinter, PrinterInterface):
def print(self, text):
self.print_old(text)
# Использование
adapter = PrinterAdapter()
client_code(adapter)
Объект-адаптер:
class PrinterAdapter(PrinterInterface):
def __init__(self, old_printer):
self.old_printer = old_printer
def print(self, text):
self.old_printer.print_old(text)
# Использование
old_printer = OldPrinter()
adapter = PrinterAdapter(old_printer)
client_code(adapter)
Паттерн "Адаптер" является мощным инструментом для интеграции старых систем с новыми требованиями, обеспечивая гибкость и повторное использование существующих классов без изменения их исходного кода.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых class OldPrinter:
def print_old(self, text):
print(f"OldPrinter: {text}")
class NewPrinterInterface:
def print(self, text):
pass
class PrinterAdapter(NewPrinterInterface):
def __init__(self, old_printer):
self.old_printer = old_printer
def print(self, text):
self.old_printer.print_old(text)
old_printer = OldPrinter()
adapter = PrinterAdapter(old_printer)
adapter.print("Hello, world!")
2️⃣ Bridge (Мост):
➕ Разделяет абстракцию и её реализацию так, чтобы они могли изменяться независимо друг от друга.
➕ Разделение логики рисования фигуры и конкретных реализаций рисования.
class DrawingAPI(ABC):
@abstractmethod
def draw_circle(self, x, y, radius):
pass
class DrawingAPI1(DrawingAPI):
def draw_circle(self, x, y, radius):
print(f"API1.circle at {x}:{y} radius {radius}")
class DrawingAPI2(DrawingAPI):
def draw_circle(self, x, y, radius):
print(f"API2.circle at {x}:{y} radius {radius}")
class Circle:
def __init__(self, x, y, radius, drawing_api):
self.x = x
self.y = y
self.radius = radius
self.drawing_api = drawing_api
def draw(self):
self.drawing_api.draw_circle(self.x, self.y, self.radius)
circle1 = Circle(1, 2, 3, DrawingAPI1())
circle2 = Circle(5, 7, 11, DrawingAPI2())
circle1.draw()
circle2.draw()
3️⃣ Composite (Компоновщик):
➕ Составляет объекты в древовидные структуры для представления иерархий "часть-целое". Позволяет клиентам одинаково обращаться как с отдельными объектами, так и с группами объектов.
➕ Организация структуры компании, где у нас есть как сотрудники, так и отделы.
class Employee:
def __init__(self, name, position):
self.name = name
self.position = position
self.subordinates = []
def add(self, employee):
self.subordinates.append(employee)
def remove(self, employee):
self.subordinates.remove(employee)
def display(self, indent=0):
print(" " * indent + f"{self.position}: {self.name}")
for subordinate in self.subordinates:
subordinate.display(indent + 2)
ceo = Employee("John", "CEO")
head_sales = Employee("Robert", "Head of Sales")
sales_exec1 = Employee("Laura", "Sales Executive")
sales_exec2 = Employee("Bob", "Sales Executive")
ceo.add(head_sales)
head_sales.add(sales_exec1)
head_sales.add(sales_exec2)
ceo.display()
Структурные паттерны проектирования помогают организовать классы и объекты в крупные структуры, повышая гибкость и расширяемость системы.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхimport copy
from abc import ABC, abstractmethod
# Прототип
class Prototype(ABC):
@abstractmethod
def clone(self):
pass
# Конкретный прототип
class ConcretePrototype1(Prototype):
def __init__(self, field):
self.field = field
def clone(self):
return copy.deepcopy(self)
def __str__(self):
return f"ConcretePrototype1 with field: {self.field}"
class ConcretePrototype2(Prototype):
def __init__(self, field):
self.field = field
def clone(self):
return copy.deepcopy(self)
def __str__(self):
return f"ConcretePrototype2 with field: {self.field}"
# Использование
if __name__ == "__main__":
prototype1 = ConcretePrototype1("Value1")
prototype2 = ConcretePrototype2("Value2")
clone1 = prototype1.clone()
clone2 = prototype2.clone()
print(prototype1) # ConcretePrototype1 with field: Value1
print(clone1) # ConcretePrototype1 with field: Value1
print(prototype2) # ConcretePrototype2 with field: Value2
print(clone2) # ConcretePrototype2 with field: Value2
Преимущества:
1️⃣ Экономия ресурсов: Быстрое создание новых объектов путем клонирования.
2️⃣ Гибкость: Легко создавать объекты без привязки к конкретным классам.
3️⃣ Упрощение создания сложных объектов: Позволяет клонировать уже настроенные объекты.
Недостатки:
1️⃣ Сложность реализации клонирования: Необходимо правильно реализовать глубокое или поверхностное копирование, что может быть сложно.
2️⃣ Проблемы с копированием объектов: Некоторые объекты могут содержать ссылки на другие, что требует сложных механизмов для правильного клонирования.
Паттерн "Прототип" позволяет быстро и эффективно создавать новые объекты путем клонирования существующих, что упрощает процесс создания сложных объектов и экономит ресурсы.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхfrom abc import ABC, abstractmethod
# Продукт
class Transport(ABC):
@abstractmethod
def deliver(self) -> str:
pass
# Конкретные продукты
class Truck(Transport):
def deliver(self) -> str:
return "Deliver by land in a box."
class Ship(Transport):
def deliver(self) -> str:
return "Deliver by sea in a container."
# Создатель
class Logistics(ABC):
@abstractmethod
def create_transport(self) -> Transport:
pass
def plan_delivery(self) -> str:
transport = self.create_transport()
return transport.deliver()
# Конкретные создатели
class RoadLogistics(Logistics):
def create_transport(self) -> Transport:
return Truck()
class SeaLogistics(Logistics):
def create_transport(self) -> Transport:
return Ship()
# Использование
def client_code(logistics: Logistics):
print(logistics.plan_delivery())
if __name__ == "__main__":
print("App: Launched with the RoadLogistics.")
client_code(RoadLogistics())
print("\nApp: Launched with the SeaLogistics.")
client_code(SeaLogistics())
Преимущества:
1️⃣ Изоляция создания объектов: Создание объектов делегируется подклассам, что изолирует основной код от логики создания объектов.
2️⃣ Расширяемость: Легко добавлять новые продукты, не изменяя существующий код.
3️⃣ Упрощение тестирования: Легко подменять конкретные реализации продуктов для тестирования.
Недостатки:
1️⃣ Усложнение кода: Требует создания большого количества дополнительных классов.
2️⃣ Поддержка иерархии классов: Может усложнить систему, если классы продуктов и создателей становятся слишком сложными.
Паттерн "Фабричный метод" позволяет создавать объекты через интерфейс, делегируя создание конкретных объектов подклассам, что делает код более гибким и расширяемым.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых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()
В этом примере класс Proxy контролирует доступ к классу RealSubject, добавляя проверку доступа и логирование.
🤔 Подытожим
Паттерн Заместитель управляет доступом к другому объекту, предоставляя дополнительные возможности, такие как контроль доступа, отложенная инициализация, управление ресурсами, логирование и кэширование.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхfrom abc import ABC, abstractmethod
# Продукт
class Car:
def __init__(self):
self.parts = []
def add_part(self, part):
self.parts.append(part)
def list_parts(self):
return ", ".join(self.parts)
# Интерфейс Построителя
class CarBuilder(ABC):
@abstractmethod
def produce_engine(self):
pass
@abstractmethod
def produce_wheels(self):
pass
@abstractmethod
def produce_body(self):
pass
# Конкретный Построитель
class SportsCarBuilder(CarBuilder):
def __init__(self):
self.car = Car()
def produce_engine(self):
self.car.add_part("Sport Engine")
def produce_wheels(self):
self.car.add_part("Sport Wheels")
def produce_body(self):
self.car.add_part("Sport Body")
def get_car(self):
return self.car
# Директор
class Director:
def __init__(self, builder: CarBuilder):
self._builder = builder
def construct_sports_car(self):
self._builder.produce_engine()
self._builder.produce_wheels()
self._builder.produce_body()
# Использование
if __name__ == "__main__":
builder = SportsCarBuilder()
director = Director(builder)
director.construct_sports_car()
car = builder.get_car()
print(f"Car parts: {car.list_parts()}")
Преимущества:
1️⃣ Разделение сложного конструктора на простые шаги: Каждый метод отвечает за создание определенной части продукта.
2️⃣ Поддержка различных представлений объекта: Можно использовать один и тот же процесс создания для создания различных вариаций продукта.
3️⃣ Улучшенная читаемость и поддерживаемость: Код легче понимать и изменять.
Недостатки:
1️⃣Усложнение структуры кода: Добавление новых классов и методов может усложнить проект.
2️⃣Необходимость в дополнительном коде: Требуется больше кода для реализации паттерна, особенно при создании новых конкретных построителей и продуктов.
Паттерн "Построитель" помогает управлять сложностью создания объектов и позволяет создавать различные их представления, делая код более гибким и поддерживаемым.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых