Обновить
256K+

Java *

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

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

Интеграция Apache NiFi и Atlas: Настройка в Docker и Создание Пользовательского Репортера

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

В этой статье представлен кейс по интеграции Apache NiFi с Apache Atlas с использованием Docker. В процессе развертывания и настройки системы возникли проблемы с загрузкой образов и установкой необходимых пакетов. Основное внимание уделяется созданию и настройке пользовательского репортера, который позволяет фильтровать и отображать только те компоненты DAG в Atlas, которые соответствуют заданным критериям. В статье подробно описаны шаги по созданию и сборке .nar архива, добавлению его в NiFi и настройке фильтрации с использованием кастомных классов.

Читать далее

Workspaces в IntelliJ IDEA

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

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

Читать далее

Java + Spring + Jakarta Validation. Самописный «аддон» для валидации Entity через БД и EntityManager

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

Вот и моя первая статья на Хабре.

Посвящена она будет презентации своего небольшого решения для валидации моделей с использованием запросов к БД и EntityManager.

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

Понятно, что статья рассчитана на тех, кто уже знаком с той же Jakarta Validation.

Читать далее

Виртуальные потоки Java 21 — чувак, где мой lock?

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

Как показывает опыт Netflix, использование виртуальных потоков, представленных в Java 21, может спровоцировать возникновение неожиданных проблем. В новом переводе от команды Spring АйО мы подробно исследуем уникальные трудности, возникшие у команды Netflix при интеграции виртуальных потоков в Spring Boot на Tomcat. 

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

Читать далее

Эволюция оператора switch в Java

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

Наверное, есть только малая часть приложений, код в которых выполняются строго последовательно. Классический Hello World! как раз из таких. В таких случаях говорят, что у выполняющейся программы есть только один поток выполнения - флоу. Однако, подавляющее число приложений меняют свой поток выполнения в зависимости от внешних условий (контекста выполнения, переменных среды, значений пропертей) или внутренних (переменные, значения полей и т.д.). Для таких случаев в Java еще с самой первой версии, как и во остальных языках программирования, есть оператор if-else и его модификации.

Давайте рассмотрим пример кода, в котором в зависимости от того, кем является член семьи, он делает какую-то обязанность по дому:

Читать далее

Как я превратил MIDI-клавиатуру в печатную машинку и не только

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

Привет, Хабр! На связи Кирилл из МТС Диджитал. На днях я решил прогуляться по воскресной барахолке и наткнулся на продавца, который выложил на прилавок практически новый MIDI-контроллер Akai MPK Mini mk3. Я и раньше слышал про этот девайс, но мне все как-то не доводилось его купить. Естественно, забрал. Вернулся домой, подключил к Mac Mini M2 и на несколько часов выпал из реальности, создавая трек в стиле Sovietwave.

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

Читать далее

Делаем телеграм-бот для сохранения сообщений в блокчейн

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

Привет, я Дмитрий и хочу поделиться с вами как я делал свой телеграм-бот для сохранения сообщений из чатов в блокчейн на языке java. Вообще идея была в том, чтобы научиться быстро и удобно увековечивать некоторые особо важные сообщения, так чтобы они оставались без изменений и вне зависимости от того, что будет с чатом где они были размещены или даже с самим Телеграмом.

Читать далее

Бинарный поиск на пальцах

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

В этой статье мы разберемся с тем, как работают массивы, что такое алгоритмы, и как устроен бинарный поиск "под капотом"

Читать далее

Сокрытие конфиденциальных данных при логировании

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

Всем привет! Меня зовут Сергей Соловых, я Java-разработчик в команде МТС Digital. В этой статье я расскажу, как скрыть личные данные пользователей при организации логирования.

Такая необходимость возникает при отслеживании запросов, анализе ошибок и  диагностике проблем. Однако в процессе обработки персональных данных пользователей (паспортных данных, ИНН, СНИЛС и прочих документов, удостоверяющих личность) нужно учитывать, что их содержимое не подлежит разглашению. Это серьезный вопрос, который затрагивает множество аспектов: репутацию компании, доверие потребителей, законодательство. Так что задача разработчика не только связать логами всю цепочку прохождения запроса, но и исключить из них те данные, что не подлежат раскрытию.

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

Читать далее

JSpecify 1.0.0 и nullability в Java

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

Рады сообщить, что JSpecify 1.0.0 теперь доступен в Maven Central: четыре аннотации, связанные с nullability — @Nullable, @NonNull, @NullMarked и @NullUnmarked — стали официальными, и, что немаловажно, обратная совместимость с ними будет гарантирована. 

В новом переводе от команды Spring АйО мы подробнее рассмотрим, какие преимущества и новшества предлагает JSpecify 1.0.0, как это может повлиять на ваш проект и что нам предлагается для борьбы с NPEs.

Читать далее

Искусство ETL. Пишем собственный движок SQL на Spark [часть 7]

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели4.2K
В предыдущих сериях (FAQ 1 2 3 4 5 6 ) мы весьма подробно рассмотрели, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL поверх Spark RDD API, заточенный на задачи подготовки и трансформации наборов данных.

В данной части поговорим о том, как добавить в собственный диалект SQL поддержку процедур. Например,


-- library.tdl

CREATE PROCEDURE dwellTimeByMode(@signals, @target, @outPrefix,
  @modes = ['pedestrian', 'non_pedestrian', 'car', 'bike'],
  @groupid='cell10') AS BEGIN
    LOOP $mode IN $modes BEGIN
        SELECT * FROM $signals INTO "{$signals}/{$mode}" WHERE mode=$mode;

        CALL dwellTime(@signals_userid_attr=userid,
            @target_userid_attr=userid,
            @target_grouping_attr=$groupid
        ) INPUT signals FROM "{$signals}/{$mode}", target FROM $target
        OUTPUT INTO "{$outPrefix}/{$mode}";

        ANALYZE "{$signals}/{$mode}";
        ANALYZE "{$outPrefix}/{$mode}";
    END;
END;

--- ... --- ... --- ... ---

-- script.tdl

CALL dwellTimeByMode(@signals=$this_month, @target=$population, @outPrefix=$this_month);

Нафига это надо?


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

Читать дальше →

Профилирование Java-приложений: от HeapDump до Grafana

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

Добрый день дорогой читатель. Сегодня я дам тебе несколько советов для поиска и анализа проблем в твоем Java приложении. Мы разберем такие вещи как: HeapDump, ThreadDump, VisualVM, Grafana, HikariPool, Prometheus и Garbage Collector.

Читать далее

Простые коммуникации в Java-приложении

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

Привет, 

Как вы уже, наверное, знаете, Jmix — это такая платформа для разработки корпоративных приложений, построенная на основе фреймворков Spring, Vaadin и других классных технологий с открытым исходным кодом. 

Ее использование позволяет абстрагироваться от многих сложностей фронтенд-разработки. Разработчикам не обязательно учить JavaScript/TS, погружаться в особенности популярных фронтенд-фреймворков, тренироваться в верстке, чтобы иметь возможность создавать полнофункциональные веб-приложения. Достаточно просто писать код на Java и немного компоновать экраны в XML. При разработке интерфейса для Jmix под капот уходят также некоторые механики, связанные с «перекладыванием джейсонов», что открывает дополнительные возможности для написания интерактивных веб-приложений с использованием готовых компонентов и дополнений. 

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

Читать далее

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

Глубокое погружение в Sealed классы и интерфейсы

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

С появлением sealed классов и интерфейсов Java открыла перед разработчиками новые горизонты в области проектирования устойчивого и предсказуемого кода. 

В новом переводе от команды Spring АйО было рассмотрено, как эти элементы языка позволяют строго контролировать иерархию классов, обеспечивая тем самым безопасность и простоту поддержки кода. Мы рассмотрим ключевые особенности sealed классов и интерфейсов, их влияние на архитектуру приложений и практические примеры их применения.

Читать далее

Мечтают ли Андроиды о нейропроцессорных модулях? Перенос модели TensorFlow Lite в мобильное приложение

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

Несмотря на то, что искусственный интеллект – наиболее хайповая тема в современных ИТ, и учитывая тот факт, что предыдущая мега-история с Internet of Things и Edge Computing до сих пор не забылась, я удивился, что отсутствуют внятные обучалки типа «Hello world» по добавлению machine learning в мобильные приложения на Android. Ну они конечно есть, только совсем не начального уровня. Кроме того, в них предлагается использовать чужие модели для распознавания кошек от собак и рукописных букв в текст итд. Но вот чтобы взять регрессию и с ней поработать – нет (или я не нашел). И в книгах не нашел. Если есть – поделитесь. Ну а пока я буду добавлять свою модель в приложение и параллельно писать этот текст.

История моего приложения есть в публикациях 1, 2, 3. Если коротко, это программа RuLearn для запоминания лексики в иностранных языках или в любой другой области, которая требует механического заучивания. Ее эффективность определяется «кривой забывания» Эббингауза, но как выясняется, интервалы для повторения хорошо было бы адаптировать под сложность изучаемого материала. То есть обучающийся учит новые слова, а приложение учится на его ошибках и подстраивает алгоритмы повторения оптимальным образом. Напрашивается машинное обучение в обучении человека.

Современные ARM-процессоры в мобильных телефонах содержат NPU для работы с нейросетями. Возможно, до сих пор это наименее используемая часть аппаратного обеспечения в вашем мобильнике. Поэтому никакая клиент-серверная архитектура в данном случае не нужна, в финале нашей разработки машинное обучение будет идти на конечном устройстве (бонус - никто с серверной стороны не сможет посмеяться над ошибками пользователя). Но на промежуточном этапе придется использовать модель, созданную на десктопе. Сегодня этим и займемся.

Читать далее

Новое событие в JFR для диагностики использования устаревшего (deprecated) кода

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

В Java есть специальная аннотация @Deprecated для маркировки уставшего кода. С определенной периодичностью такой код из JDK удаляется. Обычно о конкретных сроках удаления анонс делается заранее и в теории можно успеть подготовиться, но на практике не все так просто.

В больших проектах найти куски устаревшего кода в куче зависимостей задача не тривиальная и требующая хорошей автоматизации. В этой ситуации к нам приходит на помощь новый тип события в JFR. Он был добавлен в JDK 22.

Давайте посмотрим на простом примере как это работает.

Посмотрим...

Запускаем таски по расписанию: когда важна высокая частота, а креши дорого стоят

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

Всем привет! Я Илья, бэкенд-разработчик в Яндекс Телемосте — сервисе для организации видеовстреч и онлайн-трансляций.  

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

Читать далее

Создание микросервисов на Java с Dropwizard

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

Dropwizard — это комплексный фреймворк, созданный с целью упростить разработку RESTful веб‑сервисов, объединяя в себе множество проверенных временем библиотек и инструментов.

Читать далее

Spring Boot 3.3: повышение производительности, безопасности и  observability

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

Команда Spring АйО продолжает следить за выходом новых версий популярных технологий. В новом переводе рассказали про основные улучшения, которые вошли в состав Spring Boot 3.3. Среди них:

Поддержка Class Data Sharing (CDS)

Улучшение производительности виртуальных потоков для web-сокетов

Новые свойства для настройки Spring Data JDBC, GraphQL websocket, WebFlux и Tomcat

Читать далее

Не используйте Lombok с JPA, пока не прочтете эту статью

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

Lombok — действительно отличный инструмент. Одна строчка кода, и все ваши JPA сущности перестают корректно работать ;) Но это только в том случае, если вы не знаете, какие фичи Lombok можно использовать вместе с JPA, а какие лучше не стоит. 

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

Читать далее