Обновить
178.01

Java *

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

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

Java Digest #8

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели6.8K

??Приветствуем в новогоднем Java Digest! ??

В этом выпуске с радостью представляем некоторые захватывающие статьи, связанные с миром Java и его новейшими разработками. Приготовьтесь узнать о главных моментах Java в 2023 году, улучшениях в сборщиках мусора в JDK 21, устаревших функциях в Java 18—21, применении CDS с Spring Framework 6.1 и многом другом.

Читать новогодний выпуск

Создание и использование BOM в Gradle

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели20K

В каждой компании (а если она крупная, то, скорее всего, в каждом подразделении) должна быть выстроена культура использования BOM (bill of materials) для управления версиями зависимостей. В этой статье я хочу поделиться своим видением того, как это может быть организовано, а также рассмотреть более сложные случаи создания и использования BOM в Gradle-проектах.

Читать далее

JWT-аутентификация при помощи Spring Boot 3 и Spring Security 6

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели147K

Переход от базовых приложений к более сложным требует использования Spring Security для обеспечения безопасности. Новая версия, Spring Security 6, изменяет некоторые базовые реализации, а русскоязычных материалов на эту тему очень мало. В этой статье мы рассмотрим JWT-аутентификацию и авторизацию с помощью Spring Boot 3 и Spring Security 6, чтобы помочь начинающем разработчикам разобраться и начать пользоваться базовым функционалом этой библиотеки. Цель данной статьи - показать, как использовать JWT-аутентификацию с API-интерфейсами.

Читать далее

Распределенное управление конкурентностью

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели11K

Управление конкурентным доступом является очень важной концепцией в Системе Управления Базами Данных. Оно гарантирует, что одновременное выполнение запросов несколькими процессами или пользователями оставит данные в согласованном состоянии. Особое место занимает доступ к Базе Данных в распределенной системе с множеством конкурирующих за ресурс узлов.

Читать далее

Пример исследовательского реверс-инжиниринга приложения Zone Launcher

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели17K

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

Читать далее

Рассчитываем рейтинг товара на основе оценок пользователей с KafkaStreams и OpenSearch

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели7.3K

Всем привет! Меня зовут Александр. Последний год тружусь фрилансером на проекте по созданию очередного маркетплейса. Мои задачи включают разработку скоринговой системы продуктов, которая бы позволяла формировать выборку товаров по популярности на основе нескольких показателей. Одним из показателей являются оценки пользователей по шкале от 1 до 5. Думаю, что не станет открытием Америки то, что расчет рейтинга товара по среднему арифметическому всех оценок приводит к насовсем корректным результатам выборки. Например, при таком подходе товар "А" с одной оценкой 5 в рейтинге будет выше товара "Б", у которого сотня оценок 5 и одна оценка 4. Решение данной проблемы давно найдено - для расчета следует применить доверительный интервал биномиального распределения по методу Уилсона (Wilson Score Confidence Interval).

Читать далее

Строим свой SSO. Часть 4: Vue.js, Регистрация, Сброс пароля

Уровень сложностиСредний
Время на прочтение44 мин
Охват и читатели16K

Всем привет!
Мы продолжаем строить собственный SSO Server. Сегодня мы детально разберем Vue.js приложение, а также спроектируем и реализуем долгожданные механизмы регистрации и сброса пароля. Как всегда, дополнительно мы разберём ряд интересных общесистемных решений, которые наверняка Вам пригодятся в дальнейшем.

Читать далее

Генератор тестовых данных для JVM совместимых языков

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели7.8K

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

Читать далее

Telegram-bot для поиска укрытий (публикую после событий в Белгороде 30.12.23)

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

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

Читать далее

ChatGPT на Java. Пишем «Hello World» на Spring AI

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели26K

В преддверии Нового Года, начинаем осваивать генеративные сети с помощью привычного всем Java разработчикам фреймворка Spring. Несколько месяцев назад в Spring добавили модуль AI, который упрощает работу с нейронками от OpenAI и Azure.

Давайте же напишем первое приложение с новым модулем!

Читать далее

Python без типов: таким он когда-то был

Время на прочтение5 мин
Охват и читатели10K
О типизации в Python сказано уже очень много. Если вам выпало сомнительное удовольствие поработать со мной, то вы, вероятно, в курсе, насколько скептически я отношусь к типизации в Python. Причины тому – сложность синтаксиса, mypy еле ползает, реализация языка в принципе переусложнена, а взаимодействовать с ним зачастую неудобно. Сегодня я не буду упирать на эти детали, а хочу пригласить вас в небольшое путешествие в прошлое и рассказать, каковы были мои первые впечатления от работы с Python. Почему? Потому что я думаю, что существует фундаментальный и глубокий конфликт между формообразующей философией Python и концепцией типизации. Причём, этот конфликт не нов.
Читать дальше →

Отключаем ненужный функционал плагина для Jira с помощью кастомной аннотации Spring

Уровень сложностиПростой
Время на прочтение14 мин
Охват и читатели3.4K

Привет, Хабр! Меня зовут Игнат, в Samokat.tech я пишу плагины, автоматизации и интеграции для Jira. 

Как разработчик-самоучка, который до «вот этого всего» немного писал на Java, но не пользовался ни средствами сборки (привет, Maven!), ни фреймворками (привет, Spring!), и первые шаги делал по мануалам Atlassian, я сталкивался (и продолжаю) с проблемами, решений которых вендорская документация не подскажет, и эти решения приходится открывать самому. 

В этой статье мы вместе с вами напишем свою Spring-аннотацию, которая будет с помощью кастомного бин-постпроцессора (который мы тоже напишем) отключать в нашем плагине для Jira ненужный в проде отладочный функционал.

Эта статья ориентирована на начинающих разработчиков в стеке Atlassian и администраторов, пробующих себя в разработке плагинов для Jira. Те, кто до знакомства с Atlassian SDK уже разрабатывал «под ентерпрайз», не обязательно найдут здесь что-то новое, остальных – приглашаю под кат.

Читать далее

Формирование PKCS#7 detached signature для авторизации через систему ЕСИА

Уровень сложностиСредний
Время на прочтение2 мин
Охват и читатели4.9K

Всем привет! Меня зовут Богдан, я тимлид java-команды в одном из российских банков. И да, конечно, вот мой телеграм где я делюсь буднями нашей разработки и всякими эдакими приемами которые мы используем.

Недавно появилась необходимость интеграции с авторизацией через систему ЕСИА о сути такой интеграции можно почитать например тут. Статья же про то как правильно средствами исключительно java, без всяких крипто про и прочих платных СКЗИ сформировать подпись запроса в формате PKCS#7 detached signature с использование ГОСТ сертификата и ГОСТ Р 34.10-2012 алгоритма подписи.

Не люблю читать водянистые лонг риды, а еще более не люблю их писать, по этому прошу любить и жаловать, код для использования в ваших проектах: https://github.com/BlackSan11/esia-crypto, ведь что может здесь быть более красноречиво, чем код и библиотека в централе? :)

Читать далее

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

Как сделать первый деплой Java приложения на удаленный сервер. Инструкция от/для новичка

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели25K

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

Так у меня и родилась идея сделать одну полную инструкцию (прежде всего для себя), где в одном месте будет описан процесс деплоя. Если Вы читаете эту статью, значит мне удалось решить проблему «первой публикации приложения на сервер». К Вашему вниманию любимая рубрика «инструкция для чайников – как самостоятельно сделать свой первый деплой».

Дисклеймер:

Я классический вкатун с полного нуля; Java первый и на момент написания статьи единственный язык программирования, который я знаю; это моя первая статья; в этой статье нет рекламы; я не проходил платных курсов; у меня нет регулярного ментора.

Читать далее

Spring prototype при помощи Lookup

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели17K

У бинов в Spring бывают разные области действия. Стандартной областью является Singleton.

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

В этой статье разберем бины со скоупом prototype. Рассмотрим пример использования аннотации @Lookup. Статья поможет новичкам увидеть наглядный пример создания прототайп бина при помощи использования аннотации @Lookup.

Читать далее

MVC — это не Spring Web

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

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

Читать далее

История создания агрегатора для фриланс бирж

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели2.9K

Привет, читатель, хочу поделиться своей историей по разработке проекта для сбора фриланс заказов, на данный момент с русских фриланс бирж, реализованных на языке джава, то есть агрегатор. Разработка проекта была начата 15.10.2022. Данная статья будет интересна следующим: оптимизация получения уведомлений о заказах, сравнение своего тестового проекта в области java spring, микросервисная архитектура, запуск такого приложения в докере.

Читать далее

Быстрый старт. SpringBoot + RabbitMQ

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели19K

Было уже достаточно туториалов на тему Rabbit + Spring. В данной статье чуть обновленно описание быстрого запуска очередей. Если ты только начинаешь разбираться с очередями добро пожаловать подcast.

Читать далее

Контейнеризация справочников НСИ

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

Привет, меня зовут Комаров Алексей, я Java-разработчик в Норникель Спутник. Занимаюсь развитием и поддержкой системы АСУ НСИ (Автоматизированная система управления нормативно-справочной информацией).

В этой статье я хотел бы поделиться успешным опытом создания кастомного веб-приложения для ведения мастер-данных справочника УЕР и его запуска с использованием санкционно-независимого ПО.

Читать далее

Разносим по полочкам этапы тестирования http запросов в Spring

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели9.4K

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

Речь пойдет об использовании методологии Arrange-Act-Assert применительно к интеграционным тестам на Spring Framework с использованием мокирования (mock) HTTP-запросов к внешним ресурсам, к которым идет обращение по ходу выполнения тестируемого кода в рамках поведения системы. Предлагаемые к рассмотрению тесты написаны с использованием Spock Framework на языке Groovy (см. недавнюю статью по этой теме: Тестируем Spring Boot приложения через Spock Framework). В качестве механизма мокирования будет использоваться MockRestServiceServer. Будет пару слов и о WireMock.

Читать далее

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