Чашечка Java – Telegram
Чашечка Java
8.85K subscribers
3.86K photos
12 videos
56 files
6.32K links
Лучшие материалы по Java на русском и английском

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

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

Другие каналы: @tproger_channels
Download Telegram
Под капотом многопоточной синхронизации в Java: как потоки договариваются через Mark Word

Когда вы пишете synchronized(obj), под капотом происходит целая цепочка событий, которую можно отследить до Mark Word — восьмибайтового служебного поля в каждом Java-объекте. В современных реализациях JVM (таких как HotSpot, OpenJ9, GraalVM) используется динамическая, адаптивная система, которая выбирает наиболее эффективную стратегию блокировки в зависимости от реального поведения потоков.


Читать: https://habr.com/ru/articles/982600/?utm_campaign=982600

@a_cup_of_java | Другие наши каналы
1
Инженерия создания микросервиса spring-web-flux

Создать Spring-сервис просто: существует масса статей и отличная документация. Однако среди всего этого многообразия материалов зачастую сложно разобраться, какой именно набор технологий лучше выбрать и каким образом эти технологии должным образом интегрировать друг с другом. После перехода на новые версии библиотек многое начинает функционировать иначе, появляются совершенно другие подходы. В данной статье я хочу продемонстрировать один из возможных способов разработки микросервиса в 2026 году, а также рассмотреть несколько инструментов автоматической генерации кода: OpenApiGenerator, JooqCodegen, GigaChat, Liquibase — и объяснить, как они работают вместе в рамках единого проекта.

Точкой отсчета для построения микросервиса сделаем описание REST API. Допустим, в нашем фантастическом мире аналитик заранее подготовил спецификацию API с помощью формата OpenAPI, хотя подобное встречается и в реальной практике.


Читать: https://habr.com/ru/articles/982774/?utm_campaign=982774

@a_cup_of_java | Другие наши каналы
Java-дайджест: Spring Shell 4.0 и обновления инструментов
По материалам InfoQ: Spring Shell 4.0 GA, JReleaser 1.22.0 с улучшенной поддержкой подписывания, TornadoInsight теперь совместим с TornadoVM 2.0, Apache Camel 4.14.3 и свежие ранние сборки JDK.

Подробности: https://www.infoq.com/news/2026/01/java-news-roundup-dec29-2025/

#en

@a_cup_of_java | Другие наши каналы
JEP 525: таймауты и улучшенные Joiner в структурной конкуренции Java

В статье InfoQ: в preview 6 JEP 525 ввёл onTimeout для Joiner, scope.join() может вернуть частичные результаты как List<t, а также мелкие API‑уточнения. Это облегчает обработку таймаутов и частичных результатов.

Подробности: https://www.infoq.com/news/2026/01/timeout-joiner-refinements/

#en @a_cup_of_java | Другие наши каналы
Java Digest — Новогодний спецвыпуск

Всем привет! 👋👋👋👋👋 Мы Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.


Читать: https://habr.com/ru/companies/tbank/articles/983164/?utm_campaign=983164

@a_cup_of_java | Другие наши каналы
👍2
Ограничь меня полностью! Или история одной ма-а-а-аленькой фичи

Бывало ли у вас так что задача на час максимум в результате занимает целый рабочий день или даже больше?

Почему так происходит? Нужно ли тестировать сторонние библиотеки? Есть ли польза от типичных задач для собеседований? Когда "костыль" вполне рабочее решение?

Частные ответы на все эти, казалось бы не связанные, вопросы попытаемся найти в непридуманной истории фичи, которая изначально казалась на 5 минут, а вышло...


Читать: https://habr.com/ru/articles/983196/?utm_campaign=983196

@a_cup_of_java | Другие наши каналы
Field vs Constructor Injection в Java: ошибка объектного дизайна или вопрос синтаксиса?

Знаю, знаю... Прочитав заголовок, хочется голосом волка из мультфильма "Жил был пёс" сказать - "Шо, опять?" . Ведь битва этих подходов давно закончилась и разработчики Spring уже поставили точку.

Но недавняя публикация в одном довольно крупном Telegram-канале заставила меня вернуться к этому вопросу. В качестве главных аргументов против field injection там приводились лишь сложность изоляции в тестах и неудобство создания экземпляров для unit-тестов.

И хотя с этими пунктами не поспоришь, у многих разработчиков и не только начинающих, остаются вопросы: каковы реальные последствия для самого объекта? Можно ли считать его полноценным сразу после создания new? И почему все современные рекомендации так настаивают на конструкторах?

Поиск ответов показал мне, что аргумент о тестах лишь верхушка айсберга. В глубине, куда я Вас сегодня приглашаю заглянуть, скрываются куда более фундаментальные вопросы принципов объектно-ориентированного дизайна, гарантий Java Memory Model и уважения к жизненному циклу объекта.


Читать: https://habr.com/ru/articles/983340/?utm_campaign=983340

@a_cup_of_java | Другие наши каналы
1
Field vs Constructor Injection в Java: ошибка объектного дизайна или вопрос синтаксиса?

Знаю, знаю... Прочитав заголовок, хочется голосом волка из мультфильма "Жил был пёс" сказать - "Шо, опять?" . Ведь битва этих подходов давно закончилась и разработчики Spring уже поставили точку.

Но недавняя публикация в одном довольно крупном Telegram-канале заставила меня вернуться к этому вопросу. В качестве главных аргументов против field injection там приводились лишь сложность изоляции в тестах и неудобство создания экземпляров для unit-тестов.

И хотя с этими пунктами не поспоришь, у многих разработчиков и не только начинающих, остаются вопросы: каковы реальные последствия для самого объекта? Можно ли считать его полноценным сразу после создания new? И почему все современные рекомендации так настаивают на конструкторах?

Поиск ответов показал мне, что аргумент о тестах лишь верхушка айсберга. В глубине, куда я Вас сегодня приглашаю заглянуть, скрываются куда более фундаментальные вопросы принципов объектно-ориентированного дизайна, гарантий Java Memory Model и уважения к жизненному циклу объекта.


Читать: https://habr.com/ru/articles/983344/?utm_campaign=983344

@a_cup_of_java | Другие наши каналы
Корпоративный RAG как MCP-сервис: подключаем кодовую базу к IDE

В компаниях с несколькими продуктами знания о коде и архитектуре почти неизбежно расползаются. Часть живёт в репозиториях, часть — в статьях с архитектурными решениями, часть — в корпоративной базе знаний (в нашем случае — Confluence). На небольшом масштабе это выглядит как порядок. Но по мере роста начинают проявляться системные эффекты.

Появляется дублирование функционала с разными подходами. Сложнее становится погружаться в новый продукт при кросс-командных переходах. Поиск по каждому репозиторию и каждому пространству документации по отдельности — медленный и утомительный. В итоге вопросы уходят к «знающим людям», которые постепенно превращаются в узкое горлышко.

Мы столкнулись с этим в явном виде и сформулировали задачу так: дать разработчикам и системным аналитикам быстрый и актуальный поиск по всей кодовой базе компании с возможностью диалога через универсального агента.

В этой статье я расскажу, как мы построили локальный RAG-сервис, оформили его как MCP-сервер и подключили к IDE. Подход будет полезен командам с большим количеством репозиториев, внутренней документацией и требованиями к безопасности.


Читать: https://habr.com/ru/articles/983424/?utm_campaign=983424

@a_cup_of_java | Другие наши каналы
InfoQ Trends Reports 2025 — что важно разработчикам

InfoQ собрал серию отчетов по архитектуре, культуре, AI/ML, облакам и Java. Главные идеи: эволюция технологий, AI как соавтор в доставке ПО, роль человеческого суждения, рост платформенной инженерии и практические тренды на 1–5 лет.

Подробности: https://www.infoq.com/minibooks/2025-infoq-trends-reports-emag/

#en

@a_cup_of_java | Другие наши каналы
DeepSeek в Intellij Idea через плагин Continue

Может кому пригодится, на просторах интернета не нашел, как запустить модель deepseek в idea, потому сам вместе с deepseek допиливал конфиг и обучал модель работе через инструменты плагина. Ну и попутно решил проблему с зависаниями, плагин очень любил зависнуть, приходилось ide перезапускать.

Сразу оговорюсь, решение не элегантно, я не убирал лишний код, строки и текст, я просто добился рабочего состояния и более ничего не тестировал и не трогал. Годами работы приучен "работает - не трож". Потому решение as is выкладываю. Можете сами эксперименты проводить и допиливать, мне был просто нужен рабочий инструмент, на тюнинг не осталось желания, накрыла лень и я продолжил заниматься изначальным своим проектом =)


Читать: https://habr.com/ru/articles/983430/?utm_campaign=983430

@a_cup_of_java | Другие наши каналы
Как я поучаствовал в разработке Camunda 8 или пример типичной ошибки в многопоточном коде

Зимой 2024 года мне довелось поучаствовать в разработке проекта на Camunda 8. Сразу оговорюсь: проект в итоге реализовали на другом движке. Тем не менее, команда успела сделать стенд, прогнать тесты и замерить производительность.

В этой статье я расскажу об одном эпизоде, когда мне пришлось исправить библиотеку spring-zeebe из Camunda 8, отвечающую за обвязку Job Worker на Spring.

Одной из моих задач было отладить процесс, используя локальные интеграционные тесты с Docker и библиотекой Testcontainers. Мы создали простой процесс, вызывающий наш Job Worker, подлежавший отладке. Сразу столкнулись с плавающей ошибкой: иногда тест проходил успешно, иногда — нет. Несколько тасков работали корректно, однако первый периодически игнорировался без видимых ошибок. Изначально подозревали проблему в собственном коде, проверяли конфигурацию Job Worker, благодаря чему узнали много нового о Camunda 8.


Читать: https://habr.com/ru/articles/983902/?utm_campaign=983902

@a_cup_of_java | Другие наши каналы
LLM + 1C: Почему чат-бот для учета — это плохая идея, и как реализовать AI-шлюз через OData

LLM + 1C = ? Почему чат-бот для учета — это плохая идея, и как я сделал из него «умный шлюз».

Изначально идея казалась кристально чистой: пользователь отправляет текстовый или голосовой запрос (например: «Выведи топ должников по Тверской области на текущую дату и суммы задолженности»).


Читать: https://habr.com/ru/articles/984008/?utm_campaign=984008

@a_cup_of_java | Другие наши каналы
Как жёсткие правила сборки релизов упростили жизнь инженерам финтеха

Перевели инфраструктуру Java-разработки высоконагруженного финтеха с SLA 99,99% на доверенный репозиторий компонентов. Это отечественные продукт из экосистемы Axiom JDK. Делимся инженерными деталями этого перехода.


Читать: https://habr.com/ru/companies/axiomjdk/articles/983938/?utm_campaign=983938

@a_cup_of_java | Другие наши каналы
Доступ к ChatGPT за 5 минут без VPN

Примерно год назад я написал статью ChatGPT без VPN за 10 минут (и установка нативного приложения). Хотя она актуальна до сих пор, сегодня я хочу вам рассказать про еще один способ.

Суть: мы делаем свой DNS-профиль в NextDNS или Cloudflare и автоматически актуализируем его раз в сутки.

Для этого я написал небольшую программу. Самое приятное: для ее работы вам не придется ничего устанавливать вообще.


Читать: https://habr.com/ru/articles/984224/?utm_campaign=984224

@a_cup_of_java | Другие наши каналы
Java-дайджест: январь 2026

По данным InfoQ: вышли обновления — maintenance/point-релизы для Spring gRPC, Quarkus, Gatherers4j, Keycloak, Grails и Java Operator SDK; также доступны сборки JDK 26 и 27 с исправлениями и улучшениями.

Подробности: https://www.infoq.com/news/2026/01/java-news-roundup-jan05-2026/

#en

@a_cup_of_java | Другие наши каналы
1
Параллельные стримы и CompletableFuture: ошибки и решения

Кратко о ловушках параллелизации в Java (вложенные parallel, flatMap, потеря контекста в ForkJoinPool, OOM с CompletableFuture) и практических решениях: точечная параллелизация, разделение executors, семафоры, thenApply vs thenApplyAsync. Кейс Hugo Marques (JDK24).

Подробности: https://www.infoq.com/presentations/java-grpc-workload/

#en

@a_cup_of_java | Другие наши каналы
Как затащить AI в Java/Kotlin проект

Мир Enterprise-разработки на Java/Kotlin и мир нейронных сетей кажутся параллельными вселенными. С одной стороны - статическая типизация, многопоточность, Spring-контейнеры, а с другой - Python-скрипты, тензорные операции и эксперименты в Jupyter Notebook. Между ними - пропасть, через которую многие команды не решаются перешагнуть.

Однако необходимость строить этот мост возникает всё чаще. Заказчик хочет «искусственный интеллект» в новом фиче, аналитики мечтают о реализации чат-бота  с преферансом и барышнями, а менеджеры слышали, что конкуренты уже всё автоматизировали. Как же совместить надежность и структуру JVM-проекта с гибкостью и мощью AI? В этой статье постараемся разобраться какие инструменты для этого есть на данный момент и как с ними работать.


Читать: https://habr.com/ru/articles/984544/?utm_campaign=984544

@a_cup_of_java | Другие наши каналы
1
От Redis к Kafka Streams: как мы проверяем сетевую доступность 200к устройств

В инфраструктуре банка мы ежедневно работаем с ~200 000 физических устройств: это IP-камеры, сетевые видеорегистраторы и другая периферия. Каждое из них должно быть проверено на доступность — не реже чем раз в 10 минут.

Требования к системе:

- не создавать бессмысленную нагрузку на инфраструктуру;

- решение должно быть горизонтально масштабируемым;

- система должна выдерживать падение pod, rebalance, сетевые сбои.


Читать: https://habr.com/ru/companies/sberbank/articles/974926/?utm_campaign=974926

@a_cup_of_java | Другие наши каналы
Миграция проекта с Node.js на Java-стек с помощью ИИ

Один из наших проектов нужно было перенести на Kotlin, чтобы включить его в общую экосистему клиента и упростить поддержку. Мы должны были курировать процесс и следить за итоговой реализацией, в которой заказчик решил использовать ИИ.

В этой статье рассказываем о реальных возможностях нейронки для миграции бэкенда и про то, с чем лучше к ней не обращаться — чтобы не тратить ни время, ни нервы.


Читать: https://habr.com/ru/companies/dalee_group/articles/984702/?utm_campaign=984702

@a_cup_of_java | Другие наши каналы
😐1
Kafka для начинающих: работа с Kafka транзакциями на практике — когда они нужны, а когда когда только вредят?

Как работать с Kafka транзакциями из Spring Boot? Когда они нужны, а когда бесполезны или даже вредны?

Простым языком и с примерами кода о Kafka транзакциях.


Читать: https://habr.com/ru/articles/981188/?utm_campaign=981188

@a_cup_of_java | Другие наши каналы