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

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

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

Содержание

  • Кейноуты

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

  • JVM

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

  • Хранилище

  • Spring

  • Kotlin

  • Архитектура

  • От партнеров


Кейноуты

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

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

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

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

Слово «квантовый» мы слышим регулярно, но в повседневной жизни о нём не задумываемся. Тем временем квантовая механика приближается к своему столетнему юбилею на вершине славы и могущества, оставив непроясненными очевидные системные недосказанности. Наверстаем главное вместе.


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

Андрей Райгородский

МФТИ

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


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

Дмитрий Ковалев

SberDevices

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


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

А вот теперь начинается конкретика именно для джавистов.

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

Сергей Вальков

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

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

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


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

Дмитрий Константинов

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

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


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

Данил Деминцев

Yandex Crowd

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

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


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

Владимир Ситников

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

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

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


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

Илья Гаврилин

Syntacore

Владимир Кемпик

Syntacore

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

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


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

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

Huawei

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

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

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


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

Алексей Рагозин

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


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

Дмитрий Павлов

СберТех

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


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

Григорий Кошелев

Контур

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


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

Пётр Портнов

Ozon

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


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

Дмитрий Силин

Сбер

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


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

Алексей Рагозин

Владимир Красильщик

JUG Ru Group

Федор Бобин

VK

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


JVM

Как работает виртуальная машина, которой мы все постоянно пользуемся?

OW2 ASM и JEP 457: Class-File API

Сергей Владимиров

Яндекс

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

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


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

Олег Естехин

Yandex Cloud

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

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


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

Николай Иготти

РИИ

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


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

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

Сбер

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

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


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

Александр Ланцов

Мир Plat.Form

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

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

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


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

Виталий Худобахшов

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

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


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

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

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

Хоум Банк

Александр Нозик

МФТИ

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

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

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


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

Александр Эйдлин

Сбер

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

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


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

Илья Кучмин

Amplicode

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

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


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

Андрей Зарубин

Росбанк

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


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

Пётр Сальников

поле.рф

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

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


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

Никита Сахарин

Сбер

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

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


Хранилище

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

Михаил Поливаха

Сбер

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

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


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

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

Почта Банк

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

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

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

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


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

Илья Сазонов

Всегда.Да

Федор Сазонов

Сбер

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


Spring

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

Рустам Курамшин

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

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


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

Евгений Зубенко

Сбер

Максим Шестаков

Сбер

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

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


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

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

Газпромбанк

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

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


Kotlin

Gradle DSL изнутри

Александр Белов

Сбер

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

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


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

Иван Пономарев

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


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

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

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

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

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


Архитектура

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

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

Подкаст Javaswag

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

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


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

Никита Рьянов

Тинькофф

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

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


От партнеров

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

Александр Дроздов

Axiom JDK

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


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

Сергей Синдеев

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

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


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

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


Заключение

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

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

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

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

Комментарии (4)


  1. tbl
    28.03.2024 19:33

    Хм, а почему известных спикеров не зовете, как российских, так и европейских, которые собирали полные залы? Я бы с удовольствием послушал Алексея Шипилева, Тагира Валеева, Андрея Паньгина, Баруха Садогурского, Volker Simonis, Carlos Sanchez.

    Да и вообще очень странно видеть эту конфу без единого приглашенного зарубежного спикера.

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


    1. fshp
      28.03.2024 19:33
      +8


    1. phillennium
      28.03.2024 19:33
      +6

      Не понимаю точно, вы про спикеров серьёзно или саркастически, отвечу как на серьёзное:

      — как несложно заметить, в последние два года зарубежных спикеров стало очень мало на всех российских конференциях, а не только этой (возможно, что-то произошло)
      — а с тезисом «люди пересказывают вычитанное» не согласен: тут больше не «хотим применить на проде», а «уже применяем» (вроде «Как мы построили самобалансирующийся мониторинг»), так что не просто чтение документации с выражением


    1. PROgrammer_JARvis
      28.03.2024 19:33
      +1

      Давайте перескажем вам, как мы вычитали, что в свежих JEP появилось, и как мы хотим это применить на проде

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