Модели создаются как подклассы
-
- Типы данных (`Integer`, `String`) определяют формат столбцов
- Параметры вроде
Модели автоматически создают таблицы при вызове
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
declarative_base()
, с атрибутами через Column()
. Каждый атрибут соответствует полю таблицы с указанием типа и параметров.
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
-
__tablename__
задает имя таблицы в БД - Типы данных (`Integer`, `String`) определяют формат столбцов
- Параметры вроде
primary_key
и nullable
настраивают ограничения Модели автоматически создают таблицы при вызове
Base.metadata.create_all()
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Оптимальное покрытие включает unit, integration и e2e тесты в пропорции 70/20/10. Тест-кейсы должны быть максимально простыми, быстрыми и фокусироваться на поведении, а не на реализации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Представления в Django — это Python-функции или классы, принимающие web-запросы и возвращающие ответы. Основные типы:
- FBV (Function-Based Views): Простые функции с ручной обработкой методов запроса
- CBV (Class-Based Views): Переиспользуемые классы с методами для разных HTTP-методов (get, post)
- Всегда принимают
Дополнительные возможности: декораторы, миксины, встроенные generic-классы для стандартных задач.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
from django.http import HttpResponse
from django.views import View
# Function-based view
def simple_view(request):
return HttpResponse("Hello World")
# Class-based view
class MyView(View):
def get(self, request):
return HttpResponse("GET request")
- FBV (Function-Based Views): Простые функции с ручной обработкой методов запроса
- CBV (Class-Based Views): Переиспользуемые классы с методами для разных HTTP-методов (get, post)
- Всегда принимают
request
и возвращают HttpResponse
(или подклассы) Дополнительные возможности: декораторы, миксины, встроенные generic-классы для стандартных задач.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Идемпотентность гарантирует, что повторные идентичные запросы не изменяют состояние системы после первого выполнения. Основные подходы:
- Idempotency-Key: Клиент генерирует уникальный ключ для операций изменения (POST/PUT/PATCH)
- Серверная валидация: Сервер кеширует ответы по ключу и возвращает их при повторах
- HTTP-методы: GET, PUT, DELETE идемпотентны по спецификации, POST требует доп. обработки
Для критических операций (платежи, транзакции) рекомендуется реализовывать механизм проверки дубликатов на стороне сервера.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
# Использование уникальных ключей идемпотентности
headers = {'Idempotency-Key': 'uuid-string'}
requests.post(url, headers=headers, json=data)
- Idempotency-Key: Клиент генерирует уникальный ключ для операций изменения (POST/PUT/PATCH)
- Серверная валидация: Сервер кеширует ответы по ключу и возвращает их при повторах
- HTTP-методы: GET, PUT, DELETE идемпотентны по спецификации, POST требует доп. обработки
Для критических операций (платежи, транзакции) рекомендуется реализовывать механизм проверки дубликатов на стороне сервера.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Анализ результатов помогает выявить узкие места в производительности, показывая точное время выполнения отдельных операций внутри функции.
Please open Telegram to view this post
VIEW IN TELEGRAM
Паттерн Strategy позволяет динамически менять алгоритмы, инкапсулируя их в отдельные классы. Основные компоненты:
- Strategy: Интерфейс для всех алгоритмов
- ConcreteStrategy: Конкретные реализации алгоритмов
- Context: Класс, использующий стратегию через композицию
Позволяет легко добавлять новые алгоритмы без изменения основного кода.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
class Strategy:
def execute(self, data):
pass
class ConcreteStrategyA(Strategy):
def execute(self, data):
return sorted(data)
class Context:
def __init__(self, strategy):
self._strategy = strategy
def execute_strategy(self, data):
return self._strategy.execute(data)
- Strategy: Интерфейс для всех алгоритмов
- ConcreteStrategy: Конкретные реализации алгоритмов
- Context: Класс, использующий стратегию через композицию
Позволяет легко добавлять новые алгоритмы без изменения основного кода.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Основные методы контроля выполнения цикла:
- Счетчик итераций: Ограничивает максимальное количество выполнений
- Изменяемое условие: Гарантирует выход при изменении ключевых переменных
- Таймаут: Для долгих операций добавляется проверка времени выполнения
Рекомендуется всегда предусматривать четкий критерий завершения и тестировать граничные условия.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
max_iterations = 1000
counter = 0
while condition and counter < max_iterations:
counter += 1
# Логика цикла
- Счетчик итераций: Ограничивает максимальное количество выполнений
- Изменяемое условие: Гарантирует выход при изменении ключевых переменных
- Таймаут: Для долгих операций добавляется проверка времени выполнения
Рекомендуется всегда предусматривать четкий критерий завершения и тестировать граничные условия.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Кортежи занимают меньше памяти и работают быстрее, что делает их предпочтительными для фиксированных данных, а списки лучше подходят для динамических коллекций.
Please open Telegram to view this post
VIEW IN TELEGRAM
Замыкание — это функция, которая запоминает значения из enclosing scope даже после завершения работы внешней функции.
- Внешняя функция (outer_func) принимает параметр
- Вложенная функция сохраняет доступ к переменной
- При вызове
Замыкания полезны для создания фабрик функций и сохранения состояния между вызовами.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
def outer_func(x):
def inner_func(y):
return x + y
return inner_func
closure = outer_func(10)
result = closure(5) # 15
- Внешняя функция (outer_func) принимает параметр
x
и возвращает вложенную функцию (inner_func) - Вложенная функция сохраняет доступ к переменной
x
даже после завершения outer_func
- При вызове
closure(5)
она использует запомненное значение x=10
Замыкания полезны для создания фабрик функций и сохранения состояния между вызовами.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Пользовательские исключения создаются через наследование от базовых классов исключений (Exception или его подклассов).
- Наследование от
- Дополнительные параметры (например, code) добавляют контекст обработчику
- Документация (docstring) поясняет назначение исключения
Используется для точной обработки специфичных ошибок приложения.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
class CustomError(Exception):
"""Базовое пользовательское исключение"""
pass
class ValidationError(CustomError):
"""Ошибка валидации с дополнительными атрибутами"""
def __init__(self, message, code):
super().__init__(message)
self.code = code
- Наследование от
Exception
делает класс полноценным исключением - Дополнительные параметры (например, code) добавляют контекст обработчику
- Документация (docstring) поясняет назначение исключения
Используется для точной обработки специфичных ошибок приложения.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Альтернативно можно использовать pathlib.Path.unlink() для более объектно-ориентированного подхода. Оба метода permanently удаляют файл, поэтому следует соблюдать осторожность.
Please open Telegram to view this post
VIEW IN TELEGRAM
Для импорта модуля из пакета используется точечная нотация, указывающая иерархию вложенности.
- Абсолютный импорт указывает полный путь от корня проекта
- Относительный импорт (через точки) возможен внутри пакета:
Пакет должен содержать файл
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
from package.subpackage import module
from package.subpackage.module import specific_function
- Абсолютный импорт указывает полный путь от корня проекта
- Относительный импорт (через точки) возможен внутри пакета:
from .sibling_module import helper
Пакет должен содержать файл
__init__.py
(может быть пустым) для распознавания его как python-пакета. Импорт выполняется через поиск в sys.path
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Оператор
Здесь
Оператор
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
not
инвертирует логическое значение выражения. Если выражение истинно, not
возвращает False
, и наоборот. Часто используется в условных конструкциях для проверки обратных условий.
x = False
if not x:
print("Условие выполнено")
Здесь
not x
превращает False
в True
, и блок кода выполняется.
value = 10
if not value > 20:
print("Значение не больше 20")
Оператор
not
применяется к результату сравнения value > 20
(который False), делая условие истинным.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
pip
— стандартный менеджер пакетов для установки модулей. Основные команды:
pip install package_name # Установка пакета
pip install package==1.0.0 # Установка конкретной версии
pip uninstall package_name # Удаление пакета
pip list # Список установленных пакетов
pip show package_name # Информация о пакете
Для работы с зависимостями проекта:
pip freeze > requirements.txt # Экспорт зависимостей
pip install -r requirements.txt # Установка из файла
Можно указывать дополнительные опции, например
--user
для установки в домашнюю директорию или -U
для обновления пакета.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод
Если
✈️ Python собеседования
__contains__()
определяет поведение оператора in
для пользовательских объектов. При вызове x in obj
интерпретатор ищет obj.__contains__(x)
и возвращает True
или False
.
class MyContainer:
def __contains__(self, item):
return item in [1, 2, 3]
container = MyContainer()
print(3 in container) # True
print(5 in container) # False
Если
__contains__()
не реализован, Python использует __iter__()
и поочередное сравнение элементов. Метод полезен для создания контейнеров с оптимизированной проверкой вхождения.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция
Работает только с целыми числами. Для отрицательных чисел возвращает строку с минусом перед префиксом.
Аналог встроенного форматирования: format(10, '#o') или f"{10:#o}".
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
oct()
преобразует целое число в строку с восьмеричным представлением, начинающимся с префикса 0o
.
num = 64
print(oct(num)) # '0o100'
Работает только с целыми числами. Для отрицательных чисел возвращает строку с минусом перед префиксом.
print(oct(-8)) # '-0o10'
Аналог встроенного форматирования: format(10, '#o') или f"{10:#o}".
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Библиотека
Поддерживает различные типы данных: строки, хеши, списки, множества.
Для транзакций используется
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
redis-py
предоставляет клиент для взаимодействия с Redis. Основные операции выполняются через класс Redis
.
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('key', 'value') # Запись строки
print(r.get('key')) # Чтение значения
Поддерживает различные типы данных: строки, хеши, списки, множества.
r.hset('user', 'name', 'Alice') # Хеш-таблица
r.lpush('list', 1, 2, 3) # Список
Для транзакций используется
pipeline()
, для Pub/Sub — отдельный API.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Для установки конкретной версии пакета используется синтаксис
Можно задать диапазон версий с помощью дополнительных операторов:
Допустимы модификаторы
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
==
в команде pip install
.
pip install package_name==1.2.3 # Точно указанная версия
pip install package_name>=1.2.0 # Минимальная версия
Можно задать диапазон версий с помощью дополнительных операторов:
pip install "package_name>=1.0.0,<2.0.0" # Версии от 1.0.0 до 2.0.0 (исключая 2.0.0)
Допустимы модификаторы
~=
(совместимые версии) и !=
(исключение версии).Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM