cookie

نحن نستخدم ملفات تعريف الارتباط لتحسين تجربة التصفح الخاصة بك. بالنقر على "قبول الكل"، أنت توافق على استخدام ملفات تعريف الارتباط.

avatar

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

Разбираем вопросы с собеседований на Python разработчика. Django, Flask, FastApi Сайт: https://easyoffer.ru/ Реклама: https://telega.in/c/python_easy_ru Предложения: @easyoffer_adv

إظهار المزيد
مشاركات الإعلانات
10 501
المشتركون
+11024 ساعات
+2017 أيام
+2 14930 أيام

جاري تحميل البيانات...

معدل نمو المشترك

جاري تحميل البيانات...

Какое утверждение описывает ключевое отличие между списками и кортежами, которое влияет на производительность?Anonymous voting
  • Кортежи занимают меньше памяти, чем списки.
  • Списки поддерживают более быструю индексацию элементов.
  • Кортежи могут быть ключами словаря, в отличие от списков.
  • Списки быстрее кортежей при выполнении сортировки.
0 votes
🔥 8
Для чего они нужны dunder методы ? Спросят с вероятностью 3% Dunder-методы представляют собой специальные методы, которые начинаются и заканчиваются двойным подчёркиванием (например, __init__,Для чего __repr__). Основные методы и их назначения 1️⃣Инициализация и завершение объектов: ✅__init__(self, ...): Конструктор класса, вызывается при создании нового экземпляра.
          class MyClass:
         def __init__(self, value):
             self.value = value
     
__del__(self): Деструктор, вызывается при удалении объекта. 2️⃣Представление объектов: ✅__str__(self): Определяет поведение функции str() и print(). Возвращает строковое представление объекта для пользователя.
          class MyClass:
         def __init__(self, value):
             self.value = value

         def __str__(self):
             return f'MyClass with value {self.value}'
     
__repr__(self): Определяет поведение функции repr(). Возвращает строковое представление объекта для разработчика.
          class MyClass:
         def __init__(self, value):
             self.value = value

         def __repr__(self):
             return f'MyClass({self.value!r})'
     
3️⃣Сравнение объектов: ✅__eq__(self, other): Оператор равенства ==. ✅__lt__(self, other): Оператор меньше <. ✅__le__(self, other): Оператор меньше или равно <=. ✅Аналогично можно определить методыСравнениДля чегоДля чего 4️⃣Арифметические операции: ✅__add__(self, other): Оператор сложения +. ✅__sub__(self, other): Оператор вычитания -. ✅__mul__(self, other): Оператор умножения *. ✅Аналогично можно определить методы для других арифметических операций:х назначения Для чего они нДля чего Для чего 5️⃣Контейнерные операции: ✅__len__(self): Возвращает длину объекта, используется в функции len().
          class MyContainer:
         def __init__(self, items):
             self.items = items

         def __len__(self):
             return len(self.items)
     
__getitem__(self, key): Позволяет доступ к элементам по ключу (используется оператор []).
          class MyContainer:
         def __init__(self, items):
             self.items = items

         def __getitem__(self, index):
             return self.items[index]
     
6️⃣Итерация: ✅__iter__(self): Возвращает итератор для объекта.
          class MyContainer:
         def __init__(self, items):
             self.items = items

         def __iter__(self):
             return iter(self.items)
     
7️⃣Контекстные менеджеры: ✅__enter__(self): Определяет действия при входе в контекст (with). ✅__exit__(self, exc_type, exc_value, traceback): Определяет действия при выходе из контекста.
          class MyContextManager:
         def __enter__(self):
             print("Entering the context")
             return self

         def __exit__(self, exc_type, exc_value, traceback):
             print("Exiting the context")

     with MyContextManager():
         print("Inside the context")
     
Зачем они нужны 1️⃣Упрощение работы с объектами: Позволяют легко определять, как объекты класса должны вести себя при использовании стандартных операторов и функций Python. 2️⃣Читаемость и удобство: Улучшают читаемость и удобство использования кода, делая объекты более интуитивными и естественными для работы. 3️⃣Переиспользование кода: Позволяют реализовать методы один раз и переиспользовать их в различных частях программы, что способствует уменьшению дублирования кода. Dunder-методы позволяют классам интегрироваться с встроенными операциями и функциями, такими как арифметические операции, сравнения и представления. Они делают работу с объектами интуитивной и упрощают код. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...
👍 8 3
Какой HTTP метод REST API не соответствует принципу идемпотентности, согласно стандартному использованию?Anonymous voting
  • PUT
  • DELETE
  • GET
  • POST
0 votes
🤯 18👍 9🤔 3
Какая проблема Python связана с множественным наследованием ? Спросят с вероятностью 3% Множественное наследование позволяет классу наследовать от нескольких базовых классов, что может быть полезно, но также приводит к ряду проблем. Основные проблемы, связанные с множественным наследованием, включают: 1️⃣Проблема ромба (Diamond Problem): ✅Это ситуация, когда класс наследует от двух классов, которые оба наследуют от одного общего предка. Это может привести к неоднозначности в разрешении методов и атрибутов. ✅Пример:
          class A:
         def method(self):
             print("Method in A")

     class B(A):
         def method(self):
             print("Method in B")

     class C(A):
         def method(self):
             print("Method in C")

     class D(B, C):
         pass

     d = D()
     d.method()  # Какой метод будет вызван: из B или из C?
     
2️⃣Проблемы с порядком разрешения методов (MRO - Method Resolution Order): ✅В Python для решения проблемы ромба используется алгоритм C3-линеаризации, который определяет порядок, в котором должны быть просмотрены базовые классы. ✅Можно использовать функцию mro() для просмотра порядка разрешения методов:
  print(D.mro())
     
✅Пример:
          class A:
         def method(self):
             print("Method in A")

     class B(A):
         def method(self):
             print("Method in B")

     class C(A):
         def method(self):
             print("Method in C")

     class D(B, C):
         pass

     d = D()
     d.method()  # Выведет: "Method in B", так как B стоит раньше C в MRO
     
3️⃣Управление состоянием и совместимость: ✅Классы могут иметь конфликтующие атрибуты и методы, что усложняет управление состоянием объектов. ✅Переопределение методов в одном классе может непредсказуемо повлиять на поведение других классов. Как он решает эти проблемы Использует несколько подходов для решения проблем, связанных с множественным наследованием: 1️⃣Алгоритм C3-линеаризации: ✅Этот алгоритм гарантирует корректный и предсказуемый порядок вызовов методов при множественном наследовании. ✅Порядок определяется как левая-направо, глубина-первый подход с корректировкой для избежания дублирования базовых классов. 2️⃣Использование функции super(): ✅Функция super() позволяет корректно вызывать методы родительских классов, следуя порядку MRO. ✅Это помогает избежать явного указания родительских классов и упрощает поддержку кода. ✅Пример:
          class A:
         def method(self):
             print("Method in A")

     class B(A):
         def method(self):
             super().method()
             print("Method in B")

     class C(A):
         def method(self):
             super().method()
             print("Method in C")

     class D(B, C):
         def method(self):
             super().method()

     d = D()
     d.method()
     # Выведет:
     # Method in A
     # Method in C
     # Method in B
     
Проблема множественного наследования связана с неоднозначностью порядка вызова методов и конфликтами атрибутов. Python решает эти проблемы с помощью алгоритма C3-линеаризации и функции super(), обеспечивающей корректный порядок разрешения методов. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...
👍 7 5
Какая транзакция в SQL не соответствует принципу Durability в ACID, если система перезагружается во время выполнения?Anonymous voting
  • Транзакция, записывающая данные на нестабильное хранилище
  • Транзакция с использованием uncommitted read
  • Транзакция с использованием двухфазной фиксации
  • Транзакция, зафиксированная в журнале транзакций
0 votes
1
На что влияет атрибут slots ? Спросят с вероятностью 3% Атрибут __slots__ используется для ограничения атрибутов, которые можно добавлять экземплярам класса, и для оптимизации использования памяти. Это особенно полезно в сценариях, где создаётся много объектов одного класса. Как он работает По умолчанию, Python использует словарь (__dict__) для хранения атрибутов экземпляров. Это даёт большую гибкость, но также приводит к значительному расходу памяти. Когда вы определяете атрибут slots в классе, вы тем самым ограничиваете класс набором конкретных атрибутов. Это убирает необходимость в словаре для хранения атрибутов и может значительно сократить использование памяти. Пример использования
class RegularClass:
    def __init__(self, x, y):
        self.x = x
        self.y = y

class SlotsClass:
   _(self, x, = ['x', 'y']

    def __init__(self, x, y):
        self.x = x
        self.y = y

# Создадим экземпляры классов
regular_instance = RegularClass(1, 2)
slots_instance = SlotsClass(1, 2)

# Попробуем добавить новый атрибут
regular_instance.z = 3  # Это работает
# slots_instance.z = 3  # Это вызовет ошибку AttributeError

print(regular_instance.__dict__)  # {'x': 1, 'y': 2, 'z': 3}
# print(slots_instance.__dict__)  # AttributeError: 'SlotsClass' object has no attribute '__dict__'

# Проверим использование памяти
import sys
print(sys.getsizeof(regular_instance))  # Выведет размер в байтах
print(sys.getsizeof(slots_instance))    # Выведет размер в байтах, который будет меньше
Объяснение 1️⃣Ограничение атрибутов: ✅В классе RegularClass можно добавлять любые атрибуты, так как используется словарь (__dict__). ✅ В классе SlotsClass можно добавлять только атрибуты, указанные в
= x
       
2️⃣Использование памяти: ✅Экземпляры класса состью 3% Азанимают меньше памяти, так как для хранения атрибутов не используется словарь. ✅Это может существенно уменьшить использование памяти в случаях, когда создаётся много экземпляров класса. Преимущества: ✅Снижение использования памяти: Экономия памяти за счёт отказа от словарей для хранения атрибутов. ✅Ускорение доступа к атрибутам: Быстрый доступ к атрибутам благодаря фиксированному набору атрибутов. Недостатки: ✅Ограничение гибкости: Невозможно добавлять новые атрибуты, не указанные в_slots__ в ✅Наследование: Классы-наследники должны явно указывать slots, чтобы сохранить оптимизацию. Атрибут slots ограничивает набор атрибутов экземпляров класса и уменьшает использование памяти за счёт отказа от словарей для хранения атрибутов. Это повышает эффективность, но уменьшает гибкость. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...
2
Какое максимально допустимое количество символов рекомендует PEP8 использовать в строке кода?Anonymous voting
  • 79 символов
  • 120 символов
  • 100 символов
  • 90 символов
0 votes
👍 1
Как бы реализовал паттерн singleton ? Спросят с вероятностью 3% Паттерн Singleton используется для того, чтобы создать класс, который имеет только один экземпляр. Это полезно, когда нужно ограничить количество объектов, например, для управления ресурсами (как подключение к базе данных) или для хранения глобального состояния. Существует несколько способов реализовать Singleton. Рассмотрим один из наиболее распространенных способов - использование приватного конструктора и класса-метода для получения экземпляра.
class Singleton:
    __instance = None

    def __new__(cls, args, kwargs):
        if cls.__instance is None:
            cls.__instance = super(Singleton, cls).__new__(cls, args, kwargs)
        return cls.__instance

    def __init__(self):
        if not hasattr(self, 'initialized'):
            self.initialized = True
            # Инициализация объекта, если нужно
            self.value = 0

# Проверка работы
singleton1 = Singleton()
singleton2 = Singleton()

print(singleton1 is singleton2)  # Выведет: True
print(singleton1.value)          # Выведет: 0
singleton1.value = 42
print(singleton2.value)          # Выведет: 42
Объяснение кода 1️⃣Приватный атрибут _instance_: ✅Этот атрибут используется для хранения единственного экземпляра класса. 2️⃣Метод __new__: ✅__new__ - это метод, который создаёт новый экземпляр класса. Если экземпляр уже существует (cls.__instance не None), возвращается существующий экземпляр. ✅Если экземпляр ещё не был создан, super(Singleton, cls).__new__(cls, args, kwargs) создаёт новый экземпляр и сохраняет его в cls.__instance. 3️⃣Метод init: ✅Методреализовалвызывается каждый раз при создании экземпляра. Чтобы избежать повторной инициализации, проверяем наличие атрибута initialized. Можно также реализовать Singleton с помощью декоратора:
def singleton(cls):
    instances = {}
    def get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return get_instance

@singleton
class SingletonClass:
    def __init__(self):
        self.value = 0

# Проверка работы
singleton1 = SingletonClass()
singleton2 = SingletonClass()

print(singleton1 is singleton2)  # Выведет: True
print(singleton1.value)          # Выведет: 0
singleton1.value = 42
print(singleton2.value)          # Выведет: 42
Объяснение 1️⃣Декоратор singleton: ✅Хранит экземпляры класса в словаре instances. ✅Если экземпляра класса ещё нет в словаре, он создаётся и добавляется в словарь. ✅Возвращается существующий или новый экземпляр класса. Паттерн Singleton гарантирует, что класс имеет только один экземпляр. Это достигается контролем создания экземпляров через методые None), или декоратор. Singleton полезен для управления ресурсами и глобального состояния. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...

👍 12
Какой механизм наилучше соответствует принципу инкапсуляции для скрытия данных класса?Anonymous voting
  • Использование модулей для разделения классов
  • Определение всех методов как статических
  • Передача всех переменных только через геттеры и сеттеры
  • Префикс переменных класса с двумя подчеркиваниями для обозначения приватности
0 votes
💊 12🤔 4
Как связаны new и singleton ? Спросят с вероятностью 3% Методы __new__ и паттерн Singleton тесно связаны, поскольку методью 3% Мечасто используется для реализации Singleton в Python. Singleton — это паттерн проектирования, который гарантирует, что у класса будет только один экземпляр на протяжении всего жизненного цикла приложения. Метод new отвечает за создание нового экземпляра класса, и именно его можно использовать для контроля создания объектов. Метод new — это специальный метод, который вызывается перед методом init. Он отвечает за создание и возвращение нового экземпляра класса. В отличие от метода init, который инициализирует уже существующий объект, new создаёт новый объект класса. Пример использования new в Singleton Для реализации паттерна Singleton с использованием метода new нужно сделать так, чтобы метод new возвращал один и тот же экземпляр класса при каждом вызове. Пример кода:
class Singleton:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
        return cls._instance

    def __init__(self, value):
        if not hasattr(self, '_initialized'):  # Проверка на инициализацию
            self.value = value
            self._initialized = True

# Проверка работы Singleton
singleton1 = Singleton("First Instance")
print(singleton1.value)  # Вывод: First Instance

singleton2 = Singleton("Second Instance")
print(singleton2.value)  # Вывод: First Instance

print(singleton1 is singleton2)  # Вывод: True
Пошаговое объяснение: 1️⃣Статический атрибут _instance: Используется для хранения единственного экземпляра класса.
2️⃣
Метод
eton1 = Sin
✅Проверяет, существует ли уже экземпляр класса (cls._instance is None). ✅Если не существует, создаёт новый экземпляр с помощью super(Singleton, cls).new(cls, args, kwargs) и сохраняет его в cls._instance. ✅Возвращает экземпляр класса, хранящийся в cls._instance. 3️⃣Метод init: ✅Инициализирует экземпляр только один раз. Проверка if not hasattr(self, '_initialized') предотвращает повторную инициализацию объекта. Почему Singleton и new связаны ✅Контроль создания объектов: Метод new позволяет контролировать процесс создания объекта, что идеально подходит для реализации Singleton. ✅Единственность экземпляра: С помощью new можно гарантировать, что будет создан только один экземпляр класса, поскольку new может возвращать уже существующий экземпляр. ✅Разделение обязанностей: Метод new отвечает за создание (или возврат существующего) экземпляра, а метод init — за его инициализацию, если это необходимо. Метод new используется для создания новых экземпляров класса и идеально подходит для реализации паттерна Singleton, так как позволяет контролировать создание единственного экземпляра класса и возвращать его при каждом вызове. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
إظهار الكل...
👍 8👀 4💊 2