Как стать автором
Поиск
Написать публикацию
Обновить
199.96

Java *

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

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

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

Время на прочтение3 мин
Количество просмотров920


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

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

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

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

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

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

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

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




1. Введение


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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



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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

Время на прочтение2 мин
Количество просмотров4.9K
Привет!

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



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

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

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

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

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




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

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

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

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

Предлагается вниманию пересказ статьи 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-библиотеки.


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

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

Spring Boot + Apache Kafka и SSL в Docker контейнере

Время на прочтение4 мин
Количество просмотров42K
Друзья, привет. В статье я расскажу как собрать решение для быстрого старта вашей разработки из standalone Java приложения, брокера и Zookeeper’а Kafka, поднятых в отдельных Docker контейнерах и настроенной plaintext авторизацией для доступа как с локальной машины, так и из внешнего контура.

Готовый проект на github можно забрать в конце статьи

Система установки принтеров для организации — PrintDesk — Обновленная версия

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


Здравствуй, уважаемый %habrauser%. Около 3 лет назад я написал статью о том Как я создал систему установки принтеров на работе. Не могу не согласится с комментариями и отзывами от прошлой статьи, гласящие о том, что для установки принтеров можно воспользоваться групповыми политиками, но в мире в enterprise, больших или малых, возможны и другие случаи разного характера когда не смотря на наличие домена и групповых политик не представляется удобным\возможным разворачивать принтеры через GPO-шки. Учитывая собранный опыт и отзывы пришло время показать о моей новой переписанной системе с гораздо большим и удобным функционалом с сохранением минимализма, и я надеюсь, что кому-то она пригодится. В статье я также расскажу о том, с какими трудностями я столкнулся при создании этой системы. Кому стало интересно добро пожаловать под кат. Осторожно! Будет много картинок!
Читать дальше →

Исследуем sealed классы в Java 15

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

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


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

Собеседую программистов на Java. Единый набор вопросов для любого уровня

Время на прочтение4 мин
Количество просмотров28K
В своей карьере мне приходилось быть и разработчиком, и менеджером, и даже один раз «CTO» в небольшом стартапе. И, разумеется, приходилось проводить большое количество собеседований кадидатов. Поэтому для себя я выработал такие правила проведения технических собеседований:

  • всем кандидатам задавать одинаковые вопросы,
  • вопросы должны быть такие, чтобы на них ответил и junior, и senior, но по разному,
  • после трёх вопросов должен быть понятен уровень кандидата.

И вот такие три вопроса для Java-разработчиков у меня получились.
Читать дальше →

Валидация параметров конфигурации Spring Boot при запуске

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

Одним из важных шагов для обеспечения возможности настройки программных приложений является эффективное управление конфигурацией. Современные платформы предоставляют готовые функции для вывода параметров конфигурации.


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


Spring Boot предлагает нам удобный способ валидации параметров конфигурации. Мы собираемся связать входные значения со @ConfigurationProperties и использовать Bean Validation для их валидации.

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

Подтверждение входа с помощью Telegram на Spring Boot

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

Недавно столкнулся с проблемой: все приложения используют Telegram-бота в качестве подтверждения входа в аккаунт, а мое — нет. Я был настроен серьезно и провёл уйму времени в интернете в поиске туториала, но меня ждало разочарование. Задача сложная и имеет много подводных камней, а туториалов — ноль.


Следующую неделю я потратил на написание своей имплементации данной фичи и готов поделиться успехом.


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


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