<?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>Sun, 25 Oct 2026 05:04:06 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[Почему BigDecimal считает 1.0 и 1.00 разными числами — и к чему это приводит в Java]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/otus/articles/1096482/</guid>
      <link>https://habr.com/ru/companies/otus/articles/1096482/?utm_campaign=1096482&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/7f/f9/b1/7ff9b120ebf49250f9204696f703d368.png" /><p>Цена в&nbsp;базе осталась прежней, но&nbsp;приложение считает, что&nbsp;она изменилась, и повторно отправляет событие. Причина может скрываться в&nbsp;масштабе <code>BigDecimal</code>: <code>equals()</code> сравнивает не&nbsp;только числовое значение, но&nbsp;и количество знаков после запятой, поэтому <code>1.0</code> и <code>1.00</code> для&nbsp;него не&nbsp;равны. Разберём, как&nbsp;эта особенность влияет на&nbsp;коллекции, денежные расчёты и сравнение данных из&nbsp;разных источников, а&nbsp;также как&nbsp;нормализовать суммы и избежать подобных ошибок.</p> <a href="https://habr.com/ru/articles/1096482/?utm_campaign=1096482&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Разобрать BigDecimal</a>]]></description>
      
      <pubDate>Fri, 23 Oct 2026 18:51:44 GMT</pubDate>
      <dc:creator><![CDATA[badcasedaily1 (OTUS)]]></dc:creator>
      
      <category><![CDATA[BigDecimal]]></category><category><![CDATA[Java]]></category><category><![CDATA[денежные расчёты]]></category><category><![CDATA[сравнение чисел]]></category><category><![CDATA[точность вычислений]]></category><category><![CDATA[округление]]></category><category><![CDATA[масштаб числа]]></category><category><![CDATA[коллекции Java]]></category><category><![CDATA[PostgreSQL]]></category><category><![CDATA[обработка денежных сумм]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Можно ли доверить ИИ миграцию Spring Boot 2 → 3?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/koda/articles/1098702/</guid>
      <link>https://habr.com/ru/companies/koda/articles/1098702/?utm_campaign=1098702&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/fa/d1/85/fad1858e92ce1e3c8a8311e7fb4ead4e.png" /><p>Spring Boot 2 до сих пор крутится в проде у многих команд, хотя бесплатные исправления для него закончились ещё в 2023 году. Переезд откладывают, и чаще всего не из-за ошибок компиляции, а из-за того, что ломается втихую. Сервис стартует, health-check зелёный, а клиенты получают 404 и 401 там, где всё работало.</p><p>Можно ли доверить такую миграцию ИИ-агенту? Отдал ему живой сервис на 2 версии бута, запретил трогать контрактные тесты и посмотрел, что будет.</p> <a href="https://habr.com/ru/articles/1098702/?utm_campaign=1098702&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 23 Oct 2026 16:15:01 GMT</pubDate>
      <dc:creator><![CDATA[befayer (Koda)]]></dc:creator>
      
      <category><![CDATA[java]]></category><category><![CDATA[spring]]></category><category><![CDATA[spring boot]]></category><category><![CDATA[spring framework]]></category><category><![CDATA[postgresql]]></category><category><![CDATA[ai]]></category><category><![CDATA[ml]]></category><category><![CDATA[spring-boot]]></category><category><![CDATA[spring data]]></category><category><![CDATA[spring data jpa]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Axelix 1.3 будет поддерживать реактивный стек]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1098680/</guid>
      <link>https://habr.com/ru/articles/1098680/?utm_campaign=1098680&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/9f/9d/24/9f9d2476d0086fe23420e31464f82c2c.png" /><p>Всем привет! На связи Михаил Поливаха, технический лидер <a href="https://github.com/axelixlabs/axelix" rel="noopener nofollow">Open Source проекта Axelix</a> (give us a star!).</p><p>Я долго думал, сделать это статьей или новостью, но для новости данный поток сознания слишком большой. Поэтому, всё же, решили выпустить новость :)</p><p>В ноябре выходит Axelix 1.3. Одно из изменений релиза будет заключаться в том, что Spring Boot стартеры Axelix научаться нативно работать в приложениях на реактивном стеке, то есть на Spring WebFlux с Reactor Netty. Раньше подключить стартер к такому сервису было нельзя. Теперь реактивные приложения можно будет мониторить и отлаживать из Axelix Master так же, как сервлетные.</p> <a href="https://habr.com/ru/articles/1098680/?utm_campaign=1098680&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 23 Oct 2026 15:36:56 GMT</pubDate>
      <dc:creator><![CDATA[mipo256]]></dc:creator>
      
      <category><![CDATA[axelix]]></category><category><![CDATA[spring]]></category><category><![CDATA[spring-boot]]></category><category><![CDATA[cve]]></category><category><![CDATA[webflux]]></category><category><![CDATA[reactive]]></category><category><![CDATA[spring-security]]></category><category><![CDATA[reactor]]></category><category><![CDATA[security]]></category><category><![CDATA[java]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] JDK 28 ускорит работу с нативной памятью]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/spring_aio/articles/1098450/</guid>
      <link>https://habr.com/ru/companies/spring_aio/articles/1098450/?utm_campaign=1098450&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/38/8a/53/388a5383f35dd31f217669bfdda979bd.png" /><p>Начиная с JDK 28, API Foreign Function and Memory (FFM) сможет выделять небольшие объёмы памяти из повторно используемых пулов нативной памяти, если приложение использует <code>Arena.ofConfined()</code>.</p><p>Главное преимущество этого нововведения — отсутствие необходимости изменять исходный код при существенном сокращении накладных расходов в распространённых сценариях использования FFM.</p><p>Разбираемся в новом переводе от команды <a href="https://t.me/+brfSBvR8sAJlMjZi">Spring АйО</a></p> <a href="https://habr.com/ru/articles/1098450/?utm_campaign=1098450&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 23 Oct 2026 13:28:52 GMT</pubDate>
      <dc:creator><![CDATA[spring_aio (Spring АйО)]]></dc:creator>
      
      <category>java</category><category>kotlin</category><category>jdk</category><category>jre</category><category>performance</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Кэширование зависимостей в GitLab CI: ускорили сборку Java-сервисов в 4 раза]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1091942/</guid>
      <link>https://habr.com/ru/articles/1091942/?utm_campaign=1091942&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p><strong>Ускорение сборки не всегда требует менять сам процесс сборки. Иногда достаточно перестать заново скачивать и собирать то, что уже было получено на предыдущем запуске. Вопрос в том, что именно стоит сохранять между запусками и средствами какого уровня это лучше делать.</strong>&nbsp;</p><p><strong>Разбираем два варианта кэширования зависимостей в GitLab CI и показываем, как выбрать подход с учетом того, как устроена сборка.</strong>&nbsp;</p> <a href="https://habr.com/ru/articles/1091942/?utm_campaign=1091942&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 23 Oct 2026 10:30:25 GMT</pubDate>
      <dc:creator><![CDATA[true_engineer]]></dc:creator>
      
      <category><![CDATA[gitlab ci]]></category><category><![CDATA[docker]]></category><category><![CDATA[maven]]></category><category><![CDATA[кэширование]]></category><category><![CDATA[devops]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Прагматичная преждевременная оптимизация]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/spring_aio/articles/1097566/</guid>
      <link>https://habr.com/ru/companies/spring_aio/articles/1097566/?utm_campaign=1097566&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/b1/25/a9/b125a9610bdf6ccfa2bb38234b1bf740.png" /><p>Все знают фразу Дональда Кнута:</p><p><em>«Преждевременная оптимизация — корень всех зол».</em></p><p>Но обычно цитату обрывают слишком рано. Кнут предлагал забыть о небольшом выигрыше в <strong>97%</strong> случаев, но не упускать возможности в оставшихся критически важных <strong>3%</strong>.</p><p>Иногда для них не нужны профилировщик и чёрная магия. Достаточно не компилировать регулярку при каждом вызове, не искать постоянно по <code>List</code>, когда нужен <code>Set</code>, и не создавать новые строки ради сравнения без учёта регистра.</p> <a href="https://habr.com/ru/articles/1097566/?utm_campaign=1097566&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 22 Oct 2026 11:50:42 GMT</pubDate>
      <dc:creator><![CDATA[spring_aio (Spring АйО)]]></dc:creator>
      
      <category>java</category><category>kotlin</category><category>jdk</category><category>jdk 21</category><category>jdk 25</category><category>jre</category><category>performance</category><category>performance optimization</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[ИИ‑агент захватил штурвал моего пет‑проекта. Возвращаю его с помощью интерактивных объяснений и двух промптов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1097826/</guid>
      <link>https://habr.com/ru/articles/1097826/?utm_campaign=1097826&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/3e/5f/de/3e5fde5dce9dfe0c4ff3c802b45f9d34.png" /><p>Всем привет!&nbsp;Меня зовут Дина,&nbsp;я Java‑разработчик,&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> <a href="https://habr.com/ru/articles/1097826/?utm_campaign=1097826&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 22 Oct 2026 10:12:21 GMT</pubDate>
      <dc:creator><![CDATA[DinaSalimova]]></dc:creator>
      
      <category><![CDATA[когнитивный долг]]></category><category><![CDATA[ии-агенты]]></category><category><![CDATA[claude code]]></category><category><![CDATA[промпты]]></category><category><![CDATA[агентская разработка]]></category><category><![CDATA[java]]></category><category><![CDATA[spring-boot]]></category><category><![CDATA[вайбкодинг]]></category><category><![CDATA[code review]]></category><category><![CDATA[тестирование]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как легко открыть запущенный локально сервис на телефоне и почему меня это выбесило]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1097670/</guid>
      <link>https://habr.com/ru/articles/1097670/?utm_campaign=1097670&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/52/ad/bd/52adbdc9076dec64f23e2ebb35195d5b.png" /><p>Привет хабровчане! Обычно только читаю, а&nbsp;тут решил поделиться своей небольшой историей, может даже кому‑то будет полезной. </p><p>Немного о&nbsp;себе&nbsp;- Senior Java Developer, работаю на&nbsp;удаленке и постоянно мигрирую между деревней и городом (эта часть будет важна позже). В&nbsp;свободное время под&nbsp;настроение бывает пишу простенькие программки или&nbsp;игры в&nbsp;надежде что&nbsp;что‑то из&nbsp;этого однажды выстрелит и я проснусь богатым человеком, которому больше не&nbsp;придется никогда работать.</p><p>Теперь к&nbsp;сути&nbsp;- на&nbsp;работе дали мне проект по&nbsp;переписи китайского реакт монолита на&nbsp;наш спринговый с&nbsp;thymeleaf. Таймлиф выб выбран для&nbsp;простоты, и оттого что&nbsp;в&nbsp;проекте только одна страница (а нам не&nbsp;нужен отдельный микросервис фронта на&nbsp;одну страницу). Вот только эта единственная страница должна распознавать руку и работать не&nbsp;только с&nbsp;пк, но&nbsp;и с&nbsp;телефонов. </p><p>На&nbsp;пк то всё понятно, для&nbsp;проверки достаточно перейти на&nbsp;localhost:8080&nbsp;и проверяй что&nbsp;хочешь. Но&nbsp;вот для&nbsp;телефона не&nbsp;всё так просто. Вернее просто, но&nbsp;муторно. </p><p><strong>Покажу пошагово как&nbsp;это делаю я на&nbsp;примере одного из&nbsp;своих пет проектов.</strong></p><p>1) Сперва..</p> <a href="https://habr.com/ru/articles/1097670/?utm_campaign=1097670&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 22 Oct 2026 06:50:47 GMT</pubDate>
      <dc:creator><![CDATA[Yauhescha]]></dc:creator>
      
      <category><![CDATA[localhost]]></category><category><![CDATA[android]]></category><category><![CDATA[ip]]></category><category><![CDATA[тестирование]]></category><category><![CDATA[поиск адреса]]></category>
    </item>
  

  

  

	
  

  

  

    
    <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>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
