Обновить
128K+

Java *

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

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

Виртуальные потоки после JDK 24: что изменилось в Java

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

JEP 491 в JDK 24 устранил закрепление виртуальных потоков за потоками-носителями при работе с мониторами. Именно из-за этого механизма переход на виртуальные потоки в Java 21 был рискованным для блокирующего кода внутри synchronized. Однако закрепление всё ещё возможно при выполнении нативного кода, загрузке классов и локальных файловых операциях в Linux. Поэтому событие JDK Flight Recorder (JFR) jdk.VirtualThreadPinned по-прежнему должно входить в контрольный список перед внедрением.

Читать далее

Новости

Может ли локальная 27B-модель расследовать продакшен-инцидент как Claude? Две RTX 5090, около 40 прогонов и одна гонка

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

Реальный продакшен-инцидент: пул соединений забит, активных запросов дюжина, рестарт помогает. Claude нашёл причину за двадцать минут. Нормальный человек на этом обновил бы библиотеку и пошёл дальше, но у меня две RTX 5090 стояли без дела, и зудел вопрос: а локальная 27B-модель смогла бы? Тот же промпт, тот же код, та же песочница, семь локальных моделей, около 40 прогонов. В промпте, кстати, осталась одна правдоподобная, но ложная гипотеза инженера. Я не планировал делать из неё ловушку. Она стала главным фильтром всего эксперимента.

Читать далее

Как я сделал лыжный тренер на датчиках и вайб‑кодинге — вместо подписки на готовый

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

На рынке есть готовые продукты: пара датчиков на ботинки, приложение считает технику катания, подсказывает, что тренировать. Работает неплохо. Но по подписке — и недёшево: например, у Carv безлимитный сезонный доступ стоит $249 / £199 в год. И вот тут возникает вопрос: насколько эта подписка вообще оправдана? Датчик — это акселерометр с гироскопом за пару долларов и Bluetooth‑модуль, приложение — по сути обработка сигнала и немного статистики. Разовая покупка железа плюс разработка — понятные, конечные затраты. А подписка — плата за то, что уже посчитано один раз и с тех пор просто работает. Есть ощущение, что здесь платишь не за вычисления, а за то, что вход на рынок для конкурентов высокий: откалибровать алгоритмы, написать мобильное приложение, а потом ещё поддерживать серверы, пользователей и производство железа — дорого и долго. Подписка отбивает эти инвестиции. Но большая часть этого барьера — стоимость разработки, а она за последние пару лет резко упала: с ИИ‑инструментами то, что раньше требовало команды, становится посильным для одного человека. Продукт для рынка так не сделать — там нужна калибровка на тысячах лыжников, поддержка и сертификация. А вот любительский инструмент — вполне.

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

Читать далее

Senior Java — это кто? Почему одинаковый title ещё не означает одинаковую работу

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

Две вакансии называются Senior Java. В одной ищут Spring/PostgreSQL/Kafka backend, в другой JMM, GC, lock‑free и low latency. А в третьей Senior уже незаметно превращается в Tech Lead. Я посмотрела реальные Java‑вакансии глазами IT‑рекрутера и проверила, насколько вообще название позиции помогает понять, кого на самом деле ищет компания.

Читать далее

Строим стены в SCAD++ в турбо режиме

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

В этой статье мы немного оживим SCAD++ и немного сэкономим времени на чай :-) Конструктора, проектировщики милости просим.

Читать далее

Прощай, Кинопоиск

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

В октябре 2013 года яндекс выкупил КП. Для меня на тот момент это ничего не значило, ведь сервис остался прежним и продолжал работать. И перезапуск 2015 года не сильно повлиял на мое мнение, ведь все вернули обратно. Но всё-таки они реализовали свою идею в 2018 году и добавили онлайн просмотр. Следующая неприятность случилась в 2019 году, когда авторизацию сделали только через яндекс. Именно тогда мне и пришлось зарегистрироваться в этой экосистеме. А в 2020 году изменили систему оценок. Все это, несомненно, не доставляло положительных эмоций. Но то, что происходит в последние годы, совершенно другая история...

Читать далее

Не каждый AI-вызов должен генерировать текст

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

Иногда от модели нужен не красивый ответ, а быстрое решение. Пропустить запрос или заблокировать, выбрать маршрут, оценить результат, отфильтровать документы для RAG.

Для этого появился Spring AI TypeSafe. Проект интегрирует Jev API, который отвечает на типизированные вопросы числовыми значениями и не генерирует текст.

Читать далее

DSL в эпоху ИИ: делать или не делать…

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

Всем привет. Меня зовут Сергей и я руковожу разработкой автоматизации внутренних бизнес-процессов в рамках Центра управления процессами Московской Биржи.

В эпоху повсеместного распространения инструментов на базе искусственного интеллекта (ИИ) вопрос применения доменно-специфичных языков (DSL, domain specific language) вызывает неоднозначную реакцию. С одной стороны, большие языковые модели прекрасно понимают широкое многообразие естественного языка и могут работать напрямую с ним. С другой стороны, присущая любому человеческому общению неоднозначность оставляет простор для неправильных трактовок и ошибок.

Интересно. Давай дальше...

DBML Diagram для IntelliJ IDEA с офлайн превью и открытым исходным кодом

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

Привет! На связи Boost for Java. Развиваем DBML Diagram — open source плагин для IntelliJ IDEA и других совместимых IDE на платформе IntelliJ. Он строит ER-диаграмму рядом с открытым .dbml-файлом: меняете описание таблиц и связей — превью обновляется прямо в редакторе. Построение диаграммы работает локально, без отправки схемы во внешний сервис.

В этой статье покажем возможности версии 0.1.0, пользу работы со схемами прямо в IntelliJ IDEA и устройство плагина. Отдельно расскажем о планах интеграции с dbdiagram.io для публикации локальных изменений в общую схему.

Проект открыт: будем рады предложениям, примерам проблемных схем и участию в разработке.

Плагин в JetBrains Marketplace · Исходный код на GitHub

Читать далее

«Динамические» аспекты — как я писал стартер для создания аспектов прямо из конфига

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

Всем привет, я - Нуждин Дмитрий, Backend Java разработчик в ГК Иннотех. Хотел поделиться небольшой историей о том, как я писал spring boot стартер для создания сквозной логики в приложениях через одну только конфигурацию (application.yaml), не затрагивая сам исходный код.

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

Читать далее

Мой первый outbox

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

Привет! Меня зовут Серёжа. Я работаю Java‑разработчиком. В этой статье хочу поделиться своим первым опытом реализации паттерна «outbox».

Решил я это сделать по нескольким причинам:

1. Зафиксировать для себя «на бумаге» архитектурное решение и полученный опыт.

2. Поделиться знаниями и идеями с теми разработчиками, кому только предстоит впервые выполнить похожую задачу.

3. Получить от профессионалов комментарии и замечания по улучшению моего решения.

Итак, давайте начнём!

Посмотреть на реализацию

Консенсус без Raft: ORCHID в Grid (фаза Курамото + quorum)

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

Три узла, одна база, клиент шлёт UPSERT. Нужно решить две вещи сразу: разрешить запись только на согласованном кластере и не допустить, чтобы после обрыва связи между узлами в журналах оказались разные версии одних и тех же данных.

В стеке вроде Raft логика такая: узлы голосуют за лидера, пишет только он; у каждого периода лидерства есть порядковый номер (term), чтобы отличать старые голоса от новых; лидер пропал — новые выборы. В Grid допуск записи устроен иначе. Лидер не выбирается голосованием. Вместо этого узлы обмениваются числовым параметром синхронизации (фазой, в смысле модели Курамото) и отдельно подтверждают каждую операцию контрольной суммой её содержимого. Этот протокол называется ORCHID.

Читать далее

Мы обновили Spring Boot до 4. Вот что сломалось

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

Это наш опыт миграции со Spring Boot 3.5.12 и Spring Cloud 2025.0.1 на Boot 4.0.6 и Spring Cloud 2025.1.x в большом коммерческом проекте, дополненный ссылками на официальные изменения Boot 4. В спорных местах ссылки стоят прямо в тексте, а в конце есть раздел «Источники».

Читать далее

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

Нашёл ошибки в моде Create и проверил их в игре

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

В этой статье мы разберём ошибки в одном из самых популярных модов для Minecraft — Create. Посмотрим, как они проявляются прямо в игре, и отправим пулл-реквесты с исправлениями.

Поехали!

@CacheEvict уходит раньше коммита, и кэш врёт до перезапуска

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

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

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

Разобрать кейс

Модульная надстройка для JasperReports: коллекции, рантайм и границы подхода. Часть 4

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

Это последняя часть серии — и самая плотная. Поля-коллекции и повторяющиеся субрепорты, что именно роняет сборку, как собирается карта параметров в рантайме и что происходит на старте приложения.

Дальше — про две версии движка: шаблоны у шестой и седьмой несовместимы, и одного файла на обе не бывает. Плюс пример целиком, переход с 2.0.x и честный список шероховатостей: где подход неудобен, где он не работает и кому он не подходит вовсе.

Последнее — про цену проверки при компиляции. Шаблоны лежат в ресурсах приложения, а структура отчёта — в Java-классах, значит любая правка идёт через сборку и деплой. Если отчёты у вас меняются чаще, чем выкатывается приложение, подход вас затормозит — и лучше знать об этом заранее.

Читать далее

Возвращаем трассировку логов Quartz-задач после перехода на Spring Boot 3+

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

Привет! Меня зовут Александр Каненков, я backend-разработчик в компании Домклик.

После перевода сервиса со второго Spring Boot на третий (а у кого-то уже и на четвёртый) мы с командой заметили следующую картину: HTTP-запрос журналируется с traceId, цепочка собирается в трейсе, но стоит сработать задаче Quartz — в журналах worker-потока гордо красуется [NoTrace, NoSpan]. Задача исполняется «в никуда» — без единого идентификатора, вне какого-либо трейса, и связать её с запросом, который её запланировал, невозможно.

Давайте разберём по шагам, почему это случилось и как починить так, чтобы работало и с RAM (in-memory), и с JDBC job store.

Читать далее

Переход на Java 27: гайд по GC, флагам и памяти в контейнере

Уровень сложностиСложный
Время на прочтение14 мин
Охват и читатели9.8K

Переход на новый JDK может изменить поведение сервиса даже без изменений в коде: JVM по-другому выбирает GC, расходует память и обрабатывает старые флаги запуска.

В статье разбираем, что меняет Java 27 внутри рантайма и как проверить готовность сервисов к обновлению.

Изучить изменения

Скрытый секрет конфигурации Spring Boot. EnvironmentPostProcessor

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

Всем привет! Это Михаил Поливаха, технический руководитель проекта Axelix (Open Source-продукта, который помогает как дебажить, так и находить распространённые проблемы и неэффективные решения в приложениях Spring Boot).

Я хочу рассказать о части Spring Framework, с которой многие никогда не работали напрямую, хотя почти все сталкивались с проблемой, которую она решает. Начну со сценария, который, как мне кажется, многим покажется знакомым:

Представим следующую ситуацию. Вы сопровождаете общую библиотеку, внутренний стартер company-commons, от которого зависит каждый сервис. И вы хотите, чтобы он задавал несколько разумных значений по умолчанию для всех приложений, подключающих этот стартер Spring Boot.

Читать далее

Снова про Java форматтеры

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

Не раз уже поднималась тема про форматтеры для Java, вот всего пару лет назад выкладывали перевод статьи с обзором текущего состояния подобных утилит

Но появилось что-то новенькое....
1
23 ...