MiddlePython Developer > Основы Python > Инструменты разработки
Короткий ответ Poetry — это инструмент для управления зависимостями и упаковки Python-проектов. Он описывает проект и его зависимости в файле pyproject.toml по стандарту PEP 621, ведёт файл блокировки poetry.lock с точными версиями и изолирует окружение проекта от глобальной установки Python. Как это работает подробнее Poetry приходит на смену связке pip с requirements.txt и автоматизирует рутину вокруг зависимостей и упаковки. Создание проекта. Команда poetry new poetry-demo генерирует каталог с pyproject.toml, README, пакетом и каталогом тестов. Описание зависимостей. Пакеты указываются в секции project.dependencies с ограничениями версий вроде requests с ^2.13.0. Файл блокировки. poetry.lock фиксирует точные версии всех зависимостей, и его рекомендуют коммитить в систему контроля версий. Изоляция окружения. Poetry работает в собственном виртуальном окружении проекта и не затрагивает глобальную установку Python. Репозитории. По умолчанию используется PyPI, но поддерживаются и приватные репозитории для поиск
dependency-managementpackaging
MiddlePython Developer > Основы Python > Инструменты разработки
Короткий ответ Pull request — это механизм, с помощью которого разработчик предлагает влить изменения из своей ветки или форка в основную ветку репозитория; изменения проходят обсуждение и код-ревью перед слиянием. В GitLab аналогичный механизм называют merge request. Вокруг PR строится совместная разработка в команде. Как это работает подробнее PR — точка входа изменений в общий код: до слияния другие разработчики просматривают и обсуждают код, после чего изменения попадают в основную ветку. Форк. Удалённая серверная копия оригинального репозитория под своим аккаунтом; между форком и оригиналом сохраняется связь, позволяющая вносить вклад обратно. Типовой сценарий. Репозиторий клонируется локально, создаётся feature-ветка, вносятся изменения, ветка пушится, после чего открывается pull request. Ревью и слияние. Другие разработчики просматривают изменения и обсуждают их, затем PR вливается в основную ветку main. Workflow. Git Flow использует ветки для фич, релизов и хотфиксов, GitHub Flow прост: ветка, PR, рев
code-reviewcollaboration
MiddleDevOps Engineer > Контейнеры и доставка > Kubernetes и оркестрация
Короткий ответ QoS-класс вычисляется автоматически из соотношения requests и limits: Guaranteed (requests = limits по CPU и памяти для всех контейнеров), Burstable (requests заданы и отличаются от limits, либо только частично заданы), BestEffort (requests/limits не заданы вовсе); при нехватке памяти на узле kubelet выселяет (evict) поды в порядке BestEffort → Burstable → Guaranteed. Как это работает подробнее QoS влияет на порядок OOM-killer внутри узла (через oom_score_adj, который Kubernetes выставляет по классу) и на порядок принудительного выселения подов при node pressure (нехватка памяти/диска). Guaranteed-поды удаляются последними и только при действительно критическом состоянии узла. Пример кода Что использовать на практике Практика. для критичных stateful-компонентов (базы данных, очереди) стремятся к классу Guaranteed, чтобы минимизировать риск неожиданного выселения при давлении на узел; для менее критичных batch-задач допустим Burstable или даже BestEffort, если это осознанный компромисс ради боле
evictionkubernetes
JuniorPython Developer > Основы Python > Django и DRF
Короткий ответ QueryDict — специальный неизменяемый (по умолчанию) словарь-подобный класс Django для request.GET и request.POST, поддерживающий несколько значений для одного ключа. Как это работает подробнее request.GET содержит параметры строки запроса (query string), request.POST — данные, отправленные в теле формы с Content-Type: application/x-www-form-urlencoded или multipart/form-data. Оба объекта — экземпляры QueryDict, похожего на обычный dict, но с методами getlist() для множественных значений одного ключа. Пример кода Что использовать на практике Практика. Для чтения одного значения используют request.GET.get('q', ''); для множественных (например, чекбоксы с одинаковым именем) — request.GET.getlist('tags'). Для JSON-тела API (не формы) request.POST будет пустым — нужно разбирать request.body вручную или использовать DRF. Подводные камни Риск. Пытаются читать JSON-тело через request.POST и получают пустой результат, не понимая разницы между form-encoded и JSON телом; пытаются изменить QueryDict напрям
djangopython
MiddlePython Developer > Основы Python > Веб-фреймворки: Django, Flask, FastAPI
Короткий ответ QuerySet — высокоуровневый API Django для получения, фильтрации и обработки объектов модели; его возвращают методы менеджера вроде Model.objects.all() и Model.objects.filter(). Главное свойство QuerySet — ленивость: запрос к базе выполняется только когда данные действительно нужны. Как это работает подробнее Ленивость позволяет накапливать условия фильтрации и получать ровно один оптимизированный запрос в момент обращения к данным. Момент выполнения. Запрос уходит в базу при итерации, срезе, преобразовании в список, проверке булева значения или вызове len(). Цепочки. Методы filter(), exclude() и order_by() вызываются друг за другом, уточняя итоговую выборку. Переиспользование. Один и тот же QuerySet можно уточнять дальше, не выполняя лишних запросов к БД. Оптимизация связей. Число запросов к связанным объектам сокращают методы select_related() и prefetch_related(). Пример кода Что использовать на практике Уточнение выборки. Строй цепочки filter(), exclude() и order_by() до обращения к данным. П
databasedjango
JuniorData Analyst > Метрики и эксперименты > A/B-тесты
Короткий ответ Единица рандомизации — это сущность, которую случайно распределяют по группам: пользователь, сессия, устройство или запрос. Выбор единицы должен соответствовать единице, на которую измеряется эффект, иначе один и тот же пользователь может попадать то в A, то в B, что искажает результат. Как это работает подробнее если рандомизация идёт по сессии, а метрика — это недельная активность пользователя, один человек в течение недели может видеть и A, и B, и эффект от изменения «размазывается» между группами. Пример проблемы: тест меняет оформление каталога, рандомизация идёт по session_id. Один и тот же пользователь за неделю заходит 5 раз и видит смесь A и B — посчитать «его» итоговую конверсию по группе корректно невозможно. Решение — перейти на рандомизацию по user_id с фиксацией группы на весь срок теста. Что использовать на практике для большинства продуктовых метрик (конверсия, удержание, LTV) рандомизацию делают на уровне пользователя с устойчивым назначением (одинаковый user_id — всегда одна г
edinitsa-randomizatsiiinterferentsiya
MiddlePython Developer > Основы Python > Надёжность сервисов
Короткий ответ Rate limiting ограничивает число запросов от клиента/сервиса за период времени, чтобы защитить backend от перегрузки; token bucket допускает кратковременные всплески в пределах накопленных токенов, leaky bucket сглаживает всплески в равномерный поток. Как это работает подробнее Token bucket пополняет «ведро» токенов с фиксированной скоростью до максимума, и каждый запрос тратит токен; leaky bucket обрабатывает запросы с постоянной фиксированной скоростью без накопления запаса на будущее. Что использовать на практике Практика. Token bucket применяют, когда допустимы кратковременные всплески при соблюдении среднего лимита; leaky bucket — когда важна строго равномерная скорость обработки; лимиты применяют на API gateway или распределённо через Redis. Подводные камни Риск. Применять лимит только локально на каждом инстансе без координации (при N инстансах фактический лимит умножается на N); не возвращать клиенту 429 и Retry-After.
fault-tolerancerate-limiting
JuniorDevOps Engineer > Контейнеры и доставка > Облачные платформы
Короткий ответ Read-реплика — асинхронная копия основной базы данных, доступная только для чтения, которая используется для горизонтального масштабирования нагрузки чтения; она не предназначена как основной механизм обеспечения высокой доступности. Как это работает подробнее изменения с primary реплицируются на read-реплику асинхронно, с задержкой (replication lag); приложение направляет запросы на чтение на реплику, а запросы на запись — только на primary. Пример кода Что использовать на практике Рекомендация. read-реплики добавляют, когда чтение становится узким местом; важно мониторить replication lag и проектировать приложение так, чтобы допускать eventual consistency для данных, прочитанных с реплики. Проверка. новая реплика появляется в статусе available, метрика ReplicaLag показывает задержку в секундах относительно primary. Подводные камни Риск. использовать read-реплику как резервную копию для аварийного переключения записи без понимания, что promotion — ручная или полуавтоматическая операция с прост
managed-databasesread-replicas
JuniorDevOps Engineer > Контейнеры и доставка > Kubernetes и оркестрация
Короткий ответ ReplicaSet — это контроллер, который поддерживает заданное число одинаковых Pod по селектору меток; Deployment не управляет Pod напрямую, а создаёт и переключает ReplicaSet при каждом обновлении шаблона. Как это работает подробнее при изменении template в Deployment создаётся новый ReplicaSet с новым хэшем версии шаблона, после чего Deployment постепенно переносит реплики со старого ReplicaSet на новый согласно стратегии обновления, оставляя старый ReplicaSet с нулём реплик для возможного отката. Пример кода Что использовать на практике Практика. kubectl rollout history deployment/ и список ReplicaSet (kubectl get rs) позволяют увидеть историю версий; откат (kubectl rollout undo) фактически масштабирует предыдущий ReplicaSet обратно вверх, а текущий — вниз. Подводные камни Риски. создавать ReplicaSet напрямую вместо Deployment, теряя удобное управление rolling update и историю ревизий; удивляться накоплению старых ReplicaSet с нулевыми репликами — это ожидаемо и регулируется параметром re
deploymentkubernetes
MiddleData Analyst > SQL и данные > Статистика и теория вероятностей
Короткий ответ SRM — это ситуация, когда фактическое соотношение пользователей между тестовыми группами существенно отличается от запланированного (например, 48/52 вместо 50/50 при большой выборке); обнаруживается хи-квадрат тестом на соответствие наблюдаемого распределения ожидаемому, и его наличие ставит под сомнение валидность всего эксперимента. Как это работает подробнее даже небольшое на первый взгляд отклонение от ожидаемого сплита может быть статистически значимым при больших объёмах данных — это сигнализирует о системной проблеме в рандомизации или логировании, а не о случайности. Пример кода Что использовать на практике На практике. SRM стоит проверять как первый шаг перед анализом результатов теста, до интерпретации любых метрик. Частые причины: различия в скорости загрузки/редиректах между вариантами, которые по-разному теряют пользователей до события логирования; баги в системе сплитования; фильтрация ботов, по-разному затрагивающая группы; различия в кэшировании. Если SRM обнаружен, результаты т
ab-testingchi-square-test