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

Java *

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

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

Онлайн-лекция «Реактивные и нативные приложения на Java Spring и Quarkus»

Время на прочтение1 мин
Количество просмотров2.9K
image

28 июля приглашаем на онлайн-лекцию о разработке приложений на Java Spring, Quarkus, Vert.x и GraalVM с деплоем в MicroK8s.

В программе лекции: Сергей Кошкинов и Андрей Смирнов покажут процесс создания приложения на Java-фреймворке Quarkus с деплоем в MicroK8s. А также сравнят производительность и потребления памяти приложений на Spring WebFlux, Spring Boot, Quarkus, Quarkus+Vert.x и скомпилированными в native code с помощью GraalVM.

Зарегистрироваться

Как подружить RxJava с VIPER в Android, подходы применения и о структуре планировщиков

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

Привет, Хабровчане. Сегодня мы с вами поговорим о RxJava. Я знаю, что о ней написано материала вагон и маленькая тележка, но, как мне кажется, у меня есть пара интересных моментов, которыми стоит поделиться. Сначала расскажу, как мы используем RxJava вместе с архитектурой VIPER для Android приложений, заодно посмотрим на «классический» способ применения. После этого пробежимся по главным особенностям RxJava и остановимся подробнее на том, как устроены планировщики. Если вы уже запаслись вкусняшками, то добро пожаловать под кат.
Читать дальше →

DINS JAVA EVENING (online): троттлинг, Token Bucket и финансовая математика

Время на прочтение2 мин
Количество просмотров1.9K
На встрече Владимир Бухтояров из DINS сделает обзор алгоритма Token Bucket, а Дмитрий Янтер из Технологического центра Дойче Банка объяснит, зачем разработчику знать высшую математику. Оба спикера ответят на ваши вопросы.

Встречаемся 22 июля в 19:00. Участие бесплатное, но нужно зарегистрироваться.

Подробная программа и информация о спикерах — под катом.

image

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

Производитель/потребитель на Kafka и Kotlin

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

Перевод статьи подготовлен в преддверии старта курса «Backend-разработка на Kotlin»





В этой статье мы поговорим о том, как создать простое приложение на Spring Boot с Kafka и Kotlin.

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

Java-модель памяти (часть 2)

Время на прочтение4 мин
Количество просмотров39K
Привет, Хабр! Представляю вашему вниманию перевод второй части статьи «Java Memory Model» автора Jakob Jenkov. Первая часть тут.

Аппаратная архитектура памяти


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

Вот упрощенная схема аппаратной архитектуры современного компьютера:

Современный компьютер часто имеет 2 или более процессоров. Некоторые из этих процессоров также могут иметь несколько ядер. На таких компьютерах возможно одновременное выполнение нескольких потоков. Каждый процессор (прим. переводчика — тут и далее под процессором автор вероятно подразумевает ядро процессора или одноядерный процессор) способен запускать один поток в любой момент времени. Это означает, что если ваше Java-приложение является многопоточным, то внутри вашей программы может быть запущен одновременно один поток на один процессор.

Каждый процессор содержит набор регистров, которые, по существу, находятся в его памяти. Он может выполнять операции над данными регистрах намного быстрее, чем в над данными, которые находятся в основной памяти компьютера (ОЗУ). Это связано с тем, что процессор может получить доступ к этим регистрам гораздо быстрее.
Читать дальше →

IntelliJ IDEA: Structural Search & Replace

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

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


Простой пример одной такой функции

А вы знаете, что, если в IDEA нажать F2, курсор перескочит к ближайшей ошибке в файле? А если нет ошибки, то к замечанию? Как-то так получается, что об этом знают далеко не все.


Одной такой функцией является Structural Search & Replace (SSR). Она может быть невероятно полезна в тех ситуациях, когда пасует всё богатое разнообразие других функций.


Несколько таких примеров я и приведу в данной статье. И чтобы не ограничиваться суррогатными случаями, буду демонстрировать эти примеры на реальном коде из двух проектов:


  1. 3D-движка для создания игр jMonkeyEngine, как пример большого проекта, в котором всегда можно найти что-то интересненькое.
  2. моего собственного проекта plantuml-native-image, в котором я провожу эксперименты по компиляции PlantUML в нативный исполняемый код с помощью GraalVM native-image.

Собственно, случай во втором проекте и побудил меня к написанию статьи. Но обо всём по порядку...

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

Java-модель памяти (часть 1)

Время на прочтение5 мин
Количество просмотров87K
Привет, Хабр! Представляю вашему вниманию перевод первой части статьи «Java Memory Model» автора Jakob Jenkov.

Прохожу обучение по Java и понадобилось изучить статью Java Memory Model. Перевёл её для лучшего понимания, ну а чтоб добро не пропадало решил поделиться с сообществом. Думаю, для новичков будет полезно, и если кому-то понравится, то переведу остальное.

Первоначальная Java-модель памяти была недостаточно хороша, поэтому она была пересмотрена в Java 1.5. Эта версия модели все ещё используется сегодня (Java 14+).
Читать дальше →

Как Kotlin может помочь в тестировании API: кейс Русфинанс Банка

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


Заявленный в заголовке Kotlin больше ассоциируется с Android-разработкой, но почему бы не поэкспериментировать? Мы с его помощью нашли способ немного упростить автоматизацию тестирования API одного из наших сервисов, а также облегчить работу тестировщикам, мало знакомым с программированием и нюансами языка Java.

Чем мы занимаемся? Разрабатываем сервис для отправки брокерских анкет для расчёта и получения решения по ним. И несмотря на то, что это банковское решение, разработку ведёт небольшая scrum-команда, тестированием в которой занимаются 1-2 специалиста в зависимости от загрузки и ситуации на проекте.

Под катом расскажем о результатах наших экспериментов, которые мы с удовольствием перенесли в продакшн.
Читать дальше →

Избавляемся от boilerplate кода в Protocol Buffers 2

Время на прочтение5 мин
Количество просмотров3K
Если вы разрабатываете корпоративные приложения, и не только, вероятно вы уже знакомы с протоколом сериализации Protocol Buffers от Google. В данной статье поговорим о его второй версии. И о том, что он заставляет писать много boilerplate кода, с которым мы и будем бороться.
Читать дальше →

Как включить шифрование в JetBrains Projector

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

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


Генерация и подкладывание ключей — довольно муторный кусок работы. Тут придётся познакомиться с особенностями Docker и криптографии в Java. К сожалению, убежать от этого никуда нельзя, потому что это Java, и ребята из JetBrains совершенно не виноваты.


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

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

Работаем в IntelliJ IDEA на слабом железе

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

Обнаружил секретный репозиторий на гитхабе JetBrains под названием Projector. Благодаря нему написал кусок кода в IntelliJ IDEA, запущенной на Android-планшете. Рассказываю, как это повторить.


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

Выбор библиотеки ассертов для проекта на Kotlin

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

В одном из старых проектов в кучу были навалены ассерты из JUnit, kotlin.test и AssertJ. Это было не единственной его проблемой: его вообще писали как письмо Дяди Федора, а времени остановиться и привести к единому виду не было. И вот это время пришло.


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


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


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

Как скачать файл порциями?

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

Иногда требуется скачивать файл порциями. Причины бывают разные, например слишком “большой” объем файла, ширина канала не достаточна или сервер ограничивает объем данных для скачивания.

В этой статье опишу каким образом реализовать скачивание файла небольшими порциями на языке Java по протоколу HTTP.

HTTP


Для таких целей HTTP предоставляет заголовок Range для запроса. В котором указывается диапазон байтов для скачивания. Заголовок Range относится только к телу запроса, заголовки сюда не входят.

Спецификация определяет следующие форматы указания значений заголовка:

Range: bytes=first-byte-pos "-" [last-byte-pos]


first-byte-pos — начальное смещение байта с которого необходимо начать (продолжить) скачивание, оно должно быть больше либо равно 0, и меньше либо равно last-byte-pos;

last-byte-pos — конечное смещение байта до которого необходимо скачать файл, оно должно быть больше либо равно first-byte-pos и при этом меньше либо равно скачиваемому размеру файла минус один (потому что это смещение, то есть индекс в массиве байтов).
Читать дальше →

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

Создаем Gatling скрипты с помощью VS Code

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

Перевод статьи подготовлен в преддверии старта курса «Нагрузочное тестирование».





Предисловие


Недавно, благодаря комментарию одного из студентов, изучающих мой курс Gatling Fundamentals, я узнал о том, что вы можете создавать Gatling скрипты с помощью Visual Studio Code. Я, честно говоря, понятия не имел, что это возможно, — но был приятно удивлен, обнаружив, насколько хорошо это работает!

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

«Я бросил свой бизнес и стал разработчиком в 43 года»

Время на прочтение7 мин
Количество просмотров13K
Интернет пестрит захватывающими историями о людях, которые бросили наёмную работу ради собственного бизнеса. У Сергея Парахина, разработчика из московского офиса EPAM, ситуация другая. Он больше 20 лет развивал свой собственный бизнес, который всегда был связан с IT. По иронии судьбы именно стремительное развитие информационных технологий в корне изменило его компанию, и бизнес всё дальше уходил от IT-сферы. Это побудило Сергея задуматься о смене профессии, и он решил стать разработчиком.

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


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

Spring Integration — динамические потоки данных

Время на прочтение12 мин
Количество просмотров31K
Салют, Хабр! Сегодня мы разберем достаточно специфичную область — потоковая обработка данных, с помощью Spring Integration фреймворка и как сделать эти потоки в runtime без предварительной инициализации в контексте приложения. Полный пример приложения лежит в Гите.

Введение


Spring Integration — фреймворк корпоративной интеграции (EIP), использующий под капотом механизмы обмена сообщениями между адаптерами различных протоколов/систем интеграции на основе каналов сообщений (условные очереди). Известными аналогами являются — Camel, Mule, Nifi.

Из тестового кейса у нас будет — сделать REST сервис, который умеет считывать полученные параметры запроса, ходить в нашу базу, к примеру, postgres, делать обновление и выборку из данных таблиц по параметрам, полученных от источника, и отдавать результат в очередь обратно (request/response), а также сделать несколько экземпляров с разными путями запроса.

Условно диаграмма data flow (потока) будет выглядеть так:

image

Далее я покажу, как это можно просто сделать без особых танцев с бубном, с помощью IntegrationFlowContext, с REST-управляющими эндепоинтами компонентов/потоков. Весь основной код проекта будет расположен в репозитории, здесь укажу лишь некоторые вырезки. Что ж, кто заинтересован, прошу под кат.
Читать дальше →

JPoint 2020: новый формат, новые возможности

Время на прочтение8 мин
Количество просмотров4K
С 29 июня по 3 июля 2020 года в онлайн-формате прошла Java-конференция JPoint 2020. Информация о докладах, спикерах, особенностях проведения, впечатления от конференции — всё это можно прочитать далее.


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

JetBrains Technology Day for Java

Время на прочтение2 мин
Количество просмотров2.9K
В мае языку Java исполнилось 25 лет. Такое событие нельзя пропустить! Давайте праздновать вместе с JetBrains 10 июля на первом в мире виртуальном митапе для Java энтузиастов — JetBrains Technology Day for Java.

image

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

Здесь вся программа.
Читать дальше →

Можете написать Deadlock на Camunda BPM? А я могу

Время на прочтение8 мин
Количество просмотров9.9K
image

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

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

Блокировка двойного клика. Велосипед?

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

С чего началось


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

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

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