Обновить
256K+

Java *

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

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

Очереди в микросервисах: 5 ошибок, которые приводят к дублям и потерям

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

Почему добавление второго consumer«а в очередь может привести к двойным списаниям? Разбираем на реальном кейсе: как один Topic стоил компании 312 дублей за час. »

Сравниваем поведение JMS, Kafka и RabbitMQ, показываем, почему ни одна очередь не даёт exactly‑once из коробки, и как идемпотентность, Dead Letter Queue и правильный выбор канала (команды vs события) делают интеграции надёжными.“

Готовые схемы, продакшен‑код на Java и чек‑лист, который стоит применить прямо сейчас!

Читать разбор

Новости

Обработка исключений, возникших при обработке исключений

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

Исключения рождаются не только в основном коде, но и в обработчиках этих самых исключений. Зачастую вопросу не уделяется должного внимания. Действительно, что может пойти не так в блоке catch? Там ведь код тривиальный! Но это только на первый взгляд.

Например, безобидный LOG.warn("...") выливается в десяток вызовов нижележащих методов. И чем больше «наслоений» в библиотеке логгирования, тем выше вероятность сбоя. Всё бы ничего, если бы не одна особенность языка Java…

Читать далее

Сравнение моделей конкурентности JVM языков: Нужен ли еще ThreadPool после coroutines, ZIO и Virtual Threads?

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

В последней части про модели конкурентности JVM языков мы сравним разные подходы друг с другом. И ответим на вопрос “А зачем теперь тред пулы, если есть столько модных концепций: корутины, файберы, виртуальные потоки ?”

Узнать что есть кроме Java Threads

Полный гайд по каналам обмена сообщениями: от теории к реальным кейсам

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

Первая статья из цикла о каналах обмена сообщениями. Разбираем архитектурные дилеммы, конкурирующих потребителей, message storm, гарантированную доставку и лучшие практики команд, работающих с JMS и Kafka.

Читать далее

Kotlin переходит к деструктурированию по именам

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

В Kotlin деструктурирование выглядело так: val (name, age) = person. Но компилятор берет значения не по именам, а по позиции component1/component2.

Отсюда проблемы. Если поменяли порядок параметров в data class или сделали age вычисляемым свойством: то та же строка начинает доставать другое поле. Причем иногда код даже скомпилируется, но, конечно, смысл изменится: val (age, name) = person.

И вот теперь Kotlin эксперементально переводит круглые скобки на деструктурирование по имени. Синтаксис будет такой: (val name, val age) = person. И порядок внутри скобок не важен. Переименование явно: (val years = age, val theName = name) = person.

Позиционное же деструктурирование остается, но переезжает в квадратные скобки для Pair/Triple и коллекций: val [x, y] = point.

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

Читать далее

Как собрать пайплайн с LLM агентом который фиксит нативные Android UI автотесты

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

Что будем делать или что может быть интересного в статье:

- Пайплайн из двух независимых LLM агентов

- Запуск и анализ ошибки UI автотеста (Root Cause Analysis)

- Фикс автотеста в цикле с его запуском.

- Кастомизация MCP инструментов чтобы оптимизировать контекстное окно.

- Система приоритетов в работе LLM агентов.

Читать далее

Kafka, таксономии и удаление событий: как исключить обработку неактуальных сообщений

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

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

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

В статье рассмотрим, почему прямое удаление сообщений не подошло, какие варианты были рассмотрены и как в итоге был применён комбинированный подход: стабильный Kafka key, tombstone-сообщения, compact/delete policy и проверка состояния таксономии на стороне consumer.

Разберём решение

Сравнение моделей конкурентности JVM языков: Kotlin coroutines, ZIO runtime и Clojure

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

Coroutine, Fiber, Virtual thread - это всё одно и то же?

Или нет ?

Или нет.

А если под капотом всё равно JVM, почему нельзя просто везде включить virtual threads и успокоиться? Разберемся!

Узнать что есть кроме Java Threads

Codex 5.3 vs Claude Opus 4.6 на реальном Java‑монолите

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

Я сравнил Codex 5.3, Claude Opus 4.6 и GPT-5.5 на реальном многомодульном Java-монолите: скопировал проект в отдельные ветки, дал агентам похожие задачи и прогнал их через цикл правок, ревью и e2e-тестов.

Результат: чем дешевле - тем лучше результат.

Читать далее

Техники GenAI в Spring AI

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

В статье рассмотрим ряд техник GenAI, реализованных в модуле Spring AI, и ответим на вопрос: является ли ChatClient лишь тонкой оберткой над API провайдеров LLM или предоставляет функциональные возможности, которые имеет смысл применять в реальных проектах. В качестве примера будем итеративно разрабатывать приложение, интегрированное с Anthropic, и разбирать возникающие по ходу проблемы.

Читать далее

Локальное нагрузочное тестирование в Java с использованием Virtual Threads

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

Всем привет! Меня зовут Михаил, я работаю главным экспертом в ОТП Банке.

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

В какой-то момент я поймал себя на мысли:

А как вообще заранее понять, сколько ресурсов будет потреблять сервис под нагрузкой?

Сколько памяти съест приложение? Когда упрется в CPU? Как поведет себя БД при разном кол-ве запросов?

Чтобы ответить на эти вопросы, я написал небольшую библиотеку для локального нагрузочного тестирования на Java Virtual Threads. Она запускает большое количество задач, собирает метрики и формирует отчет - прямо в консоли или в CSV.

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

Читать далее

Паноптикум и ИИ

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

Давайте попробуем еще раз, в прошлый раз как-то не задалось, но много воды утекло с тех пор. Проект начался как простой способ "заглянуть в БД сервера" собственно таким он и остается до сих пор. Но по мере развития ИИ в нем появились новые фишки.

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

Сначала я просто начал наращивать количество коннекторов. И если сначала это было четыре вида БД, потом шесть, то теперь это 26 разных БД, логи из Kuberneties и просмотр S3 бакетов.

Читать далее

Открытое ТЗ для пет-проекта: сервис поиска пропавших людей

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

Долго думал, в каком формате это написать, в итоге решил по-простому - рассказать, что есть, и кому это может пригодиться.

Мы с коллегой делали выпускной проект для курсов CloudJava и CloudJava K8S. Это техзадание на бэкенд распределенной системы - четыре микросервиса, Gateway, обвязка. Изначально оно было доступно только участникам курсов, теперь решили открыть бесплатно, без регистрации или “оставьте email”. Просто страница с текстом и тремя OpenAPI-спеками.

Ссылки сразу, чтобы не листать:

Описание проекта: https://javaops.ru/view/cloudjava3

Само ТЗ: https://javaops.ru/view/cloudjava3/rescue-service.html

Читать далее

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

Сравнение моделей конкурентности JVM языков: Треды, Пулы и Structured Concurrency

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

Вы пробовали что-нибудь кроме new Thread() ?

Конечно пробовали: Future !

И всё ?!

Разберемся с разными моделями конкурентности в Java, Kotlin, Scala/ZIO и Clojure: у всех JVM под капотом, но подходы разные. Начнём с разбора тредов, пулов, virtual threads из Project Loom и Structured Concurrency. Дальше: корутины, fibers, ZIO runtime и Clojure.

Узнать что есть кроме Java Threads

Команда Spring о Spring Framework 7 и Spring Boot 4

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

В новом переводе от команды Spring АйО рассмотрим выход Spring Boot 4 и Spring Framework 7. InfoQ взяли интервью у core команды Spring с целью узнать, куда движется самая популярная в Java экосистема.

Spring Boot 4 модуляризировал автоконфигурацию. Теперь при запуске проверяется меньше классов в classpath, а uber-jar будет более компактным: будут подключаться только нужные модули. Параллельно Spring Boot 4 переходит на Jackson 3, но добавлен модуль совместимости с Jackson 2, потому что экосистема ещё догоняет.

Spring Framework 7 тащит core resilience в ядро: RetryTemplate, @Retryable и @ConcurrencyLimit доступны без отдельной зависимости. @Retryable работает и с реактивными типами (через Retry из Project Reactor); для обычных вызовов используется RetryTemplate с политикой retry/backoff. @ConcurrencyLimit помогает ограничивать доступ к ресурсу, что особенно полезно с Virtual Threads.

Читать далее

Интеграция SAP NetWeaver AS Java с Keycloak: SAML, 2FA и неожиданные проблемы

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

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

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

Типичная защита периметра: «свои» внутри, «чужие» снаружи. Но бывает инверсия. Заказчик открывает SAP NetWeaver AS Java в большой мир. SAML в этой системе активируется быстрее, чем вы моргнете — буквально в два клика. Но если на том конце провода не дремлет злоумышленник, а у вас нет 2FA… считайте, что ключи от дома вы спрятали под ковриком.

Мы столкнулись с этой болью на проекте у одного из заказчиков. Нужно было настроить двухфакторную аутентификацию. И вот тут начались нюансы.

В этом материале мы опишем настройку интеграции портала SAP NetWeaver AS Java с внешним Identity Provider (IdP) — Keycloak — с реализацией двухфакторной аутентификации (2FA). До нашего вмешательства аутентификация происходила напрямую в SAP-системе.

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

Далее кратко рассмотрим процесс настройки и разберем возникшие проблемы.

Читать далее

Как мы написали социальную сеть внутри Minecraft на 13 версиях — и почему это не было безумием

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

Небольшая команда сделала мод-социальную-сеть для Minecraft, который объединяет в общий граф друзей игроков на любых поддерживаемых версиях клиента — от 1.7.10 до 1.21.1. Поддерживаются три популярных загрузчика модов и любые клиенты Minecraft, как лицензионные, так и офлайн. Серверная часть, веб-админка, обвязка и документация — всё своё.

Главное, что хотелось рассказать: дисциплина (не скорость) была решающим ресурсом, и категория продукта изменила правила игры настолько, что классическая формула «MVP на одной версии — потом расширяемся» оказалась контрпродуктивной.

Читать далее

Даже дождь выглядит как интеграция: История одной профдеформации

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

Всем привет, меня зовут Михаил, я back-end разработчик в ОТП банке. Сегодня хочу рассказать о профдеформации - о том, как разработка перестраивает мозг без спроса.

Разработка - это не восьмичасовой найм. Это перепрошивка, о которой никто не предупреждает на собеседовании. Мы видим, как всё работает за кулисами. А потом вдруг ловим себя на том, что с женой разговариваем эндпоинтами, а в очереди к врачу видим легаси-монолит.

И знаете что? Это не лечится.

Дальше - несколько моих личных симптомов. Пишите в комментариях свои, уверен, что у каждого такое было!

Читать далее

Subject Matter Expert. Чёрная Метка Для Разработчика

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

Это не совсем привычная для меня статья, но я давно хотел поделиться одним своим наблюдением. В ней не будет никаких вещей, связанных непосредственно с разработкой на Java или Kotlin, не будет кода. Я просто решил поделиться опытом. Я надеюсь, читать эту статью Вы будете вечером, в спокойный, выходной день.

Ну что же, поехали.

Я предполагаю, что Spring АйО читают в основном Java или Kotlin разработчики. В том или ином виде, Java / Kotlin разработчики часто пишут какие-то Enterprise решения. Одной из отличительных особенностей enterprise является сложная доменная область. Если Вы хотя бы какое-то время писали Enterprise бекенд, то я думаю, для Вас это не новость.

Читать далее

АЭС для всех, или как мы провели двухдневный воркшоп в Индии

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

Как обучить работе с тренажёрами АЭС группу из 30 человек в Индийском технологическом институте Бомбея (IIT Bombay), если половина аудитории впервые слышит про атомную энергетику, а другая половина уже готова моделировать аварийные ситуации?

Именно с таким вызовом я столкнулся, когда готовил курс для индийских коллег. Мы разделили программу на два дня. В первый день — теория: основы работы АЭС, подготовка персонала, принципы создания математических моделей и тренажёров. Во второй — полноценный воркшоп с индивидуальной работой на тренажёрах.

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

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