Обновить
128K+

Java *

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

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

DI из ада

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

Все мы любим Spring. Или не любим. Но по крайней мере знаем. Если вы Java-программист, то вероятно используете этот фреймворк каждый день в своей работе. Spring — это огромная платформа, которая предоставляет большой функционал. Тем не менее во главе угла стоят две вещи — это DI (Dependency Injection) и IoC (Inversion of Control). Концепции, которые были призваны, чтобы сделать наш код более читаемым и поддерживаемым. Но к несчастью, все оказалось не так радужно. Именно это мы сегодня и обсудим.


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

6 мифов о разработке в финтехе

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

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



Как обычно, всё немного не так, как кажется на первый взгляд. Под катом мы расскажем о 6 самых распространенных заблуждениях, о том, как всё работает у нас в Альфе, и причём тут Alfa Battle.
Читать дальше →

Опыт применения технологии Рутокен для регистрации и авторизации пользователей в системе (часть 4)

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

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

Анализатор PVS-Studio: выявления потенциальных проблем совместимости Java SE API

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

Рисунок 9

2019 был очень насыщенным годом в плане конференций. Наша команда могла уезжать на целые недели в командировки. А как известно, конференция – время делиться знаниями. Помимо того, что мы выступали с докладами и много интересного рассказывали на нашем стенде, мы также узнавали много нового от общения с участниками конференции и от докладчиков. Так вот на осенней конференции Joker 2019 доклад от Dalia Abo Sheasha «Migrating beyond Java 8» вдохновил нас на реализацию нового диагностического правила, которое позволяет выявлять несовместимости в Java SE API между разными версиями Java. Об этом и пойдет речь.
Читать дальше →

Производительность современной Java при работе с большим объёмом данных, часть 2

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

FYI: Первая часть.

Бенчмарк пакетного конвейера


Пакетный конвейер обрабатывает конечный объём сохранённых данных. Здесь нет потока результатов обработки, выходные данные агрегирующей функции нужно применить ко всему набору данных. Это меняет требования к производительности: задержка — ключевой фактор при потоковой обработке — здесь отсутствует, потому что мы обрабатываем данные не в реальном времени. Единственная важная метрика — общее время работы конвейера.

Поэтому мы выбрали Parallel. На первом этапе тестирования, при работе на одной ноде, этот сборщик действительно показал лучшую пропускную способность (но только после настройки). Однако это было получено ценой длительных пауз. Если одна из нод кластера останавливается на сборку мусора, это стопорит весь конвейер. А поскольку ноды собирают мусор в разное время, общее время сборки увеличивается с добавлением каждой ноды к кластеру. Мы проанализировали этот эффект, сравнив результаты тестирования на одной ноде и на кластере из трёх нод.

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

Опыт применения технологии Рутокен для регистрации и авторизации пользователей в системе (часть 3)

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

В предыдущей части мы успешно создали свой удостоверяющий центр. Чем вообще для наших целей он может быть полезен?

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

Неделя онлайн-стримов от JUG Ru Group #6

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


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

Книга «Spring Boot 2: лучшие практики для профессионалов»

Время на прочтение11 мин
Охват и читатели18K
imageПривет, Хаброжители! Хотите повысить свою эффективность в разработке корпоративных и облачных Java-приложений?

Увеличьте скорость и простоту разработки микросервисов и сложных приложений, избавившись от забот по конфигурации Spring.

Используйте Spring Boot 2 и такие инструменты фреймворка Spring 5, как WebFlux, Security, Actuator, а также фреймворк Micrometer, предоставляющий новый способ сбора метрик.

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

Миграции баз данных с Flyway

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




1. Введение


В этой статье описываются ключевые концепции Flyway и пример использования этого фреймворка для непрерывного изменения схемы базы данных на примере in-memory базы данных H2 с помощью maven-плагина flyway.

Flyway обновляет версии баз данных с помощью миграций. Миграции можно писать на SQL (с синтаксисом, специфичным для конкретной СУБД) или на Java.

Миграции могут быть версионными или повторяющимися. Первые имеют уникальную версию и применяются ровно один раз. У вторых номера версии нет, и они применяются, когда у них изменяется контрольная сумма.

Повторяющиеся миграции в рамках одного запуска всегда применяются после выполнения версионных миграций. Повторяющиеся миграции применяются в порядке их описания. В одной миграции все операции выполняются в рамках одной транзакции базы данных.

В этой статье мы сосредоточим внимание на использовании maven-плагина для миграций базы данных.
Читать дальше →

Опыт применения технологии Рутокен для регистрации и авторизации пользователей в системе (часть 2)

Время на прочтение4 мин
Охват и читатели4.4K
Добрый день! Продолжим разбираться с данной темой (с предыдущей частью можно ознакомиться по ссылке).

Сегодня перейдем к практической части. Начнем с настройки своего удостоверяющего центра на основе полноценной криптографической библиотеки с открытым исходным кодом openSSL. Данный алгоритм был проверен с использованием windows 7.

Установив openSSL, мы можем выполнять различные криптографические операции (например, создание ключей и сертификатов) через командную строку.
Читать дальше →

Производительность современной Java при работе с большим объёмом данных, часть 1

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

Среда исполнения Java в последние годы развивалась быстрее, чем раньше. Спустя 15 лет мы наконец-то получили сборщик мусора по умолчанию — G1. Ещё два в разработке и доступны в качестве экспериментальных функций — Oracle ZGC и OpenJDK Shenandoah. Мы решили протестировать все эти новые инструменты и выяснить, что лучше работает с нагрузками, типичными для распределённого opensource-движка потоковой обработки Hazelcast Jet.
Читать дальше →

Опыт применения технологии Рутокен для регистрации и авторизации пользователей в системе (часть 1)

Время на прочтение4 мин
Охват и читатели14K
Добрый день! Хочу поделиться своим опытом по данной теме.

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

В данном примере используется Рутокен ЭЦП 2.0.

Для работы с этим Рутокеном необходимо установить драйвер на windows.

Для windows, установка одного лишь драйвера, обеспечивает установку всего, что нужно, чтобы ОС увидела ваш Рутокен и с ним можно было работать.

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

Таблетки от скуки — подборка для Java [и не только] разработчиков

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

Когда находится простой и удобный способ решать нужные задачи, мы легко привыкаем к нему и используем один и тот же подход постоянно (я, например, в свое время попробовала писать веб-приложения на SpringBoot и потом использовала его по поводу и без). И это неудивительно, ведь гораздо проще применить то, что уже знакомо и изучено, чем пытаться вникнуть в совершенно новую и незнакомую технологию.


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



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

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

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

Круги ада с GitHub Actions (строим CI/CD pipeline для Java-проекта)

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


Мне частенько приходится строить пайплайн для сборки проектов на Java. Иногда это опенсорс, иногда нет. Недавно я решил попробовать перенести часть своих репозиториев с Travis-CI и TeamCity на GitHub Actions, и вот что из этого получилось.
Читать дальше →

Сбор метрик с «чужого» класса, с помощью jmx и javaassist в виде javaagent

Время на прочтение5 мин
Охват и читатели2K
Есть java EE приложение, которое крутится в контейнере WildFly. Система уровня интерпрайз. Приложение вендорное, класса WMS — Warehouse Management System.

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

Тут нам предстоит взять некий метод processStep, обрамить его с помощью try/catch/finally, и писать в какой-нибудь отдельный файл.
Читать дальше →

Генерация файлов Word в Apache POI

Время на прочтение8 мин
Охват и читатели35K
Для языка Java (как, впрочем, и для любого другого языка программирования) всё еще не придумали более простого и действенного способа генерации документов docx, чем библиотека Apache POI. В конце нулевых появился сей высокоуровнеый API, позволящий говорить с формируемым документом не на языке разметки XML, а с помощью удобных полей и выводов.

Судя по моим Google-запросам на протяжении более чем года сообщество пользователей этой библиотеки продержалось года этак до 2012, в то время как новые версии библиотеки всё еще появляются на главной странице проекта. Не на все вопросы, касающиеся формирования самого примитивного документа, есть ответы в документации или stackoverflow, не говоря уже о текстах на русском языке. Постараемся компенсировать этот недостаток данных для тех, кому это может понадобиться.
Читать дальше →

Kurento JSON RPC через WebSocket-JS на Spring Boot

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

Большинство знает Kurento, как WebRTC медиа-сервер. Но в их репозитории на git-хабе можно найти много чего интересного. Например, библиотека работы с JSON-RPC, которая берет на себя контроль сессии и управление протоколом.

В этой статье я расскажу как использовать это решение на Java. Сделаем простейший сервер на Spring Boot и клиент на JavaScript.
Читать дальше →

Alfa Battle — онлайн-чемпионат по прикладному программированию

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

Сегодня мы запускаем Alfa Battle, онлайн-чемпионат по прикладному программированию для Java-разработчиков по всей стране. Пройдет чемпионат в режиме онлайн, и побороться за звание лучшего тоже можно будет в прямом эфире.



Мы не стали добавлять в программу какие-то общие задачи по теме, сферические кейсы и прочее — вместо этого будут реальные бизнес-задачи backend-разработки от нас и от партнёров мероприятия (Билайн и X5 Retail Group). Участвовать можно из любого города РФ, главное — желание и интернет-доступ.

Из призов будут деньги (250 000 / 150 000 / 100 000 рублей за первое, второе и третье места соответственно), приглашение на работу для авторов лучших решений (в офис или на удалёнку из своего города) и билет на Joker за самое креативное решение.

Гарантированные призы каждому участнику — набор ALFA BATTLE LIMITED EDITION и экскурсия по Alfa Digital. Под катом этапы чемпионата.
Читать дальше →

Асинхронное логирование с log4j для любознательных

Время на прочтение6 мин
Охват и читатели9.6K
В статье рассматриваются основы асинхронного логирования с помощью log4j2.
Рассмотрим что это, для чего нужно и как можно реализовать.




Давайте начнем с того, что разберемся, что такое асинхронное логировагие.
Представим – есть основной поток программы, в нем делается полезная работа. Время от времени программа логирует свою работу. Если запись в лог делается в основном потоке программы, прерывая полезную работу, значит это синхронное логирование. Если лог пишется в другом потоке и полезную работу не прерывает, значит это логирование асинхронное. При этом будем считать, что вычислительных ресурсов достаточно и для потока логирования и для основного потока.
Читать дальше →

Core Expansion community detection algorithm (обзор статьи + код на GitHub)

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

Предлагается вниманию пересказ статьи Core expansion: a new community detection algorithm based on neighborhood overlap, вышедшей в журнале Social Network Analysis and Mining, номер 10, 30, (2020) с нашими комментариями. В этой статье описывается новый алгоритм для выделения сообществ в графе, основанный на Jaccard index.



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


Наша имплементация написана на Java и доступна в GitHub под MIT-лицензией. Возможно использование как в качестве отдельного приложения командной строки, так и в качестве разделяемой Java-библиотеки.


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

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