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