Обновить
128K+

Java *

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

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

Как Netflix повысила эффективность ИИ‑агентов для программирования с помощью JetBrains IDE

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

Netflix подключила Claude Code и Codex к движку анализа кода JetBrains и теперь агенты могут работать с индексом проекта и зависимостей вместо раскопок в JAR-файлах через декомпиляцию и grep.

На реальных Java и Kotlin проектах расход времени и токенов снизился в среднем на 20–30%, а лучший результат достиг 65%.

Читать далее

Новости

Реализация MVP DSL движка с AST, кодогенерацией и динамической компиляцией

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

Реализация MVP движка динамических вычислений выражений на Scala 3.
Архитектура решения: от описания компонентов через пользовательские спецификации до кодогенерации Scala и его компиляции во время выполнения и загрузки полученного класса в JVM.

Цикл от некого выражения до готовой лямбды:
expression -> AST -> ScalaCode → Class Loading -> lambda.

Читать далее

Как убрать пароли из XML‑конфигов Hadoop: Credential Provider API и JCEKS на практике

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

Привет, Хабр! Меня зовут Егор Ившин, я аналитик по безопасности в Arenadata. Я отвечаю за безопасность продукта ADH: моя ключевая задача – выявлять уязвимости и оперативно передавать информацию о них команде разработки, при этом я не только фиксирую проблему, но и помогаю с её устранением. В своей работе я применяю различные виды анализа: SCA, SAST, ручное тестирование.

В этой статье разберём, как работает Hadoop Credential Provider API, где и как хранить JCEKS и какие подводные камни во всём этом есть. А в конце посмотрим, как этот механизм автоматизируется в продуктах Arenadata – чтобы не делать всё вручную.

Читать далее

Giga IDE Pro больше не будет. Но это хорошая новость

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

Pro-сборка была важным этапом в развитии GigaIDE: она позволила быстрее развивать профессиональные инструменты, собирать обратную связь от корпоративных пользователей и проверять сценарии, которые выходят за рамки Community-версии. Но у отдельного дистрибутива есть и обратная сторона: пользователю нужно выбирать сборку, командам — отдельно управлять установками, а продукту — поддерживать лишнюю развилку там, где её уже можно убрать.

Читать далее

Локальная ИИшница: рецепт приготовления

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

Статья для тех, кто уже имеет опыт работы с облачными ИИ, но в силу причин вынужден перейти на локальную ИИшку.

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

Спойлер: я прошел путь от «лучше, чем ничего» до «гораздо лучше, чем ничего!».

Читать далее

Сломанный Ctrl+C — сначала гасла VM, а потом не прерывался sleep: Java, KVM и Linux

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

Обычный Ctrl+C оказался для моей Java VM неожиданной проблемой: сначала он завершал саму виртуальную машину, а после исправления перестал останавливать команды внутри Linux. Чтобы разобраться, пришлось пройти весь путь от host terminal через UART и KVM до гостевого TTY и Unix-сигналов. В статье разберём не только причину, но и метод диагностики, который пригодится далеко за пределами виртуализации.

Разбираемся, куда пропал Ctrl+C

Java 24 убрала пиннинг synchronized. Почему виртуальные потоки всё ещё тормозят?

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

После перехода на Java 24 виртуальные потоки перестали блокировать носители внутри synchronized. Казалось бы, одним тормозом меньше. Но производительность по‑прежнему упирается в ограничения ресурсов, а старые способы диагностики уже не помогают. Разбираемся, где теперь искать причины задержек и какие настройки стоит пересмотреть.

Найти причину тормозов

Закрыл вкладку — ушёл, обновил страницу — остался: присутствие в комнате на WebSocket

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

Когда человек закрыл вкладку, обновил страницу или потерял сеть, сервер получает один и тот же SessionDisconnectEvent, а реагировать должен по-разному. Рассказываю, как в своём Planning Poker научил комнату различать эти случаи и не терять текущие данные при обновлении: маркер закрытия на pagehide, атомарные обновления MongoDB, порядок кадров в Spring, обходы для Firefox и zone.js и живые тесты в Chrome, Firefox и Safari. Восемь граблей и что с ними делать.

Читать далее

Реактивная Java: когда она ускоряет систему, а когда просто усложняет жизнь (часть 1)

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

Часть моей работы — помогать джунам разбираться с архитектурными решениями.

Иногда у нас возникают обсуждения на тему: «Зачем заморачиваться с WebFlux, если можно продолжать писать на Spring MVC?». Чтобы предметно обсуждать эту тему, мы с командой провели внутренний бенчмарк, написали методичку и решили поделиться некоторыми соображениями в этом цикле статей.

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

Дисклеймер: для Java-сеньоров в этой статье скорее всего ничего нового не будет.

Читать далее

Неожиданный антивайб разработки через ИИ-агентов

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

Менеджеры считают, что ИИ-агенты ускорят разработку в десять раз. Математика говорит, что ускорится только написание. Проверять смысл по-прежнему будут люди, с конечной скоростью, и очередь выстроится к самым опытным. PostgreSQL 19 не вышел в срок. Не потому, что ИИ нашёл много багов, а потому что ИИ научился генерировать правдоподобные отчёты быстрее, чем люди успевают их читать. В статье разбираю, почему так, где настоящий предел и что меняется.

Читать далее

У нас есть MCP дома

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

Всем привет! Меня зовут Петрович и я работаю техлидом java команды в небольшом международном финтехе. В прошлый раз я рассказывал, как мы меняли Redis на Hazelcast, а сегодня расскажу как мы делали свой MCP‑сервер для Jira, Confluence и GitLab (все self‑hosted). От пустого репозитория до прода прошло две недели, а сейчас у сервера уже почти 100 инструментов. Расскажу, почему не взяли готовое с GitHub, как все устроено внутри и на какие грабли мы наступили (спойлер: почти все грабли назывались null).

Читать далее

Оптимизация генерации ресурсов в Java, три Ryzen и 225 замеров

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

Почему ручное разбиение задач оказалось быстрее parallel().collect() в большинстве наших тестов.

Привет, Хабр!

Меня зовут Юрий, и уже десять лет я разрабатываю The Great Tribes — пошаговую 4X-стратегию, в которой игроку предстоит провести свою цивилизацию от первобытных племён до космической эпохи.

Игра создаётся на Java с использованием LWJGL и собственного игрового движка. Мы не используем Unity или Unreal Engine: за годы разработки у проекта сформировались собственная архитектура, система процедурной генерации мира и довольно специфические требования к обработке больших карт.

Сегодня хочу рассказать об одной небольшой, но интересной оптимизации.

Мы решили ускорить генерацию природных ресурсов, написали три реализации одного алгоритма и протестировали их на трёх компьютерах с процессорами AMD Ryzen.

Результаты оказались любопытными: более компактный вариант с parallel().collect() в большинстве измерений уступил реализации с ручным разбиением массива на части.

Но обо всём по порядку.

Читать далее

Linux из Java без JNI: от FFM и /dev/kvm до интерактивной консоли

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

Да, направление здесь немного непривычное: обычно Java запускают в Linux, а здесь я решил попробовать запустить Linux из Java.

Обычно Java и KVM находятся довольно далеко друг от друга: с одной стороны JVM и управляемая память, с другой /dev/kvm, ioctl, регистры vCPU и физическая память guest ОС. В этой статье разберём, как связать эти два мира через Foreign Function & Memory API без JNI. На примере panama-kvm пройдём путь от первого вызова KVM API до загрузки Linux, настройки памяти, обработки VM exits и интерактивной консоли внутри гостевой системы.

Запустить VM из Java

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

Hibernate getReference(): когда SELECT вообще не нужен

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

Проблема N+1 запросов — классическая проблема ORM, с которой сталкивается практически каждый разработчик, работающий с Hibernate. Обычно рекомендуемыми решениями являются использование JOIN FETCH или EntityGraph, но существует еще один инструмент, который часто остается в тени — метод load().

Читать далее

Платёж списывается дважды. Найдите причину в коде, который прошёл ревью

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

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

Проверить решение

Java Digest 40: что изменилось в Java 27 и почему Spring ускоряет релизы

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

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

В этом выпуске рассказываем о том, что Java 27 вышла с компактными заголовками объектов и G1 по умолчанию, Сбер представил собственный SberJDK, а Spring меняет подход к релизам из-за потока AI-найденных уязвимостей. Разбираем новые фичи, смотрим, как Netflix применяет AOT Cache, и выясняем, почему Spring Data JDBC — это не просто упрощенный Hibernate. Обо всем этом читайте в выпуске 🙂

Читать выпуск 40

Spring Config Import. Без Магии

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

Всем привет! Меня зовут Дмитрий Мазуров, я контрибьютор проекта Axelix. Это open-source продукт, который помогает находить типичные проблемы и неэффективности в Spring Boot приложениях.

В прошлой статье Михаил разбирал EnvironmentPostProcessor и мимоходом упомянул ConfigDataEnvironmentPostProcessor, который грузит application.yml, разбирается с профилями и обрабатывает spring.config.import. Сегодня заглянем внутрь него.

Поводом стала вполне практическая задача. Нам понадобилось подружить Axelix Master с Vault так, чтобы пользователь настраивал его через наши собственные свойства под axelix.master.*, а не через spring.cloud.vault.*. Чтобы сделать это аккуратно, пришлось разобраться, как вообще работают spring.config.import.

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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