Обновить
177.4

Java *

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

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

Jqwik: обзор тестирования на основе свойств в UI и API

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров1.4K

Привет, Хабр! Меня зовут Денис, я SDET-специалист в компании SimbirSoft. Работая на проектах, я приобрел опыт использования различных инструментов тестирования. Спустя тонны написанных автоматизированных тестов по тест-кейсам и техникам тест-дизайна, хочу рассказать вам о возможности тестирования не конкретных данных, а их свойств. Статья будет полезна всем, кто уже знаком с тестированием на основе примеров и позволит расширить кругозор в понимании подготовки данных.

В своей статье я описал методы гарантии качества ПО, такие как тестирование на основе примеров и тестирование на основе свойств, а также составил таблицу с описанием параметров их взаимодействия с тестовым оракулом. Рассказал об инструменте тестирования на основе свойств Jqwik для языка Java, привел примеры использования случайного набора данных на UI и API, раскрыл возможности инструмента и потенциал работы с ним в рамках генерации тестов.

Читать далее ⚡

Альтернативы IDEA CE для Jmix и Spring Boot разработчиков

Уровень сложностиПростой
Время на прочтение16 мин
Количество просмотров3.3K

Недавно состоялся долгожданный релиз OpenIDE — открытой среды для профессиональной разработки (Spring Boot/Java/Kotlin и многое другое) от консорциума «Haulmont – Axiom – Astra», построенной на принципах открытости, свободы и отсутствия какой-либо дискриминации. В отличие от конкурентов, эта IDE не позиционирует себя как очередное решение для «импортозамещения», а является самостоятельным продуктом, нацеленным на решение широкого спектра задач современной разработки.  

К написанию данной статьи дополнительным стимулом стал «повышенный интерес» сообщества Jmix-разработчиков к GigaIDE от Сбера, релиз которой состоялся почти год назад (27 июня 2024 года). За прошедшее время те, кто хотел, уже успели ознакомиться с возможностями GigaIDE. Теперь же разработчики получили возможность попробовать OpenIDE и сравнить её с предыдущей альтернативой. 

Цель сегодняшней статьи — подробно сравнить эти два продукта и ответить на важные вопросы.

Читать далее

В центре внимания Java: Local Variable Type Inference, или var

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

Мы (команда Axiom JDK) подготовили перевод статьи про var, или Local Variable Type Inference (LVTI). Из этой статьи вы узнаете как работает var, когда эту фичу лучше использовать в коде, а когда — воздержаться. Всё это с примерами кода и комментариями от нашей команды.

Примечание от команды Axiom JDK: Хотя статья написана в 2019 году, она остаётся актуальной в 2025: var (Local Variable Type Inference) уже давно является частью LTS-релизов и ключевой особенностью современного Java-кода, но по-прежнему вызывает споры и вопросы даже у опытных разработчиков. Это отличный материал от Брайана Гётца — одного из архитекторов Java — с разбором принципов, которые не устарели. С тех пор появилось больше практики, но базовая теория осталась неизменной. Мы публикуем перевод как удобный справочник по механике var, его компромиссам и подводным камням.

Читать далее

Основные паттерны микросервисной архитектуры: Strangler Fig, API Gateway, Service Mesh и другие

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

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

В данной статье мы разберем несколько ключевых паттернов, связанных с микросервисами. Речь пойдет о паттернах миграции и интеграции (таких как Strangler Fig – «удушающее дерево» и API Gateway), о сетевых и структурных паттернах (Service MeshSidecar), о шаблонах работы с данными (Database per ServiceCQRS) и об особом подходе к хранению состояния (Event Sourcing). Для каждого паттерна мы рассмотрим его суть, назначение, примеры использования, а также плюсы и возможные сложности. К некоторым паттернам приведены упрощенные диаграммы и фрагменты кода, чтобы иллюстративно показать, как они работают на практике.

Читать далее

Избавляемся от Flaky тестов в CI/CD при помощи JMina

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

Представьте: вы написали код, покрыли его тестами, запустили их локально — тесты успешно прошли. Вы загрузили изменения в репозиторий, пайплайн успешно завершился. Самое время расслабиться и приступить к новым задачам. Но не тут-то было!

Спустя некоторое время в CI/CD падает тест. Вы запускаете тесты локально — они проходят успешно. Вы снова запускаете пайплайн в CI/CD — и тесты снова проходят. Однако через какое-то время ситуация повторяется.

Читать далее

Single Sign-On плагин для Sonatype Nexus Repository

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.6K

Хочу рассказать о своём проекте - Single Sign-On плагин для Sonatype Nexus Repository. Плагин реализует аутентификацию через SSO и пользовательские токены для Nexus редакции "Community Edition". Если вам интересна эта тема, то добро пожаловать под кат.

Читать далее

Автоматизированное создание проектов в Jira Server/Data Center

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

В этой статье я поделюсь результатами исследования, посвященного унификации процессов создания проектов в Jira, используя возможности автоматизации и API. Статья была написана с помощью GPT Deep Research в целях изучения различных подходов к унификации рабочих процессов и настройки проектов в Jira. Основная цель — собрать мнения и комментарии от других экспертов, чтобы понять, как они подошли к созданию стандартов и оптимизации процессов в своей практике. Буду рад услышать ваши истории и советы по унификации в Jira, а также обсудить лучшие методы для повышения эффективности и согласованности в работе команд.

Читать далее

Гибкий поиск в Spring Data Elasticsearch: Превращаем «првт мр» в «Привет, мир!»

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

Всем привет! Меня зовут Артемий Иванов, и это моя первая статья на Хабре. В ней я хочу поделиться опытом, который получил, работая над задачей кастомизации поиска.

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

Разобраться во всех нюансах было непросто — приходилось вникать в обилие терминов и тонкостей «на ходу». В этой статье я покажу, как можно сделать поиск гибче с помощью Spring Data Elasticsearch — и всё это на конкретных примерах из практики.

Читать далее

Поиск в поиске: проверка Elasticsearch

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров1.6K

Один из самых больших проектов на Java в Open Source. Elasticsearch используется во многих крупных организациях, таких как GitHub, Альфа-Банк, Тинькофф, Netflix и Amazon. Шесть лет назад мы уже проверяли проект, но интересно, какие новые ошибки появились за столь долгое время?

Читать далее

Spring Boot: создайте свой собственный CLI с помощью Spring Shell

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

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

Читать далее

Обходим подводные камни работы с UDA в коде на Lua для ScyllaDB: дружим Java-драйвер и пустые значения

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров886

Привет, Хабр! Мое имя Александр Коваль, я разработчик IoT-сервисов в МТС Web Services. Сейчас ScyllaDB поддерживает ограниченное количество функций, в том числе агрегационных. В стандартном наборе: min, max, count, avg. Но ее функциональность расширяется двумя типами пользовательских функций: скалярными (scalar functions) и агрегационными (aggregate functions). Первые работают со значениями одной строки, а вторые — нескольких. Реализовать такие функции можно на Lua или Rust.

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

Дисклеймер: этот материал написан на основе личного опыта — все решения получены методом проб и ошибок. Конструктивные предложения и советы по их улучшению приветствуется. Код с примерами и ссылки на ресурсы можно найти у меня в репозитории GitHub.

Читать далее

OpenIDE: первая российская среда разработки с поддержкой Java 24

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

Наконец-то состоялся официальный релиз OpenIDE – независимой российской среды разработки, которую совместно создают «Группа Астра», Axiom JDK и Haulmont.

Проект стартовал как open source-инициатива в конце прошлого года и всего за полгода прошёл путь от идеи до стабильной версии. В числе ключевых фич — поддержка Java 24 уже "из коробки", собственный маркетплейс плагинов и "многоязычность".

В статье — ключевые достижения, проблемы, а также планы по развитию OpenIDE и её экосистемы.

Читать далее

Как подготовиться и пройти System Design Interview

Уровень сложностиПростой
Время на прочтение16 мин
Количество просмотров19K

System Design Interview — пожалуй, один из самых «бесформенных» этапов технического собеседования. Здесь важно не найти единственно верное решение, а продемонстрировать системное мышление, умение работать с абстракциями, логически выстраивать архитектуру и аргументированно делать выбор технологий.

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

Кстати, Александр ведет репозиторий с заметками: https://github.com/qcha/JBook

Читать далее

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

Kubernetes и микросервисы для интернет-магазина

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

История Kubernetes

 7 июня 2014 года был выпущен первый выпуск Kubernetes

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

Kubernetes на греческом языке означает «кормчий» или «рулевой» (лицо, держащее рулевое колесо корабля).

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

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

 Основные понятия в Kubernetes

 Кластер – это несколько серверов, где нужно развернуть наше приложение.

Под (pod) – минимальный элемент развертывания в Kubernetes, который состоит из одного или нескольких контейнеров, работающих на одном компьютере. Контейнеры внутри пода работают по одному IP-адресу
и могут обмениваться информацией через доступную в контейнере директорию (том, volumes).

Сервисы (Service) – соединяет поды, которые объединяются в группы
с постоянным IP-адресом и балансирует нагрузку между ними.

Читать далее

Cтатья про собеседования в Яшу (Yandex Weekend Offer)

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

Может кому-то это будет интересно, даст возможность лучше подготовиться; или наоборот кто-то примет решение не участвовать.

Коротко о себе: 41 год, senior software developer, стаж > 20 лет. Однако, как я понял, эти собесы все равно для всех одинаковые, так чтоб все написанное актуально и для молодежи.

Итак, угораздило меня согласиться на т. н. «Weekend Offer на позицию разработчика на Kotlin». Вообще‑то мне больше нравится Scala, и опыта по ней гораздо больше, но рекрутерша была сильно настойчива, и я решил обновить экспиренс, а возможно, и прибавку в деньгах. И вот что было дальше.

Читать далее

JDBC: Как Java научилась дружить с Базами Данных

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

Представьте, что вы — гид в огромном городе под названием «Базы Данных». Ваша задача — помочь Java-приложениям найти нужную информацию, обновить данные или создать новые таблицы. Но как «разговаривать» с разными СУБД, если у каждой свой язык? Здесь на помощь приходит JDBC — универсальный переводчик, который знает все диалекты.  

Читать далее

Pro-code, Low-code, и роль Camunda

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров3K

Pro-code — наше сердце и душа, но люди и процессы бывают разными. Наши необязательные low-code-функции расширяют спектр применений, не мешая разработчикам.
 
Разработчики часто спрашивают меня о стратегии развития продуктов Camunda. Особенно во время запуска Camunda 8 они выражали обеспокоенность тем, что мы якобы «забыли свои корни» или «отказались от удобства для разработчиков» — именно те качества, за которые нас любят. Появилось мнение, что мы «прыгнули в поезд low-code», потому что у нас теперь есть финансирование и мы хотим «гнаться за большими деньгами». Как разработчик в душе, я могу вас уверить — это совсем не так. Позвольте объяснить нашу стратегию в этом посте.
 
TL;DR: Мы остаёмся на 100% дружелюбными к разработчикам, и pro-code — это наше всё (можно сказать, наш хлеб с маслом). Но люди, создающие процессные решения, бывают разными — как и сами процессы, которые нужно автоматизировать. Для некоторых сценариев low-code действительно имеет смысл, и здорово, что мы можем их поддерживать. Но low-code-функции в Camunda являются необязательными и никак не мешают pro-code-разработке.

Читать далее

Как написать приложение на JavaFX: гид для начинающих

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

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

Читать далее

@teqfw/di: Coding JavaScript like a Java boss

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров927

Эта статья для тех, кто, как и я, хочет программировать на JavaScript в Java-стиле. Для тех, кто находит вдохновение в балансе между строгой архитектурной дисциплиной Java и творческой свободой JavaScript. Ранее я уже публиковал "философию" своей платформы TeqFW, а также инструкции для LLM (раз, два) по оформлению es-модулей в приложениях, написанных в стиле TeqFW. На этот раз я делюсь инструкцией для LLM по использованию внедрения зависимостей в таких приложениях.

Для тех, кто не совсем понимает, что значит "программировать на JavaScript в Java-стиле", приведу рабочий пример — это Node.js-утилита @flancer64/smtp-logger. Она сохраняет в базу данных все email'ы, которые Postfix отправляет наружу. Мне как раз понадобился такой функционал — и я реализовал его в стиле TeqFW: с явным управлением зависимостями и строгой модульной структурой.

Под катом - пример JS-кода в Java-стиле.

Читать далее

Как должен выглядеть правильный Docker Image для Spring Boot приложения?

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

Когда мы упаковываем Spring Boot-приложение в Docker-образ, важно не только обеспечить его запуск. Нам нужен такой образ, который поможет понять причины проблем: падений, тормозов и других сбоев.

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

Читать далее

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