<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Все статьи подряд / Java / Хабр]]></title>
    <link>https://habr.com/ru/hubs/java/articles/</link>
    <description><![CDATA[Java – объектно-ориентированный язык программирования]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Wed, 21 Oct 2026 20:25:02 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    
    <item>
      <title><![CDATA[Шлюз увидел «user», сервис увидел «admin», а JSON был один и тот же]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/otus/articles/1092516/</guid>
      <link>https://habr.com/ru/companies/otus/articles/1092516/?utm_campaign=1092516&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/2a/1e/ed/2a1eed7a1db06db208c58c4c2567f717.png" /><p>Шлюз проверил JSON и пропустил запрос, а сервис за ним выдал пользователю права администратора. Оба компонента отработали корректно, но по-разному интерпретировали одни и те же данные. Разбираемся, почему JSON-парсеры расходятся в обработке ключей и чисел, к каким ошибкам это приводит и как защитить от них API.</p> <a href="https://habr.com/ru/articles/1092516/?utm_campaign=1092516&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Разобрать уязвимости</a>]]></description>
      
      <pubDate>Wed, 21 Oct 2026 06:15:59 GMT</pubDate>
      <dc:creator><![CDATA[badcasedaily1 (OTUS)]]></dc:creator>
      
      <category><![CDATA[JSON]]></category><category><![CDATA[JSON-парсеры]]></category><category><![CDATA[безопасность API]]></category><category><![CDATA[десериализация]]></category><category><![CDATA[обработка JSON]]></category><category><![CDATA[уязвимости]]></category><category><![CDATA[контроль доступа]]></category><category><![CDATA[валидация данных]]></category><category><![CDATA[дублирующиеся ключи]]></category><category><![CDATA[микросервисы]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как мы заставили Redis кэшировать POST‑запросы к OpenAI/DeepSeek и выжали 4 900 RPS на Java 21]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1096954/</guid>
      <link>https://habr.com/ru/articles/1096954/?utm_campaign=1096954&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>В 2026 году интеграция LLM-моделей (OpenAI, DeepSeek) и тяжелой гео-инфраструктуры (Google Maps, <a href="https://yandex.ru/maps/" rel="noopener nofollow">Яндекс.Карты</a>, DaData) есть практически в каждом Enterprise-продукте. И всё бы хорошо, но счета за токены и лимиты API растут нелинейно. Когда наш проект столкнулся с тем, что корпоративный чат-бот и аналитические модули начали «проедать» шестизначные суммы в месяц, мы сели анализировать логи.</p><p>Выяснилась классическая вещь: до 40% запросов от пользователей или внутренних сервисов — это чистой воды дубли. Люди по десять раз переспрашивают у модели схожие аналитические промты, а фронтенд-модули тоннами гоняют идентичные запросы к гео-кодерам. Первая мысль — давайте закроемся кэшем. Но тут мы упёрлись в архитектурный тупик.</p><p>Почему Nginx и классические прокси здесь не помощники</p><p>Обычно для кэширования трафика берут Nginx, Varnish или HAProxy. Но все они создавались для классического веба, где правит бал <code>GET</code>-запрос, а уникальным ключом кэширования выступает URL.</p><p>Современные ИИ-модели и гео-сервисы работают строго через <code>POST</code>. Внутри тела (<code>payload</code>) лежит тяжелый JSON. И этот JSON постоянно мутирует:</p> <a href="https://habr.com/ru/articles/1096954/?utm_campaign=1096954&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 20 Oct 2026 17:31:07 GMT</pubDate>
      <dc:creator><![CDATA[ds-razzhivin]]></dc:creator>
      
      <category><![CDATA[Java]]></category><category><![CDATA[Spring Framework]]></category><category><![CDATA[Высокая производительность]]></category><category><![CDATA[Облачные сервисы]]></category><category><![CDATA[Cache]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Переход с Java 21 на Java 25: что действительно перестаёт работать]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/spring_aio/articles/1096850/</guid>
      <link>https://habr.com/ru/companies/spring_aio/articles/1096850/?utm_campaign=1096850&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/d0/52/e0/d052e017171059b3892d641b3b7832e3.png" /><p>Просто поменять версию в <code>pom.xml</code> может быть недостаточно.</p><p>На JDK 25 могут перестать запускаться процессоры аннотаций, сломаться старые параметры JVM и измениться разбор дат. Иногда приложение упадёт сразу. Иногда проблема всплывёт позже, что даже веселее.</p><p>В новом переводе от команды <a href="https://t.me/+brfSBvR8sAJlMjZi">Spring АйО</a> собрали реальные несовместимости и проверки, которые стоит выполнить до переезда.</p> <a href="https://habr.com/ru/articles/1096850/?utm_campaign=1096850&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 20 Oct 2026 14:42:03 GMT</pubDate>
      <dc:creator><![CDATA[spring_aio (Spring АйО)]]></dc:creator>
      
      <category>java</category><category>kotlin</category><category>jdk</category><category>java 25</category><category>java 21</category><category>jre</category><category>spring</category><category>spring boot</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[jpackage от А до Я: как правильно упаковать Java‑приложение в десктопный дистрибутив]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1096612/</guid>
      <link>https://habr.com/ru/articles/1096612/?utm_campaign=1096612&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/85/48/ff/8548ff0df79f4c7d3fbf31916044767d.jpeg" /><p>Привет, Хабр!</p><p>Начну с&nbsp;небольшой предыстории. Я начинал свой путь в&nbsp;IT с&nbsp;базового курса «Разработка программного обеспечения» в&nbsp;одной из&nbsp;профильных академий. Этого фундамента хватило для&nbsp;уверенного старта, но&nbsp;реальные коммерческие задачи часто выходят за&nbsp;рамки учебных программ.</p><p>Одной из&nbsp;таких «болей» стала дистрибуция Java‑приложений конечному пользователю. Сколько раз мы слышали от&nbsp;клиентов: «А у&nbsp;меня не&nbsp;запускается, наверное, Java не&nbsp;та»? Чтобы раз и навсегда избавиться от&nbsp;необходимости писать в&nbsp;README фразу «сначала установите JRE», я решил глубоко погрузиться в&nbsp;тему нативной упаковки.</p><p>В&nbsp;этой статье я систематизировал весь свой опыт работы с <code>jpackage</code>: от&nbsp;создания портативных версий до&nbsp;сборки полноценных инсталляторов для&nbsp;Windows, Linux и macOS, а&nbsp;также разобрал подводные камни при&nbsp;работе с&nbsp;JavaFX и Spring Boot.</p><p>jpackage<code>— это мощный инструмент, встроенный в JDK (начиная с версии 14, JEP 343/392), который предназначен для упаковки Java-приложений в нативные образы для конкретных платформ. Он автоматически создает нативный лаунчер (запускатор) и включает в себя урезанную версию JRE (созданную через</code>jlink`), чтобы пользователю не&nbsp;нужно было устанавливать Java.</p><p>Далее так как&nbsp;я не&nbsp;знал изначально что&nbsp;умеет jpackage я для&nbsp;себя выделил два приоритета:<br>1. Создание Portable (портативных) приложений<br>2. Создание установочных пакетов (Installers)<br>Далее я расскажу о&nbsp;каждом из&nbsp;приоритетов и не&nbsp;только чтобы у&nbsp;каждого получилось поделиться своим приложением на&nbsp;Java без&nbsp;последующих лишних вопросов.</p> <a href="https://habr.com/ru/articles/1096612/?utm_campaign=1096612&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 20 Oct 2026 08:36:59 GMT</pubDate>
      <dc:creator><![CDATA[Android1983]]></dc:creator>
      
      <category><![CDATA[jpackage]]></category><category><![CDATA[Сборка java app]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Сколько символов в нике «Аня»? Шесть языков, три ответа, и ни одного правильного]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/otus/articles/1092502/</guid>
      <link>https://habr.com/ru/companies/otus/articles/1092502/?utm_campaign=1092502&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/45/54/f5/4554f5343086660f665ab962f93fccf8.png" /><p>Пять видимых символов в&nbsp;нике могут превратиться в 10, 15&nbsp;или 32&nbsp;— смотря какой язык программирования их считает. Из‑за этой разницы пользователь получает ошибку валидации, теряет часть эмодзи или&nbsp;сталкивается с&nbsp;проблемой при&nbsp;сохранении данных. Разбираемся, почему JavaScript, Python, Go и другие языки по‑разному измеряют длину строк и как&nbsp;правильно задавать ограничения, чтобы данные не&nbsp;терялись.</p> <a href="https://habr.com/ru/articles/1092502/?utm_campaign=1092502&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Узнать подробности</a>]]></description>
      
      <pubDate>Tue, 20 Oct 2026 07:12:44 GMT</pubDate>
      <dc:creator><![CDATA[badcasedaily1 (OTUS)]]></dc:creator>
      
      <category><![CDATA[Unicode]]></category><category><![CDATA[UTF-8]]></category><category><![CDATA[UTF-16]]></category><category><![CDATA[графемы]]></category><category><![CDATA[обработка строк]]></category><category><![CDATA[кодировка символов]]></category><category><![CDATA[длина строки]]></category><category><![CDATA[суррогатные пары]]></category><category><![CDATA[валидация данных]]></category><category><![CDATA[обрезка строк.]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Как Netflix повысила эффективность ИИ‑агентов для программирования с помощью JetBrains IDE]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/spring_aio/articles/1096226/</guid>
      <link>https://habr.com/ru/companies/spring_aio/articles/1096226/?utm_campaign=1096226&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/c3/6c/68/c36c68eb38040bb7cbc633ce429830ed.png" /><p>Netflix подключила Claude Code и Codex к движку анализа кода JetBrains и теперь агенты могут работать с индексом проекта и зависимостей вместо раскопок в JAR-файлах через декомпиляцию и grep.</p><p>На реальных Java и Kotlin проектах расход времени и токенов снизился в среднем на 20–30%, а лучший результат достиг 65%.</p> <a href="https://habr.com/ru/articles/1096226/?utm_campaign=1096226&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 19 Oct 2026 10:37:12 GMT</pubDate>
      <dc:creator><![CDATA[spring_aio (Spring АйО)]]></dc:creator>
      
      <category>jetbrains</category><category>java</category><category>ide</category><category>netflix</category><category>ai</category><category>ml</category><category>intellij</category><category>intellij idea</category><category>intellijidea</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Реализация MVP DSL движка с AST, кодогенерацией и динамической компиляцией]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1095956/</guid>
      <link>https://habr.com/ru/articles/1095956/?utm_campaign=1095956&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/ec/29/af/ec29afd0c53be071c2d3de68134c1855.png" /><p>Реализация MVP движка динамических вычислений выражений на Scala 3. <br>Архитектура решения: от описания компонентов через пользовательские спецификации до кодогенерации Scala и его компиляции во время выполнения и загрузки полученного класса в JVM.</p><p>Цикл от некого выражения до готовой лямбды:<br><code>expression -&gt; AST -&gt; ScalaCode → Class Loading -&gt; lambda</code>.</p> <a href="https://habr.com/ru/articles/1095956/?utm_campaign=1095956&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 19 Oct 2026 10:10:23 GMT</pubDate>
      <dc:creator><![CDATA[PicoPicoRobotWoman]]></dc:creator>
      
      <category><![CDATA[scala]]></category><category><![CDATA[компилятор]]></category><category><![CDATA[кодогенерация]]></category><category><![CDATA[ast]]></category><category><![CDATA[java]]></category><category><![CDATA[mvp]]></category><category><![CDATA[диспетчеризация]]></category><category><![CDATA[динамическая компиляция]]></category><category><![CDATA[jvm]]></category><category><![CDATA[dsl]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как убрать пароли из XML‑конфигов Hadoop: Credential Provider API и JCEKS на практике]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/arenadata/articles/1094630/</guid>
      <link>https://habr.com/ru/companies/arenadata/articles/1094630/?utm_campaign=1094630&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/56/e0/f7/56e0f7d456eb65a53ec6faf5ce5d0aa5.png" /><p>Привет, Хабр! Меня зовут Егор Ившин, я аналитик по безопасности в Arenadata. Я отвечаю за безопасность продукта ADH: моя ключевая задача – выявлять уязвимости и оперативно передавать информацию о них команде разработки, при этом я не только фиксирую проблему, но и помогаю с её устранением. В своей работе я применяю различные виды анализа: SCA, SAST, ручное тестирование.</p><p>В этой статье разберём, как работает Hadoop Credential Provider API, где и как хранить JCEKS и какие подводные камни во всём этом есть.&nbsp;А в конце посмотрим, как этот механизм автоматизируется в продуктах Arenadata – чтобы не делать всё вручную.</p> <a href="https://habr.com/ru/articles/1094630/?utm_campaign=1094630&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 16 Oct 2026 14:42:24 GMT</pubDate>
      <dc:creator><![CDATA[EMIvshin (Arenadata)]]></dc:creator>
      
      <category><![CDATA[Hadoop]]></category><category><![CDATA[ADH]]></category><category><![CDATA[ADCM]]></category><category><![CDATA[Безопасность]]></category><category><![CDATA[Шифрование]]></category><category><![CDATA[JCEKS]]></category><category><![CDATA[credential provider]]></category><category><![CDATA[Управление секретами]]></category><category><![CDATA[Конфигурационные файлы]]></category><category><![CDATA[Администрирование]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Giga IDE Pro больше не будет. Но это хорошая новость]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/sberbank/articles/1093766/</guid>
      <link>https://habr.com/ru/companies/sberbank/articles/1093766/?utm_campaign=1093766&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/7b/70/53/7b70534c4420a6c693a6053eabbbded0.jpg" /><p>Pro-сборка была важным этапом в развитии GigaIDE: она позволила быстрее развивать профессиональные инструменты, собирать обратную связь от корпоративных пользователей и проверять сценарии, которые выходят за рамки Community-версии. Но у отдельного дистрибутива есть и обратная сторона: пользователю нужно выбирать сборку, командам — отдельно управлять установками, а продукту — поддерживать лишнюю развилку там, где её уже можно убрать.</p> <a href="https://habr.com/ru/articles/1093766/?utm_campaign=1093766&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 16 Oct 2026 10:23:00 GMT</pubDate>
      <dc:creator><![CDATA[GIGAIDECommunity (Сбер)]]></dc:creator>
      
      <category><![CDATA[gigaide]]></category><category><![CDATA[базы данных]]></category><category><![CDATA[java]]></category><category><![CDATA[javascript]]></category><category><![CDATA[python]]></category><category><![CDATA[spring]]></category><category><![CDATA[django]]></category><category><![CDATA[react]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Локальная ИИшница: рецепт приготовления]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1094976/</guid>
      <link>https://habr.com/ru/articles/1094976/?utm_campaign=1094976&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/a5/8b/5f/a58b5fff7d5cbedf9c6001d2dab51e73.jpg" /><p>Статья для тех, кто уже имеет опыт работы с облачными ИИ, но в силу причин вынужден перейти на локальную ИИшку.</p><p>Здесь я опишу несколько неожиданных проблем с выбором железа и софта, которые мне пришлось решить, имея на старте несколько противоречивых требований.</p><p>Спойлер: я прошел путь от «лучше, чем ничего» до «гораздо лучше, чем ничего!».</p> <a href="https://habr.com/ru/articles/1094976/?utm_campaign=1094976&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 16 Oct 2026 05:16:20 GMT</pubDate>
      <dc:creator><![CDATA[Zheltov]]></dc:creator>
      
      <category><![CDATA[локальный ии агент]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Сломанный Ctrl+C — сначала гасла VM, а потом не прерывался sleep: Java, KVM и Linux]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1094024/</guid>
      <link>https://habr.com/ru/articles/1094024/?utm_campaign=1094024&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/ee/21/2b/ee212bd16140a7d7a552e55835cc1fca.png" /><p>Обычный <code>Ctrl+C</code> оказался для моей Java VM неожиданной проблемой: сначала он завершал саму виртуальную машину, а после исправления перестал останавливать команды внутри Linux. Чтобы разобраться, пришлось пройти весь путь от host terminal через UART и KVM до гостевого TTY и Unix-сигналов. В статье разберём не только причину, но и метод диагностики, который пригодится далеко за пределами виртуализации.</p> <a href="https://habr.com/ru/articles/1094024/?utm_campaign=1094024&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Разбираемся, куда пропал Ctrl+C</a>]]></description>
      
      <pubDate>Tue, 13 Oct 2026 17:26:27 GMT</pubDate>
      <dc:creator><![CDATA[rusanoph]]></dc:creator>
      
      <category><![CDATA[Linux]]></category><category><![CDATA[Java]]></category><category><![CDATA[KVM]]></category><category><![CDATA[SIGINT]]></category><category><![CDATA[TTY]]></category><category><![CDATA[termios]]></category><category><![CDATA[UART 16550]]></category><category><![CDATA[BusyBox]]></category><category><![CDATA[Unix signals]]></category><category><![CDATA[PanamaKVM]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Java 24 убрала пиннинг synchronized. Почему виртуальные потоки всё ещё тормозят?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/otus/articles/1084920/</guid>
      <link>https://habr.com/ru/companies/otus/articles/1084920/?utm_campaign=1084920&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/a6/74/eb/a674eb2c7dea3e8ba60fd7b40a0a3620.png" /><p>После перехода на&nbsp;Java 24&nbsp;виртуальные потоки перестали блокировать носители внутри <code>synchronized</code>. Казалось&nbsp;бы, одним тормозом меньше. Но&nbsp;производительность по‑прежнему упирается в&nbsp;ограничения ресурсов, а&nbsp;старые способы диагностики уже не&nbsp;помогают. Разбираемся, где теперь искать причины задержек и какие настройки стоит пересмотреть.</p> <a href="https://habr.com/ru/articles/1084920/?utm_campaign=1084920&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Найти причину тормозов</a>]]></description>
      
      <pubDate>Tue, 13 Oct 2026 08:05:34 GMT</pubDate>
      <dc:creator><![CDATA[badcasedaily1 (OTUS)]]></dc:creator>
      
      <category><![CDATA[Java 24]]></category><category><![CDATA[виртуальные потоки]]></category><category><![CDATA[Project Loom]]></category><category><![CDATA[synchronized]]></category><category><![CDATA[ReentrantLock]]></category><category><![CDATA[многопоточность]]></category><category><![CDATA[пиннинг потоков]]></category><category><![CDATA[производительность Java]]></category><category><![CDATA[пул соединений]]></category><category><![CDATA[ThreadLocal.]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Закрыл вкладку — ушёл, обновил страницу — остался: присутствие в комнате на WebSocket]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1092958/</guid>
      <link>https://habr.com/ru/articles/1092958/?utm_campaign=1092958&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/32/45/13/324513220b8b1357678d6c2e9aadaa12.png" /><p>Когда человек закрыл вкладку, обновил страницу или потерял сеть, сервер получает один и тот же <code>SessionDisconnectEvent</code>, а реагировать должен по-разному. Рассказываю, как в своём Planning Poker научил комнату различать эти случаи и не терять текущие данные при обновлении: маркер закрытия на pagehide, атомарные обновления MongoDB, порядок кадров в Spring, обходы для Firefox и zone.js и живые тесты в Chrome, Firefox и Safari. Восемь граблей и что с ними делать.</p> <a href="https://habr.com/ru/articles/1092958/?utm_campaign=1092958&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 13 Oct 2026 06:30:18 GMT</pubDate>
      <dc:creator><![CDATA[lord_detson]]></dc:creator>
      
      <category><![CDATA[websocket]]></category><category><![CDATA[stomp]]></category><category><![CDATA[spring boot]]></category><category><![CDATA[rabbitmq]]></category><category><![CDATA[mongodb]]></category><category><![CDATA[angular]]></category><category><![CDATA[zone.js]]></category><category><![CDATA[presence]]></category><category><![CDATA[planning poker]]></category><category><![CDATA[playwright]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Реактивная Java: когда она ускоряет систему, а когда просто усложняет жизнь (часть 1)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/cinimex/articles/1091304/</guid>
      <link>https://habr.com/ru/companies/cinimex/articles/1091304/?utm_campaign=1091304&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/38/78/ef/3878ef382316d2d4b78877a281992975.jpg" /><p>Часть моей работы — помогать джунам разбираться с архитектурными решениями. </p><p>Иногда у нас возникают обсуждения на тему: «<strong>Зачем заморачиваться с WebFlux, если можно продолжать писать на Spring MVC?</strong>».&nbsp;Чтобы предметно обсуждать эту тему, мы с командой провели внутренний бенчмарк, написали методичку и решили поделиться некоторыми соображениями в этом цикле статей. </p><p>В этой — первой —<em> </em>статье я расскажу, как устроены три основные модели обработки запросов в Java, покажу их сильные и слабые стороны и дам критерии, которые помогут выбрать подходящий вариант для вашего проекта.&nbsp;</p><p><strong><em>Дисклеймер</em></strong><em>: для Java-сеньоров в этой статье скорее всего ничего нового не будет.</em></p> <a href="https://habr.com/ru/articles/1091304/?utm_campaign=1091304&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 12 Oct 2026 14:55:13 GMT</pubDate>
      <dc:creator><![CDATA[vadimbely (Синимекс)]]></dc:creator>
      
      <category><![CDATA[javа]]></category><category><![CDATA[обработка запросов]]></category><category><![CDATA[webflux]]></category><category><![CDATA[разработка приложений]]></category><category><![CDATA[разработка по]]></category><category><![CDATA[reactive programming]]></category><category><![CDATA[параллелизм]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Неожиданный антивайб разработки через ИИ-агентов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1093258/</guid>
      <link>https://habr.com/ru/articles/1093258/?utm_campaign=1093258&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/66/74/c2/6674c2c55bbbbff6a7ef0f6ceb67f8ff.png" /><p>Менеджеры считают, что ИИ-агенты ускорят разработку в десять раз. Математика говорит, что ускорится только написание. Проверять смысл по-прежнему будут люди, с конечной скоростью, и очередь выстроится к самым опытным. PostgreSQL 19 не вышел в срок. Не потому, что ИИ нашёл много багов, а потому что ИИ научился генерировать правдоподобные отчёты быстрее, чем люди успевают их читать. В статье разбираю, почему так, где настоящий предел и что меняется.</p> <a href="https://habr.com/ru/articles/1093258/?utm_campaign=1093258&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 12 Oct 2026 09:56:59 GMT</pubDate>
      <dc:creator><![CDATA[ProgressorIncrementum]]></dc:creator>
      
      <category><![CDATA[вайбкодинг]]></category><category><![CDATA[ИИ-агенты]]></category><category><![CDATA[code review]]></category><category><![CDATA[легаси]]></category><category><![CDATA[Datalog]]></category><category><![CDATA[тьюринг-полнота]]></category><category><![CDATA[PostgreSQL]]></category><category><![CDATA[формальная верификация]]></category><category><![CDATA[декларативное программирование.]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[У нас есть MCP дома]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1092626/</guid>
      <link>https://habr.com/ru/articles/1092626/?utm_campaign=1092626&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Всем привет! Меня зовут Петрович и я работаю техлидом java команды в&nbsp;небольшом международном финтехе. В&nbsp;прошлый раз я рассказывал, как <a href="https://habr.com/ru/articles/1065852/" rel="noopener nofollow">мы меняли</a> Redis на&nbsp;Hazelcast, а&nbsp;сегодня расскажу как&nbsp;мы делали свой MCP‑сервер для&nbsp;Jira, Confluence и GitLab (все self‑hosted). От&nbsp;пустого репозитория до&nbsp;прода прошло две недели, а&nbsp;сейчас у&nbsp;сервера уже почти 100&nbsp;инструментов. Расскажу, почему не&nbsp;взяли готовое с&nbsp;GitHub, как&nbsp;все устроено внутри и на&nbsp;какие грабли мы наступили (спойлер: почти все грабли назывались <strong>null</strong>).</p> <a href="https://habr.com/ru/articles/1092626/?utm_campaign=1092626&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 10 Oct 2026 15:13:53 GMT</pubDate>
      <dc:creator><![CDATA[petrovvich]]></dc:creator>
      
      <category><![CDATA[mcp-сервер]]></category><category><![CDATA[ai]]></category><category><![CDATA[llm]]></category><category><![CDATA[java]]></category><category><![CDATA[spring ai]]></category><category><![CDATA[vault]]></category><category><![CDATA[jwt]]></category><category><![CDATA[keycloak]]></category><category><![CDATA[k8s]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Оптимизация генерации ресурсов в Java, три Ryzen и 225 замеров]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1092264/</guid>
      <link>https://habr.com/ru/articles/1092264/?utm_campaign=1092264&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/1f/6e/c6/1f6ec6bd0a37f4f22eda3f0722adcd8a.jpg" /><p><em>Почему ручное разбиение задач оказалось быстрее <code>parallel().collect()</code> в большинстве наших тестов.</em></p><p>Привет, Хабр!</p><p>Меня зовут Юрий, и уже десять лет я разрабатываю <strong>The Great Tribes</strong> — пошаговую 4X-стратегию, в которой игроку предстоит провести свою цивилизацию от первобытных племён до космической эпохи.</p><p>Игра создаётся на Java с использованием LWJGL и собственного игрового движка. Мы не используем Unity или Unreal Engine: за годы разработки у проекта сформировались собственная архитектура, система процедурной генерации мира и довольно специфические требования к обработке больших карт.</p><p>Сегодня хочу рассказать об одной небольшой, но интересной оптимизации.</p><p>Мы решили ускорить генерацию природных ресурсов, написали три реализации одного алгоритма и протестировали их на трёх компьютерах с процессорами AMD Ryzen.</p><p>Результаты оказались любопытными: более компактный вариант с <code>parallel().collect()</code> в большинстве измерений уступил реализации с ручным разбиением массива на части.</p><p>Но обо всём по порядку.</p> <a href="https://habr.com/ru/articles/1092264/?utm_campaign=1092264&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 09 Oct 2026 06:45:08 GMT</pubDate>
      <dc:creator><![CDATA[Zemlaynin]]></dc:creator>
      
      <category><![CDATA[java]]></category><category><![CDATA[многопоточность]]></category><category><![CDATA[параллельное программирование]]></category><category><![CDATA[Parallel streams]]></category><category><![CDATA[forkjoinpool]]></category><category><![CDATA[priorityqueue]]></category><category><![CDATA[оптимизация производительности]]></category><category><![CDATA[процедурная генерация]]></category><category><![CDATA[разработка игр]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Linux из Java без JNI: от FFM и /dev/kvm до интерактивной консоли]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1092050/</guid>
      <link>https://habr.com/ru/articles/1092050/?utm_campaign=1092050&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/81e/de0/094/81ede00943fcac66037de2988e59b2a3.png" /><p>Да, направление здесь немного непривычное: обычно Java запускают в&nbsp;Linux, а&nbsp;здесь я решил попробовать запустить Linux из&nbsp;Java.</p><p>Обычно Java и KVM находятся довольно далеко друг от&nbsp;друга: с&nbsp;одной стороны JVM и управляемая память, с&nbsp;другой <code>/dev/kvm</code>, <code>ioctl</code>, регистры vCPU и физическая память guest ОС. В&nbsp;этой статье разберём, как&nbsp;связать эти два мира через Foreign Function &amp; Memory API без&nbsp;JNI. На&nbsp;примере <code>panama-kvm</code> пройдём путь от&nbsp;первого вызова KVM API до&nbsp;загрузки Linux, настройки памяти, обработки VM exits и интерактивной консоли внутри гостевой системы. </p> <a href="https://habr.com/ru/articles/1092050/?utm_campaign=1092050&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Запустить VM из Java</a>]]></description>
      
      <pubDate>Thu, 08 Oct 2026 12:20:07 GMT</pubDate>
      <dc:creator><![CDATA[rusanoph]]></dc:creator>
      
      <category><![CDATA[Java]]></category><category><![CDATA[KVM]]></category><category><![CDATA[FFM]]></category><category><![CDATA[Project-Panama]]></category><category><![CDATA[Linux]]></category><category><![CDATA[dev-kvm]]></category><category><![CDATA[ioctl]]></category><category><![CDATA[виртуализация]]></category><category><![CDATA[jni]]></category><category><![CDATA[jvm]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Hibernate getReference(): когда SELECT вообще не нужен]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1092036/</guid>
      <link>https://habr.com/ru/articles/1092036/?utm_campaign=1092036&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Проблема N+1&nbsp;запросов&nbsp;— классическая проблема ORM, с&nbsp;которой сталкивается практически каждый разработчик, работающий с&nbsp;Hibernate. Обычно рекомендуемыми решениями являются использование&nbsp;<code>JOIN FETCH</code>&nbsp;или&nbsp;<code>EntityGraph</code>, но&nbsp;существует еще один инструмент, который часто остается в&nbsp;тени&nbsp;— метод&nbsp;<code>load()</code>. </p> <a href="https://habr.com/ru/articles/1092036/?utm_campaign=1092036&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 08 Oct 2026 11:52:14 GMT</pubDate>
      <dc:creator><![CDATA[evgeni_b]]></dc:creator>
      
      <category><![CDATA[Hibernate]]></category><category><![CDATA[JPA]]></category><category><![CDATA[getReference]]></category><category><![CDATA[N+1]]></category><category><![CDATA[Lazy Loading]]></category><category><![CDATA[ORM]]></category><category><![CDATA[SQL]]></category><category><![CDATA[Java]]></category><category><![CDATA[Entity Proxy]]></category><category><![CDATA[JOIN FETCH]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Платёж списывается дважды. Найдите причину в коде, который прошёл ревью]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/otus/articles/1077950/</guid>
      <link>https://habr.com/ru/companies/otus/articles/1077950/?utm_campaign=1077950&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/af1/333/d59/af1333d59ea22b5ea85b928f1371ed3f.png" /><p>Платёжный сервис прошёл ревью, тесты зелёные, в&nbsp;базе один успешный платёж&nbsp;— а&nbsp;с&nbsp;карты списали деньги дважды. Причём в&nbsp;двух инцидентах к&nbsp;дублю привели разные сценарии. Разбираемся по&nbsp;коду и логам, откуда взялись повторные списания и как&nbsp;построить идемпотентность, которая закрывает оба случая. </p> <a href="https://habr.com/ru/articles/1077950/?utm_campaign=1077950&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Проверить решение</a>]]></description>
      
      <pubDate>Wed, 07 Oct 2026 18:50:35 GMT</pubDate>
      <dc:creator><![CDATA[sproshchaev (OTUS)]]></dc:creator>
      
      <category><![CDATA[идемпотентность]]></category><category><![CDATA[двойное списание]]></category><category><![CDATA[платёжный сервис]]></category><category><![CDATA[распределённые системы]]></category><category><![CDATA[Spring Boot]]></category><category><![CDATA[Java]]></category><category><![CDATA[PostgreSQL]]></category><category><![CDATA[ретраи]]></category><category><![CDATA[конкурентные запросы]]></category><category><![CDATA[микросервисная архитектура]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Java Digest 40: что изменилось в Java 27 и почему Spring ускоряет релизы]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/tbank/articles/1091500/</guid>
      <link>https://habr.com/ru/companies/tbank/articles/1091500/?utm_campaign=1091500&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/da5/7b9/30e/da57b930e0ec549b7a222bdb554c82d6.jpg" /><p>Всем привет! 👋👋👋👋 Мы — Java-разработчики Т-Банка: <a href="https://habr.com/ru/users/evertimes/">Андрей</a>, <a href="https://habr.com/ru/users/MuonKvark/">Арсений</a>, <a href="https://habr.com/ru/users/roma00712/">Роман</a> и <a href="https://habr.com/ru/users/maximovkl/">Константин.</a> Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.</p><p>В этом выпуске рассказываем о том, что Java 27 вышла с компактными заголовками объектов и G1 по умолчанию, Сбер представил собственный SberJDK, а Spring меняет подход к релизам из-за потока AI-найденных уязвимостей. Разбираем новые фичи, смотрим, как Netflix применяет AOT Cache, и выясняем, почему Spring Data JDBC — это не просто упрощенный Hibernate. Обо всем этом читайте в выпуске 🙂</p> <a href="https://habr.com/ru/articles/1091500/?utm_campaign=1091500&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать выпуск 40</a>]]></description>
      
      <pubDate>Wed, 07 Oct 2026 13:07:08 GMT</pubDate>
      <dc:creator><![CDATA[evertimes (Т-Банк)]]></dc:creator>
      
      <category><![CDATA[java]]></category><category><![CDATA[jdk]]></category><category><![CDATA[spring]]></category><category><![CDATA[spring-boot]]></category><category><![CDATA[jvm]]></category><category><![CDATA[java27]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Spring Config Import. Без Магии]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/spring_aio/articles/1091064/</guid>
      <link>https://habr.com/ru/companies/spring_aio/articles/1091064/?utm_campaign=1091064&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/afc/8e1/731/afc8e173124ce068692c3d39bbb2c051.png" /><p>Всем привет! Меня зовут Дмитрий Мазуров, я контрибьютор проекта <a href="https://github.com/axelixlabs/axelix">Axelix</a>. Это open-source продукт, который помогает находить типичные проблемы и неэффективности в Spring Boot приложениях.</p><p><a href="https://habr.com/ru/companies/spring_aio/articles/1087684/">В прошлой статье</a> Михаил разбирал <code>EnvironmentPostProcessor</code> и мимоходом упомянул <code>ConfigDataEnvironmentPostProcessor</code>, который грузит <code>application.yml</code>, разбирается с профилями и обрабатывает <code>spring.config.import</code>. Сегодня заглянем внутрь него.</p><p>Поводом стала вполне практическая задача. Нам понадобилось подружить Axelix Master с Vault так, чтобы пользователь настраивал его через наши собственные свойства под <code>axelix.master.*</code>, а не через <code>spring.cloud.vault.*</code>. Чтобы сделать это аккуратно, пришлось разобраться, как вообще работают <code>spring.config.import</code>.</p> <a href="https://habr.com/ru/articles/1091064/?utm_campaign=1091064&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 06 Oct 2026 11:43:24 GMT</pubDate>
      <dc:creator><![CDATA[dima-bzz (Spring АйО)]]></dc:creator>
      
      <category><![CDATA[axelix]]></category><category><![CDATA[spring-boot]]></category><category><![CDATA[java]]></category><category><![CDATA[spring]]></category><category><![CDATA[spring-cloud-config]]></category><category><![CDATA[spring-cloud]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Виртуальные потоки после JDK 24: что изменилось в Java]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/axiomjdk/articles/1090852/</guid>
      <link>https://habr.com/ru/companies/axiomjdk/articles/1090852/?utm_campaign=1090852&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/0c1/4be/faa/0c14befaa0b450e02447b30d281d71fa.png" /><p><a href="https://openjdk.org/jeps/491">JEP 491</a> в JDK 24 устранил закрепление виртуальных потоков за потоками-носителями при работе с мониторами. Именно из-за этого механизма переход на виртуальные потоки в Java 21 был рискованным для блокирующего кода внутри synchronized. Однако закрепление всё ещё возможно при выполнении нативного кода, загрузке классов и локальных файловых операциях в Linux. Поэтому событие JDK Flight Recorder (JFR) jdk.VirtualThreadPinned по-прежнему должно входить в контрольный список перед внедрением.</p> <a href="https://habr.com/ru/articles/1090852/?utm_campaign=1090852&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 06 Oct 2026 08:30:36 GMT</pubDate>
      <dc:creator><![CDATA[alexbik (Axiom JDK)]]></dc:creator>
      
      <category>виртуальные потоки</category><category>virtual threads</category><category>jdk 25</category><category>jdk 24</category><category>threadlocal</category><category>structuredtaskscope</category><category>scoped values</category><category>jep 506</category><category>jep 491</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Может ли локальная 27B-модель расследовать продакшен-инцидент как Claude? Две RTX 5090, около 40 прогонов и одна гонка]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1090016/</guid>
      <link>https://habr.com/ru/articles/1090016/?utm_campaign=1090016&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/240/013/275/2400132750d3696ea0c5ee5f9959323e.png" /><p>Реальный продакшен-инцидент: пул соединений забит, активных запросов дюжина, рестарт помогает. Claude нашёл причину за двадцать минут. Нормальный человек на этом обновил бы библиотеку и пошёл дальше, но у меня две RTX 5090 стояли без дела, и зудел вопрос: а локальная 27B-модель смогла бы? Тот же промпт, тот же код, та же песочница, семь локальных моделей, около 40 прогонов. В промпте, кстати, осталась одна правдоподобная, но ложная гипотеза инженера. Я не планировал делать из неё ловушку. Она стала главным фильтром всего эксперимента.</p> <a href="https://habr.com/ru/articles/1090016/?utm_campaign=1090016&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 06 Oct 2026 07:01:25 GMT</pubDate>
      <dc:creator><![CDATA[korobovn]]></dc:creator>
      
      <category><![CDATA[llm]]></category><category><![CDATA[claude]]></category><category><![CDATA[qwen]]></category><category><![CDATA[агенты]]></category><category><![CDATA[отладка]]></category><category><![CDATA[инцидент]]></category><category><![CDATA[httpclient]]></category><category><![CDATA[java]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я сделал лыжный тренер на датчиках и вайб‑кодинге — вместо подписки на готовый]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1090320/</guid>
      <link>https://habr.com/ru/articles/1090320/?utm_campaign=1090320&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/6cd/b46/da5/6cdb46da5012eefa92f1ead8eaf7d934.jpeg" /><p>На&nbsp;рынке есть готовые продукты: пара датчиков на&nbsp;ботинки, приложение считает технику катания, подсказывает, что&nbsp;тренировать. Работает неплохо. Но&nbsp;по&nbsp;подписке&nbsp;— и недёшево: например, у&nbsp;Carv безлимитный сезонный доступ стоит $249&nbsp;/ £199&nbsp;в&nbsp;год. И вот тут возникает вопрос: насколько эта подписка вообще оправдана? Датчик&nbsp;— это акселерометр с&nbsp;гироскопом за&nbsp;пару долларов и Bluetooth‑модуль, приложение&nbsp;— по&nbsp;сути обработка сигнала и немного статистики. Разовая покупка&nbsp;железа плюс разработка&nbsp;— понятные, конечные затраты. А&nbsp;подписка&nbsp;— плата за&nbsp;то, что&nbsp;уже посчитано один раз и с&nbsp;тех пор просто работает. Есть ощущение, что&nbsp;здесь платишь не&nbsp;за&nbsp;вычисления, а&nbsp;за&nbsp;то, что&nbsp;вход на&nbsp;рынок для&nbsp;конкурентов высокий: откалибровать алгоритмы, написать мобильное приложение, а&nbsp;потом ещё поддерживать серверы, пользователей и производство&nbsp;железа&nbsp;— дорого и долго. Подписка отбивает эти инвестиции. Но&nbsp;большая часть этого барьера&nbsp;— стоимость разработки, а&nbsp;она за&nbsp;последние пару лет резко упала: с&nbsp;ИИ‑инструментами то, что&nbsp;раньше требовало команды, становится посильным для&nbsp;одного человека. Продукт для&nbsp;рынка так не&nbsp;сделать&nbsp;— там нужна калибровка на&nbsp;тысячах лыжников, поддержка и сертификация. А&nbsp;вот любительский инструмент&nbsp;— вполне.</p><p>Второй мотив&nbsp;— практический: проверить на&nbsp;реальном, не&nbsp;игрушечном проекте, что&nbsp;сейчас умеют ИИ‑инструменты в&nbsp;разработке. Не&nbsp;автодополнение строк, а&nbsp;весь путь: от&nbsp;идеи и архитектуры до&nbsp;калибровки алгоритмов на&nbsp;реальных данных с&nbsp;настоящего&nbsp;железа. Ниже, в&nbsp;разделе 9,&nbsp;— про&nbsp;то, как&nbsp;это&nbsp;было на&nbsp;практике, а&nbsp;не&nbsp;в&nbsp;презентациях.</p> <a href="https://habr.com/ru/articles/1090320/?utm_campaign=1090320&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 05 Oct 2026 07:15:05 GMT</pubDate>
      <dc:creator><![CDATA[vic_1]]></dc:creator>
      
      <category><![CDATA[java]]></category><category><![CDATA[android]]></category><category><![CDATA[3d-моделирование]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Senior Java — это кто? Почему одинаковый title ещё не означает одинаковую работу]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1090296/</guid>
      <link>https://habr.com/ru/articles/1090296/?utm_campaign=1090296&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Две вакансии называются Senior Java. В&nbsp;одной ищут Spring/PostgreSQL/Kafka backend, в&nbsp;другой JMM, GC, lock‑free и low latency. А&nbsp;в&nbsp;третьей Senior уже незаметно превращается в&nbsp;Tech Lead. Я посмотрела реальные Java‑вакансии глазами IT‑рекрутера и проверила, насколько вообще название позиции помогает понять, кого на&nbsp;самом деле ищет компания.</p> <a href="https://habr.com/ru/articles/1090296/?utm_campaign=1090296&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 05 Oct 2026 06:45:55 GMT</pubDate>
      <dc:creator><![CDATA[YuliaITHR]]></dc:creator>
      
      <category><![CDATA[Java]]></category><category><![CDATA[Senior Java]]></category><category><![CDATA[Java Developer]]></category><category><![CDATA[backend]]></category><category><![CDATA[seniority]]></category><category><![CDATA[IT-рекрутмент]]></category><category><![CDATA[найм в IT]]></category><category><![CDATA[вакансии]]></category><category><![CDATA[техническое лидерство]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Строим стены в SCAD++ в турбо режиме]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1090230/</guid>
      <link>https://habr.com/ru/articles/1090230/?utm_campaign=1090230&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/f24/fda/d76/f24fdad766c4cc6505e1a6c56bbe7b64.jpg" /><p>В этой статье мы немного оживим SCAD++ и немного сэкономим времени на чай :-) Конструктора, проектировщики милости просим.</p> <a href="https://habr.com/ru/articles/1090230/?utm_campaign=1090230&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 04 Oct 2026 18:27:40 GMT</pubDate>
      <dc:creator><![CDATA[Mozgunov]]></dc:creator>
      
      <category><![CDATA[SCAD]]></category><category><![CDATA[сапр]]></category><category><![CDATA[проектирование]]></category><category><![CDATA[расчеты]]></category><category><![CDATA[автоматизация]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Прощай, Кинопоиск]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1089900/</guid>
      <link>https://habr.com/ru/articles/1089900/?utm_campaign=1089900&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/5ed/fb5/a86/5edfb5a86d48ffa4e6cee02f6529b1b3.png" /><p>В октябре 2013 года яндекс выкупил КП. Для меня на тот момент это ничего не значило, ведь сервис остался прежним и продолжал работать. И перезапуск 2015 года не сильно повлиял на мое мнение, ведь все вернули обратно. Но всё-таки они реализовали свою идею в 2018 году и добавили онлайн просмотр. Следующая неприятность случилась в 2019 году, когда авторизацию сделали только через яндекс. Именно тогда мне и пришлось зарегистрироваться в этой экосистеме. А в 2020 году изменили систему оценок. Все это, несомненно, не доставляло положительных эмоций. Но то, что происходит в последние годы, совершенно другая история...</p> <a href="https://habr.com/ru/articles/1089900/?utm_campaign=1089900&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 03 Oct 2026 09:27:57 GMT</pubDate>
      <dc:creator><![CDATA[VladSmir]]></dc:creator>
      
      <category><![CDATA[java]]></category><category><![CDATA[кинопоиск]]></category><category><![CDATA[imdb]]></category><category><![CDATA[ии-агенты]]></category><category><![CDATA[вайб-кодинг]]></category><category><![CDATA[разработка]]></category><category><![CDATA[selenium]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Не каждый AI-вызов должен генерировать текст]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/spring_aio/articles/1089708/</guid>
      <link>https://habr.com/ru/companies/spring_aio/articles/1089708/?utm_campaign=1089708&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/aa4/c60/ae3/aa4c60ae3b43a99243961c766c8be525.png" /><p>Иногда от модели нужен не красивый ответ, а быстрое решение. Пропустить запрос или заблокировать, выбрать маршрут, оценить результат, отфильтровать документы для RAG.</p><p>Для этого появился Spring AI TypeSafe. Проект интегрирует Jev API, который отвечает на типизированные вопросы числовыми значениями и не генерирует текст.</p> <a href="https://habr.com/ru/articles/1089708/?utm_campaign=1089708&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 02 Oct 2026 14:19:26 GMT</pubDate>
      <dc:creator><![CDATA[spring_aio (Spring АйО)]]></dc:creator>
      
      <category>java</category><category>kotlin</category><category>spring</category><category>spring-boot</category><category>spring framework</category><category>spring boot</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[DSL в эпоху ИИ: делать или не делать…]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/moex/articles/1089584/</guid>
      <link>https://habr.com/ru/companies/moex/articles/1089584/?utm_campaign=1089584&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/f23/3c9/f49/f233c9f494c9846127367f5083863090.jpeg" /><p>Всем привет. Меня зовут Сергей и я руковожу разработкой автоматизации внутренних бизнес-процессов в рамках Центра управления процессами Московской Биржи. </p><p>В эпоху повсеместного распространения инструментов на базе искусственного интеллекта (ИИ) вопрос применения доменно-специфичных языков (DSL, domain specific language) вызывает неоднозначную реакцию. С одной стороны, большие языковые модели прекрасно понимают широкое многообразие естественного языка и могут работать напрямую с ним. С другой стороны, присущая любому человеческому общению неоднозначность оставляет простор для неправильных трактовок и ошибок.</p> <a href="https://habr.com/ru/articles/1089584/?utm_campaign=1089584&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Интересно. Давай дальше...</a>]]></description>
      
      <pubDate>Fri, 02 Oct 2026 12:22:50 GMT</pubDate>
      <dc:creator><![CDATA[unlocker (MOEX)]]></dc:creator>
      
      <category><![CDATA[jooq]]></category><category><![CDATA[jooqcodegen]]></category><category><![CDATA[artificial intelligence]]></category><category><![CDATA[aiagents]]></category><category><![CDATA[java]]></category><category><![CDATA[domain-specific language]]></category><category><![CDATA[ignite]]></category><category><![CDATA[sql]]></category><category><![CDATA[data engineering]]></category><category><![CDATA[integration]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[DBML Diagram для IntelliJ IDEA с офлайн превью и открытым исходным кодом]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1089544/</guid>
      <link>https://habr.com/ru/articles/1089544/?utm_campaign=1089544&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/c24/583/82f/c2458382f0021cf61cbf2262d0bbc555.png" /><p>Привет! На связи <a href="https://t.me/boost_for_java" rel="noopener nofollow">Boost for Java</a>. Развиваем <strong>DBML Diagram</strong> — open source плагин для IntelliJ IDEA и других совместимых IDE на платформе IntelliJ. Он строит ER-диаграмму рядом с открытым <code>.dbml</code>-файлом: меняете описание таблиц и связей — превью обновляется прямо в редакторе. Построение диаграммы работает локально, без отправки схемы во внешний сервис.</p><p>В этой статье покажем возможности версии 0.1.0, пользу работы со схемами прямо в IntelliJ IDEA и устройство плагина. Отдельно расскажем о планах интеграции с <a href="http://dbdiagram.io" rel="noopener nofollow">dbdiagram.io</a> для публикации локальных изменений в общую схему. </p><p>Проект открыт: будем рады предложениям, примерам проблемных схем и участию в разработке.</p><p><a href="https://plugins.jetbrains.com/plugin/34613-dbml-diagram" rel="noopener nofollow">Плагин в JetBrains Marketplace</a> · <a href="https://github.com/RomanVoronovskiy/DBML_Diagram" rel="noopener nofollow">Исходный код на GitHub</a></p> <a href="https://habr.com/ru/articles/1089544/?utm_campaign=1089544&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 02 Oct 2026 09:36:21 GMT</pubDate>
      <dc:creator><![CDATA[v_d_roman]]></dc:creator>
      
      <category><![CDATA[dbml]]></category><category><![CDATA[java]]></category><category><![CDATA[python]]></category><category><![CDATA[jetbrains]]></category><category><![CDATA[ide]]></category><category><![CDATA[c#]]></category><category><![CDATA[go]]></category><category><![CDATA[diagram]]></category><category><![CDATA[dbml diagram]]></category><category><![CDATA[open source]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[«Динамические» аспекты — как я писал стартер для создания аспектов прямо из конфига]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1089254/</guid>
      <link>https://habr.com/ru/articles/1089254/?utm_campaign=1089254&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Всем привет, я - Нуждин Дмитрий, Backend Java разработчик в ГК Иннотех. Хотел поделиться небольшой историей о том, как я писал spring boot стартер для создания сквозной логики в приложениях через одну только конфигурацию (application.yaml), не затрагивая сам исходный код.</p><p>Сначала проведу небольшой экскурс в аспекты для тех, кто не сталкивался/редко сталкивался с ними, для того, чтобы появилось понимание, а зачем вообще был создан стартер "динамических" аспектов. Затем уже расскажу про сам стартер и решаемые им задачи.</p> <a href="https://habr.com/ru/articles/1089254/?utm_campaign=1089254&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 01 Oct 2026 15:42:51 GMT</pubDate>
      <dc:creator><![CDATA[Alsantrius]]></dc:creator>
      
      <category><![CDATA[aop]]></category><category><![CDATA[аспекты]]></category><category><![CDATA[spring-starter]]></category><category><![CDATA[java]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Мой первый outbox]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1089198/</guid>
      <link>https://habr.com/ru/articles/1089198/?utm_campaign=1089198&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/daa/ca6/cab/daaca6cabf021c962a71eb4a5fb1918d.png" /><p>Привет! Меня зовут Серёжа. Я работаю Java‑разработчиком. В&nbsp;этой статье хочу поделиться своим первым опытом реализации паттерна «outbox».</p><p>Решил я это сделать по&nbsp;нескольким причинам:</p><p>1. Зафиксировать для&nbsp;себя «на бумаге» архитектурное решение и полученный опыт.</p><p>2. Поделиться знаниями и идеями с&nbsp;теми разработчиками, кому только предстоит впервые выполнить похожую задачу.</p><p>3. Получить от&nbsp;профессионалов комментарии и замечания по&nbsp;улучшению моего решения.</p><p>Итак, давайте начнём!</p> <a href="https://habr.com/ru/articles/1089198/?utm_campaign=1089198&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Посмотреть на реализацию</a>]]></description>
      
      <pubDate>Thu, 01 Oct 2026 13:30:27 GMT</pubDate>
      <dc:creator><![CDATA[ne_na_kolenke]]></dc:creator>
      
      <category><![CDATA[outbox]]></category><category><![CDATA[микросервисная архитектура]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Консенсус без Raft: ORCHID в Grid (фаза Курамото + quorum)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1089168/</guid>
      <link>https://habr.com/ru/articles/1089168/?utm_campaign=1089168&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/537/ec6/32b/537ec632b9f10d0004100f2af43da6a5.png" /><p>Три узла,&nbsp;одна база,&nbsp;клиент шлёт&nbsp;<code>UPSERT</code>.&nbsp;Нужно решить две вещи сразу:&nbsp;разрешить запись только на&nbsp;согласованном кластере&nbsp;и&nbsp;не&nbsp;допустить, чтобы после обрыва связи между узлами в&nbsp;журналах оказались разные версии одних и тех&nbsp;же данных.</p><p>В&nbsp;стеке вроде Raft логика такая:&nbsp;узлы голосуют за&nbsp;лидера,&nbsp;пишет только он;&nbsp;у&nbsp;каждого периода&nbsp;лидерства есть порядковый номер&nbsp;(<em>term</em>),&nbsp;чтобы отличать старые голоса от&nbsp;новых;&nbsp;лидер пропал&nbsp;—&nbsp;новые выборы.&nbsp;В&nbsp;Grid допуск записи устроен иначе.&nbsp;Лидер не&nbsp;выбирается голосованием.&nbsp;Вместо этого узлы обмениваются числовым параметром синхронизации&nbsp;(фазой,&nbsp;в&nbsp;смысле модели Курамото)&nbsp;и отдельно подтверждают каждую операцию контрольной суммой её содержимого.&nbsp;Этот протокол называется&nbsp;ORCHID.</p> <a href="https://habr.com/ru/articles/1089168/?utm_campaign=1089168&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 01 Oct 2026 12:58:19 GMT</pubDate>
      <dc:creator><![CDATA[Antharas]]></dc:creator>
      
      <category><![CDATA[grid]]></category><category><![CDATA[sql]]></category><category><![CDATA[inmemory]]></category><category><![CDATA[db]]></category><category><![CDATA[orchid]]></category><category><![CDATA[kuramoto]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Мы обновили Spring Boot до 4. Вот что сломалось]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/domclick/articles/1086090/</guid>
      <link>https://habr.com/ru/companies/domclick/articles/1086090/?utm_campaign=1086090&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/6c9/d50/17d/6c9d5017dd7fab3d54526afbd281cfeb.jpg" /><p>Это наш опыт миграции со&nbsp;Spring Boot 3.5.12&nbsp;и Spring Cloud 2025.0.1&nbsp;на&nbsp;Boot 4.0.6&nbsp;и Spring Cloud 2025.1.x в большом коммерческом проекте, дополненный ссылками на&nbsp;официальные изменения Boot 4. В&nbsp;спорных местах ссылки стоят прямо в&nbsp;тексте, а&nbsp;в&nbsp;конце есть раздел «Источники».</p> <a href="https://habr.com/ru/articles/1086090/?utm_campaign=1086090&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 01 Oct 2026 08:00:28 GMT</pubDate>
      <dc:creator><![CDATA[temas8150 (Домклик)]]></dc:creator>
      
      <category><![CDATA[spring-boot]]></category><category><![CDATA[jackson 3]]></category><category><![CDATA[kotlin]]></category><category><![CDATA[java]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Нашёл ошибки в моде Create и проверил их в игре]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/articles/1088366/</guid>
      <link>https://habr.com/ru/companies/pvs-studio/articles/1088366/?utm_campaign=1088366&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/4a3/857/7e2/4a38577e2fcfe1d054a6c3b936955e3a.png" /><p>В этой статье мы разберём ошибки в одном из самых популярных модов для Minecraft — Create. Посмотрим, как они проявляются прямо в игре, и отправим пулл-реквесты с исправлениями.</p> <a href="https://habr.com/ru/articles/1088366/?utm_campaign=1088366&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Поехали!</a>]]></description>
      
      <pubDate>Wed, 30 Sep 2026 07:07:49 GMT</pubDate>
      <dc:creator><![CDATA[TheLivan (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[java]]></category><category><![CDATA[minecraft]]></category><category><![CDATA[forge]]></category><category><![CDATA[minecraft 1.7.10]]></category><category><![CDATA[статический анализ]]></category><category><![CDATA[Create]]></category><category><![CDATA[Creators of Create]]></category><category><![CDATA[моды майнкрафт]]></category><category><![CDATA[fabric]]></category><category><![CDATA[minecraft модификации]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[@CacheEvict уходит раньше коммита, и кэш врёт до перезапуска]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/otus/articles/1087288/</guid>
      <link>https://habr.com/ru/companies/otus/articles/1087288/?utm_campaign=1087288&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/ed0/773/86d/ed077386dc6e90f5f972b34e89d4d162.jpg" /><p>В Spring кэш и транзакции существуют рядом, но не знают друг о друге — из-за этого корректный на первый взгляд код может приводить к расхождениям между данными в базе и кэше. Особенно легко столкнуться с такими сценариями при использовании <code>@CacheEvict</code>, когда порядок операций влияет на итоговое состояние приложения. </p><p>В статье разберемся, почему Spring-кэш может сохранять несуществующие значения, как возникает проблема с откатами и какие подходы помогают сохранить согласованность данных.</p> <a href="https://habr.com/ru/articles/1087288/?utm_campaign=1087288&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Разобрать кейс</a>]]></description>
      
      <pubDate>Wed, 30 Sep 2026 06:15:56 GMT</pubDate>
      <dc:creator><![CDATA[badcasedaily1 (OTUS)]]></dc:creator>
      
      <category><![CDATA[spring]]></category><category><![CDATA[spring framework]]></category><category><![CDATA[java]]></category><category><![CDATA[кэширование]]></category><category><![CDATA[транзакции]]></category><category><![CDATA[микросервисы]]></category><category><![CDATA[оптимизация кода]]></category><category><![CDATA[производительность приложений]]></category><category><![CDATA[Redis]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Модульная надстройка для JasperReports: коллекции, рантайм и границы подхода. Часть 4]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1087952/</guid>
      <link>https://habr.com/ru/articles/1087952/?utm_campaign=1087952&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/a30/c1b/4ed/a30c1b4edf8cfd2238499e3c4f02c049.png" /><p>Это последняя часть серии — и самая плотная. Поля-коллекции и повторяющиеся субрепорты, что именно роняет сборку, как собирается карта параметров в рантайме и что происходит на старте приложения.</p><p>Дальше — про две версии движка: шаблоны у шестой и седьмой несовместимы, и одного файла на обе не бывает. Плюс пример целиком, переход с 2.0.x и честный список шероховатостей: где подход неудобен, где он не работает и кому он не подходит вовсе.</p><p>Последнее — про цену проверки при компиляции. Шаблоны лежат в ресурсах приложения, а структура отчёта — в Java-классах, значит любая правка идёт через сборку и деплой. Если отчёты у вас меняются чаще, чем выкатывается приложение, подход вас затормозит — и лучше знать об этом заранее.</p> <a href="https://habr.com/ru/articles/1087952/?utm_campaign=1087952&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 29 Sep 2026 09:14:02 GMT</pubDate>
      <dc:creator><![CDATA[hhdevr]]></dc:creator>
      
      <category><![CDATA[jasperreports]]></category><category><![CDATA[java]]></category><category><![CDATA[open source]]></category><category><![CDATA[jrxml]]></category><category><![CDATA[spring boot]]></category><category><![CDATA[отчёты]]></category><category><![CDATA[pdf]]></category><category><![CDATA[аннотационный процессор]]></category><category><![CDATA[субрепорты]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Возвращаем трассировку логов Quartz-задач после перехода на Spring Boot 3+]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/domclick/articles/1080082/</guid>
      <link>https://habr.com/ru/companies/domclick/articles/1080082/?utm_campaign=1080082&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/122/e86/258/122e862585c6ff086155eb3d7c39134d.png" /><p>Привет! Меня зовут Александр Каненков, я backend-разработчик в компании Домклик.</p><p>После перевода сервиса со второго Spring Boot на третий (а у кого-то уже и на четвёртый) мы с командой заметили следующую картину: HTTP-запрос журналируется с <code>traceId</code>, цепочка собирается в трейсе, но стоит сработать задаче Quartz — в журналах worker-потока гордо красуется <code>[NoTrace, NoSpan]</code>. Задача исполняется «в никуда» — без единого идентификатора, вне какого-либо трейса, и связать её с запросом, который её запланировал, невозможно.</p><p>Давайте разберём по шагам, почему это случилось и как починить так, чтобы работало и с RAM (in-memory), и с JDBC job store.</p> <a href="https://habr.com/ru/articles/1080082/?utm_campaign=1080082&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 29 Sep 2026 08:00:40 GMT</pubDate>
      <dc:creator><![CDATA[FictionalCharacter (Домклик)]]></dc:creator>
      
      <category><![CDATA[kotlin]]></category><category><![CDATA[java]]></category><category><![CDATA[spring]]></category><category><![CDATA[spring boot]]></category><category><![CDATA[spring framework]]></category><category><![CDATA[quartz]]></category><category><![CDATA[логгирование]]></category><category><![CDATA[трассировка запросов]]></category><category><![CDATA[трейсинг]]></category><category><![CDATA[job-scheduler]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Переход на Java 27: гайд по GC, флагам и памяти в контейнере]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/otus/articles/1077952/</guid>
      <link>https://habr.com/ru/companies/otus/articles/1077952/?utm_campaign=1077952&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/985/725/c26/985725c26b229f5ba7d23b300dfc41b6.png" /><p>Переход на новый JDK может изменить поведение сервиса даже без изменений в коде: JVM по-другому выбирает GC, расходует память и обрабатывает старые флаги запуска.</p><p>В статье разбираем, что меняет Java 27 внутри рантайма и как проверить готовность сервисов к обновлению.</p> <a href="https://habr.com/ru/articles/1077952/?utm_campaign=1077952&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Изучить изменения</a>]]></description>
      
      <pubDate>Mon, 28 Sep 2026 19:25:51 GMT</pubDate>
      <dc:creator><![CDATA[sproshchaev (OTUS)]]></dc:creator>
      
      <category><![CDATA[Java 27]]></category><category><![CDATA[JVM]]></category><category><![CDATA[сборщик мусора]]></category><category><![CDATA[G1 GC]]></category><category><![CDATA[управление памятью]]></category><category><![CDATA[контейнеры]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[микросервисы]]></category><category><![CDATA[производительность]]></category><category><![CDATA[миграция JDK]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
