Обновить
128K+

Java *

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

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

Агент написал Джеймикс, тоже плохой

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

Часть 2 из 2. В первой части был холивар про самодельные фреймворки. Здесь — цифры: мы дали ИИ‑агенту построить одно и то же приложение на Джеймиксе и на голом Spring и честно сравнили результаты.

Читать далее

Почему мы написали свою библиотеку оркестрации ИИ агентов: AgentsGraph

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

Когда мы начинали строить продукт для распознавания и обработки первичных бухгалтерских документов — OCR, классификация, LLM‑извлечение полей, проверка человеком — казалось, что рынок оркестраторов уже всё решил: есть n8n для визуальных workflow, есть LangGraph для агентных пайплайнов, есть Temporal для durable‑исполнения. Мы попробовали примерить каждый — и в итоге написали свой: AgentsGraph, встраиваемую Java‑библиотеку декларативной оркестрации агентов. Ниже — почему.

Читать далее

Как мы заменили Oracle WebLogic в банке из топ-3: опыт внедрения единой платформы управления Java‑приложениями

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

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

Я Сергей Рощупкин, занимаюсь развитием платформы управления серверами приложений Digital Q.AppServer в «Диасофт». В статье разберу реальный кейс миграции с Oracle WebLogic в крупном банке, покажу, как устроена платформа и где в ней работают ИИ‑агенты, а в конце — практические советы инженерам, которые мы сформулировали по итогам проектов.

Читать далее

Пишем логи в journald с помощью Logback и FFM API

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

Разворачивать бэкенды для личного использования с помощью systemd удобно, но stdout плохо интегрируется с journald, а устанавливать софт только для просмотра логов не хочется. В статье - простой пример, как можно писать логи из Java-приложения в journald так, чтобы их потом удобно просматривать

Читать далее

Добавили потоков, стало медленнее: разбираемся с ложным разделением кеш‑линии

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

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

Разберём, как воспроизвести такую просадку, найти её через perf c2c и исправить без лишнего раздувания структур.

Читать далее

Playwright: пишем тесты на Kotlin и Java

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

В статье я разберу, как писать тесты, используя Playwright. И покажу все на собственном примере.

Когда наш продукт стал сложным, мы столкнулись с тем, что релизы стали затаскивать на прод баги. Чтобы не “тестировать на пользователях” и минимизировать человеческий фактор, мы решили автоматизировать самые частые пользовательские сценарии, используя Playwright. 

Давайте перейдем к сути и начнем писать тесты на Playwright.

Читать далее

Победить Hibernate в тестах. Возможно?

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

Победить Hibernate в тестах. Сможем?

Всем, привет! На связи Михаил Поливаха, технический лидер Open Source проекта Axelix (проект, посвященный помочь вам идентифицировать частые проблемы в Java server-side приложениях, в т.ч в рамках работы с Hibernate).

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

“Можно ли в тестах как-то проверить, что Hibernate под капотом делает что-то страшное?”

Тут очень важно не давать вам “рыбу”, а научить вас рыбачить, т.е. дать вам некоторый фреймворк о том, что стоит держать в уме при работе с Hibernate.

Читать далее

Playwright vs Selenium: 7 ошибок Java‑миграции

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

Переход с Selenium на Playwright часто заканчивается теми же флаками, долгими прогонами и ручными ожиданиями.

Разбираем семь ошибок Java‑миграции и показываем, как перестроить тесты под возможности Playwright.

Читать далее

Java Digest #38: Valhalla в master, ежемесячные патчи Oracle и AI-скиллы в IDEA

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

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

Июль получился плотным. Valhalla после 12 лет разработки залили в master-ветку JDK одним PR на 2900 коммитов, Oracle сломал двадцатилетнюю традицию квартальных патчей и перешел на ежемесячные, а про саму Java наконец сняли полнометражный документальный фильм. Собрали все в нашем дайджесте.

Читать далее

Книга: «Java для профи. Инструменты, фреймворки, тестирование, производительность»

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

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

«Java для профи» — идеальный выбор для всех, кто уже знаком с языком, но хочет освоить инструменты современной Java-разработки.

Читать далее

Отслеживание запуска приложения в Spring

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

Почему Spring-приложение запускается медленно, и на каком именно этапе оно тупит?

В новом переводе от команды Spring АйО разбираемся, как заглянуть внутрь процесса создания контекста и отследить инициализацию бинов.

Читать далее

Вслед за Эдвардом Сьоре, или как я писал свою реализацию on disk B+Tree-индекса на Rust

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

Вслед за Эдвардом Сьоре, или как я писал свою реализацию on disk B+Tree-индекса на Rust. В этой статье попытаюсь осветить нюансы написание своего игрушечного индекса.

Читать далее

Вам не нужны микросервисы

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

Какое‑то время назад, проработав 3 года на позиции Java Middle+‑ разработчика на крупном монолитном легаси‑проекте (естественно, модульном), я столкнулся с тем, что не имел практики в создании приложений на микросервисной архитектуре. При этом я понимал, что работа с микросервисами — это работа с актуальным стеком технологий в мире Java. И если ты не работаешь с микросервисами, то ты вроде как не имеешь необходимой квалификации для большинства вакансий на рынке труда. По крайней мере, если судить по самим вакансиям.

Поэтому я решил, что мне нужен какой‑то достаточно крупный проект, который бы дал мне основные практические навыки работы с микросервисами. Это должен был быть проект, выходящий за рамки пет‑проекта с животными или чего‑то подобного. При этом, отработав на Java более трех лет, я уже хотел сделать что‑то свое, разработать архитектуру с самого начала. Думаю, это нормальное желание для мидл‑программиста, который хочет развиваться в своей сфере.

Читать далее

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

Сердце облачной Java: проверяем Quarkus

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

Java уже какое-то время витает в облаках. Всё больше приложений и сервисов переходят на облачную архитектуру. Мы решили не отставать и проверить один из главных проектов для разработки производительных облачных приложений на Java — Quarkus.

Читать далее

Wiremokjs как я создавал свой скриптовый язык для wiremock

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

В этой статье я расскажу, как создавал скриптовый язык WiremockJs — с нуля и до рабочего прототипа. Поделюсь, что меня подтолкнуло к этому «подвигу», как я проектировал грамматику, с какими ограничениями столкнулся и почему в итоге не стал использовать JavaScript, а написал свой упрощённый диалект. Под катом — ANTLR, парсеры, немного боли и много удовольствия от творчества.

Читать далее

Мониторинг, который не переживёт собственного падения

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

Всем привет! Хотел бы поговорить о мониторинге наших web, да и не только web, приложений, в первую очередь, о проблемах, с которыми мы сталкиваемся. В этой статье я буду использовать язык python и популярные сервисы, чтобы содержимое было максимально понятно большинству.

Читать далее

Spring Security: CSRF и CORS атаки

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

В данной статье я подробно описал в теории, что такое CSRF-атака и CORS-атака и с помощью чего от них защищаться.

Читать далее

Java будут патчить чаще. Что изменится для разработчиков и компаний

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

Привычный график обновлений Java меняется. Теперь к релизам в январе, апреле, июле и октябре Oracle планирует добавить промежуточные релизы — CSPU (Critical Security Patch Update), чтобы не откладывать исправление критичных уязвимостей до следующего квартала. О чём эти релизы и что это всё значит?

Читать далее

Hazelcast: Хороший, плохой, злой

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

Всем привет! Меня зовут Петрович и я работаю техлидом java команды в небольшом международном финтехе. В этой статье я хотел бы поделиться с вами опытом миграции наших сервисов с Redis на Hazelcast, а также о том какие уроки мы усвоили. Статья будет полезна тем кто рассматривает отказоустойчивые и более простые в поддержке альтернативы Redis.

Наша команда отвечает за подсистему оценки платежеспособности клиентов (в народе - скоринг). Стек - классический джентльменский набор для java команды - последняя LTS версия Java, Spring Boot (с Hibernate), база PostgreSQL, брокер сообщений RabbitMQ, авторизация через Keycloak, кэш Redis, собираем в docker контейнеры с помощью jib и деплоим в k8s через gitlab, arttifactory используем для хранения стартеров и библиотек.

В прод окружении наши немногочисленные сервисы работают в кластерах k8s в единственном экземпляре, будучи, как правило, распределенными по 3 нодам с приличным запасом по ресурсам. Сделано так специально чтобы в случае отказа одной из нод другие могли автоматически принять нагрузку с выбывшей из строя напарницы без участия сотрудников разработки или поддержки. Ну и rollout update делать удобно и быстро - у нас распределенный монолит и при деплое необходимо деплоить сразу все сервисы одновременно.

С точки зрения кластеров k8s наша подсистема полностью изолирована и не зависит от других подсистем компании. Другими словами, все необходимые для работы подсистемы ресурсы мы хостим и поддерживаем сами. Redis, Keycloak, S3 - всё это работает внутри каждого из наших кластеров, обеспечивая достаточное резервирование. Всё, кроме Redis.

Читать далее

Агент изменил рабочую базу данных, хотя это было запрещено в правилах

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

На форуме Cursor разработчик рассказал, как запретил агенту работать с удалённой базой, а тот всё равно выполнил npx supabase db push. Эта команда отправляет локальные изменения схемы в подключённый удалённый проект. Агент мог изменить рабочую базу данных — и только после этого сам признал, что нарушил правило.

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

У меня всё закончилось проще. Вчера я попросил Cursor разобраться с упавшим сквозным тестом. Я ждал исправления в приложении, но агент поменял проверку в самом тесте и отчитался, что всё готово. Тест, разумеется, прошёл.

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

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

Читать далее