Обновить
149.24

Java *

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

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

Как сократить расходы на токены и повысить точность LLM

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

Когда количество доступных LLM инструментов (tool-ов) разрастается, традиционные подходы к tool calling становятся непрактичными — утилизация токенов улетает ещё до начала общения. К тому же, модели становится сложнее выбрать нужный набор tool-ов для решения проблемы.

В новом переводе от команды Spring АйО читаем о паттерне Tool Search Tool, предложенном Anthropic и реализованном в Spring AI с помощью ToolSearchToolCallAdvisor. Он позволяет LLM динамически находить нужные инструменты по мере необходимости, экономя до 64% токенов и повышая точность.

Читать далее

Структура кода в папке Domain по DDD

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

В слое Domain 90% проектов с тактическим DDD забыли о самом главном. Сегодня мы вспомним то о чем забыли или узнаем то чего не знали.

Читать далее

Как приручить iText8: превращаем HTML в PDF без седых волос

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

Представьте ситуацию: пятница, вечер, до релиза осталось два дня. Заказчик внезапно вспоминает, что «было бы неплохо генерировать договоры в PDF». Знакомо?

Я оказался в похожей ситуации год назад. Задача казалась тривиальной: взять HTML-шаблон счёта, подставить данные и получить красивый PDF. «Часа на два работы», — подумал я. Как ошибался...

Читать далее

OpenIDE Pro: ответ на запросы бизнеса и разработчиков одновременно

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

Привет! Я Фёдор, CEO OpenIDE. За год с момента анонса OpenIDE выросла в стабильную, привычную и активно используемую IDE, которую всё чаще выбирают разработчики и компании. Мы создали её быстрой, предсказуемой и полностью доступной — и теперь готовы к следующему шагу.

В этой статье — что мы сделали, зачем мы это делаем и куда дальше движется OpenIDE.

Читать далее

Fluent API. Часть 3 — что нам стоит Fluent API построить?

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

Теперь, после того как в предыдущей статье так красочно описаны преимущества Fluent API появилось опасение что все  эти “плюшки” просто не могут быть бесплатными. Наверняка это очень дорого, или нет?

Читать далее

Fluent API. Часть 2 — а оно нам надо?

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

Продолжаем разговор о Fluent API. И теперь, после того как мы из предыдущей статьи (или/и личного опыта) узнали о том что это чудо из себя представляет давайте разберемся зачем оно нужно?

Читать далее

Fluent API. Часть 1 — это вообще о чём?

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

В то время как аналитики жарко спорят на тему станет ли основным языком программирования 6-го (видимо) поколения английский или все-таки китайский предлагаю поговорить немного на другую тему, но в том же направлении: как сделать код программы ближе к человеку? 

Один из ответов на этот вопрос зародился еще в 70-х годах прошлого столетия как method chaining в рамках языка Smalltalk и, благодаря стараниям Эрика Эванса и Мартина Фаулера дошел до нас как Fluent API.

Читать далее

Больше никаких велосипедов: готовый Spring Boot Starter для Telegram-ботов

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

После создания примерно десятка Telegram-ботов я понял, что архитектура, конфигурации и маршрутизация повторяются из проекта в проект. Готовых актуальных решений для Spring Boot я не нашёл. Поэтому разработал собственный Telegram Bot Spring Boot Starter: с прозрачным пайплайном, набором готовых компонентов и возможностью гибкой кастомизации.

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

Читать далее

Elasticsearch: реляционная база данных против поискового движка — Битва Титанов

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

В мире разработки часто возникает соблазн использовать знакомый инструмент для всех задач. Зачем изучать что-то новое, если есть проверенная реляционная база данных (РСУБД), такая как PostgreSQL или MySQL? Однако, когда дело доходит до реализации мощного, быстрого и релевантного поиска, этот подход терпит неудачу.

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

Чтобы статья была максимально практико-ориентированной, мы рассмотрим, как с помощью Spring Boot быстро поднять приложение с интегрированным Elasticsearch и реализовать поиск, который «летает».

Читать далее

Hibernate Validator 9.1: самый мощный апгрейд за последние годы

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

Что, если ваш валидатор стал бы в 3 раза быстрее и потреблял бы вдвое меньше памяти — без единой правки бизнес-логики? Именно это случилось с Hibernate Validator 9.1: ушли тяжёлые коллекции, пришёл умный стек. Каскадная валидация теперь летает, даже при циклах в графе объектов.

Плюс бонус: меньше мусора в памяти, меньше аллокаций, быстрее интерполяция сообщений. В бенчмарках — просто космос. Все это – в новом переводе от команды Spring АйО.

Комментарий Поливаха Михаила: Несмотря на то, что с валидацией мы напрямую работаем не часто, имейте в виду, что Spring Boot и ваши @RestController-ы под капотом всё равно используют hibernate-validator. Поэтому почитайте, не поленитесь.

Читать далее

Внешний мониторинг доступности IT-приложений

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

Всем привет! Иногда внутренний мониторинг не даёт полной картины, что все работает как надо. И полезно сделать внешний пинг и посмотреть, действительно ли нужный проект доступен.

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

Читать далее

Миграция демо-проекта на Spring Boot 4, Spring 7.0, JDK 25

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

Продолжаю серию публикаций про наши Java-онлайн курсы. Предыдущие посты:

Тесты на дженериках. Параметризация AssertJ и сравнение Json через объекты

Контроллеры на дженериках: пишем кода в 3 раза меньше

Миграция Java Spring Boot на Kotlin

Работа с документами в Java

Как многие знают, недавно вышел Spring Boot 4 / Spring 7.0. В постах компании@spring_aio есть несколько статей по новому функционалу.

Я мигрировал наш небольшой учебный демо-проект Spring Boot 3.x HATEOAS (ссылка на GitHub) на Spring Boot 4 и добавил API версионирование. В статье даю ссылки на новый функционал, описываю шаги миграции и код проекта. Буду рад читателям:)

Читать далее

OpenIDE 2025.2: поддержка Java 25, Virtual Thread Debugging и обновления UI

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

Вышла OpenIDE 2025.2 — первая российская IDE с поддержкой Java 25. Мы идём в ногу с платформой и остаёмся на самом острие технологий. Но не только этим релиз интересен: в нём появилась улучшенная отладка виртуальных потоков, обновления связанные с UI, а ещё пара важных обновлений экосистемы.

Поехали по порядку.

Читать далее

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

Помогите, мой Java-объект исчез (и GC тут ни при чём)

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

Команда Spring АйО подготовила перевод разбора реального бага в HotSpot от разработчика OpenJDK. Во время работы над Project Valhalla его Java-объекты и классы начали «исчезать» без участия сборщика мусора — и поиск причины привёл к одному неверному биту в заголовке объекта, miscompilation в C2 и очень нетривиальному отладочному квесту. Этот текст показывает, как устроены mark word и Compact Object Headers, чем живёт Valhalla и как системное мышление плюс флаги JVM помогают выловить самые коварные ошибки.

Читать далее

Три способа менять один объект из нескольких потоков. Больше нет

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

Три способа менять один объект из нескольких потоков. Больше нет

Mutex, CAS, акторы, STM, CRDT, иммутабельность, MVCC, Disruptor…

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

На самом деле их ровно три. Всё остальное — реализации и комбинации.

Эта статья — попытка навести порядок в голове. После неё вы сможете:

за 5 секунд классифицировать любой подход к конкурентности;
понимать, почему Erlang выбрал акторы, а Java предлагает synchronized;
не изобретать велосипеды и не зацикливаться на «единственно правильном» решении;
проектировать многопоточный код, держа в голове простую модель.

Заодно, покажу почему ООП вообще не было изначально спроектировано под многопоток.

Читать далее

“JavaScript — это плохо, а Java — это хорошо”. AI, вайб-кодинг, Spring и рынок труда: что волнует джавистов сегодня

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

На конференции Joker 2025 у нас была отличная возможность понять, как живётся Java-сообществу.

Как AI влияет на Java-разработку? Вайб-кодинг — полезный инструмент или угроза рабочим местам? Spring — незаменимый фреймворк или слишком тяжёл для многих задач? Что с рынком труда и зачем кандидаты накручивают опыт? И главное — зачем писать на Java, если есть JavaScript? 

Смотрите на YouTube и VK Видео

Читать далее

Ouroboros — язык программирования почти без синтаксиса

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

От переводчика: статья немного сокращена по сравнению с оригиналом, исключён раздел об этимологии слова "Ouroboros", а также полные каламбуров отсылки автора к латинским, прочим романским и английским корням.

Далее - от автора.

Можно ли создать язык программирования, в котором нет синтаксиса? Кажется, что это чистое противоречие. Вся суть языков программирования заключается в синтаксисе, плюс немного в генерации и оптимизации кода, настройке сред выполнения и т.д. Но с точки зрения программиста — именно синтаксис самая важная часть языка. Когда вы приступаете к изучению нового языка программирования, вам обязательно придётся уделить время освоению синтаксиса. 

Можно ли просто избавиться от синтаксиса или, как минимум, предельно его упростить? Другой вариант — можно ли сделать синтаксис произвольным, чтобы программист, пишущий код, мог сам для себя его определять?

Именно этих целей мы попытались достичь, создав язык Ouroboros. Его синтаксис максимально прост. Настолько, что в этом языке даже не предусмотрен синтаксический анализатор. В нём есть только лексический анализатор, код которого составляет 20 строк.

Читать далее

Проблемно-ориентированная система на основе консольных JAVA приложений

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

Привет, Хабр! Хочу поделиться опытом разработки такой системы. Определяющими параметрами проблемно‑ориентированной системы являются.

Читать далее

Создаём мини-фреймворк для MapReduce в Scala с конкретной реализацией

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

Статья демонстрирует построение минималистичного MapReduce-фреймворка на Scala для локальных экспериментов. Рассматриваются стадии Map, Shuffle и Reduce с ленивыми вычислениями через Iterator, а также абстракции ввода/вывода IO и локальные исполнители с виртуальными потоками.

Читать далее

HistoryHelper — плагин для DBeaver, который генерирует history-таблицы и триггеры за пару кликов. Часть 2

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

Приветствие

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

Читать далее

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