JuniorPerformance Marketer > Google Ads > Специфика рекламных площадок и каналов
Короткий ответ Широкое соответствие показывает объявление по максимально широкому кругу запросов с учётом сигналов аккаунта, фразовое — по запросам, близким к смыслу фразы, точное — по запросам, совпадающим по смыслу с самим ключевым словом; чем «шире» тип, тем больше охват, но ниже контроль релевантности. Как это работает подробнее Google Ads сопоставляет пользовательский запрос с ключевым словом и его типом соответствия, используя семантику запроса, а не только буквальное совпадение слов; широкое соответствие при этом активно использует Smart Bidding и сигналы аккаунта (целевая страница, другие ключевые слова, история конверсий). Что использовать на практике На практике. для нового аккаунта без накопленных конверсий широкое соответствие без автоматических стратегий ставок может приводить к нерелевантному трафику, поэтому его чаще сочетают со Smart Bidding по конверсиям и минус-словами; точное и фразовое дают больше контроля, но меньший охват. Пример. Ключевое слово «купить кроссовки» в широком соответствии
google-adskeywords
JuniorDevOps Engineer > Контейнеры и доставка > Kubernetes и оркестрация
Короткий ответ ClusterIP (по умолчанию) доступен только внутри кластера; NodePort дополнительно открывает один и тот же порт на всех узлах кластера наружу; LoadBalancer запрашивает у облачного провайдера внешний балансировщик, который направляет трафик на NodePort. Как это работает подробнее ClusterIP создаёт виртуальный IP, маршрутизируемый только внутри кластерной сети. NodePort включает в себя ClusterIP и дополнительно резервирует порт (по умолчанию из диапазона 30000–32767) на каждом узле, перенаправляя внешний трафик на сервис. LoadBalancer — надстройка над NodePort: облачный контроллер создаёт внешний балансировщик (например, AWS ELB), который слушает публичный адрес и шлёт трафик на NodePort узлов. Пример кода Что использовать на практике Практика. ClusterIP используют для внутренних сервисов (базы данных, внутренние API); NodePort — редко напрямую, чаще как механизм для Ingress-контроллера или в кластерах без облачного балансировщика (bare-metal); LoadBalancer — для публичного входа в облаке, но кажды
kubernetesnetworking
JuniorPerformance Marketer > Google Ads > Рекламные платформы и форматы
Короткий ответ Broad match охватывает запросы по смыслу и связанным сигналам, phrase match сохраняет смысл фразы, а exact match охватывает запросы с тем же смыслом ключа. Чем шире охват, тем больше потенциал объёма и выше потребность в контроле поисковых запросов. Как это работает подробнее Широкое соответствие обычно даёт больший охват, но снижает предсказуемость запросов. Фразовое и точное дают больше контроля, однако могут ограничить объём; автоматические ставки не отменяют проверку запросов. Broad match. Расширяет охват по намерению и требует качественных конверсионных сигналов. Phrase и exact. Помогают контролировать релевантность, хотя тоже учитывают близкие варианты смысла. Что использовать на практике Выбирай соответствие по качеству трекинга и бюджету; при broad match регулярно анализируй поисковые запросы и добавляй обоснованные минус-слова. Подводные камни Не запускай широкое соответствие без проверенного события конверсии и контроля запросов.
broad-matchgoogle-ads
JuniorJava Developer > Java Core > Collections
Короткий ответ Различие — во внутренней структуре. ArrayList построен на динамическом массиве Object[]: доступ по индексу — O(1), вставка или удаление в середине — O(n) из-за сдвига, добавление в конец — амортизированно O(1). LinkedList — двусвязный список: каждый элемент обёрнут в узел со ссылками на соседей; вставка в найденную позицию сводится к перестановке ссылок, но поиск позиции идёт перебором за O(n). Как это работает подробнее ArrayList хранит элементы в массиве, который автоматически расширяется при заполнении; элементы лежат подряд, поэтому итерация быстрая и хорошо используется кэш процессора. LinkedList на каждый элемент создаёт отдельный объект-узел со ссылками на предыдущий и следующий; узлы разбросаны по памяти, поэтому структура проигрывает и ArrayList, и более современным коллекциям. Доступ по индексу: у ArrayList O(1), у LinkedList — перебор от начала или конца, O(n). Вставка в середину: у ArrayList сдвиг последующих элементов — O(n); у LinkedList после поиска узла — O(1), но сам поиск стои
arraylistbig-o
JuniorDevOps Engineer > Контейнеры и доставка > Dockerfile и сборка
Короткий ответ CMD задаёт аргументы/команду по умолчанию, которые легко целиком переопределить аргументами docker run; ENTRYPOINT задаёт основную исполняемую команду, которая по умолчанию не заменяется — аргументы docker run добавляются к ней или заменяют CMD. Как это работает подробнее если задан только CMD, то любые аргументы после имени образа в docker run полностью заменяют CMD. Если задан ENTRYPOINT в exec-форме (["executable"]), а CMD задаёт аргументы по умолчанию, то аргументы из docker run заменяют именно CMD, а не ENTRYPOINT — то есть исполняемый файл остаётся фиксированным, меняются только его флаги. Пример кода Что использовать на практике Практика. ENTRYPOINT удобен, когда образ должен вести себя как "обёртка" над конкретной программой (например, CLI-утилита), а CMD используют для образов общего назначения, где запуск произвольной команды — ожидаемый сценарий (например, базовые образы ubuntu/alpine). Подводные камни Риск. задают ENTRYPOINT в shell-форме (ENTRYPOINT command) вместо exec-формы — тог
container-imagesdocker
JuniorData Analyst > SQL и данные > SQL
Короткий ответ IN сравнивает значение с готовым списком результатов подзапроса, а EXISTS просто проверяет, вернул ли коррелированный подзапрос хотя бы одну строку, без интереса к конкретным значениям — для простых случаев они дают одинаковый результат, но ведут себя по-разному при NULL и в сложных подзапросах. Как это работает подробнее WHERE x IN (SELECT y FROM t) требует, чтобы x совпало с одним из значений y; если подзапрос — коррелированный (обращается к внешней таблице), EXISTS просто возвращает TRUE/FALSE по факту существования подходящей строки, что для СУБД часто проще оптимизировать, особенно если внутри нет необходимости строить весь список значений. Пример кода Что использовать на практике На практике: EXISTS обычно предпочтительнее, когда подзапрос коррелированный и таблицы большие, потому что движок может остановиться на первой найденной подходящей строке. IN удобнее для короткого, явного списка значений или независимого подзапроса. Результат: Результат — клиенты, у которых есть хотя бы один зака
existsin
MiddlePython Developer > Основы Python > Веб-фреймворки: Django, Flask, FastAPI
Короткий ответ Flask — лёгкий микрофреймворк с базовой маршрутизацией и каркасом, где остальные библиотеки разработчик выбирает сам. Django — полнофункциональный фреймворк со встроенными ORM, аутентификацией, админ-панелью и шаблонами. Flask берут за гибкость, Django — за структуру и скорость разработки крупных проектов. Как это работает подробнее Разница — в объёме встроенных возможностей и жёсткости архитектуры. Микрофреймворк. Flask даёт маршрутизацию и простейший каркас, а ORM, аутентификацию и другие инструменты подключают расширениями: обычно SQLAlchemy или PyMongo. Batteries included. Django включает встроенные ORM, аутентификацию, админ-панель, маршрутизацию URL и систему шаблонов. Структура. У Django фиксированная архитектура проекта, что даёт единообразие, но кривая обучения круче. Базы данных. Встроенный ORM Django поддерживает PostgreSQL, MySQL, SQLite и Oracle, а Flask по умолчанию ORM не имеет. Что использовать на практике Flask. Бери для API, микросервисов и небольших или средних приложений с г
djangoflask
JuniorPython Developer > Основы Python > Django и DRF
Короткий ответ FBV — обычная функция request -> response, проще для чтения в простых случаях; CBV — класс с методами get/post и т. п., удобен для переиспользования логики через наследование и миксины. Как это работает подробнее В FBV вся логика для всех HTTP-методов обычно находится в одной функции с проверкой request.method. В CBV Django вызывает метод as_view(), который создаёт диспетчер, и далее вызывается метод класса, совпадающий по имени с HTTP-методом (get, post, put...). Пример кода Что использовать на практике Практика. FBV проще читать для небольших, не повторяющихся обработчиков. CBV и generic views (ListView, CreateView) сокращают код для типовых CRUD-страниц за счёт наследования, но добавляют косвенность — нужно знать, какие методы и атрибуты переопределять. Подводные камни Риск. Использование generic CBV «на всякий случай» там, где нужна однократная простая логика, что усложняет чтение кода; обратная ситуация — копирование одинакового кода в несколько FBV вместо выделения общей CBV/миксина.
djangohttp
JuniorData Analyst > SQL и данные > SQL
Короткий ответ INNER JOIN оставляет строки только при совпадении с обеих сторон. LEFT JOIN дополнительно сохраняет несовпавшие строки левой таблицы, заполняя столбцы правой стороны значениями NULL. Как это работает подробнее Условие в ON определяет пары строк. Если одной строке слева соответствуют три строки справа, соединение создаст три строки независимо от вида соединения. Поэтому LEFT JOIN гарантирует сохранение левых строк, но не гарантирует, что итоговое количество строк равно числу строк слева: связь один-ко-многим увеличивает результат. Сравнение INNER JOIN — нужны только объекты со связанной записью — несовпавшие строки исключаются. LEFT JOIN — нужно сохранить все объекты слева — справа возможны NULL. Пример кода Что использовать на практике Сверяйте гранулярность. До соединения определите, уникален ли ключ в правой таблице. Считайте отсутствующие связи. После LEFT JOIN используйте COUNT(o.order_id), а не COUNT(*), чтобы клиент без заказов получил ноль. Подводные камни Потеря строк. INNER JOIN исключ
inner-joinjoins
JuniorPython Developer > Основы Python > SQL-запросы
Короткий ответ INNER JOIN возвращает только строки, для которых есть совпадение в обеих таблицах, а LEFT JOIN возвращает все строки левой таблицы, подставляя NULL в колонки правой таблицы, если совпадения нет. Как это работает подробнее INNER JOIN выполняет пересечение по условию ON — строка попадает в результат только при наличии совпадения с другой стороны. LEFT JOIN сохраняет все строки левой таблицы независимо от совпадения, дополняя отсутствующие значения NULL. Пример кода Что использовать на практике Практика. LEFT JOIN используют, когда нужно показать все записи «главной» сущности, даже без связанных данных — например, всех пользователей, включая тех, у кого пока нет заказов. INNER JOIN применяют, когда связанные данные обязательны для смысла строки. Подводные камни Ошибка. Добавляют условие на колонку правой таблицы в WHERE вместо ON при LEFT JOIN (например WHERE orders.status = 'paid'), что превращает LEFT JOIN обратно в INNER JOIN, отфильтровывая пользователей без заказов.
joinspostgresql