JVM, Spring, Kotlin и не только: что расскажут на JPoint 2024

t_alil9e4ypssj0kcocsgpavxco.jpeg

Как подготовить Java-код к виртуальным потокам? Как (и зачем) писать на Kotlin Script? Какими бывают интринсики? Зачем тащить Undertow? Как логгер должен реагировать на исключение? Как укротить БД? Как машины пишут музыку?

Так много вопросов — и все они найдут ответы на конференции JPoint. Там поговорят и о производительности, и о фреймворках, и об архитектуре — в общем, обо всём, полезном Java-разработчику.

Программа конференции готова, и пришло время представить её Хабру.

Содержание

Кейноуты

Слово «Keynote» знакомо многим из-за редактора презентаций от Apple, но изначально оно означает доклад, открывающий или закрывающий конференционный день. Это случай особый, так что в трёх докладах этого блока речь идёт не конкретно про Java:

Квантовая революция: через неразбериху к триумфу

fqr4wgnh1fcdo0bemiljesvdmcy.pngАлексей Семихатов

Физический институт им. П.Н. Лебедева РАН

Квантовая механика приближается к своему столетнему юбилею на вершине славы и могущества, оставив непроясненными очевидные системные недосказанности. О существующих проблемах и попытках их решить расскажет доктор физико-математических наук Алексей Семихатов.

Образование в области IT: фундамент и индустриальная повестка

ybuxtwtharuz-n5ow1odds0wva8.pngАндрей Райгородский

МФТИ

Андрей расскажет, как строится IT-образование в Физтех-школе прикладной математики и информатики. Обсудим, как сохранить мощный фундамент и при этом допустить индустриальных партнеров до формирования образовательной повестки.

Интегральное скерцо: как машины пишут музыку и поют

dk5ogbjq0l42bvfy-ulgu0fzuki.pngДмитрий Ковалев

SberDevices

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

Будет много демонстраций. Послушаем SOTA-результаты и сравним с хитро отобранными «черрипиками», посмотрим на картинки, но не будем сильно погружаться в математику и алгоритмистику.

Производительность

PG для Java-разработчиков

y_tng3b3ouvqh4xtw-947w-nmkc.pngСергей Вальков

Яндекс Маркет

В процессе переноса нагруженного сервиса с Oracle на PG Сергею пришлось разбираться в тонкостях работы с последней из Java. Обнаружились разные нюансы настройки Java PG-драйвера, Hikari и Spring, о которых, как оказалось, многие разработчики не знают, забывают или узнают через боль и страдания в процессе эксплуатации сервиса позже.

Сергей собрал в этом докладе все полезные штуки, которые помогли решить ту или иную проблему.

Apache Cassandra. Еще про память

0si_csokodbt-1ij49nxtqlrplk.jpegДмитрий Константинов

Углубимся в механизмы работы с памятью в Apache Cassandra: как устроены механизмы управления памятью, сколько места занимают те или иные данные в памяти, как это мониторить, какие оптимизации по работе с памятью сделаны или еще в процессе.

Будет интересно Java-разработчикам, которые разрабатывают подобного рода системы, и тем, кто эксплуатирует Apache Cassandra.

Анализ производительности IO-систем на примере асинхронных HTTP-клиентов

ijq7oogma_netmh79gzltvpgory.jpegДанил Деминцев

Yandex Crowd

Рассмотрим процесс анализа производительности асинхронной IO-intensive системы на примере HTTP-клиентов.

Начнем с настройки тестового стенда. Затем перейдем к написанию бенчмарков при помощи JMH и обсудим основные подходы к правильному бенчмаркингу асинхронных интерфейсов. Далее найдем узкие места каждого клиента с помощью различных инструментов анализа производительности — как из Java-мира, так и со стороны ядра Linux. В конце узнаем, как ведут себя популярные HTTP-клиенты в разных условиях и сравним их друг с другом.

Бросить нельзя поймать: основы и детальная механика Java-исключений

4i14plsysbqjvztmqjfmnra-vey.jpegВладимир Ситников

В деталях разберем тему исключений, которая, безусловно, не оставит никого равнодушным — ни начинающего Java-программиста, ни заматерелого CTO. Например, вопросы «нужно ли ловить исключения?», «нужно ли их логировать?» и «нужно ли оборачивать исключения и как?» могут оказаться не такими простыми.

Что делать с InterruptedException? Как должен реагировать логгер, если во время логирования у него возникло исключение? Если вы не уверены в ответах на подобные вопросы — смело приходите послушать доклад, вам будет полезно. Если в ответах уверены — тоже приходите. Наверняка будет, что обсудить в дискуссии.

Для работы с исключениями публикуют библиотеки jdoctor, SneakyThrows, и что-нибудь из этих идей несомненно будет полезно. Для некоторых ошибок есть специальные оптимизации в JIT, разобрав которые мы сможем увереннее (не)использовать исключения.

Развивая интринсики

atrvdfwbg72rc9btfovady2bjro.jpegИлья Гаврилин

Syntacore

xwt4gwencwsiszdjk496u3fykwy.pngВладимир Кемпик

Syntacore

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

Илья и Владимир покажут их прогресс по интринсикам для RISC-V за прошедший год. Они подскажут разработчикам приложений, как самим находить подобную информацию по интересующим их интринсикам.

Профайлинг HotSpot JVM, используя eBPF

kppfyi38hcr1yxxvu1q7a49vfjq.pngЭдуард Ибрагимов

Huawei

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

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

Будет интересно аудитории, заинтересованной в оптимизации производительности JVM-приложений.

Spring REST-гигантомания: особенности работы с мультигигабайтными POST-запросами

oqia9716ovhxvmqwk8gn6-i3img.pngАлексей Рагозин

В докладе речь пойдет о реализации потоковой обработки данных в условиях ограниченной памяти и неограниченного размера запроса на фреймворке Spring. Разберем 4 кейса: отправка данных по HTTP, получение данных по HTTP, запись в PostgreSQL, чтение из PostgreSQL.

Поиск проблем Java-приложения с 31G heap и 500G off-heap на примере Apache Ignite

uxokrk-flwk-zflnvyhfid9blka.pngДмитрий Павлов

СберТех

Доклад о том, как «лечить» Java-приложение с большим объемом данных, когда что-то пошло не по плану. Рассмотрим также настройки Java и Linux, чтобы инциденты не случались.

Зачем было тащить Undertow

lonkd4xgop3lnxfqyhv_oalklv0.pngГригорий Кошелев

Контур

Undertow — это не только контейнер сервлетов Spring Boot или WildFly, но и высокопроизводительный веб-сервер, использующий асинхронную модель обработки запросов с неблокирующим I/O. Посмотрим, как устроена архитектура Undertow, организована асинхронная обработка и I/O. Рассмотрим применение веб-сервера для создания I/O-intensive приложений.

Нетипичные подходы к перфу в поисковом движке Ozon

awhv8dly4qrmdur2a-ukhvion24.pngПётр Портнов

Ozon

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

Точки соприкосновения: Java & GC

scrwoucawcxzhbvolomdyi79zek.pngДмитрий Силин

Сбер

Разберемся, как вместе уживаются Java-приложение и garbage collector (GC): что такое safepoint и checkpoint, что такое барьеры и их виды, опыт разработчиков JVM по оптимизации барьеров, STW- и concurrent-подходы.

NanoCloud is back in town: тестирование Spring-приложений и не только для Java-разработчиков

j-kzespjtz0ecvhewptgv1ign98.jpegВладимир Красильщик

JUG Ru Group

lansqspywgqlyoog8iulkizjbv8.pngФедор Бобин

VK

В докладе будет 3 части. В первой Алексей Рагозин, создатель NanoCloud, даст короткую вводную про цели разработки и механику этой опенсорсной библиотеки для запуска Java-приложений в основных 2 режимах: распределенно на реальном кластере и изолированно внутри единой JVM. Во второй и третьей частях Владимир Красильщик и Федор Бобин последовательно рассмотрят 2 конкретных кейса промышленного применения NanoCloud для целей нагрузочного и интеграционного девелоперского тестирования микросервисов.

JVM

OW2 ASM и JEP 457: Class-File API

6ponjz3u8kjd9dl7ojtjv5awnrc.jpegСергей Владимиров

Яндекс

В 22-ю версию JDK в качестве preview предлагают включить Class-File API (JEP 457). Новый API должен заменить хорошо известную в узких кругах библиотеку OW2 ASM, позволяющую работать со скомпилированными Java-классами на очень низком уровне.

Вспомним известные задачи, решаемые этой библиотекой — создание новых классов для Spring Framework и Hibernate. Рассмотрим примеры статического анализа кода на Java и Kotlin с использованием существующей библиотеки OW2 ASM и нового Class-File API.

Как готовить свой код к виртуальным потокам

tiopjsyai3d_9kkubmxne2yjcem.pngОлег Естехин

Yandex Cloud

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

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

Больше интеропов, хороших и разных!

5mqc8bh8wu8woyzeaikqbffjjrw.jpegНиколай Иготти

РИИ

На опыте различных систем (JVM, V8, JSCore, JS + Wasm) обсудим техники создания быстрых и эффективных механизмов интероперабельности managed- и unmanaged-кода для больших практически важных библиотек на C++. Также обсудим альтернативные подходы, их достоинства и ограничения.

GraalVM Native Image: польза в реальной жизни

yjtrayjhfkmb7ked70d63k8orju.pngАндрей Чухлебов

Сбер

Многие в мире Java слышали про GraalVM Native Image, некоторые пробовали реализовывать с ней пет-проект, единицы используют в продакшене в специфичных кейсах с «быстро живущими приложениями». И это все области применения?

Разберемся, какую пользу можно извлечь из использования Native при построении low latency-системы с 300+ deployments и 1 500+ pods, плавающими нагрузками и высокими гарантиями отказоустойчивости.

Нестандартные расширения модели памяти на практике

0momyqxe1f6lni50fiygrr05nos.jpegАлександр Ланцов

Мир Plat.Form

Продолжение доклада с JPoint 2023 «Не happens-before единым: нестандартные семантики».

В первой части мы познакомились с существующими в Java семантиками и теми гарантиями, что они предоставляют. Теперь время узнать, как эти семантики используются на практике. Рассмотрим практический аспект применения семантик на реальных примерах, дойдем до нашумевшей в свое время библиотеки Disruptor и даже узнаем, как написать свою очередь — еще более производительную в некоторых сценариях.

Доклад будет интересен всем, кто интересуется многопоточным программированием, моделями памяти и популярными lock-free библиотеками.

Индиана Джонс и компилятор языка Pascal за 2 часа

jewry-eovpjxejiesob526yteuw.pngВиталий Худобахшов

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

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

Фреймворки и библиотеки

Пишем приложение на Ktor

g2sfkjqfnunhmp3f7cpd2t728o4.jpegГлеб Королькевич

Хоум Банк

9dhwodqwmiskjqbezoixblss5uq.pngАлександр Нозик

МФТИ

Напишем с нуля рабочее full stack-приложение на Kotlin с использованием Ktor.

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

Также Александр и Глеб поделятся личным опытом использования в боевых задачах.

Математика на чистой Java

fc6y-r9tu0qosribis5ss5erq78.pngАлександр Эйдлин

Сбер

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

На примере разработанной в Сбере системы оптимизации кассовой ликвидности разберем реальные задачи, когда бизнес-логика проекта содержит более-менее сложные расчеты, а также способы решения этих задач.

JHipster: думали, распаковка, оказалось — вскрытие

hnfdygqxe18491zmniboqgwk9hc.pngИлья Кучмин

Amplicode

JHipster — популярная платформа для быстрой генерации, разработки и деплоя современных веб-приложений и микросервисов. Представьте, что взяли senior-разработчика с 10-летним опытом разработки приложений на Java и отправили делать review кода, сгенерированного JHipster.

В рамках доклада наш новоиспеченный hipster на примере хорошо известного проекта Spring PetClinic разберется, как именно устроен Spring Boot backend-сгененерированный JHipster, какие в нем есть проблемы, что он делает хорошо, а на что стоит обратить особенное внимание и, возможно, переиспользовать в своих проектах.

Запуск по расписанию в Java: как не проспать работу и успеть к дедлайну

5go0mmgkz7i2pfrl__2tfalesfg.pngАндрей Зарубин

Росбанк

Доклад о паттерне запуска задач по расписанию. На практике посмотрим, как написать код реализации этого паттерна одним из четырех способов: на голой Java, с помощью проверенных фреймворков, в Spring и через внешние средства. В зависимости от обстоятельств вы будете знать, к какому решению прибегать при решении своих задач.

Temporal, Kotlin, Spring — как сдружить, тонкости использования, применение в микросервисной архитектуре

Петр поделится опытом использования temporal.io в JVM-приложениях. Опишет нюансы, которые важно понимать новичкам, и покажет, как использовать Temporal в Spring Boot-окружении. Расскажет про свой опыт в отношении микросервисов. Немного затронет Ops-задачи вокруг Temporal.

Исходный код примеров будет прилагаться.

Переполнение в Collections.rotate

h08z3o1jiytivvuwsyubzh6vk2q.pngНикита Сахарин

Сбер

Реализация статичного метода rotate в классе java.util.Collections содержала ошибку переполнения. Дефект проявлялся лишь на массивах с числом элементов больше, чем 2^30, т.е. на очень больших массивах, и находился в OpenJDK на протяжении 22 лет. Этому багу подвержены все версии Java по 21 включительно.

О тернистом пути от обнаружения дефекта до коммита в master и будет выступление.

Хранилище

Spring Data JDBC. Проблемы известные, проблемы неизвестные

ww8e8f2awbtjga4mn4jr9dr-iik.jpegМихаил Поливаха

Сбер

Spring Data JDBC — относительно новый модуль Spring Data. У него свои фичи, свои баги и проблемы. Часть этих проблем известна аудитории и описана в документации. Однако иногда документация врет или недоговаривает. К тому же есть некоторые неочевидные детали реализации, которые могут смутить пользователей библиотеки. Это касается многих аспектов — от генерации SQL до маппинга сущностей.

Во время доклада мы посмотрим на ряд подобных сюрпризов, обсудим, баг это или фича и что разработчики планируют с этим делать. Также рассмотрим текущее состояние проекта Spring Data JDBC — над чем идет работа, что исправляется, а что пока нет.

Apache Cassandra: 8 лет в продакшене

trzkzudntqkq8pxf_mqpex_cxkg.jpegВладимир Дегтерев

Почта Банк

8 лет назад перед Почта Банком стояла задача написать свою систему ДБО (дистанционного банковского обслуживания) с нуля, выпилив существующие вендорские модули. В рамках решения этой задачи внедрили Apache Cassandra. За время ее эксплуатации накопилось немало опыта, которым хочется поделиться. В докладе будет три истории:

  1. Лента событий пользователей и опасность tombtsone при записи с TIMESTAMP.

  2. Шаблоны операций и сиквенсы на базе LWT. Реализация алгоритма Paxos в Cassandra.

  3. Пиковая нагрузка в зарплатный день и как помог compaction.

БД-укротитель

psm7i1ndr7olp1v1lnnqrzzfk14.jpegИлья Сазонов

Всегда.Да

kj3_oeleffka1fl86zun_sdsu8i.jpegФедор Сазонов

Сбер

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

Spring

Правильный DevOps для Spring Boot и Java

uuhuzdbxpldkwob4ew41q3tnjb4.pngРустам Курамшин

Оператор Газпром ИД

Речь пойдет о лучших практиках в построении DevOps-процессов для проектов, написанных на Spring Framework и Java/Kotlin. Бывает так, что разработчики не интересуются DevOps-процессами, а DevOps-инженеры не знакомы с традиционными подходами конкретного фреймворка и языка. Будет интересно как Java-разработчикам, так и инженерам по эксплуатации Java-сервисов.

Скрытая угроза ранней инициализации при написании Spring DSL

1qozpvhgpy1uxq8prhj5zdwxrtk.pngЕвгений Зубенко

Сбер

wnz5bsqktnkdbn8aufixebqpthi.pngМаксим Шестаков

Сбер

Основная затрагиваемая тема — это то, как ранняя инициализация bean’ов при поднятии Spring-контекста может стать препятствием при попытке упростить конфигурацию вашего Spring-приложения.

Задача доклада — показать пример подобной проблемы, «покопать поглубже» в Spring Framework к ее «корню», а также обсудить практики, чтобы избежать подобных казусов.

Разрабатываем модульный бэкенд, используя стандартные возможности Spring Boot

vlcdjsdkbfibbxa5u2vllrycb60.pngВадим Бубликов

Газпромбанк

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

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

Kotlin

Gradle DSL изнутри

ssic6zpstxb-la_ofm1adpixajc.pngАлександр Белов

Сбер

Многие Java-разработчики используют Gradle для сборки своих проектов. Разберем частые ошибки и лучшие практики в написании build-скриптов. Обсудим, для чего нужны плагины и почему allprojects {} в build-скрипте — плохая практика.

Разберем, как устроен стандартный Java plugin, и напишем свой. Вы узнаете, как под капотом работают стандартные «скоупы» зависимостей API, implementation и как создавать свои. Обсудим, как переиспользовать логику сборки и создавать свой собственный идиоматичный DSL.

One source to rule them all: Kotlin DSL как единый источник правды для решения многих задач

pd_dw5zgcsxvc7otn86uffcsgk0.pngИван Пономарев

В докладах про Kotlin DSL уже много раз объяснили, как написать лямбду с ресивером. Но до сих пор мало кто обсуждал, что делать после того, как DSL появился в кодовой базе. Главная сила DSL в том, что он — в отличие от простого императивного кода — может работать как единый источник правды для решения многих задач, что Иван и проиллюстрирует на пяти примерах.

Kotlin Script: для кого, зачем и как

tx8poinpogy8i__cbw8xgzjsk1o.pngАнатолий Нечай-Гумен

Банк «Центр-инвест»

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

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

Архитектура

System Design-интервью для практиков

xfz9birugiskeqpbtjetelkip0c.pngДмитрий Волыхин

Подкаст Javaswag

Представьте, что у вас System Design-интервью через неделю и продолжительность встречи 45 минут. Как можно что-то задизайнить за такое короткое время? Как задизайнить систему, которую вы видите первый раз в жизни? Что проверяет System Design-интервью?

Обо всем этом расскажет Дмитрий.

Как мы построили самобалансирующийся мониторинг обработки топиков Kafka с помощью самой Kafka

eob_afmsnbe4zek7zjrykqghke8.pngНикита Рьянов

Тинькофф

Задачи, связанные с потоковой обработкой данных, встречаются довольно часто. Какими инструментами сейчас их принято решать? В большинстве случаев это будет Apache Spark Streaming или Apache Flink, но всегда ли нужно использовать такие массивные фреймворки для решения не самых сложных задач?

Перед Тинькофф как раз стояла задача организация мониторинга, которую хотели решить, используя что-то легковесное. Выбрали Kafka Streams, и Никита расскажет, как удалось решить поставленную задачу, немного доработав библиотеку.

От партнеров

Убираем мусор без следов

8_o2hicvkbd9foc0p7j9vxdshxi.pngАлександр Дроздов

Axiom JDK

Рассмотрим три вопроса, связанные со сборщиками мусора: что делать с безопасностью памяти; что делать со старыми приложениями, работающими на старых JDK и, соответственно, на старых сборщиках мусора — не таких эффективных, как современные; что делать с приложениями, которые работают на Native Image и не используют доступные им ресурсы.

Hibernate, OOM и ооочень длинные запросы

2gwgear00fznmjqheiipfcd21eq.pngСергей Синдеев

Группа «Рексофт»

Как бы мы ни хотели, утечки памяти иногда случаются. Рассмотрим, что же такое OOM, как искать его причину и чем могут помочь средства логирования и мониторинга такими средствами, как Kibana и Grafana. Получим дамп с помощью Spring Actuator и VisualVM. Затем проведем анализ с помощью Eclipse MAT и Intellij IDEA, локализуем утечку. Немного окунемся во внутреннее устройство Hibernate и порассуждаем о причине утечки.

Технологии и инструменты, способные обеспечить максимальную продуктивность и развитие сотрудников

Очевидно, что любой компании нужен качественно выстроенный и технологичный процесс развития сотрудников. Если, конечно, компания хочет получить эффективные команды, состоящие из замотивированных специалистов. Но как это работает на деле? Что действительно важно, а что перегружает людей, хотя ценности вовсе не несет? На BOF-сессии своим опытом поделятся коллеги из группы «Рексофт».

Заключение

С докладами разобрались, а теперь поясним формат для тех, кто раньше не участвовал в наших конференциях:

Первый день 17 апреля — сугубо онлайновый.

А вот с 24–25 апреля доступны два варианта. Если хотите оказаться на московской площадке лично, то там получите всё то, за что любят офлайн-конференции: живое общение, стенды компаний и так далее. Но если почему-либо не готовы добраться, то сможете и к этим дням подключиться удалённо, чтобы не пропустить ни один интересный доклад и задать вопросы спикерам по видеосвязи.

Остальные подробности и билеты — на сайте конференции. Так что увидимся в апреле: вживую и онлайн.

© Habrahabr.ru