Не попадитесь на накрученные каналы! Узнайте, не накручивает ли канал просмотры или подписчиков Проверить канал на накрутку
Прикрепить Телеграм-аккаунт Прикрепить Телеграм-аккаунт

Телеграм канал «Чашечка Java»

Чашечка Java
7.5K
862
704
6
9.3K
Лучшие материалы по Java на русском и английском

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels
Подписчики
Всего
8 371
Сегодня
-1
Просмотров на пост
Всего
662
ER
Общий
7.91%
Суточный
6.18%
Динамика публикаций
Telemetr - сервис глубокой аналитики
телеграм-каналов
Получите подробную информацию о каждом канале
Отберите самые эффективные каналы для
рекламных размещений, по приросту подписчиков,
ER, количеству просмотров на пост и другим метрикам
Анализируйте рекламные посты
и креативы
Узнайте какие посты лучше сработали,
а какие хуже, даже если их давно удалили
Оценивайте эффективность тематики и контента
Узнайте, какую тематику лучше не рекламировать
на канале, а какая зайдет на ура
Попробовать бесплатно
Показано 7 из 7 507 постов
Смотреть все посты
Пост от 30.09.2026 13:15
228
0
3
Как StructuredTaskScope в JDK 27 отменяет лишнюю работу при сбое

Два независимых вызова к сервисам последовательно занимают около двух секунд. Виртуальные потоки с Future сокращают успешный запуск примерно до секунды, но при сбое одного вызова через 200 мс второй продолжает работу. Закрытие ExecutorService ждёт его завершения, хотя результат уже не нужен.

StructuredTaskScope объединяет подзадачи: ошибка одной прерывает соседнюю, а join() сообщает о сбое всей группы. В примере метод возвращается примерно через 200 мс вместо полной секунды.

Сравнение трёх реализаций учитывает седьмую предварительную версию API в JDK 27 и проверяемое исключение ExecutionException. Для запуска нужен --enable-preview. Ограничение сохраняется: задача должна реагировать на прерывание, а закрытие области ждёт завершения всех подзадач.
Пост от 30.09.2026 08:07
407
0
12
Как подтвердить взаимную блокировку по дампу потоков Java

Если JVM перестала выполнять работу, снимите несколько дампов с интервалом в несколько секунд: jcmd <pid> Thread.print -l или jstack -l <pid>.

Найдите потоки в состоянии BLOCKED. Сопоставьте монитор после waiting to lock с потоком, который держит его после locked. Если цепочка вернулась к первому потоку, взаимная блокировка подтверждена.

WAITING и TIMED_WAITING сами по себе нормальны. Практический разбор дампов показывает, как сверить стеки с метриками. Исправлять нужно порядок захвата блокировок: увеличение пула цикл не разорвёт.
Пост от 29.09.2026 18:18
544
0
13
Spring Boot 4: настраиваем экспорт логов, метрик и трассировок через OpenTelemetry

В Spring Boot 4 появился собственный OpenTelemetry starter. Spring рекомендует его вместо Java-агента и стороннего starter с альфа-зависимостями.

Для логов нужны Logback appender, logback-spring.xml и вызов install(). В 4.0.0 экспорт без Actuator не работал, обе ошибки исправили в 4.0.1.

Метрики потребуют Micrometer и дополнительных bean-компонентов, для трассировок достаточно адреса экспорта. Полная схема настройки включает Docker Compose с Grafana LGTM. Проверьте адрес логов: нужен /v1/logs, не /v1/traces.
Пост от 29.09.2026 13:10
218
0
4
DAGP 3.5.0 проверяет бинарную совместимость дубликатов классов в Gradle

Если два JAR содержат класс с одинаковым полным именем, JVM загрузит первый найденный в пути классов. Поэтому порядок зависимостей может решить, какая реализация попадёт в работу. На этом же поведении строятся атаки Maven-Hijack.

Dependency Analysis Gradle Plugin запускает проверку через buildHealth. При обнаружении дубликатов DAGP 3.5.0 сравнивает поля и методы классов, включая типы, параметры и модификаторы. Несовместимые сигнатуры помогают найти конфликт версий, ошибочную перепаковку библиотеки или подозрительную подмену класса.

Разбор проверки Gradle-сборки предлагает предупреждать о дубликатах либо останавливать сборку. Ограничение остаётся: вредоносная реализация с прежними сигнатурами пройдёт такую проверку, поэтому DAGP служит ранним сигналом, а не полной защитой.
Пост от 29.09.2026 08:03
396
0
5
Как защитить REST API в Spring Boot от несовместимых изменений

В Spring Boot обновление Jackson, смена конфигурации или новая функция могут незаметно нарушить договорённости с клиентами REST API. Контрактные тесты фиксируют ожидаемые запросы и ответы, чтобы поймать расхождение до развёртывания.

Для проверки со стороны провайдера OpenAPI-Diff сравнивает текущую спецификацию со снимком. Метод isCompatible(), в отличие от строгого isUnchanged(), не отклоняет совместимое добавление новых эндпоинтов.

Spring Cloud Contract хранит контракты в YAML, а Maven-плагин генерирует проверочные тесты и WireMock-заглушки для клиентов. Если команда контролирует потребителей API, можно передать им ведение контракта через Pact. Практический разбор трёх подходов помогает выбрать схему и настроить проверки совместимости.
👌 1
Пост от 28.09.2026 18:16
494
0
3
JDK 26: когда автовекторизации JIT мало и нужен Vector API

JIT превращает циклы Java в SIMD-инструкции, обрабатывающие несколько чисел за раз. На JDK 26.0.2.1 и Apple M4 Max суммирование миллиона элементов ускорилось примерно вдвое. Вклад оптимизации можно проверить JMH-прогоном с -XX:-UseSuperWord.

Vector API с одним аккумулятором дал те же 113 мкс на операцию, а четыре независимых сократили время до 35 мкс: процессору не пришлось ждать предыдущее сложение.

Сравнение JMH-бенчмарков показывает цену ускорения: Vector API остаётся инкубационным, код усложняется, а выигрыш зависит от CPU. Бенчмарк стоит прогнать на production-сервере.
Пост от 28.09.2026 13:08
270
0
3
JDK 25: как передавать контекст запроса через ScopedValue

В JDK 25 ScopedValue стал постоянным API для идентификаторов запросов, данных пользователя и трассировки. Значение привязывается через where(...).run(...), читается через get() во всей цепочке вызовов и автоматически исчезает после выхода из блока. Это убирает сквозные параметры и ручной ThreadLocal.remove().

Во вложенной области значение можно временно перепривязать. После её завершения внешняя привязка восстановится, поэтому время жизни контекста видно прямо в коде.

Практический пример с RequestContext показывает проверку через isBound() до и после блока. Для миграции ScopedValue подходит читаемому контексту с ограниченным временем жизни. ThreadLocal остаётся для изменяемого состояния потока, прежних версий Java и совместимости с существующими API.
Смотреть все посты