JuniorDevOps Engineer > Контейнеры и доставка > Скриптинг и автоматизация
Короткий ответ "$@" разворачивается в список отдельных аргументов, каждый в своих кавычках, а $* (и "$*") склеивает все аргументы в одну строку через первый символ IFS; без кавычек оба варианта дополнительно "расщепляются" по пробелам, что ломает аргументы с пробелами внутри. Как это работает подробнее bash хранит позиционные аргументы как массив, и "$@" — единственный способ передать их дальше поэлементно, сохранив исходные границы; без кавычек shell выполняет word splitting и файловый globbing над результатом подстановки. Пример кода Что использовать на практике Рекомендация. правило по умолчанию — всегда писать "$@" для проброса аргументов в другую команду и всегда заключать в кавычки подстановки переменных и команд ("$var", "$(cmd)"), если нет осознанной причины этого не делать. Это особенно критично для путей к файлам, которые могут содержать пробелы. Подводные камни Ошибка. использовать $@ или $* без кавычек и получать "расползание" аргумента с пробелом на несколько; путать "$*" с "$@" в функции, котора
argumentsbash
MiddlePython Developer > Основы Python > Очереди и события
Короткий ответ At-most-once — сообщение может быть потеряно, но не дублировано; at-least-once — гарантированно доставляется, но может продублироваться; exactly-once на практике достигается не самим брокером, а комбинацией at-least-once доставки и идемпотентной обработки на стороне consumer'а. Как это работает подробнее At-most-once — consumer подтверждает (ack) до обработки, и при сбое между ack и обработкой сообщение теряется; at-least-once — ack после успешной обработки, и при сбое до ack брокер повторно доставит сообщение. Пример кода Что использовать на практике Практика. Большинство систем (Kafka, RabbitMQ с manual ack) по умолчанию работают в режиме at-least-once, и ответственность за отсутствие побочных эффектов от дублей перекладывается на consumer. Подводные камни Риск. Путать «exactly-once delivery» брокера с «exactly-once processing» — consumer может обработать сообщение дважды из-за собственного сбоя; считать, что включение exactly-once semantics в Kafka решает проблему без идемпотентных внешних s
event-drivenmessage-queues
JuniorPython Developer > Основы Python > Коллекции и структуры данных
Короткий ответ append() добавляет один элемент в конец списка (даже если этот элемент сам является списком), extend() добавляет все элементы из переданного итерируемого объекта по отдельности в конец, а insert(index, value) вставляет один элемент по конкретному индексу, сдвигая остальные. Как это работает подробнее lst.append(x) увеличивает длину списка на 1, добавляя сам объект x целиком как один элемент. lst.extend(iterable) проходит по iterable и добавляет каждый его элемент как отдельный элемент lst, то есть длина увеличивается на количество элементов в iterable. lst.insert(i, x) сдвигает элементы, начиная с индекса i, вправо и помещает x на позицию i. Пример кода Что использовать на практике Практика. Частая путаница — попытка "добавить список элементов" через append(): lst.append([1, 2, 3]) добавит один элемент — сам список [1, 2, 3] — а не три числа; для этого нужен extend([1, 2, 3]) или lst += [1, 2, 3]. insert() используют редко в горячих циклах, так как вставка в середину списка требует сдвига элеме
collectionslist
JuniorData Analyst > SQL и данные > Продуктовые и бизнес-метрики
Короткий ответ ARPU (Average Revenue Per User) — выручка, делённая на всех пользователей (включая неплатящих), ARPPU (Average Revenue Per Paying User) — выручка, делённая только на платящих пользователей; ARPPU всегда больше или равен ARPU. Как это работает подробнее ARPU показывает, сколько в среднем зарабатывает компания с любого пользователя продукта, включая бесплатных; ARPPU показывает, сколько в среднем тратит именно платящий пользователь — то есть глубину монетизации тех, кто уже платит. Что использовать на практике Применение. ARPU полезен для оценки общей монетизации базы и сравнения продуктов с разной долей платящих, ARPPU — для оценки эффективности ценообразования и апсейла среди платящих; рост ARPU может происходить либо за счёт роста доли платящих, либо за счёт роста ARPPU — это разные рычаги и разные команды влияют на них. Проверка или пример. Проверка: ARPU = ARPPU × (доля платящих) = 500 × 0.08 = 40 — совпадает, формула декомпозиции верна. Подводные камни Частая ошибка. используют ARPPU там, г
arppuarpu
JuniorPerformance Marketer > Google Ads > Метрики рекламных кампаний
Короткий ответ При CPC расход возникает за клик, при CPM — за показы, даже если кликов не было. Итоговая стоимость клика при CPM зависит от полученного CTR. Как это работает подробнее При CPC риск низкого CTR несёт платформа — бюджет тратится только на состоявшиеся клики; при CPM риск низкого CTR несёт рекламодатель, так как оплата идёт за показы независимо от кликов. Выбор модели оплаты также влияет на то, кто несёт риск недообучения алгоритма в начале кампании — на CPM этот риск частично компенсируется более широким охватом для сбора данных. Что использовать на практике Для охвата и контролируемого контакта оценивайте CPM и частоту; для трафика — CPC. Проверьте обе модели небольшим сопоставимым тестом, если платформа это позволяет. Подводные камни Нельзя считать CPC всегда более безопасной или CPM всегда более дешёвой: высокий CTR может сделать CPM выгоднее, а плохая конверсия обесценит дешёвый клик.
biddingcampaign-objectives
MiddlePerformance Marketer > Google Ads > Рекламные платформы и форматы
Короткий ответ Окно атрибуции задаёт, сколько времени после рекламного взаимодействия конверсия может быть засчитана каналу. Настройки Meta и Google различаются по платформе, типу события и взаимодействию; длинное окно обычно увеличивает видимую атрибуцию и мешает прямому сравнению отчётов. Как это работает подробнее Более длинное окно может захватить больше покупок при длительном цикле решения. Отчёт зависит от взаимодействия, события, модели и настроек конкретной платформы. Сопоставление. Сверяй период и модель атрибуции перед сравнением каналов. Внешняя аналитика. CRM или единая система дают независимую картину продаж. Сравнение Meta Ads — для результата Meta — учитывай окно взаимодействия и доступность сигналов. Google Ads — для конверсий Google — проверяй окно и модель конкретного действия-конверсии. Что использовать на практике Определи единые правила сравнения, добавь UTM и сверяй кабинеты с фактическими заказами или лидами. Подводные камни Не сравнивай ROAS кабинетов с разными окнами как результаты од
attribution-windowsgoogle-ads
MiddleData Analyst > Метрики и эксперименты > A/B-тесты
Короткий ответ Primary-метрика — единственная метрика, по которой принимается решение об успехе теста и которая заранее определяет размер выборки. Secondary-метрики помогают понять механизм эффекта, но не являются критерием решения сами по себе. Guardrail-метрики — это метрики, которые должны остаться не хуже определённого порога, чтобы не допустить скрытого вреда продукту при победе по основной метрике. Как это работает подробнее Как это работает: разделение метрик на категории заранее защищает от множественных сравнений (не нужно делать поправку по всем метрикам, если только одна — primary) и от ситуации 'выросла конверсия, но сломалась производительность' — guardrails фиксируют это явно. Пример набора метрик для теста нового флоу оплаты: - Primary: conversion rate в успешную оплату - Secondary: время прохождения флоу, доля возвратов на предыдущий шаг - Guardrails: доля ошибок платёжного шлюза (не выше +0.1 п.п.), доля отмен подписки в течение 7 дней (не выше контрольного уровня) Критерий раскатки: primary
ab-testingexperiment-design
JuniorPerformance Marketer > Google Ads > UTM-разметка
Короткий ответ utm_content используют для различения вариантов креатива или размещения внутри одной кампании (например, баннер А против баннер Б), а utm_term — исторически для ключевого слова в поисковой рекламе; оба параметра не обязательны, но полезны для детальной аналитики внутри кампании. Как это работает подробнее Оба параметра передаются так же, как остальные UTM — через query-строку URL, и попадают в отчёты GA4 в отдельные измерения («Контент кампании» и «Ключевое слово кампании» соответственно), позволяя детализировать источник трафика глубже, чем просто campaign. Оба параметра опциональны и не влияют на то, засчитается ли визит в принципе как платный трафик — они лишь добавляют дополнительную детализацию внутри уже определённого источника и канала, которая становится видна только если явно добавить соответствующее измерение в отчёт. Пример кода Что использовать на практике Практика. utm_content чаще всего используют для А/Б-сравнения креативов на одной площадке (например, два разных баннера в одной
campaign-taggingga4
MiddleDevOps Engineer > Контейнеры и доставка > Облачные платформы
Короткий ответ Target tracking автоматически подбирает число инстансов, чтобы держать метрику около заданного целевого значения; step scaling меняет число инстансов ступенчато в зависимости от того, насколько метрика превысила порог; scheduled scaling заранее меняет ёмкость по расписанию независимо от текущей метрики. Как это работает подробнее target tracking использует управляющий алгоритм, который сам вычисляет, сколько инстансов добавить/убрать; step scaling требует вручную определить пороги и для каждого — конкретный шаг изменения; scheduled scaling просто меняет min/max/desired в заданное время. Пример кода Что использовать на практике Рекомендация. target tracking — разумный выбор по умолчанию для большинства веб-нагрузок с одной ключевой метрикой; step scaling применяют, когда нужна более тонкая реакция на разные уровни нагрузки; scheduled scaling используют для заранее известных предсказуемых паттернов. Проверка. при резком скачке CPU до 90% step scaling должен сразу добавить 5 инстансов, тогда как ч
autoscalingscheduled-scaling
MiddleDevOps Engineer > Контейнеры и доставка > Скриптинг и автоматизация
Короткий ответ Trunk-based development держит одну основную ветку, в которую короткоживущие фиче-ветки мержатся по многу раз в день за фиче-флагами, а Git Flow вводит отдельные долгоживущие ветки develop, release/*, hotfix/* вокруг main с более формальным процессом релизов; выбор зависит от частоты релизов, зрелости CI/CD и необходимости поддерживать несколько версий продукта одновременно. Как это работает подробнее в trunk-based модели интеграция происходит постоянно и мелкими порциями, что требует надёжного CI, feature flags для скрытия незавершённой функциональности и автоматических тестов перед мерджем. Git Flow с явными release-ветками удобен, когда релизы случаются редко, требуют отдельного этапа стабилизации и нужно одновременно поддерживать несколько выпущенных версий (например, библиотека с LTS-ветками). Пример кода Что использовать на практике Рекомендация. команды с непрерывной доставкой (деплой по многу раз в день) почти всегда выигрывают от trunk-based подхода — он снижает объём "merge hell" и ко
branchingci