JuniorPython Developer > Основы Python > Архитектура систем
Короткий ответ Микросервисная архитектура — набор независимо развёртываемых сервисов, каждый со своей БД и границами ответственности, взаимодействующих по сети; в отличие от монолита, масштабирование, деплой и отказы изолированы на уровне отдельного сервиса. Как это работает подробнее Каждый сервис владеет своими данными и бизнес-логикой, общение идёт через HTTP/gRPC/сообщения, а не через общую память. Пример кода Что использовать на практике Практика. Позволяет командам независимо деплоить и масштабировать части системы, но добавляет сетевые издержки, сложность мониторинга, распределённые транзакции и необходимость версионирования контрактов. Подводные камни Риск. Распределять сервисы по техническим слоям (например, отдельный «DB-сервис»), а не по бизнес-доменам; считать, что микросервисы сами по себе ускоряют разработку.
architecturedistributed-systems
MiddleData Analyst > SQL и данные > Статистика и теория вероятностей
Короткий ответ MDE — минимальный размер эффекта, который тест способен обнаружить с заданной мощностью при заданном размере выборки; выбор MDE напрямую определяет требуемый размер выборки и длительность эксперимента, поэтому его стоит устанавливать исходя из того, какой эффект вообще имеет смысл для бизнеса. Как это работает подробнее MDE, размер выборки, мощность и уровень значимости связаны одной системой — зная любые три, можно рассчитать четвёртый; уменьшение MDE (желание находить более тонкие эффекты) требует резкого увеличения выборки, так как размер выборки растёт примерно обратно пропорционально квадрату MDE. Sanity check: если при доступном трафике мощность для интересующего бизнес эффекта (например, +0.5 п.п.) получается заметно ниже 0.8, стоит заранее предупредить, что тест с высокой вероятностью не покажет значимого результата даже при наличии реального эффекта. Пример кода Что использовать на практике MDE стоит определять не из технических соображений «что мы можем себе позволить», а из бизнес-ло
ab-testingmde
JuniorPerformance Marketer > Google Ads > Атрибуция и оценка
Короткий ответ Last-click — это модель атрибуции, которая присваивает всю ценность конверсии последнему клику (или последнему платному клику, в зависимости от настройки) перед конверсией, полностью игнорируя предыдущие касания пользователя с рекламой. Как это работает подробнее Система хранит историю кликов пользователя (через cookie или click ID) в рамках окна атрибуции, и в момент конверсии ищет последний релевантный клик, которому и присваивает 100% ценности. Технически для работы такой модели платформа должна в принципе иметь возможность связать разные клики одного пользователя между собой — обычно через cookie или идентификатор клика (например, gclid в Google Ads), который сохраняется в момент перехода по объявлению и считывается в момент конверсии на сайте. Что использовать на практике Практика. Эта модель проста для понимания и настройки по умолчанию в большинстве рекламных кабинетов, но может переоценивать нижние каналы воронки (например, брендовый поиск или ретаргетинг), которые часто оказываются пос
analyticsattribution
JuniorDevOps Engineer > Контейнеры и доставка > Infrastructure as Code и управление конфигурацией
Короткий ответ Модуль — это набор .tf файлов с собственными input-переменными и output-значениями, который можно вызывать (module-блоком) многократно с разными параметрами, что избавляет от копипасты и делает инфраструктуру единообразной и проще в поддержке. Как это работает подробнее модуль — обычная папка с конфигурацией, у которой есть "интерфейс" (variables.tf — входы, outputs.tf — выходы); корневая конфигурация вызывает его через module "name" { source = "./modules/x" ... }, передавая значения переменных, а Terraform встраивает ресурсы модуля в общий граф. Пример кода Что использовать на практике Практика. типичные модули — "сеть" (VPC/подсети), "кластер БД", "сервис приложения"; при изменении логики внутри модуля достаточно поднять версию и обновить всех потребителей, а не редактировать копии кода в десяти местах. Подводные камни Ошибка. делать модуль слишком узким (на один resource без добавленной логики) или слишком широким (один модуль "на всё"), из-за чего он становится негибким; забывать, что перем
configuration-managementiac
JuniorPython Developer > Основы Python > Архитектура систем
Короткий ответ Монолит — это приложение, собранное и развёрнутое как единый процесс/артефакт, где все модули работают в общей памяти и общей базе данных; подходит на старте проекта, при небольшой команде и неопределённых границах домена. Как это работает подробнее Весь код (API, бизнес-логика, доступ к БД) живёт в одном репозитории и деплоится одним артефактом; внутренние вызовы — обычные вызовы функций, а не сетевые запросы. Пример кода Что использовать на практике Практика. Монолит проще разрабатывать, тестировать и деплоить на старте — один процесс CI/CD, одна БД, нет сетевых издержек между модулями; важно поддерживать модульность внутри (слои, пакеты), чтобы монолит не превратился в «big ball of mud». Подводные камни Риск. Считать монолит «плохой» архитектурой по умолчанию; разбивать на сервисы слишком рано, когда домен ещё не понят, что увеличивает сложность без пользы.
architecturedistributed-systems
JuniorDevOps Engineer > Контейнеры и доставка > Основы контейнеров
Короткий ответ Образ — это неизменяемый шаблон (файловая система и метаданные), а контейнер — это запущенный на его основе процесс со своим тонким writable-слоем и изоляцией через namespaces/cgroups. Как это работает подробнее образ Docker собирается из последовательности read-only слоёв по инструкциям Dockerfile. При запуске (docker run) Docker добавляет сверху тонкий writable-слой и создаёт для процесса изолированные Linux namespaces (PID, network, mount и др.) и ограничения через cgroups — это и есть контейнер. Пример кода Что использовать на практике Практика. один и тот же образ можно запустить сколько угодно раз — каждый запуск создаёт отдельный контейнер со своим состоянием и ID. Удаление контейнера (docker rm) не удаляет образ, из которого он был создан; а образ нельзя удалить (docker rmi), пока существует хотя бы один контейнер (даже остановленный), созданный из него. Подводные камни Риск. путают ID образа и ID контейнера при чтении вывода команд; ожидают, что изменения файлов внутри контейнера автом
container-imagescontainers
JuniorPerformance Marketer > Google Ads > Атрибуция и оценка
Короткий ответ Окно конверсии — это период времени после клика (или показа), в течение которого совершённая покупка будет засчитана этому клику; например, окно 30 дней по клику означает, что покупка на 31-й день уже не засчитается этой рекламе. Как это работает подробнее Платформа хранит идентификатор клика пользователя и сравнивает дату конверсии с датой клика: если разница меньше заданного окна — конверсия засчитывается этой рекламе, если больше — нет (или засчитывается другому, более позднему касанию). Технически окно конверсии определяет, насколько «старый» клик платформа готова учитывать при появлении новой конверсии: система сравнивает timestamp зафиксированного клика и timestamp события конверсии, и если разница превышает установленное число дней, связь между ними не формируется вовсе. Что использовать на практике Практика. Длинное окно конверсии (например, 30 дней) подходит для товаров с долгим циклом принятия решения, короткое (например, 1 день) — для импульсных покупок; выбор окна напрямую влияет на
analyticsattribution
JuniorJava Developer > Java Core > ООП
Короткий ответ ООП — объектно-ориентированное программирование: методология, в которой программа строится как совокупность взаимодействующих объектов. Каждый объект — экземпляр класса — объединяет состояние (поля) и поведение (методы). В Java выделяют четыре принципа: инкапсуляцию, наследование, полиморфизм и абстракцию. Как это работает подробнее Принципы связаны между собой: инкапсуляция прячет данные, наследование выстраивает иерархии, полиморфизм позволяет единому коду работать с разными типами, абстракция отделяет «что делать» от «как». Инкапсуляция. Сокрытие внутреннего устройства объекта: поля делают private, а доступ к ним дают через публичные геттеры и сеттеры. Это защищает данные от некорректного изменения. Наследование. Новый класс создаётся на основе существующего через extends: наследник получает поля и методы родителя и может расширять или переопределять их. Например, Cat наследуется от Animal. Полиморфизм. Одноимённые методы ведут себя по-разному: вызов animal.voice() для Dog даст «Гав», а для
abstractionencapsulation
JuniorPython Developer > Основы Python > Очереди и события
Короткий ответ Очередь сообщений — промежуточный сервис, который принимает сообщения от отправителей и хранит их до обработки получателем, развязывая отправителя и обработчика во времени и скорости. Как это работает подробнее Producer публикует сообщение в очередь/топик; consumer читает сообщения и подтверждает обработку (ack). Пример кода Что использовать на практике Практика. Используют для фоновых задач, интеграции сервисов, сглаживания пиков нагрузки (буферизация); примеры — RabbitMQ, Kafka, SQS. Подводные камни Риск. Считать очередь гарантией мгновенной обработки; не учитывать, что сообщение может быть доставлено повторно (at-least-once).
event-drivenmessage-queues
JuniorPython Developer > Основы Python > Проектирование API
Короткий ответ Пагинация — разбиение большого списка ресурсов на меньшие порции (страницы), которые клиент запрашивает по очереди; она нужна, чтобы не возвращать весь набор данных за один запрос, что перегружает память сервера, сеть и клиента. Как это работает подробнее клиент передаёт параметры (например, page/per_page или limit/offset), сервер ограничивает выборку с помощью LIMIT/OFFSET в SQL (или аналога в ORM) и возвращает только часть данных плюс метаданные (общее количество, наличие следующей страницы). Пример кода Что использовать на практике Рекомендация. без пагинации по умолчанию эндпоинт списка легко превращается в "выгрузить всю таблицу", что при росте данных рано или поздно приведёт к деградации производительности и таймаутам. Лимит страницы стоит ограничивать сверху (например, максимум 100), чтобы клиент не мог запросить миллион записей одним вызовом. Подводные камни Риски. не задавать значение по умолчанию и максимум для размера страницы, из-за чего один клиент может перегрузить сервис; возвращ
api-designlimit-offset