Обновить
147.64

Java *

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

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

Настройка Podman для Quarkus Dev Services и Testcontainers в Linux

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

Podman - это контейнерный движок без демонов (daemonless) для разработки, управления и запуска контейнеров в системах Linux. Начиная с выпуска версии 3, Podman позволяет пользователю запускать службу, имитирующую Docker API. Это позволяет использовать Testcontainers и Quarkus Dev Services вместе с Podman.

Читать далее

Основы HTTPS, TLS, SSL. Создание собственных X.509 сертификатов. Пример настройки TLSv1.2 в Spring Boot

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

Привет, Хабр! В современном мире абсолютное большинство сайтов используют HTTPS (Google даже снижает рейтинг сайтов работающих по HTTP в поисковой выдаче), а подключение к различным системам происходит по протоколу TLS/SSL. Поэтому любой разработчик рано или поздно сталкивается с этими технологиями на практике. Данная статья призвана помочь разобраться, если вы совершенно не в курсе что это такое и как оно устроено. Мы разберем как работает соединение по протоколу TLS, как выпустить собственные сертификаты и настроем TLS в Spring Boot приложении. Поехали!

Читать далее

Code Review. 80 lvl

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

Любой программный продукт, будь то веб-сайт или мобильное приложение, основан на коде. Чем согласованнее и целостнее эта база, тем удобнее с ней будет работать, например, при необходимости доработки проекта, передачи на сопровождение другой команде.

Основными критериями качественного кода являются следующие: простота восприятия, гибкость для модификаций, возможность обновления, понятность, тестируемость. Однако зачастую работа над проектом ведется в спешке, под давлением и код пишется людьми с разным уровнем квалификации (с разным мышлением). И даже опытные разработчики не всегда пишут код самого высокого качества. Поэтому для повышения качества кода проводится процедура code review.

Читать далее

Включение метрик Apache Camel в Spring Boot Actuator Prometheus

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

В данной статье я привёл решение проблемы интеграции Apache Camel метрик с Spring Boot Actuator Prometheus, которое мне не встречалось в интернете.

Читать далее

MastermindCMS2 vs Next.js

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

Подходит концу 2021 г. и я думаю сейчас самое время подвести итоги как продвигалась веб разработка в условиях пандемии в мире и какие технологии сейчас используется для веб-программирования. 

Сегодня я хотел бы затронуть тему фреймворков. И сделать небольшое сравнение с одной малоизвестной технологией. Основную лидирующую позицию, в рейтинге самых популярных фреймворков для веб-разработки, сейчас занимает - фреймворк React.

Платформы с предложениями о работе в IT-сфере, просто кишат вакансиями фронтенд разработчиков со сознанием React.

С одной стороны React нам дал возможность частями программировать интерфейс пользователя, разбирая его на части. А с другой стороны мы получили “молоток и гвозди” с помощью которых нам придется построить дом. И получилось так что сообщество программистов использует фреймворк React, чтобы написать свой фреймворк. И поэтому на рынке появляются новые фреймворки, основанные на React, которые уже решают конкретные задачи на реальных проектах. Одним из таких фреймворков является Next.js

Меня подтолкнула к написанию данной статьи, огромное количество статей и обучающих видео в интернет пространстве о возможностях Next.js. А конкретнее сказать, я начал разбираться в чем же всё-таки преимущество этого Next.js. И к моему удивлению, я понял, что MastermindCMS2, которую я успешно использую на множестве проектов, решает те же проблемы, что и пытались решить разработчики Next.js.

А вот что конкретно сделали разработчики Next.js мы рассмотрим и сравним в этой статье с технологией MastermindCMS2. Поехали!

Fight!

MLflow: вывод моделей в продакшн и инструмент MLOps

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

В данной статье речь пойдёт о том, что такое инструмент MLflow и из каких компонентов он состоит. Как работает данный фреймворк, в каких случаях рекомендуется его использовать и какие проблемы он позволяет решить. Затронем основные плюсы и минусы данного инструмента.

Читать далее

Как создавать в играх бесконечные миры при помощи процедурной генерации

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

Привет, Хабр! Обратите внимание, Распродажа «Чёрная Пятница» от издательства «Питер» скоро закончится.

Поговорим о том, как в известных играх, например, Minecraft и Terraria, из ничего генерируются бесконечные и разнообразные миры. Пост снабжен подробными примерами кода.  

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

Если вы – разработчик и любите уделять внимание деталям, то, вероятно, задумывались, а как генерируются такие бесконечные миры. Несмотря на всю их сложную структуру, вся такая генерация сводится к тщательно настроенной случайной составляющей.

Читать далее

Разработка, сборка, деплой и мониторинг сервисов: от общего к частному и обратно

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

Привет, Хабр! Меня зовут Андрей Перепелкин. Я руководитель группы бэкенд-разработчиков, вошел в IT более 15 лет назад, 10 лет занимаюсь Java и около 4 плотно работаю с микросервисами. 

В этой статье я расскажу, как:

— мы организовали разработку микросервисов так, чтобы вынести инфраструктуру из продуктового проекта и управлять ей отдельно;

— создали общее поле разработки для независимых команд, получить единый стиль кода и контролировать качество;

— встраиваем микросервисы в инфраструктуру и собираем метрики и логи, не загружая этим разработчиков.

Читать далее

Рождественские календари для разработчиков

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

Добрый день, меня зовут Павел Поляков, я Principal Engineer в каршеринг компании SHARE NOW, в Гамбурге в ?? Германии. А еще я автор Telegram-канала Хороший разработчик знает, где рассказываю обо всем, что должен знать хороший разработчик.

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

Читать далее

Hibernate Reactive: стоит ли оно того?

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

В течение последнего года мы готовились к выпуску первого стабильного релиза Hibernate Reactive и пытались ответить на некоторые вопросы, которые у нас возникли.

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

Читать далее

String.format() в 3 раза быстрее в Java 17

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

Одним из самых удобных способов построения сложных строк является String.format(). Раньше он был чрезмерно медленным, но в Java 17 стал примерно в 3 раза быстрее. В данном выпуске мы выясним, в чем разница и где это вам поможет. А также когда следует использовать format() вместо обычного сложения строк с помощью +.

Читать далее

Пример использования Java утилиты javap

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

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

Утилита командной строки javap, также известный как дизассемблер файлов классов Java, выводит соответствующую информацию о любом скомпилированном классе Java, который его просят проверить. 

Читать далее

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

Однопоточный JavaScript и многопоточная Java: что быстрее?

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

Асинхронное выполнение на Java и JavaScript


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

console.log("1");
setTimeout(()=>console.log("2"));
console.log("3");

Результатом работы кода будет 1 3 2.

В Java API под асинхронным выполнением обычно подразумевается, что задача выполняется в новом выделенном потоке. Например, представленный ниже код при помощи метода supplyAsync() планирует асинхронную задачу:

System.out.println("current thread: " + Thread.currentThread().getName());
var future = CompletableFuture.supplyAsync(() -> Thread.currentThread().getName());
System.out.println("current thread: " + Thread.currentThread().getName());
System.out.println("task thread: " + future.get());

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

current thread: main
current thread: main
task thread: ForkJoinPool.commonPool-worker-1

Проблема множественных потоков заключается в том, что Java runtime не может создавать бесконечное их количество. Когда все запущенные потоки ожидают, а новые потоки создать нельзя, приложение тоже ничего не будет делать.
Читать дальше →

Примеры утверждений JUnit 5

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

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

Утверждения (Assertions) JUnit 5 помогают сравнить ожидаемый результат с фактическим результатом теста. Для простоты все утверждения JUnit Jupiter являются статическими методами в классе org.junit.jupiter.Assertions .

Не успешные  утверждениея будет генерировать исключение AssertionFailedError  или его подкласс.

Оглавление

Читать далее

Helidon, Testcontainers, Cucumber, Kafka и многое другое

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

Helidon  отлично подходит для создания микросервисов, для простого и быстрого развертывания в проде, и демострирует действительно впечатляющую производительность!

А как насчет тестирования Helidon?

В этой статье мы рассмотрим несколько способов, как это сделать.

Читать далее

Прогресс GC от JDK 8 до JDK 17

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

JDK 17 с нами уже несколько месяцев и он не только про новые возможности языка Java. Прирост производительности в сравнении с более старыми версиями JDK очень заметен. Это становится особенно очевидно, когда мы сравниваем его с предыдущими LTS версиями: JDK 8 и JDK 11. Большая доля в улучшении производительности происходит из новых функций и оптимизаций в JVM, и в этой статье фокус будет на улучшениях, которые были сделаны в области сборки мусора в JVM

Читать статью

Skillbox Java Challenge: игра “на выживание” для разработчиков

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

Привет, Хабр! Хотим поделиться опытом проведения ролевых соревнований среди студентов и выпускников курса “Java-разработчик” — Skillbox Java Challenge (SJC). Созданная в 2019 году по инициативе студентов активность полюбилась всей команде, обросла интересными соревновательными и игровыми фичами. Этой осенью SJC состоялся уже в третий раз, его тематикой стали космические путешествия. О подробностях соревнования — под катом.

Читать далее

Отчеты о покрытии кода JUnit тестами с помощью Maven плагина JaCoCo

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

Это продолжение туториала по JUnit 5. Введение опубликовано здесь.

Научитесь создавать отчеты о покрытии кода для тестов JUnit с помощью подключаемого модуля JaCoCo Maven.

Читать далее

Автоматизация тестирования «с нуля» (нетехническая сторона вопроса)

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

Есть множество статей про технологии и те или иные подходы к автоматизации. Но почему-то нет статей про «обратную сторону» автоматизации. Как вообще всё зарождается на проекте? И как это «всё» организовать?

Читаю дальше

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