SeniorJava Developer > Java Core > Multithreading
Короткий ответ Модель памяти Java — это набор формальных правил и гарантий, определяющих, как потоки взаимодействуют через память и какие результаты чтения и записи они обязаны «видеть», чтобы программа вела себя предсказуемо на разных процессорах и операционных системах. Центральное понятие — отношение happens-before: если действие A happens-before действия B, то результат A гарантированно виден действию B, и A не будет переупорядочено после B. Как это работает подробнее Без JMM компилятор, JIT и процессор могли бы свободно переупорядочивать операции и кэшировать значения, из-за чего поведение многопоточной программы зависело бы от конкретного железа. JMM определяет, какие переупорядочивания запрещены и какие гарантии видимости даёт Java. Основные правила happens-before: порядок действий внутри одного потока (program order); освобождение монитора happens-before последующий захват того же монитора другим потоком; запись в volatile-переменную happens-before последующее чтение той же переменной другим потоком;
happens-beforejava
JuniorPython Developer > Основы Python > Модули, пакеты и окружение
Короткий ответ Модуль — это отдельный файл с кодом на Python, содержимое которого переиспользуют через оператор import. Пакет — каталог, где хранится несколько связанных модулей; он структурирует код и служит пространством имён. Чтобы каталог считался пакетом, в нём должен быть файл __init__.py. Как это работает подробнее Модули и пакеты позволяют разбивать большую программу на логические части, упрощая разработку, тестирование и поиск ошибок. Модуль. Файл с расширением .py, работающий как небольшая библиотека, например стандартный math с функциями вроде sqrt() и константой pi. Пакет. Каталог с несколькими связанными модулями и вложенными подкаталогами-пакетами, который выступает пространством имён, например пакет numpy. Файл __init__.py. Может быть пустым или содержать код инициализации пакета; он автоматически выполняется при импорте. Переиспользование. Импортируя модули и пакеты, код не дублируется, а подключается в другие программы через import. Пример кода Что использовать на практике Структура проекта.
importmodules
JuniorData Analyst > Метрики и эксперименты > A/B-тесты
Короткий ответ Мощность теста — это вероятность обнаружить реально существующий эффект заданного размера, если он действительно есть. Стандартное требование — мощность 80%, то есть допускается до 20% шанса пропустить реальный эффект (ошибка II типа). Как это работает подробнее мощность зависит от размера выборки, величины эффекта, вариативности метрики и выбранного уровня alpha: больше выборка и эффект — выше мощность при прочих равных. Пример: при мощности 80% и реальном эффекте +1 п.п. конверсии вероятность, что тест правильно покажет значимый результат, — 80%, а вероятность пропустить эффект (ошибка II типа, бета) — 20%. Sanity check: если тест регулярно «не находит» ожидаемые эффекты, стоит проверить расчёт мощности, а не менять выводы на лету. Что использовать на практике мощность рассчитывают на этапе планирования теста вместе с размером выборки; низкая мощность — частая причина, почему «тест ничего не показал», хотя эффект мог существовать. Подводные камни путают мощность со статистической значимостью
effektmoschnost
JuniorPerformance Marketer > Google Ads > Тестирование гипотез и запуск изменений
Короткий ответ MVT одновременно тестирует несколько элементов (например, заголовок и изображение) во всех возможных комбинациях, тогда как обычный A/B-тест сравнивает два полноценных варианта, различающихся обычно одним изменением. Как это работает подробнее MVT позволяет не только выбрать лучшую комбинацию, но и оценить вклад отдельных элементов, но для этого требуется кратно больше трафика, так как число комбинаций растёт с числом элементов и их вариантов. Помимо чистого MVT существует частичный факторный подход, когда тестируют не все возможные комбинации, а заранее отобранное подмножество — это требует меньше трафика, но даёт менее полную картину взаимодействий. Пример. Тест 2 заголовков × 2 изображений даёт 4 комбинации лендинга; при 1000 визитов в неделю каждая комбинация получит лишь около 250 визитов — для надёжных выводов может понадобиться несколько месяцев. Что использовать на практике Практика. MVT оправдан при большом объёме трафика (обычно это крупные кампании или сайты с высокой посещаемостью);
ab-testingbudget-allocation
JuniorPerformance Marketer > Google Ads > Тестирование гипотез и запуск изменений
Короткий ответ Мягкий запуск — это старт кампании с небольшим бюджетом и/или на части аудитории, чтобы проверить корректность настройки, качество трафика и первые результаты, прежде чем выделять полный запланированный бюджет. Как это работает подробнее Небольшой начальный бюджет снижает финансовый риск технических ошибок (неверный таргетинг, битая ссылка, проблемы трекинга) и даёт первые данные для проверки гипотезы без крупных потерь. Мягкий запуск особенно важен при использовании новых инструментов, площадок или подрядчиков, с которыми ещё нет опыта совместной работы. Пример. Новая кампания в Google Ads запускается с дневным бюджетом 1000 руб. вместо планового 10 000 руб. на первые 2-3 дня, чтобы проверить прохождение модерации и корректность конверсий в GA4, прежде чем увеличивать бюджет. Что использовать на практике Практика. После мягкого старта нужно проверить базовые показатели (прохождение модерации, CTR, корректность конверсий в системе аналитики) и только затем постепенно увеличивать бюджет. Длитель
ab-testingad-creatives
JuniorPython Developer > Основы Python > Объектно-ориентированное программирование
Короткий ответ Наследование — механизм объектно-ориентированного программирования, при котором новый дочерний класс строится на основе родительского и наследует его атрибуты и методы. Дочерний класс может добавлять собственные члены и переопределять унаследованные, а базовый класс указывается в скобках после имени потомка. Как это работает подробнее Термины. Класс, от которого наследуют, называют базовым или родительским, а новый — производным, дочерним или подклассом. Синтаксис. Наследование задаётся именем родителя в скобках после имени потомка, например class Dog(Animal). Переиспользование. Потомок получает все атрибуты и методы родителя, а изменения в родительском классе автоматически распространяются на наследников. Виды наследования. Python поддерживает и одиночное, и множественное наследование, в отличие от ряда других языков. Пример кода Что использовать на практике Общие члены. Выноси в базовый класс атрибуты и методы, общие для всех потомков, чтобы не дублировать код. Переопределение. Когда поведени
classesinheritance
JuniorPython Developer > Основы Python > Реляционная модель данных
Короткий ответ Нормализация — это процесс структурирования таблиц так, чтобы устранить избыточное дублирование данных и функциональные зависимости, не относящиеся напрямую к первичному ключу; на практике чаще всего ориентируются на 3-ю нормальную форму (3NF), где неключевые атрибуты зависят только от первичного ключа. Как это работает подробнее Денормализованная таблица часто хранит повторяющиеся группы атрибутов (например, название и адрес компании в каждой строке заказа); нормализация выносит такие данные в отдельную таблицу со своим PK, а исходная ссылается на неё через FK. Пример кода Что использовать на практике Практика. Нормализация снижает избыточность и риск рассинхронизации данных при обновлении, но увеличивает число JOIN на чтение; в реальных системах иногда сознательно идут на частичную денормализацию для производительности, документируя это решение. Подводные камни Ошибка. Нормализуют «до упора» без учёта паттернов доступа, получая схему с 8-10 JOIN на типовой запрос; либо оставляют дублирование
constraintsdata-modeling
JuniorData Analyst > SQL и данные > Статистика и теория вероятностей
Короткий ответ Нормальное распределение — симметричное колоколообразное распределение вокруг среднего; правило трёх сигм говорит, что около 68% значений лежат в пределах ±1 стандартного отклонения, 95% — в пределах ±2 SD и 99.7% — в пределах ±3 SD от среднего. Как это работает подробнее форма и ширина нормального распределения полностью задаются двумя параметрами — средним и стандартным отклонением; правило трёх сигм — следствие формы этой конкретной кривой. Параметр «среднее» задаёт положение центра кривой, а «стандартное отклонение» — её ширину и «остроту» пика. Пример кода Что использовать на практике На практике: правило используют для быстрой оценки «нормальности» значения (например, подозрительно большая транзакция) и для построения грубых доверительных интервалов. Важно: правило работает только если данные действительно близки к нормальному распределению — для скошенных метрик (доходы, время сессии) доли могут сильно отличаться. Для бизнес-метрик часто полезнее сначала построить гистограмму и формально
normal-distributionstandard-deviation
JuniorData Analyst > SQL и данные > Статистика и теория вероятностей
Короткий ответ Нулевая гипотеза (H0) обычно утверждает отсутствие эффекта или различия («новая версия не отличается от старой»), альтернативная (H1) — что эффект или различие есть; статистический тест оценивает, достаточно ли данных, чтобы усомниться в H0. Как это работает подробнее мы заранее формулируем H0 и H1, выбираем уровень значимости, затем считаем статистику теста и p-value; если p-value меньше порога, H0 отвергают в пользу H1, иначе — оснований отвергнуть H0 недостаточно (это не то же самое, что «H0 доказана»). Такая формализация особенно важна при командной работе, чтобы разные аналитики интерпретировали результат теста одинаково. Пример кода Что использовать на практике На практике: формулировка гипотез должна предшествовать анализу данных, а не подбираться под уже увиденный результат. Альтернативная гипотеза может быть двусторонней («конверсии отличаются») или односторонней («новая версия лучше») — выбор влияет на расчёт p-value и должен быть обоснован до теста. Полезно заранее задокументировать
alternative-hypothesishypothesis-testing
JuniorJava Developer > Java Core > ООП
Короткий ответ Объект — это экземпляр класса: если класс это шаблон или чертёж, описывающий поля и методы, то объект — конкретная реализация шаблона с собственным набором значений полей. Например, класс Car описывает свойства машины, а объект — конкретную машину с моделью и цветом. Объект создаётся оператором new, также его можно получить рефлексией, клонированием или десериализацией. Как это работает подробнее Каждый объект занимает собственную область памяти в куче и имеет состояние, отличное от состояния других объектов того же класса. Важно различать объект и ссылку: переменная объектного типа хранит не сам объект, а ссылку — «адрес», по которому объект лежит в памяти. Ссылку можно переназначить на другой объект или в null, а на один объект могут одновременно указывать несколько ссылок. Класс — шаблон: какие поля и методы есть у сущности. Объект — экземпляр с конкретными значениями полей; размещается в куче. Ссылка — переменная, указывающая на объект; может быть переназначена или равна null. java.lang.Obj
classheap