Python | Вопросы собесов – Telegram
Python | Вопросы собесов
13.6K subscribers
36 photos
3 videos
1 file
1.18K links
Cайт: easyoffer.ru
Реклама: @easyoffer_adv
ВП: @easyoffer_vp

Тесты t.me/+20tRfhrwPpM4NDQy
Задачи t.me/+nsl4meWmhfQwNDVi
Вакансии t.me/+cXGKkrOY2-w3ZTky
Download Telegram
Что такое миксин ?
Спросят с вероятностью 23%

Миксин (Mixin) – это класс, предназначенный для предоставления определённых методов для использования другими классами, без необходимости становиться родительским классом для этих классов. Главная цель миксина - реализация функциональности, которую можно легко подключить к другому классу. Миксины позволяют разработчикам использовать композицию для добавления функций в классы вместо наследования, что делает структуру кода гибче и модульнее.

Применение миксинов удобно, когда одна и та же функциональность нужна в разных классах, но эти классы не должны быть связаны отношениями наследования. Таким образом, миксины позволяют избежать дублирования кода и упростить его поддержку.

Пример использования миксина:
class JsonMixin:
def to_json(self):
import json
return json.dumps(self.__dict__)

class Person:
def __init__(self, name, age):
self.name = name
self.age = age

class PersonJson(JsonMixin, Person): # Использование миксина для добавления функциональности сериализации в JSON
pass

p = PersonJson('Иван', 25)
print(p.to_json()) # Выведет строку в формате JSON, представляющую объект PersonJson


В этом примере JsonMixin предоставляет метод to_json, который может сериализовать объекты класса в JSON. Класс PersonJson наследует этот метод благодаря множественному наследованию, где JsonMixin используется для добавления функциональности сериализации к классу Person, не изменяя его исходный код.

Использование миксинов делает код более читаемым и легко поддерживаемым, так как оно позволяет разработчикам комбинировать и переиспользовать функциональности между различными классами без изменения их иерархии наследования.

–––
Миксин - это способ добавления функциональности к классам через множественное наследование, без необходимости изменять их иерархию. Это позволяет сделать код более модульным и легким для поддержки.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥3👾32💊2
Что такое Middleware ?
Спросят с вероятностью 20%

Middleware — это механизм слоёв обработки запросов и ответов в веб-приложении. Эти слои выполняются на разных этапах обработки запроса: некоторые мидлвари вызываются до того, как запрос достигнет представления (view), а другие — после формирования ответа представлением, но до того, как этот ответ будет отправлен клиенту. Middleware в Django позволяет глобально изменять запросы входящие в ваше приложение или ответы из него, применять аутентификацию, сессии, кеширование и многое другое.

Django поставляется с набором встроенных middleware, каждый из которых выполняет свою специфическую задачу. Ниже перечислены некоторые из наиболее часто используемых встроенных middleware и их функции:

1️⃣ SecurityMiddleware - Обеспечивает выполнение различных мер безопасности для защиты приложения, таких как предотвращение заголовка X-Frame-Options, реализация HSTS (HTTP Strict Transport Security) и т.д.

2️⃣ SessionMiddleware - Управляет сессиями через запросы. Это позволяет сохранять информацию о сессиях пользователей между различными запросами.

3️⃣ CommonMiddleware - Предоставляет различные функции, такие как управление перенаправлением URL с "www" на без "www", управление заканчивающимся слешем в URL и отправку заголовков X-Content-Type-Options: nosniff.

4️⃣ CsrfViewMiddleware - Предотвращает атаки межсайтовой подделки запроса (CSRF) путём добавления токена CSRF в запросы, которые изменяют данные, защищая таким образом ваше приложение.

5️⃣ AuthenticationMiddleware - Ассоциирует пользователей с запросами используя сессии, что позволяет использовать request.user.

6️⃣ MessageMiddleware - Позволяет временно сохранять сообщения в запросе и выводить их пользователю. Это может быть полезно для отображения уведомлений об успехе, предупреждениях или ошибках после выполнения действий.

7️⃣ XFrameOptionsMiddleware - Защищает ваше приложение от кликовджекинга, устанавливая заголовок X-Frame-Options для всех ответов, которые содержат HTML.

Важно отметить, что порядок middleware в настройках MIDDLEWARE в settings.py имеет значение, поскольку они обрабатываются в порядке, указанном в этом списке, сначала при обработке входящего запроса и в обратном порядке при обработке ответа.

Middleware — это мощный инструмент, который позволяет глобально влиять на процесс обработки запросов и ответов в вашем веб-приложении, добавляя важные функции безопасности, управления сессиями, аутентификации и многие другие возможности.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍162
Что такое асинхронность ?
Спросят с вероятностью 20%

Асинхронность — это концепция, позволяющая выполнение задач в программе так, чтобы они не блокировали выполнение друг друга. Это значит, что программа может переключаться между задачами, не дожидаясь завершения каждой из них. Это особенно полезно в ситуациях, когда выполнение задачи зависит от внешних факторов, которые могут занять неопределенное время (например, ожидание ответа от веб-сервиса или чтение файла).

В Python асинхронность реализуется с помощью корутин и асинхронного ввода-вывода (asyncio) . Это позволяет программе быть более эффективной и отзывчивой, особенно при работе с I/O-задачами, такими как сетевое взаимодействие или операции с диском, которые могут значительно замедлить выполнение программы, если использовать блокирующий ввод-вывод.

Пример асинхронной функции:
import asyncio
async def main():
print('Привет')
await asyncio.sleep(1) # Имитация асинхронной задачи, например, запроса к веб-серверу
print('Мир')

asyncio.run(main())


В этом примере async def определяет асинхронную функцию. Ключевое слово await используется перед вызовом функции, которая может быть асинхронной (в нашем случае asyncio.sleep), указывая, что программа может переключиться на выполнение другой задачи во время ожидания завершения текущей. asyncio.run(main()) запускает асинхронный цикл событий, который управляет выполнением асинхронных функций.

Использование асинхронности позволяет повысить производительность программы за счет неблокирующего выполнения задач, особенно когда есть много операций ввода-вывода, таких как запросы к сети или к базам данных.

Асинхронность позволяет делать программу более эффективной и отзывчивой, выполняя задачи параллельно и не ожидая завершения каждой из них. Это достигается за счет использования асинхронных операций, которые не блокируют выполнение программы.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍41
В чем отличие асинхронности, threading'га и мультипроцессинга ?
Спросят с вероятностью 17%

Асинхронность, threading и мультипроцессинг - это три различных подхода к параллельному выполнению задач каждый из которых имеет свои особенности и применения:

1️⃣ Асинхронность (Asynchronous)

Асинхронность предполагает выполнение задач без ожидания их завершения. Используется для работы с вводом-выводом (I/O), таким как чтение или запись файлов, сетевые запросы и т. д. В асинхронном коде задачи не блокируют основной поток выполнения, что позволяет эффективно использовать ресурсы процессора. Примеры асинхронных моделей включают в себя асинхронные функции и ключевые слова в Python (например, async, await).

2️⃣ Потоки (Threading)

Потоки позволяют выполнять несколько частей кода (потоков) параллельно в пределах одного процесса. Используются для выполнения многозадачных операций, которые могут быть распределены между несколькими ядрами процессора. Потоки могут выполняться параллельно, но могут также конкурировать за общие ресурсы, что может привести к проблемам синхронизации и безопасности. В некоторых языках, таких как Python, использование потоков ограничено из-за GIL (Global Interpreter Lock), что может снижать эффективность при использовании множества потоков для CPU-интенсивных задач.

3️⃣ Мультипроцессинг (Multiprocessing)

Мультипроцессинг также позволяет выполнять несколько частей кода параллельно, но каждая часть выполняется в отдельном процессе. Каждый процесс имеет свое собственное пространство памяти, что делает мультипроцессинг более подходящим для многозадачных вычислений на многоядерных системах. Процессы обычно имеют больший накладные расходы по сравнению с потоками, поскольку каждый из них требует своих собственных ресурсов памяти и управления. Мультипроцессинг избегает проблемы GIL, что делает его более эффективным для CPU-интенсивных задач в Python и других языках.

Выбор между асинхронностью, потоками и мультипроцессингом зависит от конкретных требований вашего приложения, а также от характеристик вашей системы и языка программирования.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🤔73🔥3
В чем отличие списка от кортежа ?
Спросят с вероятностью 17%

Список (list) и кортеж (tuple)
- это две различные структуры данных, которые обладают следующими основными различиями:

1️⃣ Изменяемость:

- Списки изменяемы, что означает, что их элементы могут быть изменены после создания списка.

- Кортежи неизменяемы, их элементы не могут быть изменены после создания кортежа.

2️⃣ Синтаксис:

- Списки создаются с использованием квадратных скобок [ ], например: [1, 2, 3].

- Кортежи создаются с использованием круглых скобок ( ), например: (1, 2, 3).

3️⃣ Производительность:

- Кортежи работают быстрее, чем списки, потому что они неизменяемы и Python может проводить оптимизации, которые не доступны для списков.

4️⃣ Использование:

- Списки обычно используются там, где требуется изменяемая коллекция, например, когда вы планируете добавлять, удалять или изменять элементы списка.

- Кортежи обычно используются для представления фиксированных коллекций элементов, которые не должны изменяться, или для передачи неизменяемых последовательностей данных в функции, где изменяемость нежелательна.

Пример использования списков:
my_list = [1, 2, 3]
my_list.append(4)
print(my_list)  # Вывод: [1, 2, 3, 4]


Пример использования кортежей:
my_tuple = (1, 2, 3)
# my_tuple[0] = 5  # Это вызовет ошибку, так как кортежи неизменяемы
print(my_tuple)  # Вывод: (1, 2, 3)


Если ваши данные должны оставаться неизменными, лучше использовать кортежи. Если вам нужна изменяемость, используйте списки.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥121
Как сделать все значения списка уникальными ?
Спросят с вероятностью 7%

Можно сделать все значения списка уникальными, преобразовав его в множество (set) и затем обратно в список. Множество автоматически удаляет дубликаты, оставляя только уникальные элементы. Вот как это можно сделать:
my_list = [1, 2, 3, 4, 2, 3, 5]

unique_list = list(set(my_list))

print(unique_list) # Вывод: [1, 2, 3, 4, 5]


В этом примере set(my_list) создает множество уникальных значений из списка my_list, а list(set(my_list)) преобразует это множество обратно в список. Как результат, мы получаем список, содержащий только уникальные значения из исходного списка.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍213🔥3
Что такое метаклассы ?
Спросят с вероятностью 17%

Метаклассы - это концепция, которая позволяет контролировать создание классов. Классы являются объектами, и они создаются с помощью других классов, которые называются метаклассами. Вот некоторые ключевые моменты о них:

1️⃣ Классы как объекты: Классы являются объектами первого класса, что означает, что они могут быть созданы, изменены и переданы как аргументы функций.

2️⃣ Типы и метаклассы: Каждый объект имеет тип, который определяется его классом. Этот класс, определяющий тип объекта, называется метаклассом. По умолчанию для всех классов метаклассом является type.

3️⃣ Использование метаклассов: Метаклассы можно использовать для изменения поведения создания классов. Это может быть полезно для автоматического добавления методов, проверки атрибутов или изменения наследования классов.

4️⃣ Ключевые методы метакласса: Для создания собственного метакласса обычно определяются методы __new__() и __init__(). Метод __new__() вызывается перед созданием экземпляра класса, а метод __init__() вызывается после создания экземпляра.

Пример создания метакласса:
class MyMeta(type):
    def new(cls, name, bases, dct):
        # Изменяем или расширяем класс
        dct['custom_attribute'] = 'This is a custom attribute'
        return super().new(cls, name, bases, dct)

class MyClass(metaclass=MyMeta):
    pass

obj = MyClass()
print(obj.custom_attribute)  # Вывод: This is a custom attribute


В этом примере MyMeta - это метакласс, который изменяет класс MyClass, добавляя к нему новый атрибут custom_attribute.

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🤔72👾1
Что такое мутабельные и иммутабельные типы данных ?
Спросят с вероятностью 7%

Мутабельные (изменяемые) и иммутабельные (неизменяемые) типы данных определяются по их способности изменяться после создания.

1️⃣ Иммутабельные типы данных:
- Не могут быть изменены после создания.
- Если вы пытаетесь изменить значение иммутабельного объекта, на самом деле создается новый объект с измененным значением.
- Примеры таких данных включают числа (int, float), строки (str), кортежи (tuple), неизменяемые множества (frozenset) и неизменяемые словари (frozenset).
Пример:
x = 5
x += 1 # Создается новый объект с новым значением


2️⃣ Мутабельные типы данных:
- Могут быть изменены после создания.
- Вы можете изменять значение мутабельного объекта, не создавая новый объект.
- Примеры таких данных включают списки (list), множества (set), словари (dict) и пользовательские объекты.
Пример:
my_list = [1, 2, 3]
my_list.append(4) # Изменяется существующий список


Использование иммутабельных типов данных обычно приводит к более безопасному и предсказуемому поведению программы, так как они не могут быть случайно изменены в процессе выполнения программы. Однако мутабельные типы данных часто более эффективны в использовании, особенно при работе с большими объемами данных, поскольку они позволяют изменять значение объекта без создания нового экземпляра.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23👾21
Что делает декоратор property ?
Спросят с вероятностью 17%

Декоратор property используется для создания вычисляемых атрибутов класса. Он позволяет определить методы getter, setter и deleter для атрибута класса, что обеспечивает более гибкий доступ к данным объекта. Вот как работает каждый из этих методов:

1️⃣ Getter (метод получения):
   - Помеченный декоратором @property, представляет собой метод, который возвращает значение атрибута.
   - Вызывается при обращении к атрибуту без использования скобок или при обращении через свойство.
   
2️⃣ Setter (метод установки):
   - Помеченный декоратором @property.setter, представляет собой метод, который устанавливает значение атрибута.
   - Вызывается при попытке установить новое значение атрибута.
   
3️⃣ Deleter (метод удаления):
   - Помеченный декоратором @property.deleter, представляет собой метод, который удаляет атрибут.
   - Вызывается при использовании оператора del для удаления атрибута.

Вот пример использования property:
class Circle:
    def init(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @radius.setter
    def radius(self, value):
        if value <= 0:
            raise ValueError("Радиус должен быть положительным числом")
        self._radius = value
    
    @radius.deleter
    def radius(self):
        del self._radius

# Использование
c = Circle(5)
print(c.radius)  # Вывод: 5
c.radius = 10
print(c.radius)  # Вывод: 10
del c.radius
# print(c.radius)  # Вызовет AttributeError, так как атрибут удален 


В этом примере метод radius() используется как getter, radius.setter используется для установки нового значения атрибуту, а radius.deleter используется для удаления атрибута.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26
Что такое замыкания ?
Спросят с вероятностью 7%

Замыкание (closure) в программировании — это функция, которая ссылается на свободные переменные в своей области видимости из внешней области видимости, в которой она была создана, даже если эта внешняя область видимости уже завершила свою работу.

В более простых терминах, замыкание — это функция, которая запоминает значение переменных из той области видимости, в которой она была определена, и продолжает использовать их, даже если эта область видимости уже не активна. Они часто используются для создания функций-фабрик, где каждый вызов такой фабрики создает новое замыкание с доступом к различным контекстам.

Пример:
def outer_function(x):
def inner_function(y):
return x + y
return inner_function

closure = outer_function(10) # Создаем замыкание с x = 10

print(closure(5)) # Вывод: 15

В этом примере inner_function является замыканием, потому что она ссылается на переменную x из внешней функции outer_function, даже после того, как outer_function завершила свою работу. Каждый раз, когда мы вызываем closure(5), мы получаем результат сложения x (который был 10) и y (который был передан в замыкание, равный 5), что дает нам 15.

Замыкания являются мощным и полезным инструментом, который может быть использован для создания гибких и эффективных решений в различных ситуациях.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🤯111🤔1
Что такое магические методы ?
Спросят с вероятностью 17%

Магические методы - это специальные методы, начинающиеся и заканчивающиеся двумя подчеркиваниями (__), которые предоставляют специальное поведение объектам при использовании встроенных операторов или функций. Они также называются "специальными методами" или "дандер-методами" (от "double underscore").

Магические методы позволяют классам определять, как они должны реагировать на различные операции, такие как сложение (+), вычитание (-), вызов функции (()), получение длины (len()), преобразование в строку (str()) и многое другое.

Вот некоторые примеры магических методов и их предназначение:

- __init__(self, ...): Инициализация объекта. Вызывается при создании нового экземпляра класса.
- __str__(self): Преобразование объекта в строку. Вызывается функцией str() или при использовании объекта в функциях форматирования строк.
- __repr__(self): Представление объекта. Вызывается функцией repr(), а также при использовании объекта в интерактивной оболочке.
- __add__(self, other): Сложение объектов. Вызывается при использовании оператора +.
- __sub__(self, other): Вычитание объектов. Вызывается при использовании оператора -.
- __len__(self): Получение длины объекта. Вызывается функцией len().
- __getitem__(self, key): Получение элемента по индексу или ключу. Вызывается при использовании оператора [].

И это только несколько из множества магических методов, которые можно определить в классе. Использование магических методов делает классы более интегрированными с языком и позволяет использовать их встроенные функциональности более элегантным и естественным способом.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26
Что такое модуль ?
Спросят с вероятностью 7%

Модуль — это файл с расширением .py, который содержит код. Он может содержать переменные, функции и классы, которые можно использовать в других программах или модулях.

Модули используются для организации кода, упрощения его поддержки и повторного использования. Они позволяют разбить код на отдельные логические блоки, что делает его более структурированным и управляемым.

Пример:
# Модуль example_module.py

def greet(name):
return f"Привет, {name}!"

def add(x, y):
return x + y

class Person:
def init(self, name):
self.name = name

def say_hello(self):
return f"Привет, меня зовут {self.name}"


Этот код определяет модуль с именем example_module.py, который содержит функции greet() и add(), а также класс Person. После того, как этот модуль был создан, его можно импортировать в другие скрипты с помощью ключевого слова import:
import example_module

print(example_module.greet("Миша")) # Вывод: Привет, Миша!
print(example_module.add(2, 3)) # Вывод: 5

person = example_module.Person("Анна")
print(person.say_hello()) # Вывод: Привет, меня зовут Анна


Модули представляют собой важный механизм организации кода и его повторного использования, а также обеспечивают удобство и поддерживаемость проекта.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍203🔥1
Что относится к изменяемым и к неизменяемым типам данных ?
Спросят с вероятностью 17%

Типы данных делятся на изменяемые (mutable) и неизменяемые (immutable) в зависимости от того, можно ли изменять значения объектов этого типа после их создания. Вот общее разделение:

Изменяемые типы данных (Mutable):

1️⃣ Списки (List): Элементы могут быть изменены после его создания. Это значит, что вы можете добавлять, удалять или изменять элементы списка без создания нового списка.

2️⃣ Словари (Dictionary): Элементы могут быть изменены после его создания. Вы можете добавлять, удалять или изменять пары ключ-значение словаря.

3️⃣ Множества (Set): Элементы множества могут быть изменены после его создания. Вы можете добавлять или удалять элементы из множества.

Неизменяемые типы данных (Immutable):

1️⃣ Строки (String): Строки являются неизменяемыми. Вы не можете изменить отдельные символы строки после ее создания.

2️⃣ Кортежи (Tuple): Кортежи также неизменяемы. Вы не можете изменить элементы кортежа после его создания.

3️⃣ Числовые типы (int, float, complex): Числовые типы данных также неизменяемы. Вы не можете изменить значения чисел после их создания.

4️⃣ Неизменяемые версии структур данных: Некоторые библиотеки, такие как collections.namedtuple, предоставляют неизменяемые версии структур данных.

Изменяемые типы данных могут быть полезны для хранения и изменения коллекций данных, в то время как неизменяемые типы данных обеспечивают безопасность данных и подходят для хранения значений, которые не должны изменяться после создания.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍223
Что такое list comprehension ?
Спросят с вероятностью 17%

List comprehension - это конструкция, которая позволяет создавать списки на основе других последовательностей (например, списков, кортежей, множеств) более компактно и читаемо.

Синтаксис list comprehension выглядит следующим образом:
[выражение for элемент in последовательность if условие]


В расширенной форме:
[выражение for элемент in последовательность]


где:
- выражение - это выражение, которое будет применено к каждому элементу последовательности.
- элемент - это переменная, представляющая текущий элемент последовательности.
- последовательность - это исходная последовательность, по которой будет проходить итерация.
- условие (необязательно) - это условие, которое фильтрует элементы последовательности.

Примеры использования list comprehension:

1️⃣ Создание списка квадратов чисел от 0 до 9:
squares = [x**2 for x in range(10)]


2️⃣ Фильтрация списка, оставляя только четные числа:
even_numbers = [x for x in range(10) if x % 2 == 0]


3️⃣ Преобразование списка строк в список их длин:
strings = ["apple", "banana", "orange"]
lengths = [len(s) for s in strings]

List comprehension делает код более кратким и выразительным, особенно для простых преобразований и фильтраций данных. Однако не следует злоупотреблять им, чтобы избежать снижения читаемости кода.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍214
Что такое args ?
Спросят с вероятностью 7%

Термин "args" обычно используется для обозначения необязательного параметра функции, который позволяет передавать произвольное количество позиционных аргументов в функцию. Он является соглашением об именовании и может быть заменен на любое другое имя, но часто используется именно "args" для означения этого параметра.

Этот необязательный параметр обычно представляет собой кортеж (tuple) аргументов, переданных в функцию. Поскольку функция может принимать произвольное количество аргументов, он позволяет обрабатывать их динамически.

Пример использования:
def sum_values(*args):
total = 0
for num in args:
total += num
return total

result = sum_values(1, 2, 3, 4, 5)
print(result) # Вывод: 15

В этом примере `*args` позволяет функции принимать любое количество аргументов, которые будут представлены в виде кортежа. Функция затем проходит по всем элементам кортежа и суммирует их, возвращая общее значение.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍223
В чем разница между MRO2 и MRO3 ?
Спросят с вероятностью 7%

MRO2 (Method Resolution Order 2) и MRO3 (Method Resolution Order 3) являются алгоритмами разрешения порядка вызова методов в множественном наследовании. Эти алгоритмы используются для определения того, какой метод будет вызван при обращении к методу экземпляра класса, когда этот метод присутствует в нескольких классах, связанных цепочкой наследования.

Основное отличие между MRO2 и MRO3 заключается в том, как они обрабатывают классы, которые имеют одинаковые имена методов в цепочке наследования.

1️⃣ MRO2 (Python 2): В Python 2 использовался алгоритм MRO2, который был основан на алгоритме C3 Linearization. Он приводил к проблемам с алгоритмическими рекурсивными зависимостями в некоторых случаях множественного наследования, особенно когда классы имели сложные структуры наследования.

2️⃣ MRO3 (Python 3): В Python 3 был заменен на более усовершенствованный алгоритм MRO3, который является модифицированным алгоритмом C3 Linearization. Он решает проблемы, связанные с амбигуитетом при разрешении порядка вызова методов в множественном наследовании и обеспечивает более предсказуемое поведение в таких случаях.

Основным преимуществом MRO3 является его способность разрешать конфликты имен методов в множественном наследовании более точно и надежно, что упрощает и смягчает проблемы, связанные с неоднозначностью при определении порядка вызова методов. Это позволяет разработчикам писать более структурированный и надежный код с использованием множественного наследования.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯15👍2🤔2🔥1
Какие есть основные методы HTTP ?
Спросят с вероятностью 13%

Основные методы HTTP, которые широко используются при взаимодействии с веб-серверами, включают следующие:

1️⃣ GET: Запрашивает представление ресурса. GET-запросы обычно используются для получения данных от сервера. Они могут быть кэшированы и остаются в истории браузера. Они ограничены в размере.

2️⃣ POST: Отправляет данные для обработки на сервере. POST-запросы часто используются для отправки данных HTML-формы на сервер для обработки. Они не кэшируются и не остаются в истории браузера. Они могут отправлять большие объемы данных.

3️⃣ PUT: Загружает содержимое запроса на указанный URI. Если ресурс существует, он перезаписывается. Если ресурс не существует, сервер может создать его с использованием предоставленных данных.

4️⃣ DELETE: Удаляет указанный ресурс.

5️⃣ PATCH: Применяет частичные модификации к ресурсу. Обычно используется для обновления ресурса с частичными данными.

6️⃣ HEAD: Запрашивает заголовки, которые будут возвращены, как если бы был сделан запрос GET, но без тела ответа.

7️⃣ OPTIONS: Используется для запроса возможностей и параметров коммуникации для указанного ресурса.

8️⃣ TRACE: Используется для тестирования соединения по маршруту к ресурсу. Он выполняет циклический обход маршрутизации, который включает в себя передачу запроса через все узлы маршрута.

Это основные методы HTTP, но также существуют и другие, менее используемые. Понимание этих методов важно при разработке веб-приложений и работы с веб-серверами.

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍4🤔1
Что такое аннотации типов ?
Спросят с вероятностью 7%

Аннотации типов- это синтаксическая особенность, которая позволяет указывать типы переменных, аргументов функций и возвращаемых значений функций в коде. Они не влияют на выполнение программы, но могут быть использованы в качестве средства документирования кода и инструмента статического анализа (например, с помощью инструментов статической типизации, таких как mypy).

Пример использования:
def add(x: int, y: int) -> int:
return x + y

result: int = add(5, 3)
print(result) # Вывод: 8


В этом примере x: int и y: int являются аннотациями типов для аргументов функции add, указывающими, что они должны быть целыми числами. Аннотация -> int указывает, что функция add должна возвращать целое число. Аннотации типов не являются обязательными. Однако они могут быть полезны для повышения читаемости кода и облегчения его анализа.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍9
Что такое ORM ?
Спросят с вероятностью 13%

ORM (Object-Relational Mapping)
- это техника, которая позволяет представить данные из реляционной базы данных в виде объектов в объектно-ориентированном коде. С помощью ORM разработчики могут работать с данными, как если бы они были объектами, а не записями в базе данных, что облегчает работу и повышает производительность.

Вот некоторые ключевые аспекты ORM:

1️⃣ Сопоставление объектов и таблиц: ORM обеспечивает сопоставление между объектами в коде программы и таблицами в базе данных. Каждый класс объекта соответствует таблице в базе данных, а атрибуты класса соответствуют столбцам в этой таблице.

2️⃣ Операции CRUD: ORM позволяет выполнять операции CRUD (Create, Read, Update, Delete) непосредственно с объектами в коде программы, а не писать SQL-запросы вручную. Это делает работу с базой данных более удобной и абстрагирует разработчика от деталей работы с SQL.

3️⃣ Отношения между объектами: ORM позволяет определять отношения между объектами, такие как один-к-одному, один-ко-многим, многие-ко-многим и другие. Это делает моделирование сложных структур данных более удобным и понятным.

4️⃣ Миграции базы данных: Некоторые ORM-фреймворки также предоставляют механизмы миграции базы данных, которые позволяют автоматически обновлять структуру базы данных при изменении моделей объектов в коде программы.

5️⃣ Производительность: Хорошие ORM-фреймворки обеспечивают оптимизацию запросов и загрузки данных, что позволяет улучшить производительность приложения и сократить время разработки.

Некоторые известные ORM-фреймворки включают SQLAlchemy, Django ORM, Peewee и Pony ORM. Каждый из них имеет свои особенности и преимущества, и выбор зависит от конкретных потребностей и предпочтений проекта.

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥1
Что такое kwargs ?
Спросят с вероятностью 7%

Термин "kwargs" обычно используется для обозначения необязательного параметра функции, который позволяет передавать произвольное количество именованных аргументов в функцию. Он является соглашением об именовании и может быть заменен на любое другое имя, но часто используется именно "kwargs" для означения этого параметра.

Этот термин представляет собой словарь (dictionary) аргументов, переданных в функцию, где ключи словаря представляют собой имена аргументов, а значения - их значения. Поскольку функция может принимать произвольное количество именованных аргументов, он позволяет обрабатывать их динамически.

Пример использования:
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")

print_info(name="John", age=30, city="New York")

В этом примере **kwargs позволяет функции print_info принимать любое количество именованных аргументов, которые будут представлены в виде словаря. Функция затем проходит по всем элементам словаря и выводит их ключи и значения.

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍124
Что такое singleton ?
Спросят с вероятностью 13%

Singleton - это паттерн проектирования, который гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к нему.
Основные характеристики singleton:

1️⃣ Одиночный экземпляр: У класса есть только один экземпляр, который создается при первом обращении к нему, а затем повторно используется при последующих вызовах.

2️⃣ Глобальный доступ: Singleton предоставляет глобальную точку доступа к своему экземпляру, что позволяет другим объектам получить доступ к этому экземпляру через общедоступный метод или свойство.

3️⃣ Ленивая инициализация: Экземпляр класса создается только при первом обращении к нему, а не заранее, что позволяет оптимизировать использование ресурсов и избегать ненужного создания объектов.

Пример реализации singleton:
class Singleton:
_instance = None

def new(cls):
if cls._instance is None:
cls._instance = super().new(cls)
return cls._instance

# Использование
s1 = Singleton()
s2 = Singleton()
print(s1 is s2) # Вывод: True, потому что s1 и s2 ссылаются на один и тот же экземпляр класса Singleton


В этом примере метод new переопределяется таким образом, чтобы при первом вызове он создавал новый экземпляр класса, а при последующих вызовах возвращал уже созданный экземпляр. Таким образом, у класса Singleton всегда есть только один экземпляр.

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍171