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
Какие существуют типы HTTP запросов и в чем их отличия ?
Спросят с вероятностью 10%

Существует несколько типов HTTP-запросов, каждый из которых выполняет определенную операцию при взаимодействии клиента с сервером. Вот основные из них и их отличия:

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

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

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

4️⃣ DELETE: Удаляет указанный ресурс. Пример использования - удаление записи из базы данных.

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

6️⃣ HEAD: Запрашивает заголовки, которые будут возвращены, как если бы был сделан запрос GET, но без тела ответа. Этот тип запроса часто используется для проверки доступности ресурса или получения информации о ресурсе без загрузки его полного содержимого.

7️⃣ OPTIONS: Используется для запроса возможностей и параметров коммуникации для указанного ресурса. Например, сервер может использовать этот тип запроса для сообщения клиенту о поддерживаемых методах запросов или разрешенных заголовках.

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

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

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

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

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

Пример:
x = 10         # x является целым числом (int)
x = "Hello" # x теперь является строкой (str)
x = [1, 2, 3] # x теперь является списком (list)


Это означает, что переменная x может содержать значения разных типов в разные моменты времени выполнения программы.

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

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

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

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

Основные концепции Docker включают:

1️⃣ Контейнеры: Нужны для упаковки приложений и их зависимостей в единую среду. Контейнеры изолированы друг от друга и от хост-системы, что обеспечивает надежную и консистентную среду выполнения приложений.

2️⃣ Образы: Шаблоны для создания контейнеров. Они включают в себя все необходимые компоненты приложения и его зависимости. Образы могут быть созданы вручную или автоматически с использованием Dockerfile, который описывает конфигурацию контейнера.

3️⃣ Dockerfile: Текстовый файл, который содержит инструкции для создания образа. Он определяет все этапы установки и настройки приложения в контейнере, что позволяет автоматизировать процесс создания образов.

4️⃣ Реестр Docker: Сервис, который хранит образы. Он позволяет разработчикам делиться образами и использовать их для создания контейнеров на различных хост-системах.

5️⃣ Docker Engine: Основной компонент, который управляет созданием, запуском и управлением контейнерами. Он включает в себя клиентские и серверные компоненты, которые общаются между собой с помощью API.

6️⃣ Docker Compose: Инструмент для определения и запуска многоконтейнерных приложений. Он позволяет определять структуру приложения и его зависимости в файле docker-compose.yml, что упрощает развертывание и управление многочастными приложениями.

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

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

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

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

Пример:
x = 10         # x является целым числом (int)
x = "Hello" # x теперь является строкой (str)
x = [1, 2, 3] # x теперь является списком (list)


В этом примере переменная x сначала содержит целое число, затем строку, а затем список. Тип переменной определяется автоматически во время выполнения программы на основе значения, присвоенного переменной.

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

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

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

Нереляционные базы данных (NoSQL) - это тип баз данных, который отличается от традиционных реляционных по своей структуре и модели данных. Вот их некоторые общие характеристики:

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

2️⃣ Горизонтальное масштабирование: Многие нереляционные базы данных разработаны с учетом горизонтального масштабирования, что позволяет им эффективно масштабироваться на большие объемы данных и высокие нагрузки. Это достигается за счет распределения данных по нескольким узлам кластера.

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

4️⃣ Производительность: Нереляционные базы данных часто обладают высокой производительностью при обработке больших объемов данных и параллельном выполнении запросов. Это делает их популярным выбором для приложений с высокими требованиями к производительности и масштабируемости.

5️⃣ Примеры нереляционных баз данных: Некоторые из наиболее известных нереляционных баз данных включают MongoDB (документная модель), Cassandra (столбцовая модель), Redis (ключ-значение), Neo4j (графовая модель) и Amazon DynamoDB (ключ-значение и документная модель).

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

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

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

Чистая функция - это функция, которая обладает двумя основными свойствами:

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

2️⃣ Возвращает одинаковый результат для одних и тех же входных данных: Для одних и тех же входных данных всегда возвращает один и тот же результат, без побочных эффектов.

Пример:
def add(a, b):
return a + b


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

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

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

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

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

1️⃣ Атомарность (Atomicity): Транзакция является атомарной, что означает, что она либо полностью выполняется, либо не выполняется вообще. Если один из запросов в транзакции не может быть выполнен, то все изменения, сделанные этой транзакцией, отменяются (откат).

2️⃣ Согласованность (Consistency): Транзакция должна обеспечивать согласованность базы данных. Это означает, что только допустимые изменения могут быть внесены в базу данных, и ее целостность сохраняется после завершения транзакции.

3️⃣ Изолированность (Isolation): Транзакции должны выполняться изолированно друг от друга. Это означает, что изменения, внесенные одной транзакцией, не должны видны другим транзакциям до тех пор, пока они не будут зафиксированы (или завершены).

4️⃣ Долговечность (Durability): После успешного завершения транзакции ее изменения должны остаться постоянными и устойчивыми к сбоям системы. Даже в случае отказа системы или перезагрузки, изменения, внесенные транзакцией, должны быть сохранены.

Пример:
BEGIN TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE id = 123;
UPDATE accounts SET balance = balance + 100 WHERE id = 456;

COMMIT;


В этом примере два запроса обновления выполняются в рамках одной транзакции. Если оба запроса успешно завершаются, изменения становятся постоянными (фиксируются) с помощью команды COMMIT. Если в ходе выполнения транзакции возникает ошибка, то она откатывается с помощью команды ROLLBACK, и все изменения отменяются.

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

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

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

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

2️⃣ Объектно-ориентированное программирование (ООП): Является одним из ключевых аспектов. Оно основано на использовании классов и объектов. Классы определяют структуру данных и поведение объектов, а объекты являются экземплярами этих классов.

3️⃣ Функциональное программирование: Оно поддерживается за счет функций первого класса, замыканий, анонимных функций (лямбда-функций) и функций высшего порядка. Это позволяет использовать функции как аргументы других функций и возвращать функции в качестве результатов.

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

5️⃣ Декларативное программирование: Здесь программа описывает желаемый результат, а не последовательность шагов для его достижения. Примером декларативного подхода являются генераторы списков и выражения списков.

6️⃣ Реактивное программирование: Здесь акцент делается на потоке данных и реакции на изменения. Оно может быть реализовано с использованием библиотек, таких как RxPy.

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

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

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

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

Git - это распределенная система управления версиями, которая предназначена для отслеживания изменений в исходном коде программного обеспечения и координации работы нескольких разработчиков над проектом. Эта система разработана Линусом Торвальдсом в 2005 году и с тех пор стала одним из самых популярных инструментов разработки программного обеспечения.

Основные функции:

1️⃣ Отслеживание изменений: Отслеживает изменения в исходном коде проекта, включая добавление, удаление и изменение файлов. Каждое изменение сохраняется в репозитории в виде коммита.

2️⃣ Ветвление и слияние: Поддерживает ветвление, что позволяет разработчикам создавать отдельные ветки для работы над определенными функциями или задачами. После завершения работы ветки могут быть объединены обратно в основную ветку (мастер).

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

4️⃣ История изменений: Сохраняет полную историю изменений проекта, включая комментарии к коммитам, авторов и временные метки изменений. Это обеспечивает прозрачность и возможность восстановления предыдущих состояний проекта.

5️⃣ Совместная работа: Облегчает совместную работу нескольких разработчиков над проектом. Он позволяет им делиться изменениями через удаленные репозитории и обмениваться ветками и коммитами.

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

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

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🤯2
В чем отличие rebase от merge ?
Спросят с вероятностью 10%

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

1️⃣ Merge (слияние):
- Создает новый коммит, который объединяет изменения из двух веток (обычно текущей ветки и ветки, которую вы сливаете).
- Этот новый коммит имеет двух родителей - по одному от каждой ветки, которые были слиты.
- В результате история изменений остается четкой и информативной, так как она отображает точно, какие изменения были внесены в каждой ветке и когда они были объединены.
- Однако это может привести к "клубку слияний", когда в истории изменений появляется много коммитов слияния, что усложняет анализ истории.

2️⃣ Rebase (перебазирование):
- Берет коммиты из текущей ветки и "перебазирует" их на вершину целевой ветки (обычно на место, где текущая ветка была отделена).
- Это означает, что история изменений выглядит как линейная последовательность коммитов без дополнительных коммитов слияния.
- Позволяет поддерживать более чистую и простую историю изменений, что облегчает ее понимание и анализ.
- Однако перебазирование может быть опасным при работе с общими ветками, так как это изменяет историю коммитов, что может привести к проблемам с синхронизацией изменений и потере данных.

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

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

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

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

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

Некоторые популярные примеры:

1️⃣ init: Используется для инициализации нового объекта после его создания.
2️⃣ str и repr: Определяют строковое представление объекта для функции str() и repr() соответственно.
3️⃣ len: Возвращает длину объекта при вызове функции len().
4️⃣ getitem и setitem: Позволяют объекту быть доступным как коллекция (индексируемый и/или итерируемый).
5️⃣ iter иerscore", Используются для поддержки итераций в объектах.
6️⃣ enter иметоды (со Позволяют создавать контекстные менеджеры с помощью конструкции with.
7️⃣ add, sub, mul, и т.д.: Позволяют перегрузить арифметические операторы +, -, * и т.д.
Использование dunder методов позволяет определять поведение пользовательских объектов в соответствии с ожиданиями, что делает их более гибкими и полезными.

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

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

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

Big O notation обозначается как O(f(n)), где f(n) - это функция, описывающая рост времени выполнения или используемой памяти в зависимости от размера входных данных (n). Например, если алгоритм выполняется за время, пропорциональное n^2, то его временная сложность будет O(n^2).

Вот некоторые из наиболее распространенных классов сложности:

1️⃣ O(1): Константная сложность. Время выполнения алгоритма не зависит от размера входных данных. Примером может служить доступ к элементу массива по индексу.

2️⃣ O(log n): Логарифмическая сложность. Время выполнения алгоритма логарифмически зависит от размера входных данных. Примером может служить бинарный поиск в отсортированном массиве.

3️⃣ O(n): Линейная сложность. Время выполнения алгоритма линейно зависит от размера входных данных. Примером может служить итерация по всем элементам в массиве.

4️⃣ O(n log n): Линейно-логарифмическая сложность. Примером может служить сортировка слиянием.

5️⃣ O(n^2): Квадратичная сложность. Время выполнения алгоритма квадратично зависит от размера входных данных. Примером может служить вложенные циклы с полным проходом по всем элементам вложенного массива.

6️⃣ O(2^n): Экспоненциальная сложность. Время выполнения алгоритма экспоненциально зависит от размера входных данных. Примером может служить задача о коммивояжере с использованием метода полного перебора.

Big O notation помогает анализировать и сравнивать эффективность алгоритмов и выбирать наиболее подходящий вариант для конкретной задачи.

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

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

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

1️⃣ Улучшение читаемости и поддержки кода
Помогают сделать код более читаемым и легким для понимания. Они позволяют явно указать, что поведение функции модифицируется в определенный момент.

2️⃣ Повторное использование кода
Можно определить эту логику в декораторе и применить его ко всем этим функциям.

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

4️⃣ Внедрение аспектно-ориентированного программирования(АОП)
Могут использоваться для реализации аспектов в АОП. АОП позволяет разделять аспекты программы, такие как логирование, от основной бизнес-логики.

5️⃣ Регистрация функций
Могут использоваться для автоматической регистрации функций при их определении. Это полезно в сценариях, когда необходимо собрать список функций, соответствующих определенному критерию.

Пример:
def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"Вызов функции: {func.name} с аргументами {args} и {kwargs}")
result = func(*args, **kwargs)
print(f"Функция {func.name} завершилась с результатом {result}")
return result
return wrapper

@log_decorator
def add(x, y):
"""Складывает два числа."""
return x + y

# Вызов декорированной функции
add(5, 3)


В этом примере log_decorator добавляет логирование перед и после вызова функции add, позволяя отслеживать ее без изменения исходного кода функции.
➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍43
Ребят, в начале или середине своего пути вам часто нужно смотреть на примеры кода и реализацию разных возможностей

Это повышает вашу насмотренность, понимание кода, да и вы всегда можете сохранить заготовки себе на будущие проекты

Раньше я публиковал множество сайтов. Но теперь есть специальный канал для этого: @code_ready

У вас будет все под рукой, с оформленным кодом, примерами, шпаргалками и без занудства

Так что подписываемся

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

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

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

1️⃣ Поддержка итерации: Предоставляют возможность перебора элементов с использованием циклов или функций итерации, таких как for и while.

2️⃣ Использование встроенной функции iter(): Функция iter() может быть использована для создания итератора из итерируемого объекта. Он предоставляет метод next(), который возвращает следующий элемент из итерируемого объекта по требованию.

3️⃣ Использование встроенной функции: while. Э Функция next() может быть использована для получения следующего элемента из итератора. Когда все элементы итерируемого объекта были извлечены, вызывается исключение StopIteration.

4️⃣ Поддержка для циклов for: Такие объекты могут быть использованы в цикле for для последовательного перебора элементов.

5️⃣ Использование встроенных методов: Также предоставляют встроенные методы для работы с элементами, такие как методы списков (append(), extend(), remove(), и т. д.).

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

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

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

Метод super() используется для обращения к методам и атрибутам родительского класса в подклассе. Он позволяет вызывать методы родительского класса без явного указания имени этого класса, что делает код более гибким и поддерживаемым. Вот несколько основных причин, почему этот метод полезен:

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

2️⃣ Поддержка множественного наследования: Если ваш класс наследует методы от нескольких родительских классов, метод super() позволяет вызывать методы родительских классов в порядке, определенном методом разрешения, что помогает избежать конфликтов и путаницы.

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

4️⃣ Улучшение читаемости кода: Использование этого метода делает ваш код более явным и понятным, так как он явно показывает, что вы вызываете метод родительского класса, а не какой-то другой метод.

Пример:
class Parent:
def init(self):
self.parent_attribute = "Parent attribute"

class Child(Parent):
def init(self):
super().init() # Вызываем init() родительского класса
self.child_attribute = "Child attribute"

# Создаем экземпляр дочернего класса
child = Child()

# Выводим значения атрибутов
print(child.parent_attribute) # Выведет: Parent attribute
print(child.child_attribute) # Выведет: Child attribute


Здесь метод super().init() в подклассе Child вызывает конструктор родительского класса Parent, что позволяет инициализировать атрибут parent_attribute.

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

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

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

Почему self необходим

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

Определение методов экземпляра: Здесь первый параметр обычно называется self. Это соглашение, а не строгое правило, но его следует соблюдать для согласованности и читаемости кода.

Вот пример self:
class MyClass:
def init(self, value):
# Использование self для установки атрибута экземпляра
self.my_attribute = value

def show_value(self):
# Использование self для доступа к атрибуту экземпляра
print(self.my_attribute)

def update_value(self, new_value):
# Использование self для изменения атрибута экземпляра
self.my_attribute = new_value


Когда метод класса вызывается для экземпляра класса, Python автоматически передает сам экземпляр в метод в качестве первого аргумента. Это значит, что когда вы создаете экземпляр my_object = MyClass(10) и вызываете my_object.show_value(), my_object передается в метод show_value как аргумент self.

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

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

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

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

Абстрактные классы можно создать с помощью модуля abc (Abstract Base Classes). Вот пример:
from abc import ABC, abstractmethod

class Animal(ABC): # Наследование от ABC позволяет создать абстрактный класс
@abstractmethod
def make_sound(self):
pass

class Dog(Animal): # Класс Dog наследует абстрактный класс Animal
def make_sound(self):
return "Woof!"

class Cat(Animal): # Класс Cat также наследует абстрактный класс Animal
def make_sound(self):
return "Meow!"

# Создаем экземпляры подклассов и вызываем методы
dog = Dog()
print(dog.make_sound()) # Выведет: Woof!

cat = Cat()
print(cat.make_sound()) # Выведет: Meow!


В приведенном выше примере класс Animal является абстрактным, потому что он содержит абстрактный метод make_sound(). Этот метод должен быть реализован в каждом конкретном подклассе Dog и Cat. Если попытаться создать экземпляр Animal, Python выдаст ошибку, потому что эти классы не могут быть инстанциированы напрямую.

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

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

Cтатические методы реализуются с помощью декоратора @staticmethod. Принадлежит классу, но не получает автоматически ссылку на экземпляр или класс в качестве первого аргумента. Ведет себя как обычная функция, но организован внутри пространства имен класса. Мспользуются для выполнения задач, которые не требуют доступа к атрибутам экземпляра или класса.

Пример:
class ExampleClass:
@staticmethod
def static_method():
print("Это статический метод.")

# Вызов статического метода через класс
ExampleClass.static_method()

# Вызов статического метода через экземпляр
instance = ExampleClass()
instance.static_method()


Здесь static_method может быть вызван как через имя класса, так и через экземпляр класса, но в обоих случаях он не имеет доступа к атрибутам self или cls.

Статические методы полезны в следующих ситуациях:

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

Отличие от методов класса и обычных методов

- Методы класса (@classmethod) принимают ссылку на cls в качестве первого аргумента и могут обращаться к атрибутам и другим методам класса.
- Обычные методы автоматически получают ссылку на self в качестве первого аргумента и используются для работы с данными или поведением конкретного экземпляра.
- Статические методы не получают ни self, ни cls автоматически и могут рассматриваться как обычные функции, организованные в пространстве имен класса.

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

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

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

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

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

2️⃣ Модификация ответов: Может модифицировать ответы, возвращаемые веб-приложением, например, добавлять заголовки ответа или изменять содержимое ответа.

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

4️⃣ Кэширование: Может кэшировать результаты запросов, чтобы ускорить доступ к данным и снизить нагрузку на сервер.

5️⃣ Аутентификация и авторизация: Может обеспечивать аутентификацию пользователей и проверку их прав доступа к ресурсам приложения.

6️⃣ Обработка исключений и ошибок: Может перехватывать и обрабатывать исключения и ошибки, возникающие во время обработки запросов, предоставляя пользователю более информативные сообщения об ошибках или выполняя дополнительные действия для восстановления работы приложения.

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

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

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

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

Абстрактные классы реализуются с помощью модуля abc (Abstract Base Classes). Не может быть инстанциирован напрямую и предназначен для того, чтобы служить базовым классом для других классов. Используются для определения общего интерфейса для группы классов и могут содержать один или несколько абстрактных методов. Абстрактный метод — это метод, объявленный в абстрактном классе, но должен быть реализован в подклассах.

Пример:

1️⃣ Импортировать ABC и abstractmethod из модуля abc.
2️⃣ Унаследовать класс от ABC, что делает его абстрактным.
3️⃣ Определить один или несколько методов как абстрактные, используя декоратор @abstractmethod. Должны быть переопределены в неабстрактных подклассах.
from abc import ABC, abstractmethod

class AbstractClass(ABC):

@abstractmethod
def abstract_method(self):
pass

class ConcreteClass(AbstractClass):

def abstract_method(self):
print("Реализация абстрактного метода в конкретном классе")

# Создание экземпляра абстрактного класса приведет к ошибке
# abstract_instance = AbstractClass() # TypeError

# Создание экземпляра конкретного класса, который реализует абстрактный метод
concrete_instance = ConcreteClass()
concrete_instance.abstract_method()

В этом примере AbstractClass является абстрактным классом, содержащим абстрактный метод abstract_method. Класс ConcreteClass наследуется от AbstractClass и реализует абстрактный метод. Попытка создать экземпляр абстрактного класса AbstractClass напрямую приведет к ошибке, так как абстрактные классы предназначены только для наследования и определения интерфейса.

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

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