Как стать автором
Поиск
Написать публикацию
Обновить
202.97

Java *

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

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

Мониторинг работы приложения

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

Данная статья первая из цикла статей и является коротким превью возможности системы.

За долгую карьеру работы разработчиком (более 15 лет) мы не раз сталкивались с проблемой не понятно что происходит на боевом контуре или что произошло на тестовом стенде после выкладки обновлений. В 90 % случаев приходится "лазить" по логам и пытаться понять что произошло и как обычно логов не хватает и все заканчивается тем что нужно добавить логов в одно конкретное место и так до следующего раза.

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

Читать далее

Как работает @Lazy в Spring — и когда он полезен

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

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

Если вы хоть раз писали хоть что‑то сложнее REST‑контроллера в Spring, вы наверняка ловили больную ситуацию: два бина зависят друг от друга, инициализация идёт по кругу, и вот он — BeanCurrentlyInCreationException. И если в этот момент вы вспомнили про @Lazy — вы молодцы.

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

Читать далее

Как спроектировать потокобезопасный класс в Java

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

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

Читать далее

@TestInstance(PER_CLASS) в JUnit 5: как и зачем переопределять жизненный цикл

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров790

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

Сегодня рассмотрим JUnit 5 и разберёмся, чем дышит аннотация @TestInstance(PER_CLASS), — зачем переопределять жизненный цикл тестового инстанса и когда это может помочь.

Читать далее

Карты, Java, 2 null'а. XMage edition

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

Компьютерная игра на Java — вещь довольно редкая, но всегда интересная. Поэтому мы не упустили возможность проверить статическим анализатором проект XMage и поделиться результатами. Посмотрим, что нашёл PVS-Studio в исходном коде проекта.

Читать далее

Шардируй меня полностью

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

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

Фотографировать

Преодоление сложности в самом сердце Анемичной Модели

Уровень сложностиСредний
Время на прочтение39 мин
Количество просмотров1.4K

Доброго времени суток, Хабр!

Сегодня хотел бы поговорить об анемичной модели — одном из самых дискуссионных топиков (особенно для приверженцев DDD) и о том, как, по моему мнению, правильно её готовить. Для кого-то анемичная модель — это антипаттерн, тогда как для других это единственный правильный способ реализации приложений. Многие использовали её годами и даже не знали, как она называется, и что кем-то она считается антипаттерном. Реальность же такова, что анемичная модель — это инструмент, который может подходить или не подходить в зависимости от ситуации, но при этом является очень популярным и, по факту, «стандартом де-факто» для многих программистов и организаций. Хотя в последние годы я и вижу тенденцию к тому, что DDD и, соответственно, богатая доменная модель становятся всё популярнее, пока что, по моему мнению, им далеко до популярности анемичной модели.

Читать далее

Базовый обзор @TempDir в Java

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

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

Сегодня разберемся с @TempDir — мощным, но часто недооценённым инструментом JUnit 5 для работы с временными файлами и директориями в тестах.

Читать далее

Spring AI: retrieval augmented generation

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

Spring AI, который только недавно получил первую стабильную версию, уже предоставляет довольно много возможностей для работы с RAG (retrieval augmented generation).

Благодаря этому подходу нейросеть перед тем, как дать ответ на запрос пользователя, выполнит поиск подходящей информации в векторном хранилище. Причём каждый документ хранится не в виде текста, а в виде массива чисел (т.н. «векторов»).

Процесс преобразования различных документов в такой векторный формат выполняется опять же с помощью LLM и называется embedding («встраивание»). Хорошая новость заключается в том, что всё это можно легко сделать с помощью Spring AI.

Читать далее

10 непривычных моментов в Go для Java разработчика

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

Несколько лет назад я начал добавлять Go в свой арсенал языков (будучи на тот момент Java разработчиком). Мне было очень непривычно. Более того, я принял язык не с первой попытки. Причём пришлось принять его больше из-за сложившихся обстоятельств, чем по собственному желанию.

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

Уточню: статья ориентирована больше на тех, кто планирует перейти в Go, чем для опытных разработчиков.

Читать далее

Пишем 3D-игру весом в 600Кб…

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

...которая работает на первом Android-смартфоне в мире, ретро-компьютерах из 90-х и даже Mac'ах! Часть 1.

Иногда у меня лежит душа просто взять и написать какую-нибудь небольшую игрушку с нуля, без использования готовых движков. В процессе разработки я ставлю перед собой интересные задачки: игра должна весить как можно меньше, работать на как можно большем числе платформ и использовать нетипичный для меня архитектурный паттерн. Недавно я написал трёхмерные «танчики», которые весят всего лишь 600 килобайт и в рамках подробной статьи готов рассказать о всех деталях разработки трёхмерной игры с нуля в 2025 году. Если вам интересно узнать, как работают небольшие 3D-демки «под капотом» от написания фреймворка до разработки геймплея — жду вас под катом!

Читать далее

История Java: развитие, изучение Марса, битва с Microsoft, Spring, Gradle и Maven, IntelliJ IDEA и Eclipse

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

От появления до покорения Красной планеты. В этой статье — история языка Java: от первых шагов и битвы с Microsoft до инструментов, без которых не обходится ни один Java разработчик. И да, вы узнаете, при чём здесь дуб, кофе и остров.

Читать далее

Эпизод 1: «Скобка, паб и виски с валидацией»

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров332

KafkaRail гудел на фоне.

Паб The Broken Tag, где начиналось утро героев, только просыпался — запах старого эля, крошки лог‑файлов, и бильярдный стол под тусклым светом прожектора. Через узел маршрута /corp/news метропоезд пронёсся, как push‑уведомление на рассвете. День в Киберляндии начинался.

JSON откинул капюшон куртки BitStone Protocol с QR‑патчем на рукаве, кивнул Mr. Parseley и заказал, как обычно, Schema Fresca. Он прошёл к бильярдному столу английского пула, стоявшему под старым плакатом «Keep Calm and Close Tags», где RAMmy спорил с TryCatch о синтаксисе ударов.

Читать далее

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

Как написать микробенчмарк

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

Команда Spring АйО перевела статью, в которой приведено несколько правил, которые следует учитывать при написании микробенчмарков для HotSpot JVM.

Читать далее

Трудности обслуживания приложений под Android

Время на прочтение6 мин
Количество просмотров3.5K

Недавно наткнулся на новость о том, что количество приложений в Google Play Store сократилось на 47%.

Я сам энтузиаст разработки под Android и последние 5 лет работал над альтернативой для Google Play Music и Podcast под названием MusicSync. Так что, будучи близким к теме человеком, мне захотелось поделиться своим опытом обслуживания приложений и заодно пояснить, почему меня эта новость нисколько не удивила.

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

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

Читать далее

Фильтрация предупреждений PVS-Studio, выявляющих критические ошибки (согласно классификации ГОСТ Р 71207-2024)

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

ГОСТ Р 71207-2024 "Статический анализ кода" выделят класс дефектов в коде, называемых критическими ошибками. При разработке безопасного программного обеспечения (РБПО) такие дефекты должны в обязательном порядке выявляться и исправляться в приоритетном режиме. Статический анализатор PVS-Studio разрабатывается с учётом этого стандарта и позволяет выявлять все типы критических ошибок в коде программ, написанных на языках C, C++, C#, Java. Рассмотрим эти типы предупреждений и как их можно выделить среди других предупреждений, выдаваемых анализатором.

Читать далее

Создание плагина для Keycloak: Загрузка пользователей из внешнего API

Уровень сложностиСредний
Время на прочтение24 мин
Количество просмотров1.1K

Если вы работаете с Keycloak и сталкивались с необходимостью интеграции внешних пользовательских данных — этот материал для вас.

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

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

Читать далее

Почему Exceptions в Java не взлетели — и что с этим делать в 2025 году

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

Всем привет!

Меня зовут Илья, я работаю в Райффайзен Банке. Мы пишем свои бэкенд-сервисы на Java и Kotlin, поэтому зачастую приходится переключаться с одного языка на другой. Из-за этого невольно начинаешь сравнивать подходы и механизмы одного языка с его JVM-собратом. Сегодня я бы хотел поговорить об одном из таких механизмов — пропагации ошибок и исключений.

Используете ли вы в своем коде исключения? Ответ кажется странным, так как исключения являются неотъемлемой частью Java. Но что, если я спрошу, используете ли вы исключения для управления логикой своей программы?

Читать далее

ScyllaDB: как настраивать метрики в java-драйвере и параметры запросов для измерения их характеристик

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров474

Привет, Хабр! Это Александр Коваль, я разработчик IoT-сервисов в МТС Web Services. При работе с данными часто возникает вопрос: как быстро система может вернуть результат по определенным параметрам? Не является исключением и ScyllaDB.

Для ответа нужны инструменты измерения и возможность настраивать систему. Java-драйвер для ScyllaDB умеет передавать информацию о своей внутренней работе, и ему можно настроить отдельные компоненты. Звучит как отличный план — в этом материале я поделюсь результатами экспериментов с java-драйвером для ScyllaDB при различных запросах к данным.

Код, ссылки и ресурсы располагаются в GitHub.

Читать далее

Используйте Camunda как удобный REST-движок для оркестрации и workflow — без необходимости работать с Java

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

Я много общаюсь о микросервисных архитектурах с «не-Java-людьми» — будь то разработчики на C#, энтузиасты Node.JS/JavaScript или GoLang. Все они сталкиваются с необходимостью оркестрации в микросервисной архитектуре — или просто хотят использовать workflow, упорядочивание действий, обработку таймаутов, Saga и компенсации, а также другие полезные возможности.

Open Source BPM-платформа Camunda отлично подходит для этих задач. Ориентированность на разработчиков — один из ключевых принципов продукта, но при изучении документации может показаться, что она рассчитана в основном на Java-разработчиков. Платформа предоставляет множество точек расширения и интеграции, но всё это реализуется на Java. Значит ли это, что другим разработчикам путь закрыт?

Нет! На самом деле, запустить Camunda и работать с ней без знания Java очень просто — архитектуру можно выстроить так, чтобы писать код на любом удобном языке. В этом посте:

Читать далее

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