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

Java *

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

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

Прощай HTML, привет QML

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

HTML mess


Как можно создать web приложение без использования HTML? Для этого нам понадобится: новый браузер, QML и back-end на Java.

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

Искусство аннотирования: пишем Java-friendly код на Kotlin

Время на прочтение6 мин
Количество просмотров7.4K
Привет, Хабр!

Сегодня мы затронем важнейшую тему: интероперабельность Java и Kotlin. Авторы предлагаемой публикации разумно предполагают, что переписать на Kotlin базу кода, сделанную на Java, маловозможно. Поэтому правильнее обеспечить взаимодействие кода на Java и Kotlin. Читайте, как это можно сделать при помощи аннотаций.
Читать дальше →

SonarQube и IntelliJ IDEA: правильная интеграция

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

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


На данный момент этот инструмент плотно вошёл в нашу жизнь, следя за единым стилем кода и уберегая от самых разных видов ошибок. Поиск ошибок происходит при сборке на CI или перед принятием pull request в версионное хранилище. Все найденные ошибки отображаются в Web-интерфейсе, где можно изучать их и управлять ими.


Однако беда в том, что удобный Web-интерфейс не означает удобство по устранению найденных замечаний в коде проекта. Для того, чтобы внести исправление, приходится сначала смотреть, в каком именно файле это замечание обнаружено, потом открывать этот файл и только затем вносить исправление. Также это приводит к тому, что разработчик узнает о проблеме с очень большим отставанием (иногда анализ в SonarQube может занимать десятки минут), что не способствует поддержанию чистоты кода.


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

Осторожно, много скриншотов

Как мы пишем микросервисы и почему не делаем этого быстро

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


Истории по распиливанию монолита часто похожи одна на другую. Был у команды здоровенный неповоротливый монолит, решили его распилить на россыпь правильных и шустреньких микросервисов, все стало круто. Отличаются истории лишь степенью ужаса “до”, радости “после” и рядом вторичных характеристик.


У нас в RBK.money тоже микросервисы. Но пришли мы к ним немного не так, как большинство. У нас все было даже хуже монолита — у нас на старте просто все было хреново.


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

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

Легкое управление конфигурациями микросервисов с помощью microconfig.io

Время на прочтение6 мин
Количество просмотров6.4K
Одной из основных проблем при разработке и последующей эксплуатации микросервисов является грамотная и аккуратная настройка их инстансов. В этом, на мой взгляд, может помочь новый фреймворк microconfig.io. Он позволяет довольно элегантно решить некоторые рутинные задачи настройки приложений.
Читать дальше →

Статический анализ IntelliJ IDEA против человеческого разума

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

Не так давно я изучал вывод статического анализатора IntelliJ IDEA для Java-кода и наткнулся на интересный случай. Так как соответствующий фрагмент кода не является open source, я его анонимизировал и отвязал от внешних зависимостей. Будем считать, что он выглядел так:


private static List<Integer> process(Map<String, Integer> options, List<String> inputs) {
    List<Integer> res = new ArrayList<>();
    int cur = -1;
    for (String str : inputs) {
        if (str.startsWith("-"))
            if (options.containsKey(str)) {
                if (cur == -1) cur = options.get(str);
            }
            else if (options.containsKey("+" + str)) {
                if (cur == -1) cur = res.isEmpty() ? -1 :
                        res.remove(res.size() - 1);
                if (cur != -1) res.add(cur + str.length());
            }
    }
    return res;
}

Код как код, что-то преобразуется, что-то делается, но статическому анализатору он не понравился. Здесь мы видим целых два предупреждения:


Code screenshot

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

Получаем Spring Bean из сторонних Application Context правильно

Время на прочтение5 мин
Количество просмотров13K
Добрый день, хабровчане!

В данной статье предлагаю обсудить одну из проблем, с которой нередко сталкиваются в проектах, использующих фреймворк Spring. Описываемая в данной статье проблема возникает ввиду одной из типичных ошибок в spring-конфигурациях. Не нужно стараться, чтобы такую ошибку в конфигурации допустить, и поэтому данная ошибка является довольно распространенной.
Читать дальше →

Один день в компании Joker 2019

Время на прочтение4 мин
Количество просмотров3.5K
25-26 октября, буквально через два дня, в Санкт-Петербурге на территории Экспофорума пройдёт Joker 2019 — международная Java-конференция для хардкорных Java-разработчиков.

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

Так что 25 октября в 9:30 утра (по московскому времени) можно будет перейти по ссылке под катом (совам, конечно, придется проснуться чуть раньше обычного). Там же под катом мы обсудим, что такого есть на конференции, чего нет на трансляции.


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

Сборка чугунного скорохода на Spring Boot и AppCDS

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


Application Class Data Sharing (AppCDS) – фича JVM для ускорения запуска и экономии памяти. Появившись в HotSpot в зачаточном виде ещё в JDK 1.5 (2004 г.), она долгое время оставалась весьма ограниченной, да ещё и отчасти коммерческой. Лишь только с OpenJDK 10 (2018 г.) её сделали доступной простым смертным, заодно расширив область применения. А недавно вышедшая Java 13 попыталась сделать это применение более простым.


Идея AppCDS в том, чтобы “расшарить” однажды прогруженные классы между экземплярами одной и той же JVM на одном хосте. Кажется, это должно здорово зайти микросервисам, особенно “бройлерам” на Spring Boot с их тысячами библиотечных классов, ведь теперь эти классы не надо будет загружать (парсить и верифицировать) при каждом старте каждого инстанса JVM, и они не будут дублироваться в памяти. А значит, запуск должен стать скорее, а потребление памяти – ниже. Чудно, не правда ли?


Всё так, всё так. Но если ты, однохабрянин, привык верить не бульварным вывескам, а конкретным цифрам и примерам, то добро пожаловать под кат – попробуем разобраться, как оно на самом деле…

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

Опыт перевода Maven-проекта на Multi-Release Jar: уже можно, но ещё сложно

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

У меня есть маленькая библиотека StreamEx, которая расширяет возможности Java 8 Stream API. Библиотеку я традиционно собираю через Maven, и по большей части меня всё устраивает. Однако вот захотелось экспериментов.


Некоторые вещи в библиотеке должны работать по-разному в разных версиях Java. Самый яркий пример — новые методы Stream API вроде takeWhile, которые появились только в Java 9. Моя библиотека предоставляет реализацию этих методов и в Java 8, но когда расширяешь Stream API сам, попадаешь под некоторые ограничения, о которых я здесь умолчу. Хотелось бы, чтобы пользователи Java 9+ имели доступ к стандартной реализации.

От поиска идеи до готового приложения

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

image


Наверно, многие задумывались над тем, как можно реализовать свои знания в готовом продукте. Кто-то больше, кто-то меньше потратил на это времени. Хочу поделиться с сообществом своим опытом и видением, как это надо делать правильно, но не всегда получается.

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

ClusterJ — работаем с MySQL NDB Cluster из Java

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

Привет, Хабр! В этой статье я хочу рассмотреть такую библиотеку для Java, как ClusterJ, которая позволяет очень просто работать с движком MySQL NDBCLUSTER из Java кода, которая представляет собой высокоуровневое API, схожее по концепции с JPA и Hibernate.


В рамках статьи создадим простое приложение на SpringBoot, а также сделаем стартер с ClusterJ на борту для удобного использования в приложениях с использованием автоконфигурации. Напишем простые тесты с использованием JUnit5 и TestContainers, которые покажут базовое использование API.
Также расскажу о нескольких недостатках, с которыми пришлось столкнутся в процессе работе с ней.


Кому интересно, добро пожаловать под кат.

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

Microsoft vs IBM: серьёзные изменения в поддержке Java

Время на прочтение3 мин
Количество просмотров7.5K
Неожиданно для Java-сообщества Microsoft превзошла IBM в представительстве среди Developer Advocate на конференции Oracle Code One.

Когда-то IBM была, вероятно, доминирующей силой в корпоративном сегменте Java-сообщества. Тем не менее, на Oracle Code One 2019 всё указывало на то, что нас ожидает серьёзный сдвиг в противостоянии Microsoft и IBM.

IBM всегда вкладывала значительные средства в Java-разработку, в то время как Microsoft не беспокоилась об этом. Но похоже, что IBM собирается выйти из-за стола Java, а Microsoft готовится занять это место.
Читать дальше →

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

Telegraff: Kotlin DSL для Telegram

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

Лого


На Хабре тысячи статей про то, как сделать Телеграм-бота под разные языки программирования и платформы. Тема далеко не новая.


Но Telegraff – лучший фреймворк для реализации Телеграм ботов и я это под катом докажу.

А ну-ка

Тестирование многопоточного и асинхронного кода

Время на прочтение6 мин
Количество просмотров21K
Привет! На неделе встала задача написать интеграционный тест для Spring Boot приложения, использующего асинхронное взаимодействие с внешними системами. Освежил много материала про отладку многопоточного кода. Привлекла внимание статья «Testing Multi-Threaded and Asynchronous Code» by Jonathan Halterman, мой перевод которой приведен ниже.
Читать дальше →

Книга «Java для всех»

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

image Привет, Хаброжители! Данная книга предназначена для начинающих.


Вот уже многие годы язык Java входит в число самых популярных и востребованных. Он красивый, эффектный и, самое главное, очень производительный. Но, к сожалению, не самый простой. Именно поэтому спрос на Java-программистов неизменно высок. Язык Java — это бриллиант, который украсит багаж знаний любого программиста. А учить Java, как, я надеюсь, предстоит убедиться читателям этой книги, не только полезно, но и интересно. В основу книги положены курсы лекций, в разное время прочитанные мной для магистров физического факультета Киевского национального университета им. Тараса Шевченко, бакалавров медико-инженерного факультета Национального технического университета Украины «Киевский политехнический институт» и слушателей различных курсов по программированию. Материал книги и способ изложения адаптированы для всех, кто желает изучать Java не только в учебных заведениях, но и самостоятельно. Поэтому книга может использоваться и как самоучитель.

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

«Для сообщества критически важно установить стандарты»: Марчин Москала о Kotlin

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


Пару лет назад было много блог-постов «смотрите, какой интересный язык Kotlin», где объяснялись основы. В 2019-м разжёвывать азы уже не требуется, зато теперь появляется публикация совсем другого формата. Марчин Москала, который уже не первый год учит людей этому языку, сейчас выпускает книгу «Effective Kotlin» — то есть уже не просто «как писать на Kotlin», а «как писать на Kotlin наилучшим образом».

А скоро Марчин приедет к нам на Mobius с докладом. Поэтому мы поспрашивали его и про новую книгу, и про доклад, и про обучение людей Kotlin, и о происходящем в индустрии вокруг этого языка. И про то, чем различаются слова «effective» и «efficient».
Читать дальше →

Переупаковка пакетов в Gradle

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

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


configurations.all {
    resolutionStrategy {
        force "org.ow2.asm:asm:7.2"
    }
}

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


Такая проблема также может возникнуть и при разработке библиотек. Если вы подключите в свой проект 2 библиотеки, использующие одну и ту же стороннюю библиотеку разных версий, например 1 и 2, то Gradle разрулит и возьмет самую новую версию, вторую. Но если в этой сторонней библиотеке нет обратной совместимости и вторая версия не может быть просто так использована вместо первой, то будут проблемы, которые наверняка будет очень сложно отследить по стектрейсу. Библиотека, ожидающая первую версию, получит классы второй и просто упадет.


Я столкнулся с конфликтом версий при написании градл плагина, в нем используется библиотека asm, которая и конфликтовала. После написания плагина, я проверил его работоспособность на тестовом проекте: все отлично, проверил на pet project-е, тоже все хорошо, но когда подключил к реальному рабочему проекту с кучей сторонних зависимостей, столкнулся с проблемой.



Решение проблемы под катом.

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

Обработка ошибок в Kotlin/Java: как правильно это делать?

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

Источник


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


спойлер

¯_(ツ)_/¯, нет единого способа, и в каждой конкретной ситуации придётся подбирать наиболее подходящий вариант, но есть рекомендации, как это делать лучше.

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

Инструменты для запуска и разработки Java приложений, компиляция, выполнение на JVM

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

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

Эта статья посвящена основам основ: в ней изложены базовые особенности языка, которые придутся кстати начинающим “джавистам”, а опытные Java-разработчики смогут освежить свои знания.

* Статья подготовлена на основе доклада Евгения Фраймана — Java разработчика компании IntexSoft.
В статье присутствуют ссылки на внешние материалы
.




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

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