Java Digest #3
Всем привет! ? ? ?
Мы — Java-разработчики Тинькофф: Константин, Андрей и Арсений. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и решили делиться этим со всем сообществом.
«Поскольку крысы не умели читать, собранная им библиотека характеризовалась некоторой причудливостью, однако патриций был не из тех людей, кто игнорирует возможность приобрести новые познания».
Терри Пратчетт «Стража! Стража!»
Главные новости
Вышел Kotlin 1.9.0. Основные нововведения:
Пропертя entries — замена функции values() в enum, которая возвращает неизменяемый список вместо массива, теперь стабильна.
Новая utility-функция расширения createParentDirectories() для создания родительских директорий.
Поддержка конфигурационного кеша Gradle для Kotlin Multiplatform.
С полным списком можно ознакомиться в разделе What’s new in Kotlin или посмотреть видеообзор от Антона Архипова.
Первый milestone-релиз Spring Boot 3.2.0 M1 — добавили базовую поддержку virtual threads при использовании Java 21.
Вышел Micronaut 4. Из интересного — появилась поддержка virtual threads из project loom, expression language, экспериментальная поддержка HTTP/3 и многое другое.
Новая IntelliJ IDEA 2023.2. Теперь есть поддержка AI-ассистента, о котором мы писали в одном из прошлых выпусков, интеграция с GitLab, а еще IntelliJ Profiler теперь показывает подсказки о перформансе прямо в редакторе.
Для PostgreSQL создан движок хранения OrioleDB, работает без операции VACUUM. Такая возможность появилась из-за использования логов отката (undo logs), работающих на уровне отдельных блоков и строк, а еще из-за системы автоматического слияния страниц с данными.
В OrioleDB реализовано чтение страниц с данными без использования блокировок, прямое связывание страниц в оперативной памяти со страницами в постоянном хранилище и применение механизма CoW (copy-on-write) при фиксации контрольных точек для создания непротиворечивых снапшотов в любой момент.
Движок разрабатывает стартап OrioleData, сейчас он на стадии бета-тестирования и не рекомендован для применения на проде.
Поймать перо jar-птицы: новый сезон Java на Хабре — с 31 июля на Хабре стартовал новый сезон Java.
Интересные видео
Григорий Кошелев — Когда всё пошло по Кафке 3: Apache Kafka и Consumer
Третья часть цикла докладов про устройство Kafka. Первая часть посвящена общим тонкостям ее использования, во второй Григорий погрузился в работу продюсеров, а в третьей части подробно рассматривает работу консьюмеров, рассказывает про KIP, которыми обусловлены различные тонкости работы и настройки.
Кирилл Толкачев — Как познавать Spring Boot с помощью TDD
Центральная мысль: следуя TDD, можно изучить те инструменты, с которыми работаешь. Кирилл показывает, как писать тесты на разные слои приложения — от контроллеров до взаимодействия с БД и Kafka. Рассказывает, где могут пригодиться компонентные тесты, где — юниты, а где — интеграционные. При этом на каждом этапе разработчик столкнется с различными проблемами, а в процессе их решения поймет, как работают те или иные инструменты. Мысль интересная и очень дискуссионная.
У Кирилла в докладе все получается споро и быстро, но опыт говорит о том, что на решение некоторых проблем, связанных с той же конфигурацией Spring и Kafka может уйти очень много времени. При этом бывают случаи, что ты просто неправильно сконфигурировал сами тесты. С другой стороны, изучение любого инструмента так или иначе занимает время, а код тестов так же важен, как продакшн-код. Приглашаем поделиться вашим мнением по этому вопросу в комментариях ?
Java 21 is no LTS Version - Inside Java Newscast #52
Шок-контент! Ни 11, ни 17, ни 21 Java не были LTS! ? На самом деле все не так просто, и из этого видео вы узнаете, что под собой подразумевает само понятие LTS, что означает суффикс u, который можно встретить в названиях джарников jdk, чем обслуживание отличается от поддержки и, самое главное, кем и как именно осуществляется первое и второе.
Java-дайджест — Книжный клуб.rar
Появилась запись обсуждения предыдущего выпуска нашего дайджеста в рамках Книжного клуба.rar на канале IT's Tinkoff Java & Kotlin. Обсудили Spring Boot Application Testing and Development with Testcontainers, когнитивную нагрузку у разработчиков и AI-плагин для IDEA. Получилось очень уютно, лампово и интересно. Планируем проводить такие эфиры регулярно после каждого нового выпуска. Подписывайтесь на telegram-канал Книжного клуба.rar, чтобы не пропустить анонс следующего эфира.
Полезные статьи
Reactive Programming Made Easy | The IntelliJ IDEA Blog (jetbrains.com)
— короткая, но полезная статья от Jetbrains, в которой рассказывают, какие фичи есть во всеми любимой IDE для более удобной разработки приложений с использованием Project Reactor.
От потоков к корутинам: как и почему видоизменились примитивы синхронизации в языке Kotlin (часть 1). В статье рассмотрена эволюция реализации примитивов синхронизации в Kotlin и Kotlin Coroutines по сравнению с классической библиотекой Java и пакетом java.util.concurrent. Автор предупреждает, что оценка будет исходить не из поддержки устаревшей функциональности и возможности использования в Java, а из эффективности и возможности использования в контексте Kotlin Coroutines и Kotlin Multiplatform. В статье рассмотрены примитивы синхронизации: критические секции, атомарные переменные, реактивные переменные, барьерная синхронизация.
Микросервисы в банке: на чем их лучше писать? Java/Kotlin, а может, Go?В июле в офисе РСХБ-Интех — технологической дочерней компании Россельхозбанка — прошел бесплатный митап для Java-разработчиков RSHB Backend Dev Meetup. На мероприятии обсуждали Kotlin, Go, маппинг и различные аспекты бэкенд-разработки.
Выступал Иван Кочергин, руководитель центра собственной разработки в РСХБ-Интех. Он больше 10 лет работает с Java и последние три года активно использует Kotlin.
В своем докладе Иван сравнил различные языки программирования для написания микросервисов в банковской среде: Java, Kotlin и Go. Он поделился своими взглядами на преимущества и недостатки каждого из языков в контексте разработки микросервисных архитектур. Статья — расшифровка его доклада.
Прожарка java.lang.String Статья с примерами использования java.lang.String не так, как мы привыкли это делать, как следствие, создавая неочевидную работу. Из материала можно узнать, как написать сломанную строку и на что это может повлиять.
Everything Bad in Java is Good for You. Автор предлагает альтернативно взглянуть на то, что в Java принято считать трудностями, и показывает на функциональные преимущества того или иного подхода, будь то Checked Exceptions или Null. Акцент на то, какие плюсы это дает разработчику и почему это полезно в языке.
Инструментация байт-кода Java. Давно не было материалов про байт-код! Эта статья посвящена методам инструментации байт-кода Java, то есть способам внесения изменений в скомпилированные файлы Java.class. Есть примеры использования двух фреймворков — Javaassist и ASM, а еще базовое описание байт-кода.
Как на самом деле работает Java ClassLoader system? (с картинками). Часть ⅓. Загрузка. Подробная статья про систему загрузки классов в Java c иллюстрациями не оставит без понимания принципов работы Java ClassLoader. Отличный способ повторить для себя эту тему.
Docker Compose Support in Spring Boot 3.1. Более детальное рассмотрение фичи, появившейся в В Spring Boot 3.1, которую мы затрагивали в прошлом выпуске. Теперь Spring Boot позволяет локально поднимать сервисы вместе со всеми зависимостями наподобие того, как это сделано в quarkus. Теперь, если вместе с приложением лежит файл docker-compose, то при локальном запуске Spring Boot сам поднимет все зависимости, с которыми будет работать приложение. При этом нет необходимости даже менять проперти с адресом подключения к БД.
Dynamic Entity Graphs in Spring Data JPA. Рассказ о небольшой библиотеке, которая позволяет динамически использовать различные Entity Graph в Spring Data Repository, не создавая на каждый EntityGraph отдельный метод. По сути, она позволяет передавать в Spring Data Repository Entity Graph в качестве параметра. В целом выглядит полезно и позволяет упростить код.
New in Spring 6.1: RestClient. RestTemplate появился 14 лет назад и постепенно уходит в прошлое. Начиная с пятой версии Spring вместо него можно использовать более удобный и лаконичный WebClient, а теперь появилась и полностью синхронная его альтернатива в виде RestClient.
Любопытные подкасты
Виктор Гамов рассказывает про Кафку ? Из этого выпуска можно узнать, под какие цели изначально создавался инструмент, как развивалась инфраструктура, в каких случаях стоит задумываться о ее использовании, как она позволит построить Event-driven-архитектуру и зачем это может быть нужно.
Этот подкаст должен был попасть в прошлый выпуск, но мы не успели оформить к нему аннотацию. Исправляемся ? Наша коллега, лид SRE-команды Марина Калетурина, рассказала, что значит штатная работа приложения на проде и как она может совершенно внезапно стать нештатной. А еще Марина дала подробную инструкцию, как действовать в случае инцидента.
Интерактив
Мы любим начинать выпуск эпиграфом. По этому поводу предлагаем интерактив — напишите в комменты цитату о важности постоянной учебы и получения новых знаний. Мы выберем самую подходящую к следующему выпуску и используем в качестве эпиграфа в следующем месяце с благодарностью автору комментария. И да, если используете нейросеть — напишите об этом ?
Спасибо за прочтение! Ждем обратной связи в комментариях. Увидимся через месяц ?