Как стать автором
Обновить
185.2

Java *

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

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

Java Digest #13

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

Всем привет! 👋 👋 👋👋

Мы Java-разработчики Т-Банка: Андрей, Арсений, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.

В этом выпуске: первые JEP, направленные в JDK 23, введение в Graal VM, состояние экосистемы Java на 2024 год. Посмотрим несколько интересных релизов: мажорную версию Kotlin 2.0, открытие раннего доступа к IntelliJ IDEA 2024.2 и предрелизную версию Spring AI 1.0.0. Погрузимся в JDK Mission Control, познакомимся с дата-ориентированным программированием через серию статей авторства Nicolai Parlog и разберемся в том, какой JDK выбрать для всего проекта.

Читать тринадцатый выпуск
Всего голосов 13: ↑12 и ↓1+12
Комментарии1

Новости

Катастрофа с Hibernate 6.5 при обновлении на Spring Boot 3.3.0

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

Обновившись до Spring Boot 3.3.0 (конкретно до Hibernate 6.5), мы столкнулись со 100% загрузкой процессора на БД из-за небольшого изменения в SQL коде, сгенерированного Hibernate после преобразования JPQL в SQL.

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

Java-рантаймы с точки зрения Spring Boot

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

На первый взгляд, выбор правильного Java-рантайма для вашего проекта на Spring Boot может показаться тривиальным. В конце концов, все популярные рантаймы основываются на коде OpenJDK и предлагают одинаковые программные интерфейсы (от англ. Application Programming Interface).

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

Оригинал статьи написан на английском языке Aleksey Stukalov, который является Team Lead’ом проекта IntelliJ IDEA в компании JetBrains, и Catherine Edelveis, работающей Developer Advocate в компании BellSoft, в соавторстве.

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

Lazy Loading в Java

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

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

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

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

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

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

Истории

E2E-тестирование Flink Job с Kafka

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

Привет, Хабр! С вами Александр Бобряков, техлид в команде МТС Аналитики. Я к вам с новой статьёй из цикла про фреймворк Apache Flink.

В предыдущей части я рассказал, как создать Unit-тест на полноценную джобу Flink и отдельные stateful-операторы с использованием Flink MiniCluster. Ещё мы научились запускать мини-кластер один раз перед всеми тестовыми классами, которые нуждаются в нём. В дополнение создали вспомогательные абстракции и аннотации, значительно разделяя ответственность в тестах и упрощая логику написания новых тестов.

В предыдущих тестах на джобу мы не затрагивали интеграцию с Kafka, ведь нам были не важны реальные source и sink. В этой статье продолжим разбираться в тестировании и напишем полноценный E2E-тест, который охватит Kafka и Flink вместе с использованием Testcontainers. Также рассмотрим неочевидные проблемы в тестировании и новые универсальные абстракции.

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

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

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

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

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

Стенд для нагрузочного тестирования на Testcontainers

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

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

Цель данной статьи — продемонстрировать подход к созданию стенда для нагрузочного тестирования в том виде, в котором пишутся обычные интеграционные тесты: в форме spock-тестов с использованием Testcontainers в среде Gradle проекта. В качестве утилит нагрузочного тестирования используются Gatling, WRK и Yandex.Tank.

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

Блеск и нищета нового Scrolling API в Spring Data

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

В Spring Data 3.1 появилось новое API для итерирования по большому объему данных: Scrolling API. Давайте изучим его, посмотрим на практические применения с примерами кода и преимущества по сравнению со всем известным Pageable. А также разберём, чего Scrolling API пока не хватает, и можно ли его вообще брать в свои проекты. Если хотите выяснить, как с новым API в теории ускорить пагинацию больших данных, — заходите под кат.

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

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

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

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

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

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

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

Создание дистрибутивов для разных операционных систем в Java 21 и 22

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


Статья рассказывает о построении дистрибутивов приложений для операционных систем Windows, macOS и Linux в случае использования Java 21 и 22.

Продолжает ранее опубликованную статью о создании дистрибутивов в предыдущих версиях Java, подробно описывая кардинальные изменения, произошедшие с того времени.
Читать дальше →
Всего голосов 5: ↑5 и ↓0+6
Комментарии0

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

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

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

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

Amplicode: учим IDE говорить на языке фреймворка

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

Вы когда-нибудь задумывались, как много кода, который мы пишем, предназначено именно для решения поставленных задач? Казалось бы, странный вопрос: зачем писать код, который не нужен? Но давайте подумаем, ставят ли разработчику бизнес-задачу написать скрипты миграции? Или подключить Kafka? А может быть, написать тесты? Настроить annotation processor? Можно утверждать, что большая часть кода, который мы пишем ежедневно, обслуживает другой код, который решает бизнес-задачи. Демаркационную линию между ними провести очень сложно. Да и нужно ли?  

Сегодня мы хотим представить вам наш новый продукт - Amplicode. Это целая коллекция инструментов, работающих на основе IntelliJ IDEA Community, Ultimate и VS Code. Amplicode учит вашу IDE говорить и думать на языке библиотек и фреймворков – Spring Boot, JPA, Docker, Kafka, Liquibase, MapStruct, StoryBook, ReactAdmin. Все эти инструменты объединены общими принципами, что гарантирует быстрое погружение и удобную работу, несмотря на обилие функций. В результате вы пишете «обслуживающий» код быстрее, эффективнее и качественнее. Как это работает? Расскажем под катом.

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

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

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

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

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

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

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

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

Конференция HR API 2024
Дата14 – 15 июня
Время10:00 – 18:00
Место
Санкт-ПетербургОнлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область

JOOQ. Введение. Между Сциллой и Харибдой

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

Техническое и философское осмысление библиотеки для взаимодействия с базой данных JOOQ.

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

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

Типы совместимости в Schema Registry для Apache Kafka

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

В прошлой статье я писал о том, что такое Schema Registry и как используется в Apache Kafka. Сегодня я хочу углубиться в тему и описать поведение системы при различных типах совместимости . Правильное понимание и применение этих типов совместимости поможет обеспечить стабильность и гибкость системы при изменениях структуры данных.

Типы совместимости схем в Apache Kafka
Всего голосов 6: ↑6 и ↓0+7
Комментарии0

А это точно твой сайт? Как проверить, что пользователь владелец сайта

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

Всем привет! Меня зовут Ростислав и я занимаюсь разработкой мониторинга для сайтов. Это мой пет-проект, если можно его так назвать. Иногда мониторинг сталкивается с проблемой, когда нужно проверить принадлежность сайта конкретному пользователю. Как это делается, я расскажу в статье.

Примеры кода будут на Python (FastAPI, SQLAlchemy, mypy) и Java (Spring, Hibernate). Изначально проект был написан на Python, но по мере роста был переписан на Java для упрощения поддержки и развития. 

Читать далее
Всего голосов 20: ↑13 и ↓7+6
Комментарии15

Как протестировать логику консьюмеров и продюсеров и не сгореть? Spring Boot 3, Spring Kafka

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

Всем привет. Решил поделиться опытом тестирования логики консьюмеров и продюсеров в стандартном Spring Boot приложении. Я несколько раз подходил к этой задаче с различными вариантами и находил разные подводные камни, которые стимулировали меня искать дальше - более лучшее решение. И вот, в очередной раз прошерстив накопленный опыт человечества (stackoverflow), я реализовал очередной вариант, в котором пока не нашел минусов предыдущих реализаций. В любом случае, поделюсь с вами как я к этому пришел и почему для моих кейсов не сработали другие варианты (или показались хуже последнего).

Дисклеймер. Я сторонник интеграционных тестов при запуске сборки проекта с тестами. То есть это когда для unit-тестов поднимается контекст Spring со всеми плюсами (окружение, максимально похожее на боевое) и минусами (это ДОЛГО запускается и ДОЛГО описывается).

Часть 1. А разве это проблема вообще?

Коротко: ...

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

Как распознать текст, написанный искусственным интеллектом: основные признаки (1 часть)

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

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

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

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

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

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

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

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

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

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

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

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

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

Работа

Java разработчик
334 вакансии