Что такое Docker?
Docker — это платформа с открытым исходным кодом, которая позволяет разработчикам упаковывать приложения и их зависимости в самодостаточные единицы, называемые контейнерами. Docker обеспечивает согласованную и воспроизводимую среду, гарантируя последовательную работу приложения в различных системах, независимо от базовой инфраструктуры.
Docker используется в самых разных сценариях и отраслях благодаря своей универсальности и преимуществам. Некоторые распространенные случаи использования включают:
— Развертывание приложений: Docker упрощает процесс развертывания, предоставляя согласованную и воспроизводимую среду.
— Архитектура микросервисов: Docker часто используется в микросервисных архитектурах, где приложения разбиваются на более мелкие, независимые сервисы.
— Непрерывная интеграция и непрерывное развертывание (CI/CD): Docker широко используется в конвейерах CI/CD для обеспечения последовательных и воспроизводимых сборок и развертываний.
— Среды разработки и тестирования: Docker упрощает создание сред разработки и тестирования за счет инкапсуляции необходимых зависимостей в контейнеры.
— Масштабируемость и балансировка нагрузки: Docker облегчает горизонтальное масштабирование приложений за счет параллельного запуска нескольких контейнеров.
— Гибридные и мультиоблачные развертывания: Контейнеры Docker обеспечивают гибкость при развертывании приложений в различных средах, включая локальную инфраструктуру, публичные облака или гибридные облачные системы.
#вопросы_с_собеседований
Docker — это платформа с открытым исходным кодом, которая позволяет разработчикам упаковывать приложения и их зависимости в самодостаточные единицы, называемые контейнерами. Docker обеспечивает согласованную и воспроизводимую среду, гарантируя последовательную работу приложения в различных системах, независимо от базовой инфраструктуры.
Docker используется в самых разных сценариях и отраслях благодаря своей универсальности и преимуществам. Некоторые распространенные случаи использования включают:
— Развертывание приложений: Docker упрощает процесс развертывания, предоставляя согласованную и воспроизводимую среду.
— Архитектура микросервисов: Docker часто используется в микросервисных архитектурах, где приложения разбиваются на более мелкие, независимые сервисы.
— Непрерывная интеграция и непрерывное развертывание (CI/CD): Docker широко используется в конвейерах CI/CD для обеспечения последовательных и воспроизводимых сборок и развертываний.
— Среды разработки и тестирования: Docker упрощает создание сред разработки и тестирования за счет инкапсуляции необходимых зависимостей в контейнеры.
— Масштабируемость и балансировка нагрузки: Docker облегчает горизонтальное масштабирование приложений за счет параллельного запуска нескольких контейнеров.
— Гибридные и мультиоблачные развертывания: Контейнеры Docker обеспечивают гибкость при развертывании приложений в различных средах, включая локальную инфраструктуру, публичные облака или гибридные облачные системы.
#вопросы_с_собеседований
В Python и итераторы, и генераторы позволяют перебирать элементы коллекций, но работают немного по-разному.
__iter__()
и __next__()
. Метод __iter__()
возвращает сам итератор, а __next__()
— следующий элемент коллекции. Если элементы заканчиваются, __next__()
должен вызвать исключение StopIteration
. Итераторы позволяют явно перебирать элементы коллекции, не требуя, чтобы все элементы были доступны в памяти одновременно.yield
. Главное отличие генератора заключается в том, что значения генерируются по требованию. Каждый раз, когда генератор достигает yield
, он возвращает значение и «замирает», сохраняя своё состояние до следующего вызова. Это позволяет использовать меньше памяти при итерации по длинным последовательностям.#вопросы_с_собеседований
Please open Telegram to view this post
VIEW IN TELEGRAM
Django использует метаклассы. А метаклассы — это классы, которые конструируют другие классы. Соответственно, когда Django конструирует наш класс, он делает это с помощью своего метакласса. Внутренний класс с названием Meta позволяет задать этому конструктору необходимые нам параметры.
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = 'product_table'
ordering = ['-created_at']
#вопросы_с_собеседований
Please open Telegram to view this post
VIEW IN TELEGRAM
❔Зачем нужно ключевое слово async в Python?
Ключевое слово async в Python используется для создания асинхронных функций (или корутин), которые позволяют выполнять задачи, не блокируя основной поток выполнения программы. Это особенно полезно для работы с такими операциями, как сетевые запросы, взаимодействие с базами данных или чтение/запись файлов.
Вот пример асинхронной функции:
Как можно заметить, async идёт в паре с await, который приостанавливает выполнение fetch_data до завершения asyncio.sleep(2).
#вопросы_с_собеседований
Ключевое слово async в Python используется для создания асинхронных функций (или корутин), которые позволяют выполнять задачи, не блокируя основной поток выполнения программы. Это особенно полезно для работы с такими операциями, как сетевые запросы, взаимодействие с базами данных или чтение/запись файлов.
Вот пример асинхронной функции:
import asyncio
async def fetch_data():
print("Fetching data...")
await asyncio.sleep(2) # симуляция длительной операции
print("Data fetched")
return "Data"
async def main():
result = await fetch_data()
print(result)
# запуск асинхронной функции
asyncio.run(main())
Как можно заметить, async идёт в паре с await, который приостанавливает выполнение fetch_data до завершения asyncio.sleep(2).
#вопросы_с_собеседований
✍️ Что такое match-case в Python
Конструкцию match-case ещё называют pattern matching (сопоставление с шаблонами). Суть её заключается в следующем:
✅ Оператор match принимает выражение и сравнивает его значение с последовательными шаблонами, заданными как один или несколько блоков case.
Код с match-case более структурирован и легче читается по сравнению с кодом, где прописано большое количество вложенных условий.
#вопросы_с_собеседований
Конструкцию match-case ещё называют pattern matching (сопоставление с шаблонами). Суть её заключается в следующем:
✅ Оператор match принимает выражение и сравнивает его значение с последовательными шаблонами, заданными как один или несколько блоков case.
Код с match-case более структурирован и легче читается по сравнению с кодом, где прописано большое количество вложенных условий.
#вопросы_с_собеседований
Обмен ключами и значениями словаря
Итак, насколько сложно поменять местами значения и ключи в словаре? Совсем несложно, по крайней мере, в Python.
Выше представлен действительно изящный способ манипулирования словарями.
#вопросы_с_собеседований
Итак, насколько сложно поменять местами значения и ключи в словаре? Совсем несложно, по крайней мере, в Python.
Выше представлен действительно изящный способ манипулирования словарями.
#вопросы_с_собеседований
Оба этих метода являются магическими.
__getattr__
class Missing:
attr = 42
def __getattr__(self, name):
print(f"In __getattr__, asked for {name}")
return 73
m = Missing()
print(m.attr) # 42
print(m.xyz) # In __getattr__, asked for xyz; 73
Пример кода выше показывает, как метод используется для обработки запроса несуществующего атрибута xyz.
__getattribute__
class Always:
attr = 42
def __getattribute__(self, name):
print(f"In __getattribute__, asked for {name}")
return 73
a = Always()
print(a.attr) # In __getattribute__, asked for attr; 73
print(a.xyz) # In __getattribute__, asked for xyz; 73
Здесь же можно увидеть, что метод используется для обработки запросов всех атрибутов, как существующих (attr), так и несуществующих (xyz).
__getattribute__
— это метод, который управляет всеми запросами атрибутов, тогда как __getattr__
вызывается, когда __getattribute__
не находит атрибут. #вопросы_с_собеседований
@python_job_interview
Please open Telegram to view this post
VIEW IN TELEGRAM