JuniorData Analyst > SQL и данные > Python для анализа данных
Короткий ответ Для фильтрации по условию используют булеву маску, а для одновременного выбора строк и столбцов по условию и названиям — df.loc[маска, список_столбцов]. Как это работает подробнее булева маска — это Series True/False той же длины, что и DataFrame; df[mask] оставляет строки с True, а df.loc[mask, cols] дополнительно ограничивает набор столбцов за один проход. Пример кода Что использовать на практике На практике: предпочтительно писать df.loc[df['amount'] > 0, ['id', 'amount']] одной операцией, а не выбирать сначала строки, а потом столбцы через df[mask][['id','amount']] — это избегает цепочечной индексации и связанных с ней предупреждений и неоднозначностей. Проверка: результат должен содержать только строки id=1 и id=3, что легко сверить по исходным значениям amount глазами. Подводные камни Частые ошибки: пытаются присвоить значения через df[mask]['col'] = x и получают SettingWithCopyWarning, потому что неясно, работает ли код с копией или с видом исходных данных; забывают скобки при объединени
boolean-maskfiltering
MiddlePython Developer > Основы Python > Безопасность API
Короткий ответ Статический API-ключ прост, но сложно ротируется и не несёт встроенного срока жизни; OAuth2 client credentials даёт короткоживущие токены с возможностью централизованной ротации и отзыва через сервер авторизации; подписанный JWT, выпущенный доверенной стороной, подходит, когда нужна самодостаточная проверка без обращения к центральному серверу при каждом запросе — выбор зависит от требований к ротации, отзыву доступа и инфраструктурной сложности, которую команда готова поддерживать. Как это работает подробнее статический ключ сравнивается напрямую на сервере (обычно хранится как хэш); OAuth2 client credentials flow требует отдельного запроса за access-токеном к серверу авторизации перед обращением к ресурсному серверу, токен имеет TTL и подлежит обновлению; JWT содержит подписанные claims (кем выпущен, для кого, срок действия), которые ресурсный сервер может проверить локально по публичному ключу без похода к серверу авторизации на каждый запрос. Пример кода Что использовать на практике Рекомен
api-keyjwt
MiddleData Analyst > SQL и данные > Продуктовые и бизнес-метрики
Короткий ответ Для маркетплейса NSM чаще привязывают к объёму успешных транзакций (например, GMV или число завершённых сделок), отражающих баланс спроса и предложения; для подписочного SaaS — к глубине и регулярности использования продукта (например, число активных рабочих пространств или retained usage), отражающих, что клиент получает ценность и продолжит платить. Как это работает подробнее хорошая NSM должна одновременно отражать ценность для пользователя и коррелировать с выручкой в перспективе; для двусторонних платформ (маркетплейсов) важно, чтобы метрика не оптимизировалась в пользу только одной стороны (только продавцов или только покупателей) — иначе баланс рынка нарушится. Что использовать на практике Практика. для маркетплейса часто рассматривают число успешных сделок (а не просто GMV, который может расти за счёт роста цен без роста реальной активности), для SaaS — метрики глубины использования (feature adoption, частота ключевых действий), а не просто логины, которые легко "накрутить" уведомлениям
marketplacenorth-star-metric
JuniorData Analyst > SQL и данные > SQL
Короткий ответ Используйте SELECT DISTINCT country FROM customers. Оператор DISTINCT удаляет повторяющиеся строки из результата и возвращает каждую страну один раз. Как это работает подробнее DISTINCT применяется ко всей результирующей строке после вычисления выражений в SELECT. Поэтому при выборе двух столбцов уникальность определяется по их комбинации. Для одного столбца все значения NULL считаются неразличимыми при устранении дублей, и в результате остаётся не более одной строки с NULL. Пример кода Что использовать на практике Сначала проверьте источник дублей. Если повторы появились после некорректного JOIN, не маскируйте ошибку оператором DISTINCT. Проверяйте план. На большой таблице сравните стоимость сортировки или хеширования через EXPLAIN. Подводные камни Несколько столбцов. DISTINCT country, city возвращает уникальные пары, а не два независимых списка. NULL. Несколько отсутствующих значений схлопнутся в одну строку результата.
distinctnull
JuniorData Analyst > SQL и данные > SQL
Короткий ответ Можно использовать коррелированный подзапрос, который для каждого товара считает, сколько товаров в той же категории дороже него, и оставляет только те, где таких не больше двух (то есть товар входит в топ-3). Как это работает подробнее для каждой строки внешнего запроса подзапрос пересчитывает количество товаров той же категории с ценой строго больше текущей; если это количество меньше 3 (0, 1 или 2 более дорогих товара), значит текущий товар находится в первой, второй или третьей позиции по цене внутри своей категории. Пример кода Что использовать на практике На практике: это рабочий, но не самый эффективный способ — коррелированный подзапрос выполняется для каждой строки заново, что на больших таблицах может быть медленным; на уровне Middle для этой задачи обычно используют оконную функцию RANK()/ROW_NUMBER(), которая решает её за один проход. Результат: Результат — до 3 (или больше при ничьих) товаров на категорию. Проверка: для одной категории вручную отсортировать все товары по цене и све
correlated-subqueryranking
MiddleSMM Manager > Общее > Контент и форматы
Короткий ответ Полный бриф на кампанию включает цели и KPI, целевую аудиторию, перечень всех нужных форматов и пропорций, обязательные и запрещённые элементы бренда, референсы с пояснением, что именно в них понравилось, количество итераций правок, сроки по каждому этапу и критерии финального согласования. Как это работает подробнее в отличие от разового поста, кампания требует согласованности множества креативов между собой и с бизнес-целью, поэтому бриф должен задавать не только внешний вид, но и рамки процесса — кто согласует, сколько раундов правок предусмотрено, какие дедлайны у промежуточных этапов (концепция, черновик, финал). Что использовать на практике Рекомендация. референсы в брифе должны сопровождаться пояснением, какой именно аспект референса важен (композиция, настроение, цветовая гамма), иначе дизайнер может скопировать несущественные детали; количество итераций правок стоит ограничить заранее, чтобы процесс не растягивался бесконечно. Подводные камни Риск. присылать референсы без пояснений, из
aspect-ratiocontent-production
JuniorPython Developer > Основы Python > Проектирование API
Короткий ответ Эндпоинт списка должен принимать параметры фильтрации/сортировки/пагинации через query-параметры и возвращать сами элементы вместе с метаданными (общее количество или признак следующей страницы), а не только "голый" массив. Как это работает подробнее клиент вызывает GET /resource?..., сервер применяет фильтры к запросу к БД, ограничивает выборку пагинацией и формирует структурированный ответ. Возврат "голого" массива усложняет добавление метаданных в будущем без breaking change (так как корневой элемент JSON уже занят массивом). Пример кода Что использовать на практике Рекомендация. оборачивание списка в объект ({"items": [...], "total": N, "page": P}) с самого начала облегчает последующее добавление полей без изменения структуры верхнего уровня — это пример продуманного контракта на будущее. Подводные камни Риски. возвращать просто [...] на верхнем уровне ответа, из-за чего позже невозможно добавить метаданные без нарушения совместимости для всех текущих клиентов; не документировать, какие que
api-designjson
JuniorDevOps Engineer > Контейнеры и доставка > Kubernetes и оркестрация
Короткий ответ Команда kubectl exec -it -- /bin/sh (или bash) открывает интерактивную сессию внутри указанного контейнера; ограничение в том, что это работает только если в образе вообще есть соответствующая оболочка, а изменения внутри контейнера не сохранятся после его перезапуска. Как это работает подробнее kubectl exec отправляет запрос через API сервер на kubelet узла, где запущен контейнер, и запускает указанную команду внутри пространства имён контейнера — это не похоже на SSH, а использует механизм container runtime (exec в namespace процесса). Пример кода Что использовать на практике Практика. внутри контейнера можно посмотреть переменные окружения, проверить сетевую доступность (curl, nslookup, если утилиты установлены в образе), посмотреть содержимое смонтированных ConfigMap/Secret. Для минимальных образов (distroless, scratch) без оболочки используют kubectl debug с эфемерным контейнером отладки, подключаемым к тому же namespace процессов. Подводные камни Риски. вносить ручные правки конфигу
containerskubernetes
JuniorDevOps Engineer > Контейнеры и доставка > Диагностика контейнеров
Короткий ответ Команда docker exec -it CONTAINER sh (или bash, если он есть в образе) запускает новый процесс в тех же namespaces, что и уже работающий контейнер, не перезапуская и не останавливая его. Как это работает подробнее docker exec не создаёт новый контейнер, а добавляет ещё один процесс в существующие Linux namespaces уже запущенного контейнера (тот же сетевой стек, та же файловая система на момент выполнения). Флаги -i и -t обеспечивают интерактивный терминал. Пример кода Что использовать на практике Практика. типичный способ диагностики "живого" контейнера — зайти внутрь и проверить процессы, переменные окружения, содержимое файлов, сетевую доступность (ps aux, env, curl localhost:..., cat /etc/resolv.conf). Это работает только если в образе есть исполняемый shell; для минимальных/distroless образов такой shell может отсутствовать. Подводные камни Риск. путают docker exec с docker attach — attach подключается к основному процессу (PID 1) контейнера и может случайно его завершить при Ctrl+C, тогда
containersdocker
MiddlePython Developer > Основы Python > Миграции и эволюция схемы
Короткий ответ Прямое переименование колонки одной миграцией несовместимо с rolling deploy, так как старая версия кода ещё обращается к старому имени; безопасный подход — паттерн expand/contract: добавить новую колонку, синхронизировать данные со старой, переключить код на новую, и только после полной раскатки удалить старую колонку отдельной миграцией. Как это работает подробнее Во время rolling deploy одновременно работают как минимум две версии кода, обращающиеся к одной БД — любое несовместимое изменение схемы должно оставаться совместимым с обеими версиями кода на протяжении переходного периода. Пример кода Что использовать на практике Практика. Для переименования: expand (добавить колонку) → dual write (приложение пишет в обе колонки) → backfill исторических данных → переключение кода на чтение новой колонки → contract (удаление старой колонки отдельным релизом). Подводные камни Ошибка. Выполняют ALTER TABLE RENAME COLUMN в одной миграции одновременно с деплоем нового кода, полагая, что деплой происходи
database-migrationsmigrations