Обновить
131.79

Java *

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

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

Вышла Java 16

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

Вышла 16-я версия платформы Java SE. В этот релиз попало около двух с половиной тысяч закрытых задач и 17 JEP'ов. Изменения API можно посмотреть здесь. Release notes здесь.


Уже сейчас доступны для скачивания дистрибутивы Oracle JDK и OpenJDK.


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

Как мы Schema Registry для Kafka настраивали, и что могло пойти не так…

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

Всем привет.

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

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

Читать далее

Большой разговор с новым Kotlin Project Lead Романом Елизаровым

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

В ноябре стало известно, что работу над Kotlin возглавит Роман Елизаров (elizarov). Поскольку теперь за дизайн языка отвечает он, интересно лучше понять его видение. Поэтому на онлайн-конференции Joker мы задали Роману много вопросов. А теперь для Хабра сделали текстовую версию (видеозапись тоже прикрепляем).



Для начала поговорили о его новой роли и команде Kotlin, а затем перешли к дизайну языка. Из текста можно узнать, например, такие вещи:


  • Как принимаются решения, ломающие обратную совместимость?
  • Чем философия Kotlin отличается от C# и почему?
  • Насколько приоритетна производительность?
  • Чем корутины в Kotlin отличаются от Project Loom в Java?
  • Какой тренд влияет на языки прямо сейчас?

Расспрашивали Антон Архипов (Developer Advocate в JetBrains) и Алексей Стукалов (руководитель направления DevRel в компании Haulmont, создавшей CUBA Platform). Но не все вопросы они придумали сами: поскольку дело происходило на конференции, часть была написана зрителями.

Автоматизированное тестирование баз данных в Java с помощью JdbcTemplate

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

Бывает, и достаточно часто, что во время автоматизированного тестирования наши тесты должны взаимодействовать с базами данных. Иногда нам нужно установить какие-либо тестовые данные. В других случаях нам нужно совершать запросы в базу данных, чтобы получить те самые тестовые данные. И давайте не будем забывать об очистке данных, которые мы использовали и которые больше нам не нужны. В этой статье я покажу, как вы можете использовать класс Spring JdbcTemplate для упрощения работы с базой данных MySQL из ваших автоматизированных тестов на Java.

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

Читать далее

Релиз Spring Native Beta

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

Недавно команда, занимающаяся портированием Spring на GraalVM, выпустила первый крупный релиз - Spring Native Beta. Вместе с создателями GraalVM они смогли пофиксить множество багов как в самом компиляторе так и спринге. Теперь у проекта появилась официальная поддержка, свой цикл релизов и его можно щупать.

Читать далее

Играем с CLIP. Создаем универсальный zero-shot классификатор на Android

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

TLDR: приложение можно скачать и потестить тут

Эта статья является дополненной и сильно расширенной версией моей статьи в TowardsDataScience о создании приложения, использующем новейшую мультимодальную нейросеть от OpenAI

В чем проблема классификаторов?

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

Читать далее

Как мы подружили склад и Kotlin: техническая изнанка управления товаром

Время на прочтение7 мин
Охват и читатели5.6K
Всем привет! Меня зовут Влад Кошкин, я Java-разработчик в одной из команд направления Warehouse Management System (WMS) в Lamoda. Помимо интернет-магазина, у нас есть собственный склад, где прием товара от поставщика, хранение, сборка заказа, упаковка и отправка покупателю полностью оцифрованы и в значительной мере автоматизированы.

Один из основных способов взаимодействия сотрудников склада с системой – это считывание штрихкодов при помощи сканера с мобильным приложением. Наша задача состояла в том, чтобы модернизировать это приложение и сделать переход максимально незаметным для пользователей.

Также в этой статье я сделал небольшое ревью наших технологий: как мы переехали с Java Server Faces на Kotlin и Android, как работаем сейчас и какие у нас амбиции на ближайший год.


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

Выступает DMN, дирижирует ZeeBe: как использовать бизнес-правила в микросервисах

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

Меня зовут Николай Первухин, я Senior Java Developer в Райффайзенбанке. Так сложилось, что единожды попробовав бизнес-процессы на Camunda, я стал адептом этой технологии и стараюсь ее применять в проектах со сложной логикой. Действительно сама идея подкупает: рисуешь процесс в удобном GUI-редакторе (моделлере), а фреймворк выполняет эти действия последовательно, соблюдая большой спектр элементов нотации BPMN.  

К тому же в Camunda есть встроенная поддержка еще одной нотации — DMN (Decision Model and Notation): она позволяет в простой и понятной форме создавать таблицы принятия решений по входящим наборам данных.

Но чего-то все же не хватает... Может, добавим немного скорости?

Читать далее

Итак, вы хотите оптимизировать gRPC. Часть 2

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

Насколько быстро работает gRPC? Довольно быстро, если вы понимаете, как построены современные клиенты и серверы. В первой части я показал, как легко добиться улучшения на 60%. В этом посте я покажу, как добиться улучшения в 10 000%. 

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

Читать далее

Улучшаем производительность Java-микросервиса парой простых приемов

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

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

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

Spring Boot — это быстрый способ создания микросервисов на Java. В этой статье мы рассмотрим, как улучшить производительность Spring Boot-микросервиса.

Читать далее

Книга «Эффективный Java. Тюнинг кода на Java 8, 11 и дальше. 2-е межд. издание »

Время на прочтение9 мин
Охват и читатели7.2K
image Привет, Хаброжители! Программирование и тестирование обычно принято относить к разным профессиональным сферам. Скотт Оукс — признанный эксперт по языку Java — уверен, что если вы хотите работать с этим языком, то обязаны понимать, как выполняется код в виртуальной машине Java, и знать, какие настройки влияют на производительность. Вы сможете разобраться в производительности приложений Java в контексте как JVM, так и платформы Java, освоите средства, функции и процессы, которые могут повысить производительность в LTS-версиях Java, и познакомитесь с новыми возможностями (такими как предварительная компиляция и экспериментальные уборщики мусора). В этой книге вы: — Узнаете, как платформы и компиляторы Java влияют на производительность. — Разберетесь c механизмом уборки мусора. — Освоите четыре принципа получения наилучших результатов при тестировании производительности. — Научитесь пользоваться JDK и другими инструментами оценки производительности. — Узнаете как настройка и приемы программирования позволяют минимизировать последствия уборки мусора. — Научитесь решать проблемы производительности средствами Java API. — Поймете, как улучшить производительность приложений баз данных Java.
Читать дальше →

Поддержка Null в Protobuf

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

Что значит значение равно null?

Проблема в том, что null может обозначать разные вещи в разных контекстах:

- Null — это null.

- Null — значение опционально / не установлено.

- Null — значение по умолчанию.

- Null — перепутано с другим значением.

Чтобы избежать этой путаницы, разработчики protobuf решили не сериализовать null. Вместо этого protobuf принуждает вас использовать одну из явных стратегий, избегая тем самым семантической путаницы в вашем Protobuf / gRPC API.

Читать далее

Итак, вы хотите оптимизировать gRPC. Часть 1

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

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

Рассмотрим простой сервис "ключ-значение", который используется несколькими клиентами. Сервис должен корректно работать при параллельных операциях изменения данных. Также должна быть возможность масштабирования. И, в конце концов, он должен быть быстрым. Для реализации подобного сервиса gRPC будет идеальным вариантом. Давайте посмотрим, как его реализовать.

Я написал пример клиента и сервера на Java. В примере три основных класса и protobuf-файл, описывающий API:

Читать далее

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

Реактивное программирование на Java: как, зачем и стоит ли? Часть II

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

Реактивное программирование — один из самых актуальных трендов современности. Обучение ему — сложный процесс, особенно если нет подходящих материалов. В качестве своеобразного дайджеста может выступить эта статья. На конференции РИТ++ 2020 эксперт и тренер Luxoft Training Владимир Сонькин рассказал о фишках управления асинхронными потоками данных и подходах к ним, а также показал на примерах, в каких ситуациях нужна реактивность, и что она может дать.

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

Читать далее

Как использовать GraphHopper для построения пешеходных маршрутов по собственным правилам

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

Построение маршрутов типичная задача, люди регулярно этим пользуются, особенно для автомобильных маршрутов, в навигаторах.

Решений, для построения маршрута тоже немало, в том числе существует GraphHopper, который умеет строить маршруты, и для автомобилей, и для пешеходов, и даже для пешего туризма, - подойдёт в 99% случаев.

Далее речь пойдёт том, что делать в оставшемся 1% ситуаций, точнее о моём опыте использования GraphHopper, когда существующее решение не подходило. Требовалось учитывать дополнительные ограничения: строить пешеходные маршруты для людей с ограниченными возможностями. Не будет ни каких значимых особенностей реализации именно этой задачи. Максимально обобщённо.

Будет описано, как создать на основе библиотеки GraphHopper свой веб–сервис, который, по координатам начала и окончания пути, вернёт массив координат маршрута.

Пример приложения, со всеми необходимыми для запуска заглушками, можно найти в моём репозитории на GitHub.

Читать далее

Android — ViewPager2 — заменяем фрагменты на лету (программно)

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

Вдруг вам надо листать фрагменты через ViewPager2 и при этом подменять их динамически. Например, чтобы уйти "глубже" - пользователь из фрагмента "Главные настройки" переходит во фрагмент "Выбор языка".

При этом новый фрагмент должен отобразиться на месте предыдущего фрагмента. А потом пользователь еще и захочет вернуться обратно...

Читать далее

11 вопросов на собеседовании по Spring Boot, которые заставляют задуматься

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

Большинство списков вопросов интервью по Spring Boot заставляют вас запоминать случайные детали из документации Spring Boot. Но запоминание — плохая замена истинному пониманию и уверенности в знании Spring Boot.

Поэтому сегодня мы собираемся применить другой подход. Вместо того, чтобы перечислять 50 вопросов по мелочам Spring Boot, мы сосредоточимся на 11, которые заставят вас задуматься и, таким образом, многому научиться на этом пути.
Вот они, в произвольном порядке.

Примечание: если вы сами проводите интервью по Spring Boot, возможно, вы захотите задать эти вопросы в открытом формате, ведущем к обсуждениям вместо того, чтобы ожидать ответов из учебников.

Читать далее

REST API с использованием Spring Security и JWT

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

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

Читать далее

Мониторинг производительности приложений в Broadcom DX APM — анонс вебинара

Время на прочтение1 мин
Охват и читатели935
image

Единый агент для всех популярных технологий, динамическое отслеживание изменений инфраструктуры, низкий оверхед, искусственный интеллект, оценка эффективности релизов, контекстный мониторинг, мониторинг реальных транзакций — обо всём этом и многом другом вы узнаете на вебинаре, посвящённому инструменту для мониторинга производительности приложений и инфраструктуры под ними Broadcom DX APM. Вебинар состоится 5 марта в 11 часов утра по московскому времени.

Под катом вы найдёте квадрант Gartner за 2020 год по APM-решениям и дополнительные материалы по DX APM и другим решениям Broadcom.
Читать дальше →

Краткое сравнение JUnit и TestNG

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

JUnit и TestNG, несомненно, являются двумя наиболее популярными фреймворками для модульного тестирования (юнит-тестирования) в экосистеме Java. Хотя JUnit послужил вдохновением для TestNG, второй имеет ряд отличий и, в отличие от JUnit, работает для функционального и более высоких уровней тестирования.

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

Читать далее

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