MiddleDevOps Engineer > Контейнеры и доставка > Безопасность Linux
Короткий ответ SUID заставляет исполняемый файл запускаться с правами владельца файла (а не запускающего пользователя), SGID — с правами группы файла (а для каталога — что новые файлы внутри наследуют группу каталога), sticky bit на каталоге разрешает удалять файлы внутри только их владельцу, даже если каталог доступен на запись всем (классический пример — /tmp). Как это работает подробнее Ядро проверяет эти биты при exec() и chmod: при установленном SUID на бинарнике эффективный UID процесса при запуске становится равным UID владельца файла независимо от того, кто его запустил — это позволяет, например, обычному пользователю выполнить passwd, которому нужны права root для изменения /etc/shadow, не давая пользователю root-доступ напрямую. Пример кода Что использовать на практике Практика. SUID-бинарники — частая цель для эскалации привилегий: если такой файл имеет уязвимость или неправильно обрабатывает окружение/аргументы, его можно использовать для получения root; поэтому список SUID-файлов в системе стоит
least-privilegelinux
SeniorPython Developer > Основы Python > Проектирование API
Короткий ответ Cursor-based пагинация с устойчивым tie-breaker (например, (sort_field, id)) обычно нужна для производительности на больших объёмах, но нужно явно решить и задокументировать модель согласованности для пользователя при одновременных изменениях данных — показывать ли "снимок" на момент начала пролистывания (может уже не отражать последние изменения) или живые данные (может приводить к пропуску/дублированию записей при параллельных вставках/удалениях). Как это работает подробнее на десятках миллионов строк offset-пагинация деградирует по производительности пропорционально глубине смещения, так как БД должна пропустить все предыдущие строки даже с индексом; cursor-based подход с индексированным составным ключом сортировки избегает этой деградации, обращаясь напрямую к позиции по значению курсора. Но при живых данных курсор, зафиксированный на "последней увиденной записи", не защищает от того, что новые записи, вставленные перед текущей позицией сортировки, никогда не будут показаны в текущем пролис
consistencycursor-pagination
SeniorPython Developer > Основы Python > Процессы и параллелизм
Короткий ответ Решение зависит от того, можно ли выразить вычисления через существующие библиотеки, уже освобождающие GIL во внутренних циклах (NumPy, pandas и т.п.) — тогда многопоточность может дать реальный параллелизм почти бесплатно; если такой библиотеки нет, выбор между multiprocessing и собственным C-расширением определяется объёмом вычислений, частотой изменений этого кода и экспертизой команды. Как это работает подробнее GIL ограничивает параллельное выполнение именно байт-кода CPython; библиотеки, реализованные в C/Rust, могут явно освобождать GIL на время выполнения своих внутренних циклов — в этом случае потоки Python действительно получают параллелизм на таких участках. Multiprocessing даёт параллелизм за счёт отдельных процессов с собственным GIL, независимо от того, чистый это Python-код или нет, но за счёт издержек на передачу данных между процессами. Компромисс. Многопоточность с GIL-освобождающими библиотеками даёт лучшее сочетание простоты и производительности, но ограничена тем, что реаль
cpu-boundgil
SeniorPython Developer > Основы Python > Управление памятью
Короткий ответ Нужно сочетать явные ограничения на кэш (ограничение размера и TTL записей, а не рассчитывать только на сборщик мусора), по возможности разрывать циклические ссылки через weakref там, где это архитектурно уместно, и добавить метрики, напрямую показывающие размер кэша и частоту срабатывания циклического gc. Как это работает подробнее Циклические ссылки не освобождаются немедленным подсчётом ссылок — их находит только периодический циклический сборщик мусора, который запускается по эвристическим порогам числа выделений; при высокой скорости создания новых циклических структур под нагрузкой объекты могут накапливаться в памяти быстрее, чем gc успевает их собирать, особенно если среди них есть объекты с __del__. Компромисс. Разрыв циклов через weakref даёт наиболее предсказуемое освобождение памяти, но требует аккуратного архитектурного решения о том, какая сторона связи «слабая», и может усложнить код там, где нужно гарантированно обращаться к родителю из потомка; опора на лимит размера/TTL кэша п
garbage-collectionmemory-management
SeniorData Analyst > SQL и данные > Python для анализа данных
Короткий ответ Единственного правильного решения нет: при существенной и растущей доле пропусков предпочтительнее не скрывать их за импутацией, а явно выделить сегмент "неизвестно" отдельной категорией или флагом и отчитываться по нему отдельно, пока не выяснена и не устранена причина роста пропусков. Как это работает подробнее когда доля пропусков мала и стабильна, импутация (средним, медианой, модельная) обычно безопасна и мало искажает выводы; когда доля растёт — это сигнал изменяющегося процесса сбора данных (новая версия приложения, новый источник трафика без части полей), и любое "усреднение" пропуска начинает маскировать реальную и меняющуюся проблему, а не просто шум. Пример кода Что использовать на практике На практике. разумно ввести отдельную категорию "unknown"/флаг пропуска в отчётности и явно показывать её долю на графике рядом с основной метрикой, чтобы рост пропусков был виден бизнесу так же явно, как и сама метрика; параллельно нужно расследовать техническую причину роста пропусков, а не отно
biasdata-quality
MiddleData Analyst > SQL и данные > Продуктовые и бизнес-метрики
Короткий ответ Вместо self-join напрямую к таблице сырых событий стоит сначала агрегировать события до уровня (user_id, день активности) в промежуточную таблицу или материализованное представление, а когортные расчёты строить оконными функциями или агрегатами поверх уже уменьшённого набора данных. Как это работает подробнее self-join на сырых событиях умножает число строк квадратично относительно активности пользователя (каждое событие джойнится с каждым), что на миллиардах строк даёт комбинаторный взрыв; предварительная агрегация до уникальных пар (user_id, day) на порядки уменьшает объём данных до джойна. Пример кода Что использовать на практике Практика. в колоночных СУБД (ClickHouse, BigQuery) эффективнее использовать uniqExact/APPROX_COUNT_DISTINCT и агрегатные функции с условиями (countIf) вместо явных джойнов; также полезно партиционировать/кластеризовать исходную таблицу по дате и user_id, чтобы сканирование затрагивало меньше данных, и строить инкрементальные (daily) агрегаты вместо пересчёта всей ис
cohortsmaterialized-view
SeniorSMM Manager > Общее > Контент и форматы
Короткий ответ Единственно правильного готового решения здесь нет: нужно сначала оценить масштаб и характер утечки (это нашло широкую аудиторию или нет, насколько материал критичен для успеха кампании) совместно с юристами и руководством, прежде чем принимать решение — ускорить официальный запуск, скорректировать сообщение или идти по плану без изменений, и в любом случае не делать публичных заявлений без согласования фактов и позиции компании. Как это работает подробнее утечка до официального запуска лишает бренд контроля над первым впечатлением от материала и контекстом, в котором аудитория его увидит; реакция без проверки фактов и без согласования с ответственными лицами может усугубить ситуацию, особенно если утечка связана с подрядчиком или внутренним процессом, требующим отдельного разбирательства. ускоренный запуск позволяет взять инициативу в свои руки, но может означать недостаточно подготовленный пуш кампании и давление на команду; сохранение исходного графика при незначительной утечке избегает лишн
approval-workflowaudience-segmentation
MiddleSMM Manager > Общее > Безопасность доступов
Короткий ответ В моменте нужно оценить реальный ущерб (нужно ли переносить дату запуска или менять сообщение) и уведомить руководство/юристов, если утечка влияет на коммерческий результат; структурно — перейти от одной общей папки с широким доступом к папкам с минимально необходимым и ограниченным по времени доступом для каждой кампании, с водяными знаками на черновиках и отзывом доступа сразу после запуска. Как это работает подробнее широкий и долгосрочный доступ к общему диску означает, что любой из множества людей (или их скомпрометированный аккаунт) может стать источником утечки; ограничение доступа только тем, кому он нужен, и только на нужный срок снижает площадь риска. Что использовать на практике Действия. Стоит создавать отдельные папки под конкретную кампанию с явным и ограниченным по времени списком доступа, использовать черновики с водяными знаками для широкого внутреннего обсуждения и вести лог, у кого был доступ к финальным несогласованным материалам. Проверка. После инцидента создана отдельная
access-controlaccount-security
JuniorPerformance Marketer > Google Ads > Трекинг и аналитика
Короткий ответ Каждое поле попадает в отдельный атрибут аналитики. Рекламная платформа может автоматически подставлять ID и названия кампаний или объявлений. Как это работает подробнее Каждый параметр записывается в отдельное поле отчёта аналитики, и отчёты можно группировать или фильтровать по любому из них независимо друг от друга. На ряде платформ есть встроенные динамические параметры, которые можно подставлять в UTM автоматически, например название кампании или ID объявления, чтобы разметка не зависела от ручного ввода. Пример кода Что использовать на практике Утвердите словарь и шаблон UTM, затем тестируйте итоговые URL. Детали креатива храните в content, а название кампании — в campaign. Подводные камни Если поместить каждое объявление в campaign, отчёт раздробит одну кампанию на множество строк; несогласованные значения medium также ломают группировку.
utm-campaignutm-content
MiddleSMM Manager > Общее > Отчётность и бизнес-метрики
Короткий ответ В B2B с длинным циклом сделки точный ROI за один квартал обычно посчитать нельзя — нужно договориться с заказчиком о промежуточных бизнес-метриках (квалифицированные лиды, встречи, попадание в CRM) как индикаторе и явно обозначить горизонт, на котором можно будет оценить реальный доход. Как это работает подробнее при длинном цикле сделки влияние SMM на конкретную продажу размыто по времени и каналам из-за нескольких касаний перед сделкой, поэтому точная атрибуция «пост → продажа» без сквозной аналитики и интеграции с CRM технически ненадёжна. Что использовать на практике Действия. В качестве промежуточного индикатора используют число квалифицированных лидов из соцсетей, конверсию в встречи или демо, попадание лида в воронку CRM с пометкой источника. Также. Для реального ROI нужен более длинный период наблюдения (например, сравнение за 2–3 квартала) и согласованная с заказчиком модель атрибуции. Проверка. Отчёт за квартал: лиды из соцсетей, попавшие в CRM — 18, из них квалифицированных — 7, назн
attribution-modelingb2b-marketing