
Всем привет! ? ? ? Мы — Java-разработчики Тинькофф: Андрей Орлов, Арсений Зайцев, Константин Максимов, и Константин Польщиков. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и решили делиться этим не только с коллегами, но и со всем сообществом.
?В этот весенний период, наполненный свежестью и обновлениями, ждите обзоров состояния jextract и новых функций терминала в JetBrains IDEs, включая его бета-версию. Готовьтесь к версии 0.8.0 Spring AI, где есть новые функции и улучшения. Вдохните аромат цветущей весны, пока мы погружаемся в обзор различных Java Enhancement Proposals (JEP), включая поддержку Markdown в JavaDoc, новые возможности для компиляции и выполнения Java-кода, а также превью функций Java 22. Вдохновляйтесь, ведь весна в мире Java приносит с собой обновления и новые возможности для всех нас. Stay tuned! ?
Главные новости
State of jextract. Jextract — инструмент для преобразования кода C в Java-код, поддерживающий различные аспекты C++. Jextract предоставляет средства для преобразования типов данных, включая указатели на функции и переменные функции. В отчете за февраль 2024 — все о том, как менялся этот инструмент и что в нем нового.
The New Terminal (Beta) Is Now in JetBrains IDEs. JetBrains представили бету нового терминала для своих IDE. Он будет полностью доступен в версиях 2024.1, но уже сейчас его можно пощупать, включив соответствующую настройку. Новый терминал предоставляет множество интересных функций: автозаполнение, улучшенная история команд и визуальное разбиение команд на отдельные блоки, между которыми легко навигировать. Выглядит действительно приятно.
Spring AI 0.8.0 Released. Вышла версия 0.8.0 Spring AI. Проект призван упростить создание приложений, которые используют ChatGPT и другие AI-модели, предоставляющие API для взаимодействия. Разработчики Spring AI хотят дать абстракции для работы со всеми основными моделями так, чтобы между ними было легко переключаться с минимальным изменением кода. В этой версии представлена такая функциональность:
API для взаимодействия с AI-моделями от разных поставщиков: OpenAI, Microsoft, Amazon, Google, Huggingface и других;
поддержка Vector Store API, которое предоставляет интерфейс для взаимодействия с векторными БД, поддерживается 8 различных БД;
вызов функций — блоков кода в ИИ-моделях, фича для Open AI;
автоконфигурация и стартеры Spring Boot для моделей ИИ и векторных хранилищ;
ETL-фреймворк для Data Engineering.
JEP 467: Markdown Documentation Comments — JEP 467, посвященный Markdown в JavaDoc, перешел в статус Candidate.
Интересные видео
Project Leyden: Capturing Lightning in a Bottle. Проект Laden направлен на сокращение времени запуска приложений в два раза и на порядок — в будущем. В проекте участвуют разработчики библиотеки Java в Oracle. В докладе расскажут и покажут, как можно оптимизировать старт приложения на 800%(!), используя Laden.
Java's Custom Runtime Builder - jlink. JLink — инструмент командной строки для создания пользовательского образа среды выполнения Java. Он использует два варианта: добавление модулей и определение выходного образа. JLink позволяет создавать образы среды выполнения, содержащие только необходимые модули, что уменьшает размер образа и ускоряет запуск приложения. Подробнее об этом инструменте — в ролике.
Алексей Рагозин — Java в контейнере: особенности эксплуатации. Очень интересный, глубоко практический доклад. Спикер рассказывает, с какими проблемами можно столкнуться при запуске Java-приложений в контейнерах и как их решать. При этом не забывает в начале дать теоретический базис для лучшего понимания материала. Затрагивается работа с памятью и CPU и есть много дополнительных материалов, чтобы глубже погрузиться в тему.
Data Oriented Programming in Java 21, Solving the Countdown game - JEP Cafe #22. Видео — полчаса наслаждения изящными решениями с использованием новых фич Java, направленных на реализацию парадигмы Data-ориентированного программирования. Sealed-классы, рекорды, паттерн матчинг, безымянные паттерны, газереры для Stream API, Exhaustive Switch — они используются для демонстрации красивых решений задачи Countdown. Настолько наглядная демонстрация достойна восхищения!
Java 22 Previews Statements Before super(...)
and this(...)
- Inside Java Newscast #62. В Java 22 в качестве превью вошел JEP 447, который частично снимает запрет на код до вызова this() и super() в конструкторах. В этом видео Николай рассказывает, зачем изначально был введен запрет, какой именно код мы теперь можем писать и для чего это может быть нужно.
Does Java 22 Kill Build Tools? - Inside Java Newscast #63. Maven и Gradle больше не нужны. В Java 22 представили JEP 458, который по сути продолжает идею JEP 330: дает возможность компилировать и запускать Java-код одной командой java. Но если раньше речь шла об одном файле, то теперь Java найдет все файлы классов и даже джарники, необходимые для компиляции и выполнения программы. Николай рассказывает, как это работает, какие есть подводные камни и, самое главное, зачем это нужно.
Дмитрий Тучс — The art of JUnit extensions. «Extension — не аналог @BeforeEach/All» — цитата идеально передает суть доклада. Спикер демонстрирует мощь механизма Extension-ов, представленного в JUnit 5, на примере авторизации по OAuth 2. Если вы все еще используете наследование в своих классах тестов, этот доклад обязателен для просмотра, так как в 99% случаев вам на самом деле нужно не наследование, а свой экстеншен.
Foreign Function & Memory API - A (Quick) Peek Under the Hood. Хороший доклад, в котором автор рассказывает о современном, эффективном и безопасном доступе к нативному коду из Java через Foreign Function & Memory API, а также чем это лучше уже давно существующего JNI.
Полезные статьи
Использование resilience4j со Spring Boot. Resilience4j — библиотека, предоставляющая набор инструментов для повышения надежности и отказоустойчивости Java-приложений прежде всего в микросервисной архитектуре. В статье разбираются основные компоненты с примерами и то, как они могут помочь при разработке.
Гексагональная архитектура и Spring Boot. У обычной структуры Java-проекта на spring boot есть проблемы с расположением классов и сложностью понимания. Гексагональная архитектура предлагает отделение скучного кода от логики и слабую связность. Подробнее о том, как это будет выглядеть на spring boot, читайте в статье.
Hibernate StatelessSession JDBC Batching — рассказ о StatelessSession, которая существует в Hibernate больше десяти лет, но получила новые применения в Hibernate 6. Теперь ее можно использовать для создания INSERT, DELETE и UPDATE батч-запросов.
Optimizing Java for Modern Hardware: The Continuous Evolution of the Vector API. Небольшая статья, в которой просто и понятно рассказывается о том, что такое Vector API, почему он дает прирост производительности, а еще есть простой пример его использования.
Мифы и реалии «Мультимастера» в архитектуре СУБД PostgreSQL — цикл статей, в которых академически описана проблематика и решаемая задача. В первой части — общие концепции мультимастера. Во второй части фокус смещается на гарантии консистентности и разрешение конфликтов в мультимастере, а в третьей части рассказывается о производительности. Рекомендуем к прочтению.
The Billion Row Challenge (1BRC) — Step-by-step from 71s to 1.7s. В статье автор рассказывает, как принимал участие в The Billion Row Challenge. Задачей испытания было написать программу, которая считает минимальную, среднюю и максимальную температуру для каждой погодной станции. Основная сложность заключается в том, что все данные лежат в файле, содержащем миллиард строк. В статье кратко описываются инструменты профилирования и более подробно рассказывается про различные методы оптимизации в Java, безопасные и не очень.
Подборка любопытного
Настройка CI/CD глазами разработчика. Умение настраивать CI/CD, может, и не самый часто используемый навык Java-программиста, но все еще очень полезный. Статья описывает процесс создания CI/CD для проекта на Java с использованием Docker и сделана как руководство с пошаговыми инструкциями, что удобно, когда хочешь что-то попробовать в pet-проекте с минимальным CI.
Speed up your Java Development on Windows with Dev Drive — в Microsoft рассказали про Dev Drive. Dev Drive — новое решение, построенное на Resilient File System (ReFS) и призванное увеличить скорость разработки благодаря оптимизации работы файловой системы. В статье описано, как его создать, есть пример с Spring Pet Clinic sample application. Сборку через maven удалось ускорить с 2 минут до 45 секунд.
СберТех приглашает разработчиков протестировать свой аналог GitHub — веб-сервис GitVerse. СберТех выпустил российский аналог GitHub. Сложно как-то это комментировать. Лучше сходить посмотреть и попробовать.
Podlodka Java Crew — 11 марта стартует очередная Podlodka Java Crew, где всю неделю будут обсуждаться интеграции. Тема максимально практическая и прикладная. Запасаемся попкорном и бежим за билетами.
Спасибо, что дочитали! Увидимся через месяц ?
Присылайте материалы, если встретили что-то интересное, а мы опубликуем в следующем выпуске и скажем вам спасибо!