🌱 Некоторые детали реализации Slice Pagination в Spring Data JPA
Spring Data JPA предлагает два подхода к пагинации: Page и Slice. В отличие от
На этот вопрос ответил наш эксперт Михаил Поливаха:
Мы уже как-то писали о том, что в Spring Data есть 2 способа вернуть данные в постраничном виде -
Однако, несмотря на это,
То есть, как минимум,
Чтобы реализовать это, Spring Data JPA, например, делает очень простую вещь:
То есть, из БД запрашивается не
Вот так вот оно работает 😉
Spring Data JPA предлагает два подхода к пагинации: Page и Slice. В отличие от
Page, Slice не знает общего количества записей, но всё равно умеет определять, есть ли следующая страница. Как это возможно без COUNT-запроса? На этот вопрос ответил наш эксперт Михаил Поливаха:
Мы уже как-то писали о том, что в Spring Data есть 2 способа вернуть данные в постраничном виде -
Page и Slice. Разница довольно простая - Slice не знает общий размер датасета, который удовлетворяет запросу, а Page знает. Достигается это знание отправкой ещё одного COUNT-запроса в БД.Однако, несмотря на это,
Slice способен ответить на вопрос, есть ли следующая страничка данных:
public interface Slice<T> extends Streamable<T> {
/**
* Returns if there is a next {@link Slice}.
*
* @return if there is a next {@link Slice}.
*/
boolean hasNext();
}
То есть, как минимум,
Slice должен понимать, следующая страничка с данными присутствует, при этом не делая "COUNT".Чтобы реализовать это, Spring Data JPA, например, делает очень простую вещь:
int pageSize = 0;
if (pageable.isPaged()) {
pageSize = pageable.getPageSize();
createQuery.setMaxResults(pageSize + 1);
}
List<Object> resultList = createQuery.getResultList();
boolean hasNext = pageable.isPaged() && resultList.size() > pageSize
То есть, из БД запрашивается не
pageSize, а pageSize + 1, то есть чуть-чуть больше. Ну и дальше простое сравнение - если нашли pageSize, то странички дальше точно нет, а если нашли pageSize + 1, то страничка дальше точно есть (хотя может и меньшего размера).Вот так вот оно работает 😉
🔥63👌12❤7👎2
Media is too big
VIEW IN TELEGRAM
💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20😁8❤5👎1
🌱 Spring Boot наконец получил нативную поддержку gRPC
Забудьте о сторонних стартерах и костылях — Spring gRPC 1.0 GA уже здесь. Теперь можно строить высокопроизводительные RPC-сервисы с Protocol Buffers прямо из коробки, без плясок с бубном.
В новом переводе от команды Spring АйО рассмотрим пошаговую миграцию со старых решений, генерацию кода из .proto, и сравнение с тем, как это работает в Quarkus.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/978418/
Забудьте о сторонних стартерах и костылях — Spring gRPC 1.0 GA уже здесь. Теперь можно строить высокопроизводительные RPC-сервисы с Protocol Buffers прямо из коробки, без плясок с бубном.
В новом переводе от команды Spring АйО рассмотрим пошаговую миграцию со старых решений, генерацию кода из .proto, и сравнение с тем, как это работает в Quarkus.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/978418/
🔥64❤18👍16⚡2🤯1
Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!
– Обнаружение взаимоблокировок на JVM с помощью Fray
– Новая usability фича в IntelliJ IDEA!
– Изменения цен на GitHub Actions
– Некоторые детали реализации Slice Pagination в Spring Data JPA
– AI-агенты портят разработчиков, JVM ничего не гарантирует, верните фишинг | Spring АйО Подкаст №45
– Spring Boot наконец получил нативную поддержку gRPC
– Amplicode: Spring Data JDBC — идеальная Data для вашего приложения
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤7🔥5
Подготовили материал о том, почему «быстрый запрос в MongoDB» — это индексы, форма запроса, проекции,
explain(), профайлер и наблюдаемость в Java/Spring Boot. Разбираем, как отличать
IXSCAN от COLLSCAN, где чаще всего прячутся антипаттерны (skip-пагинация, тяжёлые $regex/$nin, findAll), и как выстроить измеримый цикл оптимизаций от Atlas/Compass до Micrometer.📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/979440/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍8⚡4❤1
Forwarded from Amplicode
Запускаем цикл видео про разработку телеграм-бота на Spring!
В первом выпуске — база, на котором строится весь сервис.
В следующих частях покажем, как интегрировали в бота Spring AI и как разворачивали всё это дело.
Ну и конечно — код открыт и лежит на GitHub. Забирайте, изучайте, экспериментируйте!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥15❤6⚡4😁2
Parallel streams — это не «бесплатный» прирост производительности, а дорогая оптимизация.
🟣 Любое распараллеливание добавляет накладные расходы: разбиение данных, управление задачами через fork-join, синхронизацию и объединение результатов. Если операция над элементом дешёвая или данных недостаточно много, этот оверхед полностью съедает потенциальный выигрыш — и последовательный стрим оказывается быстрее.
🟣 Вторая причина — ограничения самой задачи. Многие вычисления по природе последовательны или содержат существенную последовательную часть, которую нельзя распараллелить. Закон Амдала жёстко ограничивает максимальный speedup: даже небольшой последовательный участок ставит потолок ускорению, независимо от количества ядер. В streams эта доля часто больше, чем кажется.
🟣 Наконец, упор часто происходит не в CPU, а в память. Параллельные стримы хорошо работают на больших массивах, но быстро деградируют на графах, списках и указательных структурах. В таких случаях потоки не ускоряют вычисления, а просто параллельно ждут данные из памяти.
Подробнее в новом переводе статьи от Брайана Гоетца – одного из ключевых архитекторов экосистемы Java и главного авторитета по конкурентному и параллельному программированию в JVM.
@spring_aio
Подробнее в новом переводе статьи от Брайана Гоетца – одного из ключевых архитекторов экосистемы Java и главного авторитета по конкурентному и параллельному программированию в JVM.
@spring_aio
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤25👍23🔥11⚡2
🚀 Тред-дампы и Project Loom (виртуальные потоки)
С появлением виртуальных потоков в Java благодаря Project Loom, параллельное программирование стало проще, а производительность — выше.
Однако за этой простотой кроются новые вызовы для инструментов отладки и анализа. Как читать тред-дампы, если их теперь тысячи — или миллионы? Какие средства реально помогают найти взаимные блокировки и аномалии в асинхронном коде? Рассмотрим в новом переводе от команды Spring АйО.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/980566/
С появлением виртуальных потоков в Java благодаря Project Loom, параллельное программирование стало проще, а производительность — выше.
Однако за этой простотой кроются новые вызовы для инструментов отладки и анализа. Как читать тред-дампы, если их теперь тысячи — или миллионы? Какие средства реально помогают найти взаимные блокировки и аномалии в асинхронном коде? Рассмотрим в новом переводе от команды Spring АйО.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/980566/
🔥20👍11❤7
🥷 Hidden классы в Java. Что скрывают Lambda выражения
С переходом Java на более безопасные и стандартизированные подходы к динамической генерации классов, скрытые (hidden) классы стали ключевым механизмом замены устаревшего
Они решают проблемы доступности, управления жизненным циклом и контроля доступа, особенно актуальные для разработчиков фреймворков и языков на JVM. Хотя скрытые классы пока не полностью заменяют функциональность
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/980928/
С переходом Java на более безопасные и стандартизированные подходы к динамической генерации классов, скрытые (hidden) классы стали ключевым механизмом замены устаревшего
Unsafe::defineAnonymousClass. Они решают проблемы доступности, управления жизненным циклом и контроля доступа, особенно актуальные для разработчиков фреймворков и языков на JVM. Хотя скрытые классы пока не полностью заменяют функциональность
Unsafe, они лежат в основе ряда важных механизмов, такие как, например, реализация лямбд в JDK.📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/980928/
🔥17👍9❤4
🛠 Михаил Поливаха. Garbage Collection. Где мы сейчас
Наш эксперт Михаил Поливаха выступил с докладом про сборку мусора:
😉 СМОТРЕТЬ НА YOUTUBE
Наш эксперт Михаил Поливаха выступил с докладом про сборку мусора:
Сборка мусора является довольно сложным механизмом. В большинстве managed языков runtime скрывает от нас детали дислокации памяти. С другой стороны, выбор определённого сборщика мусора может существенно улучшить производительность.
Поговорим о том, какие алгоритмы сборки мусора бывают, какие бывают концептуальные трейд оффы при их использовании, и какой алгоритм вам может подойти больше всего.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33👍9❤5⚡3
Media is too big
VIEW IN TELEGRAM
💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥11❤7🤩1
Forwarded from Amplicode
⚡️ Spring MCP: набор инструментов для AI-помощника от Amplicode
Эта статья дополняет предыдущую. Там мы зафиксировали проблемы. Здесь разберем, что именно мы сделали со стороны Amplicode, чтобы агент начал работать как опытный software engineer: опираясь на структуру проекта, детерминированные генераторы и понятные высокоуровневые операции.
Если коротко, в первой статье было несколько основных болей:
• LLM часто обучены на слегка устаревшем мире, и это вылезает в мелочах (и не только)
• Галлюцинации и нехватка контекста идут рука об руку: «кажется, в этой библиотеке должен быть такой метод» и пошло-поехало
• Переизбыток контекста тоже зло: агент прочитал половину репозитория, потратил деньги, запутался, а потом еще и забыл начало чата
• Типичный агентный workflow: «сгенерил простыню кода, оно не компилится, давай чинить, ой теперь сломалось другое»
И на этом фоне появляется логичный вопрос:
Собственно, Spring MCP от Amplicode про это.
📚 Читать на Хабр: https://habr.com/ru/companies/haulmont/articles/976872/
Эта статья дополняет предыдущую. Там мы зафиксировали проблемы. Здесь разберем, что именно мы сделали со стороны Amplicode, чтобы агент начал работать как опытный software engineer: опираясь на структуру проекта, детерминированные генераторы и понятные высокоуровневые операции.
Если коротко, в первой статье было несколько основных болей:
• LLM часто обучены на слегка устаревшем мире, и это вылезает в мелочах (и не только)
• Галлюцинации и нехватка контекста идут рука об руку: «кажется, в этой библиотеке должен быть такой метод» и пошло-поехало
• Переизбыток контекста тоже зло: агент прочитал половину репозитория, потратил деньги, запутался, а потом еще и забыл начало чата
• Типичный агентный workflow: «сгенерил простыню кода, оно не компилится, давай чинить, ой теперь сломалось другое»
И на этом фоне появляется логичный вопрос:
А можно сделать так, чтобы агент работал не с сырыми файлами, а с моделью проекта и сущностями фреймворка? Чтобы он не гадал, где DTO, как принято именовать контроллеры и какие миграции у вас используются?
Собственно, Spring MCP от Amplicode про это.
📚 Читать на Хабр: https://habr.com/ru/companies/haulmont/articles/976872/
Хабр
Spring MCP: набор инструментов для AI-помощника от Amplicode
Эта статья дополняет предыдущую . Там мы зафиксировали проблемы. Здесь разберем, что именно мы сделали со стороны Amplicode, чтобы агент начал работать как опытный software engineer: опираясь на...
👍20🔥12❤3👎1
🍃 Дорогие друзья и участники сообщества Spring АйО!
Уходящий год еще раз показал, какую силу имеет профессиональное сообщество. Сегодня Spring АйО — это уже почти 10000 разработчиков, объединенных интересом к Spring, технологиям, обмену опыта и живому диалогу. Ваша вовлеченность, вопросы, комментарии и поддержка делают это пространство по-настоящему ценным.
В 2026 году нас ждут новые идеи, форматы и темы. Мы планируем еще больше полезных материалов, практических разборов и обсуждений того, что действительно важно для Spring-разработчиков.
Спасибо, что остаетесь с нами и разделяете этот путь. С новым годом, друзья!🎄✨
Уходящий год еще раз показал, какую силу имеет профессиональное сообщество. Сегодня Spring АйО — это уже почти 10000 разработчиков, объединенных интересом к Spring, технологиям, обмену опыта и живому диалогу. Ваша вовлеченность, вопросы, комментарии и поддержка делают это пространство по-настоящему ценным.
В 2026 году нас ждут новые идеи, форматы и темы. Мы планируем еще больше полезных материалов, практических разборов и обсуждений того, что действительно важно для Spring-разработчиков.
Спасибо, что остаетесь с нами и разделяете этот путь. С новым годом, друзья!🎄✨
🔥103❤35🤩10👎1
🎙 Второй выпуск подкаста «За ширмой IT» уже на канале!
Друзья, эксперты Евгений Сулейманов и Михаил Поливаха поговорили о том, что действительно важно для инженера сегодня и завтра:
— зачем разработчику на самом деле нужен open source
— почему спикерство — это не только про сцену и лайки
— что происходит с рынком и при чем тут AI
— как выбирать технологии и выстраивать обучение, если не хочется бегать за каждым трендом
😉 СМОТРЕТЬ НА YOUTUBE
Приятного просмотра и, как всегда, будем рады вашим мыслям в комментариях 👇
Друзья, эксперты Евгений Сулейманов и Михаил Поливаха поговорили о том, что действительно важно для инженера сегодня и завтра:
— зачем разработчику на самом деле нужен open source
— почему спикерство — это не только про сцену и лайки
— что происходит с рынком и при чем тут AI
— как выбирать технологии и выстраивать обучение, если не хочется бегать за каждым трендом
Приятного просмотра и, как всегда, будем рады вашим мыслям в комментариях 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤9🔥4👎3