Обновить
167.23

Java *

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

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

Создание и тестирование процессоров аннотаций (с кодогенерацией) для Kotlin

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

В разработке с использованием Kotlin (или Java) для создания классов по верхнеуровневому описанию часто используется маркировка аннотациями (например, для моделей таблиц баз данных, сетевых запросов или инъекции зависимостей) и подключение процессоров аннотаций, которые также могут генерировать код, доступный из основного проекта. Запуск процессоров аннотаций выполняется внутри gradle (для Java-проектов через annotationProcessor, для Kotlin - kapt) и встраивается как зависимость для целей сборки проекта. И конечно же, как и для любого другого кода, для процессора аннотаций необходимо иметь возможность разрабатывать тесты. В этой статье мы рассмотрим основы использования кодогенерации (с использованием kapt) и разработки тестов для созданных генераторов кода. Во второй части статьи речь пойдет о разработке процессоров на основе Kotlin Symbol Processing (KSP) и созданию тестов для них.

Читать далее

Как написать простое консольное приложение с аргументами на Java

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

Пост про то, как начинающий программист разбирается с консольными утилитами, Java и args4j

У меня появилось задание написать консольное приложение , которое должно разделять и соединять текстовые файлы...

Читать далее

Разбираем float на части

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

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

Читать далее

Создаем читабельный e2e тест для микросервисов на Spring Boot с помощью Cucumber 7 и Wiremock

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

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

TL;DR

Весь код для микросервисов и e2e теста тут

Рекомендую быстро пробежаться по коду перед прочтением статьи т к в самой статье я объясню только неочевидные моменты реализации e2e тестирования.

Читать далее

Замеряй и ускоряй: как мы сократили время вызова метода в Java-коде в 16 раз

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

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

Меня зовут Александр Певненко, я Java-разработчик в СберТехе. Вместе с командой мы развиваем Platform V DataSpace. Это облачный сервис, который упрощает и ускоряет разработку приложений, используя концепцию Backend-as-a-Service (BaaS) для хранения и управления данными. Я расскажу про наш способ замера производительности кода с помощью бенчмарков. Рассматривать метод будем на примере оптимизации кода в Platform V Dataspace, которая помогла сократить время вызова метода в 16 раз.

В статье я буду пользоваться языком Java, Python для построения графиков и набором библиотек JMH — они также адаптированы для Kotlin, Scala и т.д. 

Читать далее

Потоковый обмен в распределённых системах и использование реактивных потоков в нереактивных приложениях: опыт «Магнита»

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

Привет, Хабр! На связи Андрей Зяблин, Java разработчик компании «Магнит». В статье я расскажу про три решения, которые позволяют реализовать потоковый обмен данными из БД между распределёнными приложениями.

Читать далее

Что Java-разработчикам расскажут на JPoint 2023?

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

Недавно Java дошла до юбилейной 20-й версии, а у нашей Java-конференции JPoint своя круглая дата: впервые она прошла 10 лет назад. Каких именно докладов о языке-юбиляре ожидать на конференции-юбиляре в апреле?

Как водится, в программе есть разные тематические блоки:
— и об инструментах («Как познавать Spring Boot 3 с помощью TDD»),
— и о производительности (тут научат пользоваться профайлером perf для JVM-задач),
— а также об архитектуре, тестировании, «реактивщине», работе с данными.

А полный список докладов с описаниями — далее в посте.

Читать далее

Выражение Hibernate запросов в виде типо‑безопасных Java-потоков

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

В этой статье вы узнаете, как расширение JPAstreamer Quarkus упрощает выполнение типо‑безопасных запросов Hibernate без излишней многословности и сложности.

Читать далее

Книга «Объекты. Стильное ООП»

Время на прочтение9 мин
Охват и читатели13K
image Привет, Хаброжители!

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

Книга «Объекты. Стильное ООП» познакомит вас с профессиональными техниками написания ОО-кода. Маттиас Нобак раскрывает правила создания объектов, определения методов, изменения и извлечения состояний и многое другое. Все примеры написаны на простом псевдокоде, который легко перевести в любой язык программирования. Кейс за кейсом вы изучите ключевые сценарии и задачи проектирования объектов, а затем шаг за шагом создадите простое веб-приложение, которое покажет, как должны взаимодействовать объекты разных типов.
Читать дальше →

@Transactional в Spring и исключения

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

Привет! В этой статье я бы хотел рассказать, как Spring'овая аннотация @Transactional ведет себя при возникновении исключений. Про это немало написано, в том числе на Хабре. Например, тут или тут. Поэтому, чтобы не повторяться, я не буду подробно расписывать как и почему исключения влияют на откат транзакций, а вместо этого просто покажу несколько примеров.

Читать далее

Java для начинающих: решаем задачу умножения матриц

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

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

В этой статье я, Сергей Чеботарев, наставник на курсе «Java-разработчик», покажу пример задачи, которая более-менее подходит к этим требованиям. Мы немного потренируемся в реализации алгоритмов, использующих циклы, а также в использовании консольного ввода-вывода. Нам потребуются математические знания на уровне школьной математики, а для реализации я буду использовать JDK 11.

Читать далее

Как запустить Java-приложение с помощью CRaC в контейнере Docker

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

CRaC (Coordinated Restore at Checkpoint) — это проект OpenJDK, разработанный Azul для решения проблемы «медленного» запуска виртуальной машины Java в микросервисной среде.

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

В механизме восстановления контрольной точки (checkpoint-restore) нет ничего нового, и большинство из вас уже знают и используют его ежедневно. 

Если вы работаете на ноутбуке и закрываете крышку, операционная система обнаруживает это и сохраняет текущее состояние на диск. Как только вы снова открываете крышку, операционная система восстанавливает сохраненное состояние с диска.
CRaC предоставляет тот же механизм, но для JVM и вашего запущенного приложения.

Вы запускаете свое приложение, применяете к нему некоторую рабочую нагрузку (чтобы убедиться, что важные части вашего кода будут затронуты и оптимизированы JVM), а затем создаете контрольную точку. Это приведет к закрытию всех открытых ресурсов, таких как открытые файлы и сокетные соединения, а затем сохранит состояние JVM, включая ваше приложение, на диск.

После этого вы сможете восстанавливать состояние JVM, включая состояние вашего приложения, из этой сохраненной контрольной точки так часто, как вам захочется.

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

Читать далее

Путешествие к центру Spring Security

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

Я вас категорически приветствую, дорогие хабравчане! В этой статье я хотел бы поглубже разобрать такую штуку как Spring Security, а в частности Security фильтры, как они работают в целом и как объединяются в цепочку ApplicationFilterChain.

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

Проблема

Для начала я обозначу проблему, с появлением которой я и начал столь интересный путь по стектрейсу в дебаггере. На проекте, над которым сейчас мы с командой работаем понадобилось прикрутить сервис авторизации. Не долго думая и собрав в кучу все требования, было принято решение поднять сервис, поддерживающий OAuth2 стандарт, а именно Keycloak. Этот сервис довольно популярен и по его настройке скопилось немало экспертизы. А также у коллег из других команд был опыт по развертыванию и настройке Keycloak. В общем, остановились на нем. Как гласит документация, в Keycloak поддерживается интеграция со Spring Security, поэтому проблем возникнуть не должно, НО…

После поднятия самого Keycloak сервера и конфигурирования Realm’a, Client’a юзеров и т. д., мы начали прикручивать авторизацию в наши микросервисы. Исходя из мануала, настройка Keycloak довольно проста (не входит в тему этой статьи). Но что же мы за программисты такие, если не хотим это дело как-то кастмизировать. Добавляем зависимости.

Читать далее

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

Сказка о типизации

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

В некотором царстве, в некотором государстве жил был царь. Как-то раз объявил царь всему народу - "Кто решит три моих задачки, тот сам сможет царём стать". И даже контракт метода опубликовал, всё честь по чести.

Это только присказка, сказка будет впереди

Модульные тесты как оплот стабильности в Agile разработке

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

В этой статье мы рассмотрим ту часть тестирования, которой не касаются специалисты по тестированию — модульные тесты. Почему же при Agile так необходимо иметь качественное покрытие модульными тестами? Раскроем их положение в цикле разработки и цели их создания. Рассмотрим различные варианты оценки качества покрытия тестами при разработке backend приложения на языке Java с использованием Spring-boot. С помощью Jacoco построим отчет и увидим недостатки численных оценок покрытия тестами. Сформулируем субъективные оценки модульного тестирования и советы по их разработке.

Читать далее

Как я учился языку JAVA на Яндекс платформе

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

Вот наконец я созрел для написания отзыва о своей учебе в Яндекс практикуме на потоке Java программировании. Долго не мог и не хотел оставлять отклик по учебе, думаю он был бы не совсем корректным. Теперь, когда утихли первые и последние эмоции, думаю можно.   Итак, прежде чем описать свое мнение, ведь все что будет написано является сугубо субъективным, пропущенным через мой опыт и чувства, поэтому маленькое предисловие: немного о себе, это важно с точки зрения дальнейшего описания событий. Образование высшее медицинское, стаж работы на врачебных должностях, в том числе и заведующим отделением обширный, к тому же имею педагогическое образование и стаж преподавания семь лет. Это все к тому, что я понимаю о чем говорю и пишу в своем отзыве. А также для тех, у кого образование гуманитарий. Одно дела переучиваться людям с техническим образованием на программиста, а другое без такового. И последняя ремарка, сравнивать не с чем, пока на других платформах не пытался учиться, обзор будет сугубо о платформе Яндекс практикум,  и наверно будет отзыв не совсем честен, так как к началу обучения я самостоятельно в течение шести месяцев изучал данный вопрос, к моменту обучения представлял, что такое ООП (объектно-ориентированное программирование), в целом имел представление об языках программирования, а также изучил наизусть основы программирования java по книги «Java Полное руководство» Герберт Шилдт 10-е издательство и спокойно пользовался технической документацией по Java SE 11 на тот момент.

Читать далее

Универсальный загрузчик XML на java. Или как загрузить файлы ГАР на 250 гб и остаться при памяти

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

С проблемой загрузки больших XML столкнулся при переходе с КЛАДР и ФИАС на справочники ГАР - Государственный адресный реестр (Федеральная информационная адресная система).

Справочник ГАР содержит более подробную информацию чем предыдущие классификаторы. В том числе информацию по муниципальным делениям. В связи с чем справочник после распаковки занимет около 250 ГБ, что примерно в 3 раза больше чем тот же ФИАС.

Предыдущая загрузка работала на DOM-модели, т.е. весь XML-файл считывался в память. Соответственно при попытке загрузить ГАР таким же способом стали стабильно получать OutOfMemory. А значит настало время менять подход к загрузке)

Немного теории:

DOM (Document Object Model) - это стандартный интерфейс для работы с документами в формате XML (Extensible Markup Language). DOM-модель представляет XML-документ в виде дерева объектов, где каждый элемент и атрибут документа является узлом дерева.

SAX (Simple API for XML) является событийно-ориентированным API для чтения XML-документа. Он предоставляет возможность читать XML-документ последовательно и обрабатывать события, такие как начало и конец элемента, содержимое элемента и т.д.

StAX (Streaming API for XML) также является API для последовательного чтения и записи XML-документов. Он предоставляет потоковый доступ к XML-документу, позволяя читать его и записывать по частям. StAX предоставляет возможность читать и записывать XML-документы в виде потока событий, аналогично SAX, но также предоставляет возможность читать и записывать XML-документы в виде итерируемых наборов событий. StAX позволяет эффективно обрабатывать большие XML-документы и не требует реализации обработчиков событий.

Читать далее

Как сделать единый заглушечный контур и освободить себя от рутины

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

Привет, Хабр! Меня зовут Ира, я SRE в команде Samokat.tech. В этом посте хочу поделиться подходом в тестировании, которым мы пользуемся сами. Если вам при подготовке тестов часто приходится писать похожие друг на друга как две капли воды заглушки (или, как их ещё называют, «моки»), а затем заботиться о том, чтобы их развернуть, то вам может понравиться наше решение. Освободившись от части рутинных забот, вы можете уделить больше времени чему-то более важному.

Разношёрстные и хаотично развёрнутые в окружении заглушки – дорогие и неэффективные. В каждой отдельной заглушке разбирается в лучшем случае только одна команда, чаще только один человек. Со временем при накоплении критической массы они становятся фактически неподдерживаемыми.

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

Сложно представить тестировщика в роли доброго самаритянина, раздающего коллегам свои заглушки. Его к этому вряд ли что-то мотивирует, да и работы у него всегда прилично. Некогда отвлекаться! Так, давайте разгрузим немного нашего трудягу.

Читать далее

Вышла Java 20

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

Вышла общедоступная версия Java 20. В этот релиз попало около 1500 закрытых задач и 7 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь.


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

Что нового в Jmix 1.5

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

Недавно мы выпустили новую версию Jmix 1.5. В статье расскажем о ключевых обновлениях, представленных в этом функциональном релизе. 

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

Одна из наших разработок, Jmix – это технологическая open-source платформа для быстрой разработки бизнес-приложений на Java. О ней и пойдет речь.  

Читать далее

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