<?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>Thu, 15 Oct 2026 14:34:42 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[Сломанный 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>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Скрытый секрет конфигурации Spring Boot. EnvironmentPostProcessor]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/spring_aio/articles/1087684/</guid>
      <link>https://habr.com/ru/companies/spring_aio/articles/1087684/?utm_campaign=1087684&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/42b/ee3/48c/42bee348c1b13ddc07e86f33dc4e7f3c.png" /><p>Всем привет! Это Михаил Поливаха, технический руководитель <a href="https://github.com/axelixlabs/axelix">проекта Axelix</a> (Open Source-продукта, который помогает как дебажить, так и находить распространённые проблемы и неэффективные решения в приложениях Spring Boot).</p><p>Я хочу рассказать о части Spring Framework, с которой многие никогда не работали напрямую, хотя почти все сталкивались с проблемой, которую она решает. Начну со сценария, который, как мне кажется, многим покажется знакомым:</p><p>Представим следующую ситуацию. Вы сопровождаете общую библиотеку, внутренний стартер <code>company-commons</code>, от которого зависит каждый сервис. И вы хотите, чтобы он задавал несколько разумных значений по умолчанию для всех приложений, подключающих этот стартер Spring Boot.</p> <a href="https://habr.com/ru/articles/1087684/?utm_campaign=1087684&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 28 Sep 2026 14:44:29 GMT</pubDate>
      <dc:creator><![CDATA[mipo256 (Spring АйО)]]></dc:creator>
      
      <category>spring-boot</category><category>axelix</category><category>spring</category><category>spring framework</category><category>java</category><category>spring boot starter</category><category>autoconfig</category><category>spring.factories</category><category>bean</category><category>spring.config.import</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Снова про Java форматтеры]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1086982/</guid>
      <link>https://habr.com/ru/articles/1086982/?utm_campaign=1086982&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/da5/f42/973/da5f42973529e93dc1d92a6af168aa94.png" /><p>Не раз уже поднималась тема про форматтеры для Java, вот всего пару лет назад выкладывали перевод статьи с обзором текущего состояния подобных утилит</p> <a href="https://habr.com/ru/articles/1086982/?utm_campaign=1086982&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Но появилось что-то новенькое....</a>]]></description>
      
      <pubDate>Mon, 28 Sep 2026 07:03:55 GMT</pubDate>
      <dc:creator><![CDATA[aib]]></dc:creator>
      
      <category><![CDATA[форматирование кода]]></category><category><![CDATA[системы сборки]]></category><category><![CDATA[разработка]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Разбор CVE-2026-83557 в jackson-databind: почему не всех CVE надо бояться]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1087034/</guid>
      <link>https://habr.com/ru/articles/1087034/?utm_campaign=1087034&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/d46/e9e/62c/d46e9e62c1925cce8289827bb09f0c40.jpg" /><p>Утро четверга. Вы открываете таск-трекер, а там тикет от сканера зависимостей: «jackson-databind, CVE-2026-83557, критично, патчить». Ссылка на GitHub-бюллетень, CVSS, слово «полиморфная десериализация», и через двадцать минут у вас уже согласован hotfix на прод в пятницу в 18:00.</p> <a href="https://habr.com/ru/articles/1087034/?utm_campaign=1087034&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 27 Sep 2026 23:17:24 GMT</pubDate>
      <dc:creator><![CDATA[BugM]]></dc:creator>
      
      <category><![CDATA[java]]></category><category><![CDATA[cve]]></category><category><![CDATA[безопасность]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[«Щелчок Таноса» или искусство в разработке]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1086864/</guid>
      <link>https://habr.com/ru/articles/1086864/?utm_campaign=1086864&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/748/12a/cbf/74812acbf15a2eb3f5cf71dd74176376.jpg" /><p>Ресурсы Вселенной ограничены, а постоянно растущее население планеты может привести к голодному вымиранию всего человечества в ближайшем будущем. Чтобы спасти людей от голодного вымирания, киновселенная <strong>Marvel </strong>придумала оригинальный способ решения проблемы. Создав могущественного титана по имени <strong>Танос</strong>, взявшего на себя миссию спасителя. Идея Таноса состояла в том, чтобы собрав шесть <strong>Камней Бесконечности</strong> и объединив их силу в специальной <strong>Перчатке</strong>, раз и навсегда избавиться от половины населения планеты, просто щелкнув пальцами.</p><p>Эта история породила метафорическое значение, а фраза "Щелчок Таноса" стала крылатой и приобрела вполне реальные события. К примеру в бизнесе такое действие иронично называют жесткими антикризисными мерами, когда руководство компании одним махом увольняет большое количество сотрудников, дабы спастись от банкротства. </p><p>    </p><p>В этой статье я расскажу как можно реализовать сложные графические эффекты при разработке мобильных приложений. </p> <a href="https://habr.com/ru/articles/1086864/?utm_campaign=1086864&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 26 Sep 2026 04:05:06 GMT</pubDate>
      <dc:creator><![CDATA[alex_marshal]]></dc:creator>
      
      <category><![CDATA[щелчок таноса]]></category><category><![CDATA[мобильная разработка]]></category><category><![CDATA[дизайн приложений]]></category><category><![CDATA[искусство программирования]]></category><category><![CDATA[мессенджеры]]></category><category><![CDATA[биткорд мессенджер]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Модульная надстройка для JasperReports: подключение и что делает процессор при сборке. Часть 3]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1086826/</guid>
      <link>https://habr.com/ru/articles/1086826/?utm_campaign=1086826&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/a16/e33/e6f/a16e33e6fd535381aa68d4bcb4f75e03.png" /><p>Третья часть серии — практическая. Как подключить библиотеку к Maven-проекту, написать первый модульный отчёт и что после этого происходит с шаблоном при сборке.</p><p>Субрепорт — это класс, отчёт — тоже класс, а поля класса и есть содержимое отчёта. Имена параметров шаблона берутся из имён полей, поэтому один и тот же модуль можно поставить в отчёт дважды и получить два независимых субрепорта со своими данными. Аннотационный процессор при компиляции находит существующий JRXML, дописывает в него недостающие параметры, датасеты и банды субрепортов и кладёт результат в target/generated-sources. Шаблон в src он не трогает никогда.</p><p>Отдельно — про то, кто владеет шаблоном, когда в один файл пишут и кодогенератор, и человек в Jaspersoft Studio, и где у этой схемы слабое место.</p><p>Первая часть — <a href="https://habr.com/ru/articles/1086756/" rel="noopener nofollow">откуда взялся Jasper и почему он так устроен</a>, вторая — <a href="https://habr.com/ru/articles/1086768/" rel="noopener nofollow">один стандарт и три идеи</a>.</p> <a href="https://habr.com/ru/articles/1086826/?utm_campaign=1086826&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 25 Sep 2026 18:24:29 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[Модульная надстройка для JasperReports: один стандарт и три идеи. Часть 2]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1086768/</guid>
      <link>https://habr.com/ru/articles/1086768/?utm_campaign=1086768&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/31e/325/efb/31e325efbd3e6f5b4fd413cba88af408.png" /><p>Во второй части серии — чего ждёт от инструмента отчётов современный Java-разработчик и на каких идеях я собрал свою надстройку над JasperReports — не переписывая движок и не отказываясь от Jaspersoft Studio.</p><p>Один стандарт вместо нескольких способов передать данные: в отчёт едут обычные Java-объекты. Дерево вместо плоской сетки банд: отчёт собирается из модулей, вложенных друг в друга, включая повторяющиеся. Слои: данные добывает Java, вёрстка остаётся в JRXML и в Studio. И объект как единый носитель структуры, данных и имён — вместо одного и того же смысла, продублированного и в XML, и в коде.</p><p>Отдельно — ответ на возражение из комментариев к первой статье: зачем вообще выносить выборку данных из шаблона, если Jasper умеет ходить в базу сам.</p><p>Первая часть серии — <a href="https://habr.com/ru/articles/1086756/" rel="noopener nofollow">откуда взялся Jasper и почему он так устроен</a>.</p> <a href="https://habr.com/ru/articles/1086768/?utm_campaign=1086768&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 25 Sep 2026 13:50:46 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[Модульная надстройка для JasperReports: откуда взялся Jasper и почему он так устроен. Часть 1]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1086756/</guid>
      <link>https://habr.com/ru/articles/1086756/?utm_campaign=1086756&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/c3d/a31/6df/c3da316df0cfed38e416084f70ea565e.png" /><p>JasperReports появился в самом начале нулевых: румынский разработчик Теодор Данчу делал большой Java-проект, где нужно было формировать и печатать много сложных документов, а готовые решения оказались проекту не по карману. Прошло двадцать пять лет, движок жив и широко используется, а работают с ним примерно так же, как тогда. И на это есть причины, которые лежат в его происхождении.</p><p>В первой части серии — откуда взялся Jasper и почему он устроен именно так. Почему отчёт умеет сам ходить в базу и что из этого выросло: несколько разных способов передать в него данные, ручной вайринг субрепортов через строковые имена параметров и роли разработчика и верстальщика, между которыми нет чёткой границы. Плюс короткий срез состояния движка в 2026 году.</p><p>Это не критика. Ядро у Jasper мощное, просто он наследник другой традиции — той, где отчёт является самостоятельным приложением, а не частью вашего.</p> <a href="https://habr.com/ru/articles/1086756/?utm_campaign=1086756&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 25 Sep 2026 13:27:32 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[аннотационный процессор]]></category><category><![CDATA[субрепорты]]></category><category><![CDATA[pdf]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Один код на Paper и Velocity: как устроены multiloader-плагины в 2026]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1086750/</guid>
      <link>https://habr.com/ru/articles/1086750/?utm_campaign=1086750&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/51c/dd4/c58/51cdd4c5845ed15712e010d9a7bcf866.jpg" /><p>Один код — и Paper-сервер, и Velocity-прокси: разбираем, как устроены multiloader-плагины для Minecraft и чем они питаются в 2026 году — от архитектуры до сборки.</p> <a href="https://habr.com/ru/articles/1086750/?utm_campaign=1086750&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Узнать о Multi Loader</a>]]></description>
      
      <pubDate>Fri, 25 Sep 2026 13:03:15 GMT</pubDate>
      <dc:creator><![CDATA[CoderBeJIIHiu]]></dc:creator>
      
      <category><![CDATA[Minecraft]]></category><category><![CDATA[PaperMC]]></category><category><![CDATA[Velocity]]></category><category><![CDATA[Java]]></category><category><![CDATA[Gradle]]></category><category><![CDATA[плагины]]></category><category><![CDATA[Multiloader]]></category><category><![CDATA[MiniMessage]]></category><category><![CDATA[Open Source]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Retry policy на практике: подводные камни внедрения]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/ru_mts/articles/1086170/</guid>
      <link>https://habr.com/ru/companies/ru_mts/articles/1086170/?utm_campaign=1086170&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/1ae/867/72e/1ae86772ec201d3453ee8aec34c070e8.png" /><p>Что делать, если произошла ошибка? Житейская мудрость говорит, что можно попробовать еще раз.&nbsp;</p><p>В контексте разработки ПО существует известный и простой паттерн для повышения отказоустойчивости — retry.</p><p>Реализация ретраев в Java-приложениях придумана давно. Как вариант — достаточно добавить в код стандартные аннотации. Но внедрить ретраи — это не так просто,&nbsp;как кажется: нужно решить еще много вопросов — например, как сохранить согласованность данных, как подружить ретраи на разных уровнях&nbsp;архитектуры, а еще учесть особенности разных технологий. И наконец, как при этом не навредить проекту.</p><p>Привет! Меня зовут Петр Деменев, я Java-разработчик в MTC Web Services. В материале расскажу о нашем горьком, но успешном опыте внедрения политики ретраев в реальный проект и о неочевидных особенностях, с которыми мы столкнулись. В тексте будет акцент не на строгих теоретических канонах, а на реальной жизни, чтобы приземлиться на уровень практического опыта. И попутно расскажу о некоторых способах ретрая.</p> <a href="https://habr.com/ru/articles/1086170/?utm_campaign=1086170&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 24 Sep 2026 13:31:18 GMT</pubDate>
      <dc:creator><![CDATA[petr_stb (МТС)]]></dc:creator>
      
      <category><![CDATA[java]]></category><category><![CDATA[spring]]></category><category><![CDATA[spring framework]]></category><category><![CDATA[retry]]></category><category><![CDATA[retry policy]]></category><category><![CDATA[retry topic]]></category><category><![CDATA[kafka]]></category><category><![CDATA[микросервисы]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Отцы и дети. Java и Go]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1081604/</guid>
      <link>https://habr.com/ru/articles/1081604/?utm_campaign=1081604&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/c34/2c2/f6c/c342c2f6c08bf61955b58a0ff17e9f3b.jpeg" /><p>Не война двух языков (хоть и бывает), не разные идиомы и взгляды на реализацию делают инструмент “плохим”, а по классике - забивание гвоздей молотком и карго-культ</p> <a href="https://habr.com/ru/articles/1081604/?utm_campaign=1081604&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 21 Sep 2026 17:37:36 GMT</pubDate>
      <dc:creator><![CDATA[hyragano]]></dc:creator>
      
      <category><![CDATA[go]]></category><category><![CDATA[java]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
