JuniorDevOps Engineer > Контейнеры и доставка > Dockerfile и сборка
Короткий ответ Multi-stage build — это Dockerfile с несколькими инструкциями FROM, где промежуточные стадии (например, со средой компиляции) используются только для сборки артефакта, а в финальный образ через COPY --from= копируются только нужные готовые файлы — без инструментов сборки. Как это работает подробнее каждая FROM начинает новую именованную или нумерованную стадию со своим набором слоёв; инструкция COPY --from=STAGE позволяет взять файл из предыдущей стадии в текущую, не перенося остальное содержимое той стадии. Финальным образом становится только последняя стадия Dockerfile. Пример кода Что использовать на практике Практика. типичный пример — компилируемые языки (Go, Java, C++): первая стадия содержит компилятор и зависимости сборки (большой образ), вторая стадия — минимальный базовый образ (например, alpine или scratch), в который копируется только скомпилированный бинарник. Итоговый образ получается значительно меньше и не содержит инструментов сборки, что также снижает поверхность атаки. Подвод
container-imagesdocker
JuniorData Analyst > SQL и данные > Продуктовые и бизнес-метрики
Короткий ответ North Star Metric (NSM) — единая метрика, которая лучше всего отражает ценность, получаемую пользователями от продукта, и при этом коррелирует с долгосрочным ростом бизнеса; она нужна, чтобы согласовать фокус разных команд вокруг одной общей цели. Как это работает подробнее NSM выбирается так, чтобы расти вместе с удовлетворённостью пользователей и выручкой одновременно, а не быть просто показателем активности или дохода по отдельности; хорошая NSM — измеримый, понятный и actionable индикатор ценности продукта. Что использовать на практике Применение. под NSM выстраивают дерево input-метрик (метрик-драйверов), на которые команды могут влиять напрямую; NSM редко меняется каждый квартал — это стратегический ориентир, а не KPI спринта. Проверка или пример. Spotify использует суммарное время прослушивания, Airbnb — число забронированных ночей: обе метрики одновременно отражают пользу для пользователя и движут выручку компании, в отличие от, например, просто числа регистраций. Подводные камни Частая
metric-treenorth-star-metric
MiddlePerformance Marketer > Google Ads > Тестирование гипотез и запуск изменений
Короткий ответ P-value — это вероятность получить наблюдаемую (или более выраженную) разницу между вариантами при условии, что на самом деле разницы нет; низкий p-value (например, менее 0.05) говорит, что наблюдаемый результат маловероятен при отсутствии реального эффекта. Как это работает подробнее P-value не говорит о величине эффекта и не является «вероятностью того, что вариант B лучше» — это распространённая путаница; он лишь оценивает, насколько результат совместим с гипотезой «различий нет». В прикладных задачах чаще используют двусторонний тест (проверяющий отличие в любую сторону), а не односторонний, если заранее неизвестно, в какую сторону пойдёт эффект. Пример. Вариант A: CVR 4.0% (n=5000) Вариант B: CVR 4.6% (n=5000) p-value = 0.04 -> статистически значимо при пороге 0.05 Но доверительный интервал разницы: [0.1%; 1.1%] - эффект может быть как очень маленьким, так и заметным Что использовать на практике Практика. При принятии решений стоит смотреть на p-value вместе с размером эффекта и доверитель
ab-testingaudience-segmentation
JuniorData Analyst > SQL и данные > Статистика и теория вероятностей
Короткий ответ p-value — это вероятность получить результат такой же или более экстремальный, чем наблюдаемый, при условии, что верна нулевая гипотеза; это не вероятность того, что нулевая гипотеза верна, и не вероятность того, что эффект реален. Как это работает подробнее p-value считается относительно предполагаемого мира без эффекта (нулевая гипотеза); маленький p-value означает, что такой результат маловероятен в этом мире, и даёт основание усомниться в нулевой гипотезе. Такой расчёт обычно выполняется автоматически статистическими библиотеками, но важно понимать, что именно стоит за выведенным числом. Пример кода Что использовать на практике На практике: принято сравнивать p-value с заранее выбранным порогом (альфа, часто 0.05); если p-value ниже порога, говорят о статистической значимости различия. Важно помнить, что порог — условность, а не граница между «правдой» и «ложью», и его стоит выбирать заранее, а не подгонять под результат. Полезно всегда указывать рядом с p-value и сам размер эффекта, и объё
hypothesis-testingp-value
JuniorPerformance Marketer > Google Ads > Специфика рекламных площадок и каналов
Короткий ответ Performance Max — автоматизированный тип кампании, который показывает объявления сразу во всех инвентарях Google (Поиск, КМС, YouTube, Discover, Gmail, Карты) из одной кампании; плюс — широкий охват и минимум ручной настройки, минус — ограниченная прозрачность и контроль над тем, где именно и кому показывается реклама. Как это работает подробнее рекламодатель загружает набор активов и задаёт цель, а алгоритм сам решает, на каком канале, какой аудитории и в каком сочетании активов показать объявление, оптимизируя под заданную цель в реальном времени на основе сигналов. Что использовать на практике На практике. Performance Max удобен для масштабирования при наличии накопленных данных о конверсиях и качественного фида, так как берёт на себя распределение бюджета между каналами; детализация отчётности ограничена — нельзя увидеть разбивку результатов по отдельным каналам так же подробно, как в раздельных кампаниях, что усложняет диагностику. Пример. После запуска Performance Max общий трафик на сайт
brand-exclusionsconversion-tracking
JuniorDevOps Engineer > Контейнеры и доставка > Kubernetes и оркестрация
Короткий ответ Pod — это группа из одного или нескольких контейнеров, которые разделяют сетевое пространство имён (один IP, один localhost) и могут разделять volume; Kubernetes планирует, масштабирует и перезапускает именно Pod, а не отдельный контейнер. Как это работает подробнее контейнеры внутри одного Pod запускаются в общем network namespace и, опционально, в общих volume, что позволяет им общаться через localhost и обмениваться файлами. Kubernetes управляет жизненным циклом Pod целиком: планирование на узел, перезапуск контейнеров при сбое, остановка происходят на уровне Pod. Пример кода Что использовать на практике Практика. чаще всего Pod содержит один основной контейнер приложения; дополнительные контейнеры (sidecar, init) добавляют, когда нужна тесная связь по сети или диску — например, сборщик логов рядом с приложением. Для масштабирования и обновлений Pod почти никогда не создают напрямую, а используют Deployment или StatefulSet, которые управляют набором Pod через ReplicaSet. Подводные камни Риск
containerskubernetes
MiddlePython Developer > Основы Python > Тестирование кода
Короткий ответ Pytest — это open-source фреймворк для тестирования Python-кода, который ценят за простой синтаксис на assert и автоматическое обнаружение тестов. Он масштабируется от простых unit-тестов до сложных функциональных, устанавливается командой pip install pytest и запускается командой pytest. Как это работает подробнее Установка. Фреймворк устанавливается командой pip install pytest. Обнаружение тестов. pytest распознаёт файлы, имя которых начинается с test_ или заканчивается на _test, а внутри них — функции и методы с именами, начинающимися с test. Проверки. Утверждения записываются обычными выражениями assert: при ложном условии тест останавливается, а в отчёте появляется AssertionError со сравнёнными значениями. Запуск. Тесты выполняются командой pytest или py.test в каталоге проекта, конкретный файл — как pytest test_sample1.py. Отбор и метки. Подстрока имени выбирается флагом -k, группы — декоратором @pytest.mark и флагом -m, пропуски — skip, ожидаемые падения — xfail. Пример кода Что использо
assertionspytest
MiddleJava Developer > Java Core > Multithreading
Короткий ответ Состояние гонки — это ситуация, когда результат многопоточной программы зависит от порядка и скорости выполнения потоков и становится непредсказуемым. Гонка возникает, когда несколько потоков без синхронизации обращаются к одним и тем же разделяемым данным и хотя бы один из них выполняет запись; итог зависит от того, какой поток «добежал» первым. Как это работает подробнее Типичный пример — несколько потоков увеличивают общий счётчик. Операция count++ состоит из трёх шагов: прочитать текущее значение, прибавить единицу, записать результат обратно. Два потока могут прочитать одно и то же значение, каждый вычислит следующее число, и в поле будет записано то же значение — одно увеличение потеряно (lost update). Гонка коварна тем, что проявляется не сразу: она часто «выстреливает» только под нагрузкой или на другом железе, из-за чего баги нерегулярно воспроизводятся. Три основных способа борьбы: атомарные классы (AtomicInteger) для одной составной операции; synchronized или Lock для более крупной к
atomicjava
JuniorPython Developer > Основы Python > Потоки и синхронизация
Короткий ответ Race condition — ситуация, когда результат программы зависит от непредсказуемого порядка выполнения нескольких потоков/процессов, обращающихся к общим данным без синхронизации, что приводит к неверным результатам. Как это работает подробнее Операция, выглядящая как одна строка (counter += 1), на уровне интерпретатора состоит из нескольких шагов (чтение, увеличение, запись); если два потока выполняют эти шаги «вперемешку», один из инкрементов может быть потерян, так как оба потока прочитали одно и то же старое значение. Пример кода Что использовать на практике Практика. Race condition легко возникает при работе с общими счётчиками, кэшами, списками из нескольких потоков без блокировок. Для диагностики помогает запуск большого числа повторений операции в нескольких потоках и сравнение итогового значения с ожидаемым. Подводные камни Риски. Считают, что GIL делает x += 1 атомарной операцией — GIL гарантирует атомарность отдельных байт-код инструкций, но составная операция может быть прервана между
concurrencypython
JuniorPython Developer > Основы Python > Безопасность API и сети
Короткий ответ Rate limiting — это ограничение количества запросов от одного клиента за промежуток времени для защиты сервиса от перегрузки и злоупотреблений; при превышении лимита сервер обычно отвечает статусом 429 Too Many Requests с заголовком Retry-After. Как это работает подробнее Сервер (или прокси/API-gateway перед ним) считает количество запросов от идентификатора клиента (IP, API-ключ, user id) за окно времени и отклоняет запросы сверх установленного порога, не передавая их в основную бизнес-логику. Пример кода Что использовать на практике Практика. Лимиты стоит делать отдельными для разных типов операций (например, чтение и создание ресурсов) и возвращать клиенту заголовки с текущим состоянием лимита (X-RateLimit-Remaining, Retry-After), чтобы клиент мог корректно повторить запрос позже. Подводные камни Риск. Ограничивают только по IP, что ломается за NAT или CDN (много пользователей — один IP) и обходится через множество IP у атакующего; не возвращают понятный статус и заголовки, из-за чего клиент
apihttp