Обновить
128K+

Java *

Объектно-ориентированный язык программирования

234,11
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Tokenmaxxing: Новый тренд в бигтехах в 2026 году

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели7.1K

Пока вы работаете, ваш коллега уже сжёг 210 миллиардов токенов за неделю. Это 33 Википедии. Он не написал ни строчки в продакшн — но возглавил корпоративный лидерборд и получил звание «Token Legend».

Токенмаксинг (tokenmaxxing) — это практика, при которой сотрудники компаний соревнуются за максимальное потребление токенов, превращая сам факт использования ИИ-инструментов в показатель производительности.

Рассмотрим откуда пошел термин, почему люди соревнуются и причем тут Performance Review в FAANG.

Читать дальше

Как проектировать бизнес‑логику в микросервисах: 3 правила агрегатов, которые работают

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели7K

Когда бизнес-логика становится сложной, микросервисы из удобного инструмента превращаются в источник боли. Классические «сценарии транзакций» приводят к монструозным классам и распределённым транзакциям, которые невозможно поддерживать.

В этой статье разберу, как DDD и агрегаты помогают проектировать бизнес-логику так, чтобы она не разваливалась под нагрузкой. Покажу на реальном примере HR-сервиса:

▫️ почему объектные ссылки между сервисами — зло;
▫️ как одно правило «транзакция = один агрегат» меняет архитектуру.

Читать далее

Hibernate merge: начали за здравие, закончили за упокой

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели7.1K

Я уже давно хотел на этот счет написать статью. Она короткая, но имхо она нужна.

Давайте с места в карьер: merge в Hibernate это не универсальный save, и чаще всего он Вам не нужен.

На самом деле, если абстрагироваться, то это специализированная операция для случая, когда у вас есть detached-сущность, и вы хотите перенести ее состояние в текущий Persistence Context.

Проблема в том, что на практике merge очень часто используют для апдейта любой сущности (Spring Data JPA иногда так делает) и как следствие получают лишние SQL-запросы.

Ниже разберем на мой взгляд главное - почему именно так происходит, где merge действительно нужен, а где он превращается в антипаттерн (P.S да почти везде).

Читать далее

Kotlin для новичков: всё об условиях и циклах за 15 минут

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели7.7K

Продолжаем серию «Kotlin для новичков»! Сегодня разбираем самое сердце любого кода — управляющие конструкции: if, when, for, while.Вы узнаете, почему if в Kotlin — это не просто оператор, а выражение, как when заменяет целые лесенки else-if, и чем for по диапазонам лучше классического цикла. Реальные примеры и лучшие практики и история о том, как мы отрефакторили 300 строк спагетти-кода в 80 строк с помощью when и диапазонов. Читайте, чтобы писать чистый и понятный код на Kotlin.

Читать далее

Децентрализованная оркестрация на RabbitMQ вместо Apache Camel

Время на прочтение7 мин
Охват и читатели7K

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

Читать далее

Выпущена версия Jmix 2.8

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели5.7K

Мы рады сообщить о выпуске Jmix 2.8! В этом релизе мы продолжаем улучшать фреймворк и Studio, делая Jmix еще более надежной основой для корпоративной разработки. Jmix 2.8 также является LTS-релизом и будет получать бесплатную поддержку в течение трех лет.

Ниже приведен краткий обзор основных новых возможностей Jmix 2.8. Полный список изменений можно найти в разделе документации Что нового.

Читать далее

Hibernate Reactive: опыт миграции, архитектурные компромиссы и скрытая сложность

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели6K

Наш проект на Quarkus столкнулся с необходимостью более эффективного использования ресурсов под высокой нагрузкой. В поисках решения мы решили попробовать миграцию с классического Hibernate ORM на Hibernate Reactive (HR). В этой статье я поделюсь реальным опытом этого перехода: разберу ключевые архитектурные различия, расскажу о неочевидных «граблях», на которые мы наступили, и покажу на production-коде, какую цену пришлось заплатить за реактивность.

Версии используемого ПО: Quarkus: 3.31.3, Quarkus Hibernate Reactive: 3.31.3 и Vertx-pg-client (реактивный клиент PostgreSQL): 4.5.24.

Все описанные ниже вопросы и особенности актуальны именно для этих версий.

Читать далее

CUBA: почему она спасала мои хакатоны и убивала мои продакшн-проекты

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели5.9K

Если вы хоть раз занимались корпоративной разработкой на Java, вы наверняка слышали про CUBA Platform. И нет — это не про Карибы.

CUBA — это full-stack Java-фреймворк для быстрой разработки бизнес-приложений: CRM, документооборот, ERP-подобные системы, внутренние инструменты и всё то, что принято называть словом «enterprise».

Я работал с ним на нескольких хакатонах и в паре реальных проектов. И у меня к нему сложные чувства — поэтому и пишу.

Читать далее

Агрегаты в микросервисах: гайд по проектированию бизнес-логики с примерами на Java

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6.6K

Разрабатываете микросервисы и чувствуете, что бизнес-логика превращается в хаос?

В статье на примере простого UserService разберем, как три правила агрегатов DDD и асинхронные доменные события помогают навести порядок.

Обсудим, почему нельзя хранить объектные ссылки между сервисами, как спроектировать агрегат на Spring Boot

Читать далее

Конференция Яндекс-разработчиков по JVM-языкам, бекендеры собрались обсудить будущее Java-подобных языков

Время на прочтение3 мин
Охват и читатели9.9K

28 марта состоялась, с одной стороны, довольно камерная встреча небольшого круга специалистов: Backend‑разработчиков Java. Разумеется, на встрече были и фронтэнд‑специалисты, и фулстек‑программисты, но когда залу задавали вопросы, кто есть кто — максимальное и максимально доминирующее количество рук было именно от специалистов бекенда.

Как это было. Я пришел на час позже, не в 12 обеда, но в час дня. Сразу попал в зал на лекцию, где рассказывались не суперсложные вопросы, но затрагивались вопросы времени в Java, рассинхронизации серверов, специфики подсчета времени в таком старом языке, как Java, с учетом максимальной экономии памяти и того, что было до UTC: функции вне библиотеки time для подсчета минут и секунд при анализе времени постов, создания того или иного контента, проведения операций в целом.

Читать далее

PostgreSQL. ltree. JPA. Использование в микросервисах

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели8.7K

В жизни разработчика периодически возникает задача каким-либо образом сохранить что-то древообразное. Это может быть оргструктура компании,   каталог товаров, генеалогическое дерево и т.п.

Читать далее

Почему ИИ‑агенты лезут в терминал и ломают прод, и как Veai заставляет их работать по‑человечески в IDE

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели7.2K

Все современные языковые модели иногда ведут себя так, будто у них есть эмоции: они «рады помочь», «извиняются» за ошибки и словно «нервничают», когда задача не даётся. Новое исследование Anthropic показывает, что это не просто стиль ответа — внутри моделей действительно возникают функциональные представления эмоций, которые влияют на поведение: например, «отчаяние» повышает шанс выбрать неэтичный или «костыльный» путь решения задачи. То, как обучаются модели, подталкивает их играть роль персонажа с человеческими чертами и формировать богатые внутренние представления абстрактных концептов, включая эмоциональные.

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

Возьмём Veai и посмотрим на это через призму архитектуры. В основе Veai лежит идея максимально использовать инструменты IDE: Veai относится к Claude Code примерно так же, как разработчик с IDE относится к разработчику, сидящему только в терминале.

Читать далее

33 несчастья или история одного проекта

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели7.8K

Эту печальную историю стоит прочесть всем, кто еще не понял разницы между «создать» и «владеть» применительно к программному обеспечению.

Заодно узнаете, чем на самом деле занимаются большинство разработчиков на крупных проектах.

Читать далее

Ближайшие события

Java Digest # 34

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели7.5K

В этом выпуске мы узнаем, как Java 26 меняет правила игры с десятком новых JEP - от долгожданного шестого превью Structured Concurrency до похорон апплетов и поддержки HTTP/3. Увидим, как IntelliJ IDEA становится умнее с ИИ-агентами, Spring Debugger с отображением бинов и поддержкой Git worktrees. Обсудим Spring AOT, версионирование API в Spring Boot 4.0. Плюс, как всегда, свежие релизы Spring, Gradle, Micronaut, LangChain4j и бенчмарки Quarkus против Spring. Будет интересно!

Читать далее

# 10 ошибок Configuration Management

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6.9K

695 строк конфига, одна валидация, 10 GB upload limit по умолчанию и env-переменная, которая никогда не срабатывает. Десять ошибок управления конфигурацией, собранных из реальных проектов.

Читать далее

Раздувание памяти JDK 17 в контейнерах: разбор инцидента

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели13K

В новом переводе от команды Spring АйО разберем тему раздувания памяти в JDK 17. Апгрейд микросервисов с JDK 8 на JDK 17 прошел dev и QA спокойно, но в проде через 2-3 часа все начало падать. Утилизация памяти выросла в 4 раза, контейнеры стали ловить OOMKill и перезапускаться, Uptime SLA просел, массовый инцидент.

Раньше JVM использовала около 50% памяти контейнера и обслуживала ~400 потоков. После релиза стало 95-100% и 1600+ соответственно. 

При этом heap выглядел нормально, около Xmx, а раздувалась нативная память: ~800 MB -> 3,4-3,6 GB. Виноваты несколько эффектов, которые в контейнерах усиливаются: JVM начала создавать намного больше потоков, OS стала выделять JVM гораздо больше, а дефолтный GC в JDK 17 добавил накладные расходы.

Всё это из-за простого бага в JDK, который при миграции утащил за собой весь production.

Читать далее

Создал с нуля библиотеку для JasperReports, которая делает работу с ним легкой

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели5.6K

Работать с JasperReports тяжело — данные передаются хрупкими механизмами, бизнес-логика утекает в XML, а субрепорты требуют ручной синхронизации между Java и JRXML. jasper-modular-library решает это: отчёт описывается деревом POJO с аннотациями, процессор генерирует JRXML при компиляции, а рантайм собирает всё автоматически. В статье — типичные подходы к передаче данных и их проблемы, и как библиотека их устраняет.

Читать далее

Agentis Memory — Redis-совместимое хранилище со встроенным векторным поиском и локальными эмбеддингами

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели5.8K


В наше время уже никого не удивишь разработкой агентов, очередной оптимизацией, новой моделью или новой инфраструктурой для нейронок. Всё это в порядке вещей. Однако одно дело читать в Twitter «мы написали агента X и он оптимизировал нам процессы на 300000%», и совсем другое — начать копать чуть глубже. Копнёшь — а «агентом» называют скилл с одним промптом.

Разработка настоящих агентов — задача не тривиальная. Достаточно посмотреть на утёкшие исходники Claude CLI — это не просто CLI, а целая инфраструктура бизнес-логики вокруг LLM. Я бы сравнил разработку агентов с разработкой типичных бэкенд-компонентов. Аналогия такая: если вы пишете каноничный бэкенд-сервис — вам нужна СУБД. Если Web3-сервис — блокчейн. Но на СУБД или блокчейне происходит в лучшем случае 50% всей логики. Вся магия крутится именно на бэкенде. С агентами то же самое: подключаешь AI SDK, конфигурируешь мыслительное ядро и пишешь вокруг него всю обвязку — мониторинги, AIOps, оркестрацию, memory management.

Вот про memory management и пойдёт речь.

Читать далее

Десктопный агент «Союз»: безопасный и бесплатный, теперь Open Source

Время на прочтение31 мин
Охват и читатели14K

Когда смотришь на рынок AI-агентов, создаётся впечатление, что все соревнуются в одном и том же: кто даст модели больше инструментов, больше доступа и больше свободы. Мы попробовали зайти с другой стороны. Что будет, если не наваливать возможностей без разбора, а думать в первую очередь о безопасности и предсказуемости? Так и появился «Союз».

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

Обзор и ссылки на исходники в конце статьи.

Читать далее

Оптимизация запросов в Spring Data JDBC

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели8.8K

Я думаю многие согласятся, что Spring Data JDBC — это ORM, который занимает конкретную нишу: он предоставляет более легковесный репозиторный слой доступа к данным поверх реляционной БД без persistence context, без lazy loading, без dirty checking и т.д.

Иными словами, Spring Data JDBC реализует принцип "what you see is what you get" — каждое обращение к репозиторию означает конкретный SQL-запрос в БД, который просто достаёт дерево Aggregate. Это и преимущество, и, тем не менее, иногда это источник потенциальных проблем с производительностью.

В этой статье я разберу ключевые подходы к оптимизации запросов в Spring Data JDBC: от дизайна агрегатов и Single Query Loading, до Stream в качестве возвращаемого значения и @Modifying запросов. Разберём всё с кодом и на примерах.

Только один момент - в этой статье я не затрагиваю Spring Data открытые/закрытые Projection-ы и т.п, так как я предполагаю, что пользователи Spring Data знают, что это и в каких ситуациях их стоит использовать. Эти вещи не специфичны для Spring Data JDBC, я же буду говорить про вещи более специфичные для Spring Data JDBC.

Читать далее