Обновить
128K+

Java *

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

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

Простая интеграция RabbitMQ и Spring Boot

Время на прочтение6 мин
Охват и читатели25K
Перевод статьи был подготовлен в преддверии старта курса «Разработчик на Spring Framework».




Всем привет!

Я хотел бы поделиться с вами библиотекой с открытым исходным кодом, которая облегчает интеграцию RabbitMQ с приложениями на Spring Boot. Кроме того, эта библиотека предлагает новую, улучшенную концепцию повторов неудачных операций (по сравнению со стандартным подходом Spring AMQP).
Упрощает? Но как?

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

WebRTC на Android: как включить аппаратное кодирование на множестве устройств

Время на прочтение7 мин
Охват и читатели19K
Для видеозвонков в Badoo мы используем стандарт WebRTC и кодек H.264. Если верить документации, этот кодек должен без проблем работать на любых устройствах Android начиная с Android 5.0. Но на практике всё оказалось не совсем так. В этой статье я расскажу про особенности реализации аппаратного кодирования для кодека H.264 в WebRTC и о том, как заставить его работать на большем количестве устройств.


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

Иерархическое логирование приложения в Базу Данных

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

Всем, привет!


В статье я хотел бы рассказать об одном из подходов к логированию приложения, который сильно помогал мне и коллегам при отладке, поиске ошибок и анализе проблем производительности. Про необходимость логирования было написано множество хороших статей в том числе и на Хабре, поэтому здесь нет большого смысла повторяться. Я начинал карьеру в IT с Oracle и изучал эту БД по книгам главного эксперта — Тома Кайта. Мне запомнилась его фраза по поводу логирования из книги "Effective Oracle by Design":

Instrumentation is not overhead. Overhead is something you can remove without losing much benefit. Removing (or not having) instrumentation takes away considerable functionality. You wouldn’t need to do this if your systems never break, never need diagnostics, and never suffer from performance issues. If that is true, you don’t need to instrument your system (and send me your email address, because I have a job offer for you).


С работой над Oracle проектами всё и началось.

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

Руководство по возможностям Java версий 8-14

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

Здесь есть все, что вам нужно знать о различных версиях и функциях Java.



Java 8, Java 11, Java 13, Java 14 — какая разница?


Вы можете использовать это руководство, чтобы получить практическую информацию о том, как найти и установить последнюю версию Java, понять различия между дистрибутивами Java (AdoptOpenJdk, OpenJDK, OracleJDK и т.д.), А также получить обзор возможностей языка Java, включая версии Java 8-14.


Примечание переводчика
17 февраля был опубликован перевод Руководство по версиям и возможностям Java
В комментарии к нему Julegg написал
Там у Марко уже описание java-14 добавилось. Будет ли тут перевод добавлен?

Вашему вниманию предлагается обновленная версия руководства от 09 апреля 2020 г.
Читать дальше →

Пара слов про R2DBC и PostgreSQL

Время на прочтение4 мин
Охват и читатели40K
В последнее время я опять вижу, что усилился хайп вокруг реактивного программирования в общем, и реактивной работе с Базами данных — в частности. У меня есть пара фраз, которые я бы хотел сказать по этому поводу.

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

Генерация предсказуемых случайных последовательностей: другой подход к пермутациям

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

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


Задача довольно простая и решили её у нас быстро. А решение было следующим: У нас есть n вопросов. Из комбинаторики мы знаем, что если у нас есть n > 1 элементов, мы, переставляя элементы местами, можем получить разные последовательности этих элементов, где максимальное число отличающихся последовательностей равно $n!$. Вот и было решено, пишем значит функцию, посчитаем там факториал, сгенерируем n-ную последовательность, а само число n сгенерируем рандомно и запишем в БД. Хренак-хренак и в продакшен отправляем тестерам. И вроде бы все нормально, но ведь не случись что-то непредвиденное, этой статьи бы не было.

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

Java-дайджест за 4 мая

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


  • Вышла совершенно новая библиотека Enriched Beans — генератор исходников, совместимый с JSR 330: Dependency Injection for Java. Конкретно, генерит он фабрики, совместимые с фреймворками вроде Spring и Micronaut. Работает примерно как AutoFactory, может использоваться вместе с Lombok. В смысле, если в Guice вам нужно писать конструктор руками, то тут можно подцепить то, что сгенерил Lombok. Получаются простые POJO, каждое генерируемое поведение можно менять/подменять/оборачивать как хочешь, нормально работает автодополнение в IDE, код более-менее ООП-шный. Если перечисленные аббревиатуры ничего не говорят — проходите мимо :) Из минусов — 1 контрибьютор, 18 коммитов, насколько хорошо это работает — никому не ведомо.
Читать дальше →

(Spring) State in the (Spring) Shell: не продакшном единым

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

Эй, как насчет интерактивной командной оболочки с автодополнением, помощью и прочим? И без заморочек да еще и на JVM?


Головной болью на работе для меня стал Postman. Хотя на словах мы все TDD и по красному огоньку Cucumber видим, что именно сломалось, но на практике приходилось мне гораздо чаще слать REST запросы в интерфейсе Postman. При начале работы надо было получить токен аутентификации (запрос на создание и запрос на валидацию, пользователи разные), а потом скакать по закладкам, править параметры и запускать уже другие запросы. Клик-клик-клик. В разном порядке. Уж я и скрипты с cURL писал, и в IDEA запросы оформлял — не удобно. Идеальный мотиватор для перехода на автоматические тесты, вот только это были запросы на получение понимания, что происходит в какой-то уникальный момент сочетания состояния сервиса, его версии, мейнфреймов за ним, погоды в доме и уж точно под регрессионное тестирование не попадали. Клик-клик-клик стал съедать слишком много времени и накручивал километраж мышки.


И тут на глаза мне попался проект Spring Shell, который запускает свой shell в консоли и выполняет команды, написанные в терминах Spring. Давно оценив преимущества командной строки, я сразу взялся за решение своей проблемы. Сказать, что результатом я остался доволен — это преуменьшение. Под катом — абстрактный проект для демонстрации возможностей shell, который навеян моим опытом. Чтобы сделать совсем красиво, я добавил плюшек с еще одним малоизвестным проектом — Spring State Machine. Может показаться, что конечные автоматы — это для седых профессоров, но реальность такова — на них, например, написаны корутины в Kotlin, а всякие Akka их несут в "массы" еще дольше. Я коснусь State Machine совсем поверхностно, только чтобы разогреть аппетит.

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

Развертывание Java приложения в OpenShift

Время на прочтение4 мин
Охват и читатели12K
Казалось бы что здесь такого? подключаем к проекту fabric8-maven-plugin и вперед: сборка, запуск приложения в OpenShift. Но когда изучал хотелось большего понимания этого процесса, а затем хотелось большего контроля и свободы над процессом сборки и развертывания приложения в OpenShift. Таким образом получился следующий сценарий и с такими особенностями.

  • Сборку артефакта произвожу сам, своим инструментом (maven, gradle и др.)
  • Контролирую создание Docker Image через Dockerfile
  • Build и Deployment процесс в Openshift настраивается в шаблоне, т.е. любые характеристики контейнера, pod настраиваются.
  • Таким образом сам процесс можно перенести во внешнюю систему сборки, развертывания
Читать дальше →

Программирование GPU на Java

Время на прочтение13 мин
Охват и читатели23K
Получение доступа к GPU из Java раскрывает огромную мощь. Здесь рассказывается как GPU работает и как получить доступ из Java.

Программирование устройства графического процессора (GPU) является заоблачным миром для Java программистов. Это понятно, так как обычные задачи для Java не подходят для GPU. Тем не менее, GPU обладают терафлопсами производительности, так давайте исследуем их возможности.
Для того чтобы сделать топик доступным, я потрачу некоторое время объясняя архитектуру GPU вместе с небольшой историей, которая облегчит погружение в программирование железа.

Однажды мне показали отличия GPU от CPU вычислений, я покажу как использовать GPU в мире Java. Наконец, я опишу главные фреймворки и библиотеки доступные для написания кода на Java и запуска их на GPU, и я приведу некоторые примеры кода.
Читать дальше →

Java-дайджест за 30 апреля

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


  • Марк Рейнхольд (Chief Architect of the Java Platform Group at Oracle) рассказал о новом проекте: Project Leyden. Проект должен решить проблему долгого запуска, медленного достижения пиковой производительности и лютого пожирания оперативной памяти… нет, не с помощью GraalVM. Предполагается генерить статические бинарники на существующей инфраструктуре — HotSpot JVM, jaotc AOT compiler, AppCDS и jlink. Ссылка на твит с обсуждением — здесь. Забавно, что твит сразу же заретвитил Томас Вюртингер (сумрачный гений GraalVM), а Рейнхольд заретвитил ретвит обратно к себе в ленту. Там у них своя атмосфера.
Читать дальше →

Модульность в Java 9

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

Основным нововведением Java 9 было именно введение модульности. Про эту фичу было много разговоров, дата релиза несколько раз переносилась, чтобы допилить все должным образом. В этом посте речь пойдет о том, что дает механизм модулей, и чего полезного Java 9 принесла в целом. Основой для поста послужил доклад моего коллеги — Сергея Малькевича.



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

Apache Bigtop и выбор Hadoop-дистрибутива сегодня

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


Наверное, ни для кого не секрет, что прошлый год для Apache Hadoop стал годом больших перемен. В прошлом году произошло слияние Cloudera и Hortonworks (по сути, поглощение второго), а Mapr, в виду серьезных финансовых проблем, был продан Hewlett Packard. И если несколькими годами ранее, в случае on-premises инсталляций, выбор чаще приходилось делать между Cloudera и Hortonworks, то сегодня, увы, этого выбора у нас не осталось. Сюрпризом стал еще и тот факт, что Cloudera с февраля этого года объявила о прекращении выпуска бинарных сборок своего дистрибутива в публичный репозиторий, и теперь они доступны лишь по платной подписке. Конечно, возможность загрузки последних версий CDH и HDP, выпущенных до конца 2019-го года, все еще есть, и поддержка по ним предполагается в течение одного-двух лет. Но что же делать дальше? Для тех, кто ранее платил за подписку, ничего не изменилось. А для тех, кто не хочет переходить на платную версию дистрибутива, но при этом хочет иметь возможность получать свежие версии компонентов кластера, а также патчи и прочие обновления, мы и подготовили эту статью. В ней мы рассмотрим возможные варианты выхода из сложившейся ситуации.

Статья больше обзорная. В ней не будет сравнения дистрибутивов и подробного их разбора, а также не будет рецептов по их установке и настройке. А что же будет? Мы вкратце расскажем про такой дистрибутив как Arenadata Hadoop, который по праву заслужил наше внимание ввиду своей доступности, что на сегодня большая редкость. А затем поговорим про Vanilla Hadoop, в основном про то, как его можно “приготовить” с помощью Apache Bigtop. Готовы? Тогда добро пожаловать под кат.
Читать дальше →

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

Quarkus: модернизация приложений на примере helloworld из JBoss EAP Quickstart

Время на прочтение13 мин
Охват и читатели2.5K
Привет всем в этом блоге, и с вами четвертый пост из серии про Quarkus! (Кстати, смотрите наш вебинар «Это Quarkus – Kubernetes native Java фреймворк». Покажем, как начать «с нуля» или перенести готовые решения)



Предыдущий пост был о том, как Quarkus объединяет MicroProfile и Spring. Напомним, что Quarkus позиционируется как «сверхбыстрая субатомная Java», он же «Kubernetes-ориентированный Java-стек, заточенный под GraalVM и OpenJDK HotSpot и собранный из лучших библиотек и стандартов». Сегодня мы покажем, как модернизировать уже имеющиеся Java-приложения, задействуя возможности Quarkus, на примере приложения helloworld из репозитория Red Hat JBoss Enterprise Application Platform (JBoss EAP) Quickstart, в котором используются поддерживаемые в Quarkus технологии CDI и Servlet 3.
Читать дальше: Модернизация приложений на примере helloworld из JBoss EAP Quickstart

Учись, пока самоизоляция

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

Всем привет! На связи Школа программистов hh.ru. Самоизоляционная пора отлично подходит для того, чтобы подтянуть хвосты в знаниях, выучить что-то новое или просто освежить уже изученное. Впереди майские праздники, и многие из нас проведут их в сиянии лучей мониторов, поэтому мы решили подлить масла знаний в ваше пламя самообразования и выпустить в свободный доступ ещё больше наших лекций!


image

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

Сервис справочников мобильного приложения

Время на прочтение7 мин
Охват и читатели3.4K
Руслан Ароматов, главный разработчик, МКБ



Добрый день, хабровчане! Я работаю бэкенд-разработчиком в Московском кредитном банке, и в этот раз я бы хотел рассказать о том, как мы организовали доставку рантаймового контента в наше мобильное приложение «МКБ Онлайн». Статья может пригодиться тем, кто занимается проектированием и разработкой фронт-серверов для мобильных приложений, в которые необходимо постоянно доставлять разнообразные обновления, будь то банковские документы, точки геолокации, обновлённые иконки и т. п. без обновления самого приложения в магазинах. Тем, кто разрабатывает мобильные приложения, она тоже не повредит. Статья не содержит примеров кода, только некоторые рассуждения на тему.
Читать дальше →

AWS Lambda in Action. Часть 2: знакомимся с инструментами разработки и тестирования

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


Этот гайд — результат личного опыта разработки и тестирования Serverless-приложений, а также маневрирования между «костылями» и «велосипедами» при попытках их протестировать. Когда я только начинал заниматься разработкой Serverless-приложений, во всем приходилось разбираться руками, не было четких гайдов или удобных инструментов локальной разработки и тестирования.

Сейчас ситуация меняется: инструменты стали появляться, но найти мануалы по их использованию непросто. В этом материале я покажу на простом примере, как работать с новым функционалом. Вы сможете легко его освоить и обойти те проблемы и баги, с которыми «посчастливилось» столкнуться мне.

Вы узнаете, как вести разработку с помощью браузерной консоли AWS, SAM-CLI и IntelljIDEA. Еще я расскажу про тестирование: интеграционные, E2E и юнит-тесты. А напоследок обсудим, во сколько обойдется такое решение (спойлер: на нем можно неплохо сэкономить).

Статья будет полезна тем, кто начинает вести разработку Serverless-приложений и еще не знаком с ее инструментарием и подходами.
Читать дальше →

Эффективные надежные микросервисы

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


В Одноклассниках запросы пользователей обслуживает более 200 видов уникальных типов сервисов. Многие из них совмещают в одном JVM-процессе бизнес-логику и распределенную отказоустойчивую базу данных Cassandra, превращая обычный микросервис в микросервис с состоянием. Это позволяет нам строить высоконагруженные сервисы, управляющие сотнями миллиардов записей с миллионами операций в секунду на них.


Какие преимущества появляются при совмещении бизнес-логики и БД? Какие нюансы надо учесть, прибегая к такому подходу? Что с надёжностью и доступностью сервисов? Расскажем подробно об этом всём.

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

Микросервисы на Java: практическое руководство

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

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


Примечание: Статья ~ 7000 слов, вероятно, не стоит читать ее на мобильном устройстве. Добавьте ее в закладки и вернитесь позже.


Содержание


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

Java-школа Росбанка — итоги обучения

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

Продолжаем делиться с вами историями молодых ребят, которым мы помогаем найти себя в сфере банковского IT. В конце прошлого года мы писали о том, что открываем школу для Java-разработчиков в Нижнем Новгороде. Среди заявок мы отобрали 25 человек, а по итогам обучения пятерых лучших студентов мы взяли в нашу IT-команду. Как теперь проходят их рабочие будни — читайте под катом.

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