Обновить
147.31

Java *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Осознанная стоимость абстракций: Autoboxing в современной Java

Время на прочтение14 мин
Охват и читатели8.9K

Мы живём во времена, когда на оперативной памяти для heap Java-приложений почти не экономят, а архитектурные решения, которые ещё недавно можно было назвать расточительными, всё чаще воспринимаются как best practices.

Но не все коту масленица. Благодаря AI - буму, облачным вычислениям и микросервисной архитектуре с сотнями одновременно работающих инстансов, мы можем воочию наблюдать неукротимый рост стоимости оперативной памяти, что обязывает вернуться к рассмотрению принципов её экономии.

В этих условиях привычные абстракции требуют переоценки.

Сегодня я хочу напомнить об одной из самых распространенных в Java — autoboxing — механизме автоматической упаковки примитивных типов в соответствующие объекты-обертки.

Приглашаю вас посмотреть на знакомый Java-код не глазами разработчика, а глазами JVM, сборщика мусора и процессора, и разобраться, как незаметные на уровне синтаксиса решения превращаются в аллокации, давление на GC и раздувание heap.

Погрузиться

Новости

Project Panama: как Java научилась говорить на C! (Часть 1)

Уровень сложностиПростой
Время на прочтение22 мин
Охват и читатели8.8K

Как безопасно и эффективно вызывать C-функции из Java? Благодаря Project Panama — новому API из OpenJDK — это стало возможно без использования JNI. 

В новом переводе от команды Spring АйО познакомимся с основами FFM API, посмотрим на запуск Hello World на C, роль jextract, и на то, как управлять памятью вне кучи JVM.

Читать далее

Реализация гексагональной архитектуры на Java

Уровень сложностиСредний
Время на прочтение41 мин
Охват и читатели9.2K

В данной статье рассматривается архитектура проекта, позволяющая модульным образом интегрировать инфраструктурные фреймворки, такие как Spring, Quarkus и Micronaut, без необходимости модификации ядра предметной области (domain) или внешних API.

Читать далее

И снова про алгоритмы и структуры данных…

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели12K

За годы разработки приходит понимание, что происходит в тех или иных сервисах, когда они тормозят, лагают, выдают «неожидаемое» поведение. В данной статье хочу рассмотреть проблему неправильного использования алгоритмов и архитектурных решений с бытовой, общечеловеческой стороны.

Читать далее

Kafka для начинающих: работа с Kafka транзакциями на практике — когда они нужны, а когда только вредят?

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели9.7K

Как работать с Kafka транзакциями из Spring Boot? Когда они нужны, а когда бесполезны или даже вредны?

Простым языком и с примерами кода о Kafka транзакциях.

Читать далее

Миграция проекта с Node.js на Java-стек с помощью ИИ

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели6.2K

Один из наших проектов нужно было перенести на Kotlin, чтобы включить его в общую экосистему клиента и упростить поддержку. Мы должны были курировать процесс и следить за итоговой реализацией, в которой заказчик решил использовать ИИ.

В этой статье рассказываем о реальных возможностях нейронки для миграции бэкенда и про то, с чем лучше к ней не обращаться — чтобы не тратить ни время, ни нервы.

Читать далее

От Redis к Kafka Streams: как мы проверяем сетевую доступность 200к устройств

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели8K

В инфраструктуре банка мы ежедневно работаем с ~200 000 физических устройств: это IP-камеры, сетевые видеорегистраторы и другая периферия. Каждое из них должно быть проверено на доступность — не реже чем раз в 10 минут.

Требования к системе:

не создавать бессмысленную нагрузку на инфраструктуру;

решение должно быть горизонтально масштабируемым;

система должна выдерживать падение pod, rebalance, сетевые сбои.

Читать далее

Как затащить AI в Java/Kotlin проект

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели8.2K

Мир Enterprise-разработки на Java/Kotlin и мир нейронных сетей кажутся параллельными вселенными. С одной стороны - статическая типизация, многопоточность, Spring-контейнеры, а с другой - Python-скрипты, тензорные операции и эксперименты в Jupyter Notebook. Между ними - пропасть, через которую многие команды не решаются перешагнуть.

Однако необходимость строить этот мост возникает всё чаще. Заказчик хочет «искусственный интеллект» в новом фиче, аналитики мечтают о реализации чат-бота  с преферансом и барышнями, а менеджеры слышали, что конкуренты уже всё автоматизировали. Как же совместить надежность и структуру JVM-проекта с гибкостью и мощью AI? В этой статье постараемся разобраться какие инструменты для этого есть на данный момент и как с ними работать.

Читать далее

Доступ к ChatGPT за 5 минут без VPN

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели52K

Примерно год назад я написал статью ChatGPT без VPN за 10 минут (и установка нативного приложения). Хотя она актуальна до сих пор, сегодня я хочу вам рассказать про еще один способ.

Суть: мы делаем свой DNS-профиль в NextDNS или Cloudflare и автоматически актуализируем его раз в сутки.

Для этого я написал небольшую программу. Самое приятное: для ее работы вам не придется ничего устанавливать вообще.

Читать далее

Как жёсткие правила сборки релизов упростили жизнь инженерам финтеха

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели8.3K

Перевели инфраструктуру Java-разработки высоконагруженного финтеха с SLA 99,99% на доверенный репозиторий компонентов. Это отечественный продукт из экосистемы Axiom JDK. Делимся инженерными деталями этого перехода.

Читать далее

LLM + 1C: Почему чат-бот для учета — это плохая идея, и как реализовать AI-шлюз через OData

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели8.6K

LLM + 1C = ? Почему чат-бот для учета — это плохая идея, и как я сделал из него «умный шлюз».

Изначально идея казалась кристально чистой: пользователь отправляет текстовый или голосовой запрос (например: «Выведи топ должников по Тверской области на текущую дату и суммы задолженности»).

Читать далее

Как я поучаствовал в разработке Camunda 8 или пример типичной ошибки в многопоточном коде

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели13K

Зимой 2024 года мне довелось поучаствовать в разработке проекта на Camunda 8. Сразу оговорюсь: проект в итоге реализовали на другом движке. Тем не менее, команда успела сделать стенд, прогнать тесты и замерить производительность.

В этой статье я расскажу об одном эпизоде, когда мне пришлось исправить библиотеку spring-zeebe из Camunda 8, отвечающую за обвязку Job Worker на Spring.

Одной из моих задач было отладить процесс, используя локальные интеграционные тесты с Docker и библиотекой Testcontainers. Мы создали простой процесс, вызывающий наш Job Worker, подлежавший отладке. Сразу столкнулись с плавающей ошибкой: иногда тест проходил успешно, иногда — нет. Несколько тасков работали корректно, однако первый периодически игнорировался без видимых ошибок. Изначально подозревали проблему в собственном коде, проверяли конфигурацию Job Worker, благодаря чему узнали много нового о Camunda 8.

Читать далее

DeepSeek в Intellij Idea через плагин Continue

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели6.8K

Может кому пригодится, на просторах интернета не нашел, как запустить модель deepseek в idea, потому сам вместе с deepseek допиливал конфиг и обучал модель работе через инструменты плагина. Ну и попутно решил проблему с зависаниями, плагин очень любил зависнуть, приходилось ide перезапускать.

Сразу оговорюсь, решение не элегантно, я не убирал лишний код, строки и текст, я просто добился рабочего состояния и более ничего не тестировал и не трогал. Годами работы приучен «работает — не трож». Потому решение as is выкладываю. Можете сами эксперименты проводить и допиливать, мне был просто нужен рабочий инструмент, на тюнинг не осталось желания, накрыла лень и я продолжил заниматься изначальным своим проектом =)

Читать далее

Ближайшие события

Корпоративный RAG как MCP-сервис: подключаем кодовую базу к IDE

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели10K

В компаниях с несколькими продуктами знания о коде и архитектуре почти неизбежно расползаются. Часть живёт в репозиториях, часть — в статьях с архитектурными решениями, часть — в корпоративной базе знаний (в нашем случае — Confluence). На небольшом масштабе это выглядит как порядок. Но по мере роста начинают проявляться системные эффекты.

Появляется дублирование функционала с разными подходами. Сложнее становится погружаться в новый продукт при кросс-командных переходах. Поиск по каждому репозиторию и каждому пространству документации по отдельности — медленный и утомительный. В итоге вопросы уходят к «знающим людям», которые постепенно превращаются в узкое горлышко.

Мы столкнулись с этим в явном виде и сформулировали задачу так: дать разработчикам и системным аналитикам быстрый и актуальный поиск по всей кодовой базе компании с возможностью диалога через универсального агента.

В этой статье я расскажу, как мы построили локальный RAG-сервис, оформили его как MCP-сервер и подключили к IDE. Подход будет полезен командам с большим количеством репозиториев, внутренней документацией и требованиями к безопасности.

Читать далее

Field vs Constructor Injection в Java: ошибка объектного дизайна или вопрос синтаксиса?

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели7.7K

Знаю, знаю... Прочитав заголовок, хочется голосом волка из мультфильма «Жил был пёс» сказать — «Шо, опять?». Ведь битва этих подходов давно закончилась и разработчики Spring уже поставили точку.

Но недавняя публикация в одном довольно крупном Telegram‑канале заставила меня вернуться к этому вопросу. В качестве главных аргументов против field injection там приводились лишь сложность изоляции в тестах и неудобство создания экземпляров для unit‑тестов.

И хотя с этими пунктами не поспоришь, у многих разработчиков и не только начинающих, остаются вопросы: каковы реальные последствия для самого объекта? Можно ли считать его полноценным сразу после создания new? И почему все современные рекомендации так настаивают на конструкторах?

Поиск ответов показал мне, что аргумент о тестах лишь верхушка айсберга. В глубине, куда я Вас сегодня приглашаю заглянуть, скрываются куда более фундаментальные вопросы принципов объектно‑ориентированного дизайна, гарантий Java Memory Model и уважения к жизненному циклу объекта.

Читать далее

Ограничь меня полностью! Или история одной ма-а-а-аленькой фичи

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели9.1K

Бывало ли у вас так что задача на час максимум в результате занимает целый рабочий день или даже больше?

Почему так происходит? Нужно ли тестировать сторонние библиотеки? Есть ли польза от типичных задач для собеседований? Когда "костыль" вполне рабочее решение?

Частные ответы на все эти, казалось бы не связанные, вопросы попытаемся найти в непридуманной истории фичи, которая изначально казалась на 5 минут, а вышло...

Читать далее

Java Digest — Новогодний спецвыпуск

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели8.4K

Всем привет! 👋👋👋👋👋 Мы Java-разработчики Т-Банка: Андрей, Арсений, Роман, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.

Читать далее

Инженерия создания микросервиса spring-web-flux

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели7.8K

Создать Spring-сервис просто: существует масса статей и отличная документация. Однако среди всего этого многообразия материалов зачастую сложно разобраться, какой именно набор технологий лучше выбрать и каким образом эти технологии должным образом интегрировать друг с другом. После перехода на новые версии библиотек многое начинает функционировать иначе, появляются совершенно другие подходы. В данной статье я хочу продемонстрировать один из возможных способов разработки микросервиса в 2026 году, а также рассмотреть несколько инструментов автоматической генерации кода: OpenApiGenerator, JooqCodegen, GigaChat, Liquibase — и объяснить, как они работают вместе в рамках единого проекта.

Точкой отсчета для построения микросервиса сделаем описание REST API. Допустим, в нашем фантастическом мире аналитик заранее подготовил спецификацию API с помощью формата OpenAPI, хотя подобное встречается и в реальной практике.

Читать далее

Под капотом многопоточной синхронизации в Java: как потоки договариваются через Mark Word

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели12K

Когда вы пишете synchronized(obj), под капотом происходит целая цепочка событий, которую можно отследить до Mark Word — восьмибайтового служебного поля в каждом Java-объекте. В современных реализациях JVM (таких как HotSpot, OpenJ9, GraalVM) используется динамическая, адаптивная система, которая выбирает наиболее эффективную стратегию блокировки в зависимости от реального поведения потоков.

Читать далее

Easy Maven — Dependencies Search. Или воскрешаем Maven Dependency Helper плагин

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели9K

Всем привет! Недавно я опубликовал статью, в которой сказал что она будет последней по Easy Maven т.к. все что можно я уже делегировал Maven — импорт проекта, запуск тасков, анализ зависимостей. Но недавнее обилие багов в IDEA 2025.3 связанных как с зависанием так и повышенным потреблением памяти Maven проектами, окунуло меня в баг трекер IDEA, где я нашел много похожих проблем, которые также затрагивают и мавен индексы. Помню как меня самого это раздражало, когда IDEA чуть ли не при каждом открытии, начинает сканировать локальный репозиторий. Про это даже писали в комментариях — где ответ был один — отключить это. Плюс недавно один из постов в тг канале (спасибо за это @javadev), еще больше убедил меня в том, что так дальше жить нельзя и я решил поправить проблему поиска зависимостей так как я ее вижу — не изобретать велосипед, а делегировать поиск туда, где это уже реализовано. Ведь как известно: самый лучший код — тот который ты не написал. Посмотрим что из этого вышло.

Читать далее
1
23 ...

Вклад авторов