JuniorPython Developer > Основы Python > Управление памятью
Короткий ответ List comprehension сразу создаёт список со всеми элементами в памяти, а генераторное выражение создаёт ленивый объект, который вычисляет элементы по одному при обходе, не храня всю последовательность целиком. Как это работает подробнее Синтаксически они почти идентичны — [x for x in it] против (x for x in it) — но квадратные скобки материализуют весь результат немедленно, а круглые создают генератор, вычисляющий следующее значение только при вызове next(). Пример кода Что использовать на практике Практика. Для одноразовой агрегации (sum, any, join) выгоднее генераторное выражение — не нужно хранить промежуточный список. Если данные нужны несколько раз, требуется len() или индексация — используется list comprehension или явный list(...). Подводные камни Риски. Оборачивают генераторное выражение в list() сразу после создания без необходимости, теряя выигрыш в памяти; передают генераторное выражение туда, где ожидается повторный проход, получая пустой результат во второй раз.
garbage-collectiongenerators
JuniorData Analyst > Метрики и эксперименты > A/B-тесты
Короткий ответ Гипотеза — это предположение о причине и ожидаемом эффекте («если мы упростим форму оплаты, то конверсия в покупку вырастет, потому что снизится трение»), а метрика успеха — это конкретное измеримое число, по которому проверяют, подтвердилась ли гипотеза. Как это работает подробнее гипотеза задаёт направление и логику изменения, метрика превращает её в проверяемое утверждение с конкретным числом и порогом; без метрики гипотезу невозможно подтвердить или опровергнуть объективно. Пример плохой практики: тест запущен с целью «посмотреть, как изменится поведение пользователей», без фиксированной метрики. После теста просматривают десятки метрик и находят одну значимую (например, время на странице), объявляя победу — хотя это могло быть случайным совпадением среди множества проверенных метрик. Что использовать на практике хорошая гипотеза формулируется по схеме «если сделаем X, то метрика Y изменится на Z, потому что...»; метрику выбирают так, чтобы она была измерима, чувствительна к изменению и не
dizayn-eksperimentagipoteza
JuniorData Analyst > SQL и данные > Статистика и теория вероятностей
Короткий ответ Дискретная случайная величина принимает отдельные, перечислимые значения (например, количество заказов), а непрерывная может принимать любое значение в интервале (например, время на сайте, доход). Как это работает подробнее для дискретных величин вероятность конкретного значения может быть больше нуля (распределение Пуассона, биномиальное); для непрерывных величин вероятность попадания в точку равна нулю, вместо этого говорят о плотности вероятности и вероятности попадания в интервал. Пример кода Что использовать на практике На практике: тип переменной влияет на выбор модели и визуализации: количество кликов на пользователя обычно моделируют распределением Пуассона или отрицательным биномиальным, а время между событиями — экспоненциальным распределением. Гистограммы для дискретных величин с малым числом значений лучше строить со столбиками по каждому значению, а не «размазывать» по интервалам. На практике тип переменной также определяет, какую визуализацию выбрать: для дискретных величин со мно
continuous-distributiondiscrete-distribution
JuniorPerformance Marketer > Google Ads > Устойчивость результатов и управление рисками
Короткий ответ Дневной бюджет ограничивает расходы в сутки, а lifetime budget распределяется платформой по сроку кампании и может колебаться по дням. Для автоматических правил задавайте верхний предел и частоту срабатываний: повторные изменения без лимита способны резко увеличить расход. Как это работает подробнее Lifetime budget позволяет больше тратить в дни с лучшими возможностями, оставаясь в пределах суммы за весь срок. В примере правило подняло ставку на 50% четыре раза за ночь, почти увеличив её в пять раз и превысив плановый дневной расход на 300%. Что использовать на практике Ограничивайте максимальный шаг и частоту изменения в автоматических правилах; проверяйте журнал Rules и настройте уведомления. Подводные камни Не оставляйте правило без лимита срабатываний и не игнорируйте утреннюю проверку его журнала.
automated-rulesbid-management
JuniorPerformance Marketer > Google Ads > Данные, комплаенс и безопасность рекламных аккаунтов
Короткий ответ Business Manager или Google Ads MCC позволяют дать подрядчику отдельный ролевой доступ к нужному рекламному аккаунту. Передача личного логина и пароля предоставляет доступ от имени владельца и делает контроль менее точным. Как это работает подробнее При приглашении каждый пользователь входит под своей учётной записью, действия можно связывать с конкретным пользователем, а его доступ — отозвать отдельно. Передача пароля связывает доступ с владельцем. При расставании с подрядчиком приходится менять пароль и проверять зависимые сервисы и интеграции. Что использовать на практике Приглашайте официально. Используйте функции партнёрского доступа Business Manager или MCC и назначайте роль только для аккаунта, с которым работает подрядчик. Подводные камни Не делитесь личными данными входа. Такой способ мешает выборочно отозвать права и понять, кто именно выполнял действия в аккаунте.
access-controlaccount-security
MiddleJava Developer > Java Core > Collections
Короткий ответ Comparable задаёт «естественный» порядок самого класса: класс реализует интерфейс и метод compareTo(Object o), в котором зашито правило «я больше или меньше другого». Так устроены стандартные классы — String, Integer, Date. Comparator — отдельный класс или лямбда с методом compare(a, b), который не требует изменять сравниваемый класс, поэтому для одного типа можно завести много стратегий сортировки. Как это работает подробнее Отсортировать коллекцию можно через Collections.sort(...) или list.sort(...): если передан только список, элементы должны реализовывать Comparable; если нужен особый порядок — вторым аргументом передаётся Comparator. У Comparator есть удобные дефолтные методы comparing(...), thenComparing(...), reversed(), из которых собирается составная сортировка. Comparable: один естественный порядок в самом классе — например, по id. Comparator: порядок зависит от контекста, или класс чужой и менять его нельзя. Пример кода Что использовать на практике Comparable берите, когда у класса е
collectionscomparable
MiddleJava Developer > Java Core > Collections
Короткий ответ Fail-fast итератор работает с самой коллекцией и при любом структурном изменении (добавление или удаление элементов), выполненном не через сам итератор, немедленно выбрасывает ConcurrentModificationException. Fail-safe — точнее, слабо согласованные (weakly consistent) итераторы из java.util.concurrent — не бросают исключение при параллельных изменениях, но не гарантируют, что увидят изменения, сделанные после создания итератора. Как это работает подробнее Механизм fail-fast реализован через счётчик модификаций modCount: итератор запоминает его при создании и сравнивает при каждом вызове next(); если значения разошлись — коллекция менялась «на стороне» — итератор «быстро падает» с исключением. Так ведут себя коллекции пакета java.util: ArrayList, HashMap, LinkedList. Fail-safe итераторы либо проходят по копии коллекции, либо устроены так, что не бросают исключение; плата — дополнительные расходы памяти на копирование или менее строгие данные. Примеры fail-safe: итераторы ConcurrentHashMap, CopyO
collectionsconcurrentmodificationexception
JuniorSMM Manager > Общее > Рекламные платформы и медиазакупка
Короткий ответ Цель кампании определяет, на какую метрику алгоритм оптимизирует показы: для охвата — максимум уникальных пользователей по минимальной цене, для конверсий — показ тем, кто с наибольшей вероятностью совершит целевое действие. Как это работает подробнее выбор цели на старте кампании задаёт модель оптимизации алгоритма и доступные модели ставок (например, CPM для охвата, CPA-подобная оптимизация для конверсий). Что использовать на практике Подход. цель должна соответствовать реальной задаче и этапу воронки; выбор «конверсии» без накопленной статистики или без пикселя не даст ожидаемого эффекта. Пример. Запуск нового бренда стартует с кампании «Охват» для знакомства аудитории с продуктом, а через месяц добавляется кампания «Конверсии» на аудиторию, уже видевшую рекламу. Эффективность второй кампании оценивается по CPA, первой — по CPM и охвату. Подводные камни Ошибка. выбирать цель «конверсии», когда реальная задача — сформировать узнаваемость нового бренда, и наоборот — ожидать продаж от охватной
ad-metricscampaign-optimization
MiddleDevOps Engineer > Контейнеры и доставка > Облачные платформы
Короткий ответ Reserved instances — скидка, привязанная к конкретному типу инстанса и региону на фиксированный срок; savings plans/committed use discounts — обязательство тратить определённую сумму в час на вычисления, с гибким применением скидки к разным типам инстансов. Риск избыточного резервирования — оплата за обязательство, которое со временем перестаёт соответствовать фактическому использованию. Как это работает подробнее reserved instances жёстко привязаны к параметрам инстанса, поэтому при смене типа скидка может перестать применяться; savings plans привязаны к сумме расходов в час и автоматически применяются к широкому набору использования, что даёт больше гибкости при изменении инфраструктуры. Пример кода Что использовать на практике Рекомендация. перед покупкой любого обязательства анализируют историю фактического использования за несколько месяцев и выбирают уровень, соответствующий консервативной оценке минимальной базовой нагрузки; большинство провайдеров позволяют продавать неиспользуемые rese
cloud-pricingcommitted-use
MiddlePython Developer > Основы Python > Генераторы и итераторы
Короткий ответ return завершает функцию и передаёт вызывающему коду единственное значение, а yield лишь приостанавливает функцию, возвращает промежуточный результат и сохраняет состояние. Функция с yield становится генераторной и может отдавать значения многократно. Как это работает подробнее return. Функция прекращает работу, возвращает одно значение, а её локальные переменные уничтожаются; при повторном вызове она стартует заново. yield. Функция замирает, возвращает промежуточный результат и сохраняет состояние — локальные переменные и позицию исполнения. Продолжение. Код после yield выполняется при последующем обращении, а функция продолжается с того же места. Область применения. yield используют для порождения последовательностей и потоковой обработки без построения всей коллекции, return — для единственного финального результата. Пример кода Что использовать на практике Один результат. Если функция вычисляет единственное значение, используй return. Серия значений. Когда нужно отдавать последовательность
functionsgenerators