Обновить
128K+

Java *

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

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

Реализация шлюза P2P операций перевода с карты на карту

Время на прочтение4 мин
Охват и читатели25K
Для своего проекта мне потребовалось реализовать возможность перевода с карты на карту. Для официального подключения к интерфейсу любого банка необходимо заключение договора и выполнение ряда условий. Поэтому было принято решение сделать шлюз к публичной странице банка. Для этих целей были выбраны два банка Тинькофф и БИН Банк предоставляющие возможность перевода на “свои” карты без комиссии. Подробней о тарифах и ограничениях на перевод вы можете ознакомиться на соответствующих страницах банков. В этой статье краткое описание работы шлюза, реализующего функциональность приема платежей на карту.

Требуется реализовать перевод с любой карты на заранее выбранную карту, с поддержкой процедуры авторизации 3DSecure. 3DSecure это защищенный протокол авторизации пользователей для CNP-операций (без присутствия карты). Подробней вы можете почитать на специализированных сайтах, ниже на схеме приведена упрощенная схема, как это работает с точки зрения пользователя.

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

Учебник по JavaFX: начало работы

Время на прочтение4 мин
Охват и читатели130K
Привет, Хабр! Представляю вашему вниманию перевод статьи «JavaFX Tutorial: Getting started» автора Vojtech Ruzicka.

Как настроить и начать работать с JavaFX, с помощью Maven, Gradle или JavaFX SDK.

Все посты в серии JavaFX:

  1. Учебник по JavaFX: начало работы
  2. Учебник по JavaFX: Привет, мир!
  3. Учебник по JavaFX: FXML и SceneBuilder
  4. Учебник по JavaFX: основные макеты
  5. Учебник по JavaFX: расширенные макеты
  6. Учебник по JavaFX: CSS стилизация
  7. JavaFX Weaver: интеграция JavaFX и Spring Boot приложения
Читать дальше →

Внедряй, масштабируй: опыт применения автотестов в ВТБ

Время на прочтение8 мин
Охват и читатели9.2K
Наше подразделение создает полностью автоматические пайплайны для вывода новых версий приложений в прод-среду. Разумеется, для этого требуются автоматизированные функциональные тесты. Под катом — история о том, как, начав с тестирования в один поток на локальной машине, мы дошли до многопоточного запуска автотестов на Selenoid в пайплайне сборки с Allure-отчетом на GitLab pages и в итоге получили крутой инструмент для автоматизации, который смогут использовать будущие команды.


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

Чем нам запомнилась последняя JokerConf

Время на прочтение4 мин
Охват и читатели4.1K
На прошлой неделе в Санкт-Петербурге прошла международная Java-конференция Joker. Мы попросили наших ребят, которые её посетили, рассказать немного об организации и самых интересных, по их мнению, выступлениях. Кто-то отметил самые хайповые и весёлые, кто-то — самые актуальные и полезные. Впрочем, читайте об этом «из первых рук».



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

Стрим видео с Android устройства по UDP в JAVA приложение

Время на прочтение7 мин
Охват и читатели12K
Итак, выходим на финишную прямую. Стримить видео с андроида на VLC плеер мы уже научились, теперь осталось только интегрировать окошко с видео в JAVA приложение и начать рулить роботелегой.



В этом нам очень сильно поможет проект с открытым исходным кодом VLCJ CAPRICA.
The vlcj project provides a Java framework to allow an instance of a native VLC media player to be embedded in a Java application.
Идея у ребят простая, но гениальная (реально перцовая). Вместо мучений с библиотеками FFmpeg и прочим, надо сразу вызывать специалиста ядро нормального, функционального и профессионального медиаплеера VLC. И вызвать его прямо из JAVA приложения.

Кому интересно, просим под кат.

План подготовки к собеседованию на позицию Java разработчика

Время на прочтение5 мин
Охват и читатели73K
Каждый раз, готовясь к собеседованиям на позицию «Java разработчик», я понимаю, что мне бы очень помог конкретный план подготовки. Поэтому все свои записи, накопившиеся в ходе прохождения собеседований, было решено структурировать и опубликовать. Надеюсь, кому-то этот план будет полезен.

И я намеренно не пишу, для кого предназначен этот план подготовки: для senior, middle или junior разработчика — все зависит от конкретной вакансии и от требований работодателя. Поэтому опирайтесь на этот план, но фильтруйте и в то же время не воспринимайте его как исчерпывающее руководство.

  1. Java core. Здесь можно ориентироваться например на книгу «OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide: Exam 1Z0-809» для подготовки к Java сертификации уровня Professional. Есть подобная книга «OCA: Oracle Certified Associate Java SE 8 Programmer I Study Guide: Exam 1Z0-808» для уровня Associate — на нее тоже можно взглянуть. Пройдитесь по оглавлению и выделите для себя, что можно повторить. Конечно же, не стоит пускаться во все тяжкие и читать книгу от корки до корки — многие темы из этой книги можно обойти стороной, например форматирование дат. Выделите самое основное. Например для меня это были следующие темы: коллекции (стандартные вопросы «Как устроена HashMap?» или «Чем отличается LinkedList от ArrayList?» все также часто задают на собеседованиях), дженерики, функциональные интерфейсы, многопоточность (тут тоже фильтруйте — не нужны вам cyclic barrier и fork join framework).
    Также не забывайте проецировать знания на свой опыт. Например, когда вам приходилось использовать многопоточное программирование? Какие проблемы вы решали? Какие блокировки использовали?
  2. Многопоточность.
Читать дальше →

Митя Александров и Дмитрий Константинов на встрече jug.msk.ru

Время на прочтение3 мин
Охват и читатели1.5K
23 октября 2019 года, за пару дней до конференции Joker 2019, состоялась встреча московского сообщества Java-разработчиков jug.msk.ru. С докладами выступили Митя Александров (про MicroProfile) и Дмитрий Константинов (про Cassandra).


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

Android Camera2 API от чайника, часть 3. Media Codec и стрим видео по UDP

Время на прочтение22 мин
Охват и читатели15K
Итак, со съемками фоточек и записью видео при помощи Camera2 API мы вроде бы, разобрались. Осталось только научиться передавать видеопоток c Android устройства страждущим получателям извне. Конечной целью, как уже неоднократно ранее говорилось, является интеллектуализация роботелеги — ставим на неё смартфон и так сказать, превращаем обезьяну в человека. В этом нам поможет Media Codec. И конечно, новое Camera2 API.


Кому интересно, прошу под кат.

Прощай HTML, привет QML

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

HTML mess


Как можно создать web приложение без использования HTML? Для этого нам понадобится: новый браузер, QML и back-end на Java.

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

Искусство аннотирования: пишем Java-friendly код на Kotlin

Время на прочтение6 мин
Охват и читатели8K
Привет, Хабр!

Сегодня мы затронем важнейшую тему: интероперабельность Java и Kotlin. Авторы предлагаемой публикации разумно предполагают, что переписать на Kotlin базу кода, сделанную на Java, маловозможно. Поэтому правильнее обеспечить взаимодействие кода на Java и Kotlin. Читайте, как это можно сделать при помощи аннотаций.
Читать дальше →

SonarQube и IntelliJ IDEA: правильная интеграция

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

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


На данный момент этот инструмент плотно вошёл в нашу жизнь, следя за единым стилем кода и уберегая от самых разных видов ошибок. Поиск ошибок происходит при сборке на CI или перед принятием pull request в версионное хранилище. Все найденные ошибки отображаются в Web-интерфейсе, где можно изучать их и управлять ими.


Однако беда в том, что удобный Web-интерфейс не означает удобство по устранению найденных замечаний в коде проекта. Для того, чтобы внести исправление, приходится сначала смотреть, в каком именно файле это замечание обнаружено, потом открывать этот файл и только затем вносить исправление. Также это приводит к тому, что разработчик узнает о проблеме с очень большим отставанием (иногда анализ в SonarQube может занимать десятки минут), что не способствует поддержанию чистоты кода.


Для того, чтобы облегчить жизнь разработчикам нашей компании, использующим IntelliJ IDEA, я составил инструкцию. А в дальнейшем понял, что она может быть полезной более широкому кругу специалистов, и решил выложить её в публичный доступ.

Осторожно, много скриншотов

Как мы пишем микросервисы и почему не делаем этого быстро

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


Истории по распиливанию монолита часто похожи одна на другую. Был у команды здоровенный неповоротливый монолит, решили его распилить на россыпь правильных и шустреньких микросервисов, все стало круто. Отличаются истории лишь степенью ужаса “до”, радости “после” и рядом вторичных характеристик.


У нас в RBK.money тоже микросервисы. Но пришли мы к ним немного не так, как большинство. У нас все было даже хуже монолита — у нас на старте просто все было хреново.


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

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

Легкое управление конфигурациями микросервисов с помощью microconfig.io

Время на прочтение6 мин
Охват и читатели7.3K
Одной из основных проблем при разработке и последующей эксплуатации микросервисов является грамотная и аккуратная настройка их инстансов. В этом, на мой взгляд, может помочь новый фреймворк microconfig.io. Он позволяет довольно элегантно решить некоторые рутинные задачи настройки приложений.
Читать дальше →

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

Статический анализ IntelliJ IDEA против человеческого разума

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

Не так давно я изучал вывод статического анализатора IntelliJ IDEA для Java-кода и наткнулся на интересный случай. Так как соответствующий фрагмент кода не является open source, я его анонимизировал и отвязал от внешних зависимостей. Будем считать, что он выглядел так:


private static List<Integer> process(Map<String, Integer> options, List<String> inputs) {
    List<Integer> res = new ArrayList<>();
    int cur = -1;
    for (String str : inputs) {
        if (str.startsWith("-"))
            if (options.containsKey(str)) {
                if (cur == -1) cur = options.get(str);
            }
            else if (options.containsKey("+" + str)) {
                if (cur == -1) cur = res.isEmpty() ? -1 :
                        res.remove(res.size() - 1);
                if (cur != -1) res.add(cur + str.length());
            }
    }
    return res;
}

Код как код, что-то преобразуется, что-то делается, но статическому анализатору он не понравился. Здесь мы видим целых два предупреждения:


Code screenshot

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

Получаем Spring Bean из сторонних Application Context правильно

Время на прочтение5 мин
Охват и читатели14K
Добрый день, хабровчане!

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

Один день в компании Joker 2019

Время на прочтение4 мин
Охват и читатели3.6K
25-26 октября, буквально через два дня, в Санкт-Петербурге на территории Экспофорума пройдёт Joker 2019 — международная Java-конференция для хардкорных Java-разработчиков.

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

Так что 25 октября в 9:30 утра (по московскому времени) можно будет перейти по ссылке под катом (совам, конечно, придется проснуться чуть раньше обычного). Там же под катом мы обсудим, что такого есть на конференции, чего нет на трансляции.


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

Сборка чугунного скорохода на Spring Boot и AppCDS

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


Application Class Data Sharing (AppCDS) – фича JVM для ускорения запуска и экономии памяти. Появившись в HotSpot в зачаточном виде ещё в JDK 1.5 (2004 г.), она долгое время оставалась весьма ограниченной, да ещё и отчасти коммерческой. Лишь только с OpenJDK 10 (2018 г.) её сделали доступной простым смертным, заодно расширив область применения. А недавно вышедшая Java 13 попыталась сделать это применение более простым.


Идея AppCDS в том, чтобы “расшарить” однажды прогруженные классы между экземплярами одной и той же JVM на одном хосте. Кажется, это должно здорово зайти микросервисам, особенно “бройлерам” на Spring Boot с их тысячами библиотечных классов, ведь теперь эти классы не надо будет загружать (парсить и верифицировать) при каждом старте каждого инстанса JVM, и они не будут дублироваться в памяти. А значит, запуск должен стать скорее, а потребление памяти – ниже. Чудно, не правда ли?


Всё так, всё так. Но если ты, однохабрянин, привык верить не бульварным вывескам, а конкретным цифрам и примерам, то добро пожаловать под кат – попробуем разобраться, как оно на самом деле…

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

Опыт перевода Maven-проекта на Multi-Release Jar: уже можно, но ещё сложно

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

У меня есть маленькая библиотека StreamEx, которая расширяет возможности Java 8 Stream API. Библиотеку я традиционно собираю через Maven, и по большей части меня всё устраивает. Однако вот захотелось экспериментов.


Некоторые вещи в библиотеке должны работать по-разному в разных версиях Java. Самый яркий пример — новые методы Stream API вроде takeWhile, которые появились только в Java 9. Моя библиотека предоставляет реализацию этих методов и в Java 8, но когда расширяешь Stream API сам, попадаешь под некоторые ограничения, о которых я здесь умолчу. Хотелось бы, чтобы пользователи Java 9+ имели доступ к стандартной реализации.

От поиска идеи до готового приложения

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

image


Наверно, многие задумывались над тем, как можно реализовать свои знания в готовом продукте. Кто-то больше, кто-то меньше потратил на это времени. Хочу поделиться с сообществом своим опытом и видением, как это надо делать правильно, но не всегда получается.

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

ClusterJ — работаем с MySQL NDB Cluster из Java

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

Привет, Хабр! В этой статье я хочу рассмотреть такую библиотеку для Java, как ClusterJ, которая позволяет очень просто работать с движком MySQL NDBCLUSTER из Java кода, которая представляет собой высокоуровневое API, схожее по концепции с JPA и Hibernate.


В рамках статьи создадим простое приложение на SpringBoot, а также сделаем стартер с ClusterJ на борту для удобного использования в приложениях с использованием автоконфигурации. Напишем простые тесты с использованием JUnit5 и TestContainers, которые покажут базовое использование API.
Также расскажу о нескольких недостатках, с которыми пришлось столкнутся в процессе работе с ней.


Кому интересно, добро пожаловать под кат.

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