MiddlePython Developer > Основы Python > Тестирование кода
Короткий ответ Scope определяет, как часто пересоздаётся фикстура: function — перед каждым тестом, session — один раз за весь прогон; для тестовой БД обычно создают соединение/схему на уровне session, а очистку данных — на уровне function, чтобы не терять изоляцию тестов. Как это работает подробнее pytest кеширует результат фикстуры в рамках её scope и переиспользует его для всех подходящих тестов, пока scope не завершится, вызывая фикстуру заново только при смене области видимости. Более широкий scope (session, module) снижает накладные расходы на дорогие операции (поднятие контейнера с БД, подключение к сети), а узкий scope (function) обеспечивает полную изоляцию между тестами ценой повторной инициализации. Пример кода Что использовать на практике Практика. Частый паттерн: фикстура session-уровня поднимает engine и применяет миграции один раз за весь прогон, а фикстура function-уровня оборачивает каждый тест в транзакцию и откатывает её после теста (через savepoint или rollback), совмещая скорость дорогой п
databasesfixtures
JuniorPerformance Marketer > Google Ads > Рекламные платформы и форматы
Короткий ответ Search показывает рекламу в ответ на поисковый запрос и часто перехватывает сформированный спрос. Display размещает графические и другие форматы на сайтах и в приложениях по контекстным или аудиторным сигналам, чаще решая задачи охвата и повторного контакта. Как это работает подробнее Поисковый запрос часто отражает явное намерение, тогда как показ в Display не обязательно вызван активным поиском. Поэтому сети различаются форматом, охватом и ожидаемым поведением пользователя. Search. Подходит для спроса с явным намерением. Display. Поддерживает охват, ремаркетинг и повторные касания. Что использовать на практике Оценивай каждый тип по роли в воронке и подходящим бизнес-метрикам, а не только по CTR или CPC. Подводные камни Не объявляй Display неэффективным только из-за более низкого CTR: у него другая механика контакта.
display-networkgoogle-ads
MiddleJava Developer > Java Core > Multithreading
Короткий ответ Процесс — это программа в состоянии выполнения с собственным изолированным адресным пространством памяти. Поток — «лёгковесная» единица выполнения внутри процесса; в Java сам процесс — это запущенная JVM, внутри которой работают десятки потоков: main, потоки сборщика мусора, пользовательские потоки. Как это работает подробнее Потоки одного процесса разделяют кучу и другие общие области памяти, поэтому могут общаться через общие объекты и переменные, но при этом каждый имеет собственный стек вызовов и программный счётчик — локальные переменные у потоков не общие. Из-за разделяемой памяти и возникает риск гонок за данные. Процессы полностью изолированы: крах одного процесса не «роняет» другой, однако обмен данными между ними требует специальных механизмов — сокетов, файлов, разделяемой памяти. Создание и переключение потоков обходятся заметно дешевле, чем у процессов, поэтому многопоточность эффективнее использует ресурсы системы и многоядерные процессоры. Пример кода Что использовать на практике
javamemory
MiddleSMM Manager > Общее > Площадки и основы SMM
Короткий ответ В умной ленте ВКонтакте порядок постов определяется прогнозируемым интересом пользователя к конкретной публикации (с учётом прошлых реакций на сообщество и похожий контент), а не исключительно временем публикации, поэтому пост может «догонять» аудиторию не сразу, а в течение нескольких часов или дольше после выхода — и слишком частые публикации подряд могут конкурировать друг с другом за показ той же аудитории, а не суммарно увеличивать охват. Как это работает подробнее система оценивает вероятность взаимодействия на основе истории поведения пользователя с данным сообществом и похожими публикациями, из-за чего охват конкретного поста растягивается во времени, а не заканчивается сразу после выхода новых постов. Что использовать на практике Рекомендация. вместо погони за «идеальным временем публикации» полезнее следить за тем, как долго пост набирает охват после выхода в статистике сообщества, и не публиковать новый пост настолько часто, что он перекрывает показ предыдущего, который ещё набирает
impressionsplatform-strategy
JuniorPerformance Marketer > Google Ads > События и GA4
Короткий ответ В GA4 сессии и пользователи определяются по новой модели на основе событий и параметра session_start, а не по времени последнего обращения в cookie, как в Universal Analytics, из-за чего числа сессий между старой и новой системой для одного и того же трафика могут не совпадать. Как это работает подробнее GA4 создаёт новую сессию при событии session_start с учётом времени неактивности пользователя (по умолчанию 30 минут) и использует иной алгоритм подсчёта активных пользователей, не идентичный механике Universal Analytics, где учитывались, например, изменение источника трафика в середине дня как новая сессия. В основе разницы — то, что в Universal Analytics сессия могла прерываться по нескольким дополнительным правилам (смена источника трафика, полночь по календарю), тогда как в GA4 основным правилом остался только тайм-аут неактивности и полночь, что делает модель проще, но не идентичной предыдущей системе. Что использовать на практике Практика. При переносе отчётности или сравнении исторически
analyticsevents
JuniorDevOps Engineer > Контейнеры и доставка > CI/CD и управление релизами
Короткий ответ Staging — это окружение, максимально похожее на production по конфигурации и инфраструктуре, но изолированное от реальных пользователей, где можно безопасно проверить изменения перед релизом; production обслуживает реальный трафик, и ошибки там напрямую влияют на пользователей и бизнес. Как это работает подробнее типичный pipeline разворачивает артефакт сначала на staging, где автоматические и иногда ручные тесты проверяют его поведение на данных и конфигурации, близких к боевым, и только после успешной проверки тот же артефакт промотируется в production. Пример кода Что использовать на практике На практике. staging не всегда идентичен production на 100% (объём данных, количество реплик, внешние интеграции), и это важно учитывать — некоторые проблемы (под нагрузкой, с редкими данными) staging не воспроизводит. Поэтому staging снижает риск, но не заменяет мониторинг и осторожные стратегии выкладки (canary, feature flags) в самом проде. Пример. Ожидаемое поведение: деплой в production возможен то
cicd-and-release-managementdevops
JuniorDevOps Engineer > Контейнеры и доставка > Infrastructure as Code и управление конфигурацией
Короткий ответ Helm использует шаблонный язык (Go templates) и подстановку значений из values.yaml в заготовки манифестов с версионируемыми "релизами", а Kustomize работает без шаблонов, просто накладывая декларативные патчи на валидные YAML-манифесты; Kustomize проще выбрать, когда манифесты почти одинаковы между окружениями и нет необходимости в пакетировании/версионировании чарта как отдельного артефакта. Как это работает подробнее в Helm шаблоны содержат конструкции {{ .Values.x }}, {{ if }}, {{ range }}, что даёт гибкость, но требует понимания шаблонного языка и усложняет чтение "сырых" манифестов до рендера; Kustomize хранит сами манифесты в валидном YAML и описывает только дельту (патчи, генераторы ConfigMap/Secret, смену namespace/префиксов), что проще читать напрямую. Пример кода Что использовать на практике Практика. Kustomize встроен в kubectl (kubectl apply -k) и не требует установки дополнительного CLI, что снижает порог входа для небольших проектов; Helm предпочтительнее, когда нужно публиковать
configuration-managementhelm
MiddleSMM Manager > Общее > SMM-аналитика и метрики
Короткий ответ ER by reach делит вовлечения на фактический охват поста, а ER by followers — на общее число подписчиков; поскольку охват поста обычно меньше числа подписчиков, ER by reach почти всегда выше, и если без объяснения переключаться между формулами от месяца к месяцу, можно создать иллюзию роста вовлечённости там, где её на самом деле нет. Как это работает подробнее обе формулы используют одинаковый числитель (сумма вовлечений), но разный знаменатель, поэтому они измеряют разные вещи — ER by reach показывает, насколько вовлечена именно охваченная аудитория, а ER by followers показывает вовлечённость относительно всей подписной базы. Подписчики 20 000, охват поста упал с 10 000 до 5 000, вовлечения стабильны на уровне 400. ER by reach: было 4%, стало 8% (выглядит ростом). ER by followers: было 2%, стало 2% (показывает, что вовлечённость относительно всей базы не изменилась, просто упал охват). Проверка: рассчитать оба варианта параллельно и смотреть на охват отдельно, чтобы не принять падение охвата з
engagement-ratemetrics
MiddleSMM Manager > Общее > Площадки и основы SMM
Короткий ответ Telegram-чат требует почти непрерывного наблюдения в реальном времени, так как сообщения участников видны всем сразу и конфликт может разрастись за минуты, тогда как комментарии под постом в Instagram можно обрабатывать периодическими проверками в течение дня по SLA, поскольку они привязаны к конкретной публикации и растут медленнее. Как это работает подробнее чат — это общий поток сообщений без привязки к конкретному посту, где любой участник видит сообщения других в реальном времени, а комментарии в Instagram организованы под конкретной публикацией и обычно просматриваются владельцем аккаунта пакетно. Что использовать на практике Рекомендация. для активного чата целесообразно выделить модератора на смены с чётким графиком покрытия (особенно в пиковые часы активности) и настроить автоматические фильтры на явный спам/маты, тогда как для комментариев достаточно регулярных проверок несколько раз в день с приоритизацией явного негатива. Подводные камни Риск. применять одинаковый график проверки (н
community-managementcommunity-moderation
JuniorPython Developer > Основы Python > Проектирование API
Короткий ответ Path-параметры — часть URL, идентифицирующая конкретный ресурс (/users/42); query-параметры — необязательные модификаторы запроса после ? (?page=2&status=active), используемые для фильтрации, сортировки, пагинации. Как это работает подробнее path-параметр обычно обязателен и однозначно определяет ресурс в иерархии URL; query-параметры опциональны и не меняют "адрес" ресурса, а уточняют, какую выборку или представление вернуть. Пример кода Что использовать на практике Рекомендация. если без параметра запрос не имеет смысла (например, ID пользователя) — это path-параметр; если параметр можно не указывать и получить разумный результат по умолчанию (фильтр, лимит) — это query-параметр. Такое разделение упрощает кэширование и генерацию документации (OpenAPI). Подводные камни Риски. засовывать в path опциональные фильтры (/users/active/42), что усложняет маршрутизацию и делает URL негибким; передавать идентификатор ресурса как query-параметр (/users?id=42), когда это должен быть path-параметр, что пу
path-parametersquery-parameters