RU

Разработчику нужно знать семь языков. Python, Go и Java в этот список не входят

Бывает так: код хороший, задачи закрыты, к технической части претензий нет. Но и повышения тоже нет. Или идею не взяли. А на интервью — отказ без вн…

GolangJavaPythonCEOCTOкарьера программистафакапы
Habr
RU

Конвертация docx на сервере: LibreOffice headless против Apache POI, и где каждый ломается

Задача звучит безобидно: «нам нужно на бэкенде превращать .docx в .html (а иногда .html в .pdf )». В тикете это одна строчка. На практике конвертаци…

конвертация документовApache POILibreOfficedocx в htmlUNO APIheadless LibreOfficeJavaKotlinJODConverterhtml в pdf
Habr
RU

Одно лишнее if — и объект уезжает в кучу: как C2 решает, каким аллокациям не быть

Пара new в горячем методе может вообще не попасть в кучу — а после безобидного if внезапно вернуть аллокации обратно. Разби…

JavaJVMHotSpotC2Escape Analysisскалярная заменаJIT-компиляцияаллокации памятиоптимизация производительностиJMH
Habr
RU

[Перевод] Пересекая реку Стикс: Spring Boot 3.5 и проблема зомби-зависимостей

Недавно я разбирал истории CVE, связанные с завершением поддержки Tomcat 8.5 , и решил посмотреть на Spring Boot 3.5. Я задался тем же вопросом прим…

JavaSecuritySpringjdkрелизный циклaxiomaxiom jdkбезопасностьsecurity-патчиобновление безопасности
Habr
RU

От клика до железа: хроника одного запроса. Часть 2

В первой части мы заставили кнопку на веб-странице запустить локальный exe-файл через расширение Chrome и Native Messaging Host. Теперь усложним зад…

Chrome Native Messagingрасширения ChromeJavaJavaScriptGraalVMconnectNativeService WorkerManifest V3Native ImageWindows
Habr
RU

Как мы заменили 30-минутный polling на IMAP IDLE и построили маленькую распределённую систему

Когда-то наш почтовый загрузчик был обычным методом с @Scheduled . Раз в 30 минут он подключался к ящикам, искал новые вложения и запускал их обрабо…

JavaSpring BootIMAP IDLEdistributed systemsPostgreSQL leasesidempotencybackpressurevirtual threadsconcurrencyat-least-once delivery
Habr
RU

Приложение простояло 918 мс, а сборщик мусора отработал за одну: разбираемся, куда ушло остальное

Секундная пауза в Java‑приложении легко выглядит как проблема сборщика мусора, хотя сам GC может отработать за миллисекунду. Разберём…

JavaJVMточки безопасностиsafepointсборщик мусорапаузы JVMпрофилирование Javaasync-profilerJFRпроизводительность приложений
Habr
RU

Вам не нужны микросервисы

Какое‑то время назад, проработав 3 года на позиции Java Middle+‑ разработчика на крупном монолитном легаси‑проекте (естественно, моду…

Spring Modulithмодульный монолитмикросервисыархитектура приложенийJavaSpring Bootгексагональная архитектураперевод PDF
Habr
RU

"__TypeId__": как один Kafka-заголовок незаметно связывает микросервисы именами Java-классов

Если два сервиса обмениваются JSON, но один из них не может десериализовать сообщение без знания полного имени Java-класса другого сервиса - значит,…

Javaspring frameworkkafkaмикросервисы__TypeId__TYPE_MAPPINGSJsonSerializerJsonDeserializer
Habr
RU

Один язык документов, несколько форматов: как я отделил layout engine от PDFBox и Apache POI

Долгое время GraphCompose выглядел как PDF-движок. Но архитектурно PDF никогда не должен был быть центром системы: разработчик описывает документ на…

GraphComposeJavadocument generationlayout enginePDFPPTXPDFBoxApache POIopen sourcebackend
Habr
RU

ИИ-агент собрал сам себя: эксперимент с LangChain4j и уроки для Java-разработчиков

LLM по документации LangChain4j собрала клона себя — мультиагентного кодера. Он починил баги, прошёл 11 тестов и показал, почему workflow быстрее su…

JavaИскусственный интеллектФреймворки и библиотекиOpenAIСтатьи
Tproger
RU

Один фреймворк для Android и iOS: звучит круто, работает?  Нет

Почему единый кроссплатформенный фреймворк для автотестов Android и iOS не работает на практике и когда стоит разделить его на два отдельных проекта…

JavaТестированиеAndroidGitРаспознаваниеiOSРаботаSwiftHRGitLabKotlinФинтехQAПриложениеdevСерверБиблиотекиТестирование приложений и сайтов плюсИнфраструктураСтатьи
Tproger
RU

Testcontainers в CI: почему тесты зелёные локально и красные на пайплайне

Локально Testcontainers запускается за секунды, тесты стабильно зелёные, а в CI тот же набор начинает падать в трёх запуска…

Testcontainersинтеграционное тестированиеDockerJavaнестабильные тестыконтейнерыGitLab CIпараллельные тестыуправление ресурсами
Habr
RU

Java‑код скомпилировался — это ещё не значит, что он работает

Есть целый класс Java‑багов, которые компилятор пропускает, а тесты на счастливом пути не ловят: код синтаксически корректен, но&nbsp…

Javastatic-analysiscode-reviewtry-with-resourcesequals-hashCodeSonarQubeNullPointerExceptionобучение
Habr
RU

REST Assured: почему зелёные тесты пропускают баги в API

В статье разбираем практический маршрут на REST Assured 6.0.0 и JSON Schema: как закрыть структуру ответа одной проверкой, как сделать схему по-наст…

JavaавтотестыREST-AssuredJSON-Schemaтестирование-APIконтрактное-тестированиеJSON-Schema-Validator
Habr
RU

ArrayList против LinkedList: спор, который ИИ всё ещё проигрывает практике

ArrayList или LinkedList — классический вопрос по Java, на который до сих пор часто отвечают по учебнику, а не&nb…

JavaобучениеArrayListLinkedListколлекциипроизводительностьструктуры-данныхcache-localityBig-O
Habr
RU

Рейтинги языков программирования в 2026 году с учётом ИИ-агентов и нейрослопа

Выбор языка программирования (ЯП) отражает стиль мышления разработчика. Однако если какой-то язык называют «популярным», это вовсе не значит, что он…

рейтинг языков программированияязык программированиявакансиивойти в itPythonC++c#JavaRustSQL
Habr
RU

Java для автоматизаторов: Алгоритмы, скорость и подводные камни

Когда автотестов становится много, каждый лишний цикл превращается в минуты ожидания на CI. Разбираем на реальных примерах, как оценка сложности алг…

JavaавтоматизацияалгоритмыBig OSeleniumWebDriverоптимизацияпроизводительностьтестирование
Habr
RU

Как желание быстрее читать чужой код превратилось в войну с недетерминизмом LLM

Началось всё примерно так. Я сидел над своим проектом: пока работал, общался по нему с нейросетками и параллельно искал в&n…

LLMprompt engineeringдетерминизмJavaоценка кодаобучение программированиюGemini APIprompt injectionpet projectNLP
Habr
RU

[Перевод] Java против Go в 2026: бенчмарк через шесть лет показал другую картину

Java на бенчмарках обогнала Go при росте нагрузки: повтор эксперимента 2020 года в котором Mark Nelson и Peter Nagy сравнивали микросервисы на Go и…

JavaGoHelidonвиртуальные потокиLeyden AOTбенчмарк микросервисовпроизводительность JVMvirtual threadsOracle JDKсравнение языков программирования
Habr
RU

Как приручить legacy-код: безопасная модернизация без заморозки фич

Как модернизировать legacy-код без остановки продукта: Strangler Fig Pattern, feature flags, shadow testing и безопасная миграция данных. Практика и…

ИнтернетAPIJavaGitОпросPythonRubyMySQLПрактикаSQLРефакторингРаботаTorGitHubБотыHRMITФинтехICORedisQAБэкендTwitterИграПриложениеСерверKubernetesБиблиотекианалитикOpenTelemetryPostgreSQLDeFiGrafanaБизнесLegacyТехникаСтатьи
Tproger
RU

Как сделать MCP-сервер из Spring-сервиса за один вечер. И что потом не даст спать спокойно

AI‑агенту не нужен прямой доступ к базе, чтобы отвечать на вопросы оператора или вызывать действия в системе. Достаточно да…

MCPSpring AIJavaSpring BootAI-агентыLLM-интеграциимикросервисыбезопасность LLMprompt injectionархитектура ИИ-приложений
Habr
RU

Топ плагинов IntelliJ IDEA для автоматизатора

Плагины IntelliJ IDEA, которые реально экономят время автоматизатора: быстрая генерация тестов, парсинг JSON в DTO, навигация по чужому коду, цветны…

IntelliJ IDEAплагиныJavaавтоматизация тестированиятестировщикавтотестыLombokJUnitCucumberSelenium
Habr