JuniorSMM Manager > Общее > Репутация и кризис-коммуникации
Короткий ответ На базовом уровне это ручной поиск по названию бренда и ключевым хэштегам на основных площадках, настройка бесплатных алертов по ключевым словам и периодическая проверка отзывов на профильных сайтах и картах — набор инструментов зависит от бюджета и важных для бренда площадок. Как это работает подробнее упоминания бренда появляются не только под его постами, но и в сторонних группах, отзывах, тредах — без мониторинга компания узнаёт о проблеме с опозданием. Junior-менеджер бренда «КнижныйДвор» раз в день проверяет упоминания по названию бренда в поиске соцсетей и раз в неделю — отзывы на картах и маркетплейсах, фиксируя находки в общей таблице. Проверка: таблица мониторинга регулярно обновляется с датами последней проверки по каждому источнику. Что использовать на практике Практический подход. стартовый набор обычно бесплатный или низкобюджетный; более продвинутые платные системы мониторинга — это следующий уровень зрелости процесса, а не обязательный базовый минимум. Подводные камни Частые оши
community-managementcrisis-communications
JuniorDevOps Engineer > Контейнеры и доставка > Процессы Linux
Короткий ответ kill отправляет сигнал по числовому PID, pkill — по совпадению имени процесса или другим атрибутам (без явного PID), killall — по точному имени исполняемого файла; все три по умолчанию посылают SIGTERM, если сигнал не указан явно. Как это работает подробнее kill — это обёртка над системным вызовом kill(2), которой нужен конкретный идентификатор процесса; pkill и killall используют procfs или библиотеку для поиска процессов по шаблону имени или другим критериям (пользователь, терминал) и затем сами вызывают kill(2) для каждого найденного PID. Пример кода Что использовать на практике Практика. pkill/killall удобны, когда нужно остановить все копии процесса с одинаковым именем (например, все worker-процессы), но перед использованием стоит сначала выполнить pgrep или pkill с флагом -l/--signal 0 в режиме просмотра, чтобы убедиться, что под шаблон не попали лишние процессы. Подводные камни Риск. Частая ошибка — выполнить killall с общим именем вроде python или node на многопользовательском сервере и
linuxpkill
JuniorPython Developer > Основы Python > Коллекции и структуры данных
Короткий ответ Для перебора словаря используют сам словарь или .keys() для ключей, .values() для значений и .items() для пар (ключ, значение) — во всех случаях начиная с Python 3.7 порядок перебора соответствует порядку вставки ключей. Как это работает подробнее for key in d: и for key in d.keys(): эквивалентны и дают ключи. for value in d.values(): даёт значения без привязки к ключам. for key, value in d.items(): возвращает пары, которые удобно распаковывать прямо в заголовке цикла. Все три представления — "живые" view-объекты: они отражают изменения словаря, если словарь меняется во время итерации по отдельному, не связанному с ней коду. Пример кода Что использовать на практике Практика. .items() — самый частый выбор, когда внутри цикла нужны и ключ, и значение. Если нужен словарь, отфильтрованный или преобразованный, часто используют dict comprehension: {k: v for k, v in d.items() if condition}. Подводные камни Риски. Изменяют словарь (добавляют/удаляют ключи) прямо во время итерации по нему — это вызывает
collectionsdict
JuniorPython Developer > Основы Python > Коллекции и структуры данных
Короткий ответ Словари объединяют через метод dict.update(), распаковку {d1, d2} или оператор | (Python 3.9+); во всех способах при совпадении ключей выигрывает значение из словаря, указанного позже (правее / последним применённым). Как это работает подробнее d1.update(d2) изменяет d1 на месте, перезаписывая совпадающие ключи значениями из d2. {d1, d2} и d1 | d2 создают новый словарь, не изменяя исходные; порядок распаковки или операндов определяет, чьё значение "побеждает" при одинаковых ключах — побеждает тот, что применён позже. Пример кода Что использовать на практике Практика. Если нужно сохранить оба исходных словаря без изменений — используют | или распаковку. Если исходный словарь можно мутировать и важна скорость для большого числа обновлений — update() эффективнее, так как не создаёт новый объект. Начиная с 3.9 есть также |= для обновления на месте в стиле, похожем на update. Подводные камни Риски. Думают, что update() возвращает новый словарь — метод возвращает None, результат нужно смотреть в изме
collectionsdict
JuniorDevOps Engineer > Контейнеры и доставка > Ресурсы и выполнение
Короткий ответ Флаг --memory (и опционально --memory-swap) ограничивает объём памяти контейнера, флаг --cpus ограничивает долю процессорного времени (например, 1.5 ядра); при превышении лимита памяти процесс в контейнере получает OOM kill. Как это работает подробнее оба флага транслируются в настройки Linux cgroups для контейнера. --memory=512m задаёт жёсткий верхний предел использования RAM — при его превышении ядро посылает OOM killer сигнал процессу внутри контейнера. --cpus=1.5 задаёт квоту CPU-времени за период, ограничивая максимальную долю процессора, которую может использовать контейнер, независимо от того, сколько ядер физически доступно на хосте. Пример кода Что использовать на практике Практика. лимиты обязательно нужны на production-хостах с несколькими контейнерами, чтобы один "прожорливый" сервис не мог положить остальные (noisy neighbor); значения лимитов стоит подбирать на основе реального профиля нагрузки приложения, а не произвольно. Подводные камни Риск. задают лимит памяти заметно ниже реа
cgroupscontainers
JuniorJava Developer > Java Core > Collections
Начальная емкость (initial capacity) по умолчанию составляет 16 бакетов, а коэффициент загрузки (load factor) равен 0.75...
BasicsCollections
MiddlePython Developer > Основы Python > Веб-фреймворки: Django, Flask, FastAPI
Короткий ответ Pydantic играет ключевую роль в FastAPI, обеспечивая валидацию данных и управление схемами на основе аннотаций типов Python. Модели Pydantic задают структуру запросов и ответов, а FastAPI использует их для разбора тела запроса, проверки данных и генерации документации. Как это работает подробнее Работа строится вокруг декларативных моделей, которые описывают, как должны выглядеть данные. Разбор запроса. При обращении FastAPI сверяет входящие данные с Pydantic-моделью: при несоответствии типам возвращается понятная ошибка с деталями. Типизированные объекты. Корректные данные превращаются в типизированные Python-объекты, удобные для кода приложения. Документация. На основе моделей автоматически строится интерактивная документация OpenAPI со схемами запросов и ответов. Возможности. Поддерживаются вложенные модели, значения по умолчанию, необязательные поля и кастомные валидаторы. Пример кода Что использовать на практике Декларативные схемы. Описывай запросы и ответы моделями Pydantic с аннотациями
fastapipydantic
JuniorDevOps Engineer > Контейнеры и доставка > Infrastructure as Code и управление конфигурацией
Короткий ответ Роль — это переиспользуемый пакет автоматизации со стандартизированной структурой папок (tasks, handlers, templates, files, defaults, vars, meta), который можно подключать к разным playbook и окружениям; вынесение логики в роль избавляет от дублирования и упрощает повторное использование между проектами. Как это работает подробнее Ansible автоматически подхватывает файлы роли по соглашению об именах — tasks/main.yml выполняется при подключении роли, handlers/main.yml содержит обработчики уведомлений, templates/ хранит Jinja2-шаблоны конфигов, defaults/main.yml задаёт переменные с низким приоритетом (легко переопределить), vars/main.yml — с высоким. Пример кода Что использовать на практике Практика. роли публикуют и переиспользуют через Ansible Galaxy или приватный репозиторий; типичный playbook сводится к списку ролей, применяемых к группе хостов, что делает его компактным и декларативным. Подводные камни Ошибка. путать defaults и vars по приоритету переопределения, из-за чего переменная из gro
ansibleansible-handlers
MiddlePython Developer > Основы Python > Многопоточность и асинхронность
Короткий ответ Модуль asyncio даёт инструменты асинхронного программирования: он позволяет выполнять I/O-bound задачи, не блокируя основной поток. Программа регистрирует корутины и продолжает работать, пока идёт ожидание сети, диска или базы данных. Как это работает подробнее В основе asyncio лежит цикл событий, который следит за готовностью корутин и переключает выполнение в точках await. Цикл событий. Управляет корутинами: когда корутина делает await, цикл переключается на другие готовые задачи. Корутины. Создаются ключевым словом async def, а запускаются через await внутри другой корутины либо через asyncio.run(). Ожидание. asyncio.sleep() приостанавливает корутину и возвращает управление циклу, поэтому десятки и сотни таких корутин работают за одно и то же время. Назначение. Асинхронность выгодна приложениям со множеством одновременных соединений: веб-серверам и клиентам внешних API. Пример кода Что использовать на практике Серверы и API. Используй asyncio там, где нужны тысячи одновременных соединений. I
asynciocoroutines
JuniorPython Developer > Основы Python > Модули, пакеты и окружение
Короткий ответ Конструкция if __name__ == '__main__' проверяет, запущен ли файл напрямую как главная программа. При прямом запуске переменная __name__ равна строке '__main__', а при импорте — имени модуля, поэтому блок срабатывает только в первом случае. Как это работает подробнее Конструкция отделяет исполняемую часть модуля от объявлений, которые нужны импортирующему коду. Переменная __name__. Существует в каждом модуле и заполняется интерпретатором автоматически: '__main__' при запуске файла как главной программы и имя модуля при импорте. Разделение ролей. Под проверкой размещают исполняемый код вроде вызова main(), а вне её — функции и классы для импорта. Защита от побочных эффектов. Без проверки код верхнего уровня выполнялся бы и при импорте: печатал сообщения или запускал тяжёлые вычисления. Самопроверка модуля. В такой блок удобно класть собственные тесты, работающие только при прямом запуске файла. Пример кода Что использовать на практике Точка входа. Помещай запуск скрипта, вызов main(), под этот ус
dunder-mainentry-points