JuniorJava Developer > Java Core > Spring
Короткий ответ Spring Boot Starters — предварительно сконфигурированные наборы зависимостей: вместо ручного добавления и согласования версий десятков JAR достаточно подключить один стартер, и нужные библиотеки подтянутся автоматически. Это устраняет конфликты версий и сокращает конфигурацию сборки. Как это работает подробнее Стартер — это один артефакт, который включает все библиотеки для конкретной функциональности или типа приложения. Присутствие стартеров в classpath во многом определяет, какие авто-конфигурации применит Spring Boot. Совместимость версий транзитивных зависимостей обеспечивают родительский POM spring-boot-starter-parent и BOM spring-boot-dependencies. spring-boot-starter-web — веб-приложения и REST API: Spring MVC и встроенный Tomcat. spring-boot-starter-data-jpa — работа с базой данных через JPA и Hibernate. spring-boot-starter-security — аутентификация и авторизация. spring-boot-starter-test — тестирование: JUnit, Mockito и Spring Test. spring-boot-starter-actuator — мониторинг и health-п
dependenciesjava
MiddleJava Developer > Java Core > Spring
Короткий ответ Spring Boot — фреймворк, построенный поверх Spring Framework и упрощающий разработку автономных (stand-alone) приложений, готовых к продакшену. Его ключевые механизмы — авто-конфигурация, стартовые зависимости (starters) и встроенный веб-сервер. Как это работает подробнее Spring — это общий фреймворк: контейнер IoC/DI, AOP, Spring MVC, управление транзакциями; он требует довольно большой ручной настройки и, как правило, внешнего сервера. Spring Boot — расширение, которое работает «поверх» Spring и использует те же Spring Core, Spring AOP и Spring MVC, но сильно упрощает их применение. Авто-конфигурация: убирает большую часть шаблонной ручной конфигурации, в первую очередь XML-настройку. Стартеры: берут на себя управление зависимостями — не нужно вручную подбирать версии библиотек. Встроенный сервер: Tomcat, Jetty или Undertow позволяют запускать приложение как обычный исполняемый JAR без внешнего сервера. Production-возможности: например, Actuator для мониторинга; Boot удобен для облачных прило
autoconfigurationjava
MiddleJava Developer > Java Core > Spring
Короткий ответ Spring Data JPA — модуль Spring Framework, работающий поверх спецификации JPA (внутри по умолчанию Hibernate): достаточно объявить интерфейс-репозиторий, и Spring Data сам предоставит его реализацию с готовыми CRUD-операциями — без написания SQL и DAO-классов. Как это работает подробнее Центральный интерфейс — JpaRepository, расширяющий CrudRepository и PagingAndSortingRepository. Особенность Spring Data JPA — производные методы запросов (derived query methods): по имени метода, то есть по префиксам findBy, countBy, existsBy, deleteBy и именам полей сущности, Spring Data парсит имя и генерирует нужный JPQL или SQL-запрос. Готовые методы: save(), findById(), findAll(), deleteById(), flush(), а также пагинация через Pageable и сортировка через Sort. Derived-метод: findByName(String name) превращается в поиск по полю name, а findByDepartmentName строит запрос через связанную сущность. @Query: для сложных запросов запрос задаётся вручную на JPQL или нативном SQL при nativeQuery = true, параметры св
javajpa
JuniorData Analyst > Метрики и эксперименты > A/B-тесты
Короткий ответ SRM — это ситуация, когда фактическое соотношение пользователей между группами теста значимо отличается от запланированного (например, вместо 50/50 получилось 48/52 с большой выборкой), что обычно говорит о технической проблеме в рандомизации или учёте данных, а не о реальном продуктовом эффекте. Как это работает подробнее SRM проверяют статистическим тестом (обычно chi-square) на соответствие наблюдаемого распределения пользователей по группам ожидаемому сплиту; значимое отклонение — сигнал тревоги. Пример кода Что использовать на практике перед интерпретацией любых метрик теста сначала проверяют SRM; если он есть, результатам по метрикам в принципе доверять нельзя до устранения причины. Если ожидался сплит 50/50, а получили A=51 230, B=49 480 при суммарно ~100 710 пользователях, можно применить chi-square тест на эти частоты. Если p-value мал (например, <0.001), это признак SRM, и метрики теста до выяснения причины не интерпретируются как достоверные. Подводные камни игнорирование проверки SR
chi-squarerandomizatsiya
MiddleJava Developer > Java Core > Java 8+
Короткий ответ Stream в Java 8 — это абстракция для декларативной обработки последовательностей данных: вы описываете, что нужно сделать с элементами (отфильтровать, преобразовать, агрегировать), а не как это сделать с помощью циклов. java.util.stream.Stream не хранит данные и не является коллекцией — это конвейер операций над источником (коллекцией, массивом, файлом, генератором), который обрабатывает элементы лениво и при необходимости параллельно. Как это работает подробнее Пайплайн стрима состоит из трёх частей: источник, промежуточные операции и терминальная операция. Промежуточные операции (filter, map, flatMap, sorted, limit, distinct, peek) ленивы: они не выполняются, пока к пайплайну не применена терминальная операция, и каждая возвращает новый стрим. Терминальные операции (collect, forEach, reduce, count, anyMatch) запускают обработку и производят результат; после терминальной операции стрим использовать нельзя. Исходная коллекция при работе стрима не изменяется. map() преобразует каждый элемент оди
collectorsfunctional-interface
JuniorJava Developer > Java Core > Строки
Короткий ответ String Pool (пул строк) — специальная область памяти в куче, где JVM хранит строковые литералы, чтобы одинаковые строки не дублировались. Когда код встречает литерал "java", JVM проверяет пул: если такая строка уже есть, переменная получает ссылку на существующий объект, если нет — строка создаётся и помещается в пул. Поэтому сравнение == двух одинаковых литералов даёт true. Как это работает подробнее Создание через new String("java") работает иначе: конструктор всегда создаёт новый объект в обычной части кучи, даже если такая строка уже есть в пуле, поэтому new String("java") == "java" даёт false. Переместить строку в пул можно вручную методом intern(), который возвращает канонический объект из пула. До Java 7 пул находился в PermGen, с Java 7 его перенесли в обычную кучу — теперь сборщик мусора может удалять неиспользуемые интернированные строки. Интернирование литералов — одинаковые литералы по всей программе разделяют один объект и экономят память. new String(...) — всегда отдельный объект
internjava
JuniorPython Developer > Основы Python > Согласованность и репликация
Короткий ответ Strong consistency — гарантия, что после успешного завершения операции обновления любое последующее чтение увидит это обновление немедленно, без промежуточного «старого» состояния. Как это работает подробнее Обычно достигается чтением/записью через единственный авторитетный узел (primary) или синхронным согласованием между узлами перед подтверждением записи. Пример кода Что использовать на практике Практика. Даёт предсказуемость, но стоит дороже по латентности и доступности; применяют там, где цена рассинхронизации высока (финансовые балансы, уникальные ограничения). Подводные камни Риск. Считать, что «одна БД» автоматически даёт strong consistency при наличии реплик для чтения — чтение с асинхронной read-реплики может вернуть устаревшие данные.
consistencydistributed-systems
SeniorJava Developer > Java Core > Core Java
Четыре типа ссылок определяют, при каких условиях сборщик мусора может освободить объект.
Управление памятью
MiddlePerformance Marketer > Google Ads > Специфика рекламных площадок и каналов
Короткий ответ SPO — практика сокращения числа посредников между DSP и издателем до минимально необходимого и выбора наиболее прямых и прозрачных путей закупки одного и того же инвентаря, чтобы снизить потери маржи посредников, уменьшить риск мошенничества и повысить реальную эффективность на бюджет. Как это работает подробнее один и тот же показ у издателя часто доступен для покупки через несколько разных SSP и реселлерских цепочек одновременно, и каждый дополнительный посредник забирает свою комиссию, снижая долю бюджета, которая реально доходит до показа; SPO-анализ сравнивает пути закупки по прозрачности (ads.txt/sellers.json), доле выигранных аукционов и итоговой эффективности, чтобы выбрать оптимальный маршрут. Что использовать на практике На практике. инструменты верификации используются для проверки, что закупка идёт через авторизованного продавца, а не через цепочку неавторизованных реселлеров, что снижает риск домейн-спуфинга и фрод-трафика; SPO даёт экономию бюджета, но требует регулярного анализа
ad-exchangesbidstream
MiddlePython Developer > Основы Python > Надёжность сервисов
Короткий ответ Timeout budget — распределение общего допустимого времени ответа между последовательными вызовами в цепочке так, чтобы таймаут каждого следующего вызова был меньше оставшегося бюджета вызывающей стороны, а не просто одинаковым фиксированным значением на каждом уровне. Как это работает подробнее Если у A таймаут на весь запрос 5 секунд, а внутри A вызывает B с таймаутом 5 секунд, а B внутри вызывает C с таймаутом 5 секунд, то в худшем случае A может ждать существенно дольше 5 секунд суммарно — таймауты должны уменьшаться по цепочке. Пример кода Что использовать на практике Практика. Общий SLA делят так, чтобы каждый следующий вызов получал заведомо меньший таймаут с запасом на собственную обработку, и передают оставшийся бюджет явно (например, через заголовок deadline) там, где это поддерживается. Подводные камни Риск. Задавать один и тот же таймаут на каждом уровне цепочки независимо от бюджета вызывающей стороны; не передавать информацию об оставшемся времени вглубь цепочки.
fault-tolerancereliability