Как стать автором
Обновить
0
0
Евгений @EvgeniyJVM

Senior java developer, teamlead, architect

Отправить сообщение

Паттерны применения многопоточности на коммерческом проекте (на примере Java)

Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров3K

После прочтения у вас сложится понимание того как работать с многопоточностью на реальном проекте

Список рассмотренных паттернов:

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

При этом в статье я намеренно не касался низкоуровневых механизмов, таких как synchronized, lock, volatile, барьеров (разве что semaphore), потому что они значительно реже применяются в работе

Читать далее
Всего голосов 9: ↑9 и ↓0+12
Комментарии1

Memory Fences и volatile в Java: низкоуровневые гарантии порядка памяти

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

Сегодня рассмотрим интересную тему для тех, кто сталкивается с многопоточностью в Java – это управление порядком памяти. Базовых инструментов синхронизации, например как synchronized или блокировки, порой недостаточно. Именно здесь могут помочь низкоуровневые механизмы, такие как Memory Fences и ключевое слово volatile.

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

Читать далее
Всего голосов 10: ↑10 и ↓0+14
Комментарии0

Spring Boot Starter: практически, принципиально и подробнее. Часть 3

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

Привет, Хабр! С вами снова Сергей Соловых, Java-разработчик в команде МТС Digital. Мы продолжаем изучать возможности и нюансы построения собственного Spring Boot Starter. В предыдущих частях мы разобрали структуру стартеров, автоконфигурацию и зависимости бинов. А сегодня давайте поговорим о параметрах приложения.

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

Читать далее
Всего голосов 5: ↑5 и ↓0+8
Комментарии3

Soft Assertions в AssertJ

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.8K

Бывало ли у вас такое, что тест падает на первом же assertion'e из десяти? Вы исправляете ошибку, запускаете тест снова, и он падает на втором assertion'e. И так десять раз. Выматывает, не так ли?

На самом деле, есть способ ускорить этот процесс — использовать Soft Assertions. С их помощью тест выполнится полностью, даже если один или несколько assertion'ов упадут, и вы сразу увидите все ошибки.

В новой статье от Михаила Поливахи, эксперта сообщества Spring АйО, вы узнаете, что такое Soft Assertions и как ими пользоваться.

Читать далее
Всего голосов 13: ↑12 и ↓1+13
Комментарии2

7 основных способов оптимизировать кеширование в Spring Boot

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров9.3K

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

В новом переводе от команды Spring АйО вы узнаете про 7 основных техник оптимизации кеширования в Spring Boot, которые могут помочь значительно улучшить производительность. От выбора идеальных кандидатов для кеширования до реализации асинхронного кеша и мониторинга метрик кеша.

Читать далее
Всего голосов 21: ↑20 и ↓1+22
Комментарии3

Мониторим и нагружаем приложения Jmix

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

Инструменты мониторинга работы приложений могут быть полезны не только DevOps’ам, но и разработчикам для исследования производительности приложения в поиске, например узких мест в его работе, поэтому в данной статье мы не только настроим мониторинг для Jmix-приложения, но и подготовимся к его синтетическому нагрузочному тестированию. Особенностью платформы Jmix в силу того, что она использует фреймворк Vaadin, является тот факт, что работа UI интегрирована с бекендом, но это также значит и то, что и метрики можно использовать прозрачно, т.е. замерять ими работу интерфейсного слоя. 

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии2

Middle-starter-pack по spring data

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров1.7K

Особенности использования Transactional в SpringBoot приложении (разбор типовых ошибок среднестатистического разработчика).

Читать далее
Всего голосов 6: ↑5 и ↓1+4
Комментарии4

Настраиваем TLS контекст. КриптоПро в помощь

Уровень сложностиПростой
Время на прочтение17 мин
Количество просмотров2.3K

Эта публикация – практический кейс c кратким туториалом по реализации TLS-соединения, на основе российских стандартов шифрования, основанных на компонентах КриптоПро (CP). Статья не содержит рекламы или попытки сподвигнуть к выбору конкретных компонентов. Я столкнулся с задачей реализации шифрованного подключения к системам бюро кредитных историй (БКИ) в части оценки платежеспособности физических лиц. У меня было ограничение - необходимо было использовать КриптоПро (CP). В процессе реализации задачи открыл для себя несколько интересных моментов. Процесс их "открытия" был чарующим и загадочным. Чары мне обеспечил CP, а с загадками помогали службы поддержки БКИ и CP. Этой статьей хочу помочь сэкономить время и сделать прозрачным процесс реализации шифрованного подключения. В начале статьи дам небольшой теоретический экскурс. Если Вас интересуют детали реализации, то сразу переходите к разделу "Установка и настройка CP компонентов", код, приведенный в статье выложен тут. Приятного чтения.

Читать
Всего голосов 6: ↑6 и ↓0+6
Комментарии1

Побитовые проверки в Java и почему они так неоднозначны

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

Операторы "&" и "|" не вызывают вопросов, когда применяются в подходящих ситуациях. Но знаете ли вы о всех последствиях использования побитовых операторов вместо логических в Java? В этой статье мы рассмотрим как плюсы производительности такого подхода, так и минусы его читабельности.

Читать далее
Всего голосов 15: ↑15 и ↓0+18
Комментарии8

Мониторинг и профилирование Spring Boot за две строчки

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров1.8K

Эта статья посвящена использованию библиотеки для профилирования методов в приложениях Spring Boot. Она предоставляет механизм для мониторинга времени выполнения методов, используя аннотацию @ActuatorProfiling и Spring Boot Actuator для экспонирования данных профилирования через настраиваемые конечные точки (эндпоинты).

GitHub https://github.com/litefunction/spring-boot-starter-actuator-profiling

Введение

Профилирующее приложение предназначено для помощи разработчикам в мониторинге и анализе времени выполнения методов, аннотацией @ActuatorProfiling. Данные профилирования экспонируются через Spring Boot Actuator.

Особенности

• Профилирование времени выполнения методов.

• Настраиваемые параметры профилирования.

• Информация получения данных профилирования в actuator.

• Потокобезопасное управление данными профилирования.

Читать далее
Всего голосов 7: ↑3 и ↓4+1
Комментарии1

От логов к аудиту

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

Статья родилась, как водится, из рабочей задачи — нужно было внедрить аудит-логирование в некоторые микросервисы на Java и Spring.

Читать далее
Всего голосов 3: ↑2 и ↓1+3
Комментарии5

Сервер на визитке

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров19K

Все началось еще лет 10 назад, когда я впервые наткнулся на статью где было описано как эксперт по 3D-технологиям вместил сильно обфрусцированный код рейтрейсера на C++ в размеры своей визитки.

Читать далее
Всего голосов 37: ↑31 и ↓6+35
Комментарии41

Hibernate и спецификация JPA: приключение на 20 минут

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

На прошлой неделе в блоге сообщества Spring АйО вышла статья-перевод про интересный кейс падения производительности при переходе на Hibernate 6.5. Оказалось, что выражения вида publisherId in :ids при пустом ids приводит к серьезной деградации производительности. Баг вскоре был пофикшен, однако, не дает покоя вопрос, почему так произошло?
Ниже приводим историю появления и незамедлительного решения этой проблемы, от лица Гэвина Кинга, создателя Hibernate.

Читать далее
Всего голосов 17: ↑17 и ↓0+18
Комментарии0

Lazy Loading в Java

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров6.6K

Привет, Хабр!

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

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

Рассмотрим, как мы можем применить этот котиковый подход в Java. Будем как котики — умными, экономными и эффективными!

Читать далее
Всего голосов 16: ↑11 и ↓5+8
Комментарии6

Ловушки volatile, DCL и синхронизации в Java

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров5.5K

А что если окажется, что простые знания на самом деле более нюансированные, а старые знакомые, такие как Double-checked locking, являются неоднозначными? Именно на такие мысли наталкивает изучение кода реальных проектов. Результаты этого исследования мы и рассмотрим в этой статье.

Читать далее
Всего голосов 9: ↑9 и ↓0+11
Комментарии10

Кратко про класс CompletableFuture в Java

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров8.4K

Привет, Хабр!

Асинхронное программирование уже давно является полноценной частью Java. С появлением Java 8 и введением класса CompletableFuture, асинхронное программирование стало более доступным.

CompletableFuture — это класс в пакете java.util.concurrent, предоставляющий возможности для асинхронного программирования. Он поддерживает выполнение задач в фоновом режиме, цепочки задач, обработку исключений и многое другое.

Читать далее
Всего голосов 18: ↑15 и ↓3+15
Комментарии2

MapStruct — смаппь меня, если сможешь

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

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

Читать далее
Всего голосов 10: ↑8 и ↓2+8
Комментарии35

Hazelcast: эксперименты с настройкой и долговременным хранением больших объектов in-memory

Уровень сложностиСредний
Время на прочтение50 мин
Количество просмотров2.7K

Статья будет полезна для тех, кто поддерживает приложения на Java, так как большая ее часть посвящена анализу работы G1 GC, знакомству с соответствующими инструментами и особенностями тюнинга GC, в частности для очень больших heap`ов. А также тем, кто пытается разобраться, на что способен Hazelcast, и для чего его можно применить.

Так исторически сложилось, что на проекте уже использовался Hazelcast, и мы решили попробовать переиспользовать его под новую задачу. Она заключалась в хранении объектов в БД с одним специфичным требованием – данные нельзя записывать на диск, что сильно сужало доступные варианты. Безусловно, мы понимали, что надежность такого хранилища будет низкой, но выбора не было. И, хотя, у нас были мысли развернуть для этого Redis или VoltDB, мы решили опробовать Hazelcast, так как в его возможности, помимо прочего, так же входит in-memory хранилище.

Что из этого получилось – читайте под катом.

Читать далее
Всего голосов 10: ↑9 и ↓1+10
Комментарии0

Заметаем рутину под ковёр. Шаблон Step Builder в Java

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

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

Читать далее
Всего голосов 8: ↑6 и ↓2+4
Комментарии8

Быстрее, выше, сильнее: оптимизируем Spring-контекст для тестов

Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров5.4K

Всем привет! Я Юнес, SDET в Тинькофф. Помогаю автоматизаторам создавать более эффективные и надежные тесты, готовить тестовые данные и настраивать CI/CD-пайплайны. 

Расскажу о доступных способах оптимизации Spring-контекста для тестов. Будет здорово, если у вас есть знания о Spring Framework и опыт написания тестов: тогда мы будем на одной волне. Давайте разберемся в хитросплетениях аннотаций и конфигураций вместе под катом!

Читать далее
Всего голосов 9: ↑8 и ↓1+7
Комментарии4

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Backend Developer, Software Architect
Lead
От 450 000 ₽
Java
Java Spring Framework
Java EE
Spring Boot
Git
Linux
PostgreSQL
OOP
Docker
RabbitMQ