Stream Gathering with a Different Distinct Function
Статья обсуждает использование Gatherers в Java для определения собственной функции distinct. Автор предлагает альтернативный подход к стандартному методу
https://www.javaspecialists.eu/archive/Issue326-Stream-Gathering-with-a-Different-Distinct-Function.html
👉@BookJava
Статья обсуждает использование Gatherers в Java для определения собственной функции distinct. Автор предлагает альтернативный подход к стандартному методу
distinct()
, который позволяет более гибко определять уникальность элементов в потоке, что иногда может быть очень полезно.
import java.util.*;
import java.util.function.*;
import java.util.stream.*;
public class DistinctifyGatherer {
public static <T> Gatherer<T, ?, T> of(
ToIntFunction<T> hashCode,
BiPredicate<T, T> equals,
BinaryOperator<T> merger) {
class Key {
private final T t;
public Key(T t) {this.t = t;}
public int hashCode() {
return hashCode.applyAsInt(t);
}
public boolean equals(Object obj) {
return obj instanceof Key that
&& equals.test(this.t, that.t);
}
}
return Gatherer.<T, Map<Key, Key>, T>ofSequential(
LinkedHashMap::new,
(state, element, _) -> {
var key = new Key(element);
var existing = state.get(key);
if (existing != null) {
key = new Key(merger.apply(
existing.t, key.t));
}
state.put(key, key);
return true;
},
(keys, downstream) -> keys.values().stream()
.takeWhile(_ -> !downstream.isRejecting())
.map(key -> key.t)
.forEach(downstream::push)
);
}
}
https://www.javaspecialists.eu/archive/Issue326-Stream-Gathering-with-a-Different-Distinct-Function.html
👉@BookJava
👍2
Media is too big
VIEW IN TELEGRAM
All New Java Language Features Since Java 21
Обзорный рассказ обо всех новых фичах с Java 21 от развития pattern matching и работы с запечатанными типами до упрощения написания main-методов и поддержки Markdown в Javadoc. Будет интересно тем, кто хочет быть в курсе последних изменений в Java, понять, как они влияют на читаемость, производительность и организацию кода, и заранее подготовиться к переходу на новые версии.
источник
👉@BookJava
Обзорный рассказ обо всех новых фичах с Java 21 от развития pattern matching и работы с запечатанными типами до упрощения написания main-методов и поддержки Markdown в Javadoc. Будет интересно тем, кто хочет быть в курсе последних изменений в Java, понять, как они влияют на читаемость, производительность и организацию кода, и заранее подготовиться к переходу на новые версии.
источник
👉@BookJava
👍3❤1
⁉️ Spark-запросы тормозят? Пора разобраться, как сделать их в разы быстрее
На открытом вебинаре мы разберём проверенные техники оптимизации, которые используют ведущие дата-инженеры. Покажем, как находить узкие места, ускорять join-операции и выжимать максимум из ресурсов кластера.
Вы получите конкретные приёмы — от оптимального партиционирования данных и управления кэшированием до выбора лучших форматов хранения. Всё на реальных примерах.
➡️ Присоединяйтесь 17 сентября в 20:00 МСК. Урок проходит в преддверии старта курса «Spark Developer», все участники получат скидку на обучение. Регистрация открыта: https://vk.cc/cPreGV
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
На открытом вебинаре мы разберём проверенные техники оптимизации, которые используют ведущие дата-инженеры. Покажем, как находить узкие места, ускорять join-операции и выжимать максимум из ресурсов кластера.
Вы получите конкретные приёмы — от оптимального партиционирования данных и управления кэшированием до выбора лучших форматов хранения. Всё на реальных примерах.
➡️ Присоединяйтесь 17 сентября в 20:00 МСК. Урок проходит в преддверии старта курса «Spark Developer», все участники получат скидку на обучение. Регистрация открыта: https://vk.cc/cPreGV
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🚀 Подборка Telegram каналов для программистов
Системное администрирование, DevOps 📌
https://t.me/bash_srv Bash Советы
https://t.me/win_sysadmin Системный Администратор Windows
https://t.me/sysadmin_girl Девочка Сисадмин
https://t.me/srv_admin_linux Админские угодья
https://t.me/linux_srv Типичный Сисадмин
https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://t.me/linux_odmin Linux: Системный администратор
https://t.me/devops_star DevOps Star (Звезда Девопса)
https://t.me/i_linux Системный администратор
https://t.me/linuxchmod Linux
https://t.me/sys_adminos Системный Администратор
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux
1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://t.me/DevLab1C 1С:Предприятие 8
https://t.me/razrab_1C 1C Разработчик
https://t.me/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://t.me/rabota1C_rus Вакансии для программистов 1С
Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://t.me/pythonofff Python академия.
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://t.me/bigdata_1 Big Data, Machine Learning
Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT
https://t.me/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста
https://t.me/lifeproger Жизнь программиста. Авторский канал.
QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.me/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
Математика 📌
https://t.me/Pomatematike Канал по математике
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике
https://t.me/matgeoru Математика | Геометрия | Логика
Excel лайфхак📌
https://t.me/Excel_lifehack
https://t.me/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
Системное администрирование, DevOps 📌
https://t.me/bash_srv Bash Советы
https://t.me/win_sysadmin Системный Администратор Windows
https://t.me/sysadmin_girl Девочка Сисадмин
https://t.me/srv_admin_linux Админские угодья
https://t.me/linux_srv Типичный Сисадмин
https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://t.me/linux_odmin Linux: Системный администратор
https://t.me/devops_star DevOps Star (Звезда Девопса)
https://t.me/i_linux Системный администратор
https://t.me/linuxchmod Linux
https://t.me/sys_adminos Системный Администратор
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux
1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://t.me/DevLab1C 1С:Предприятие 8
https://t.me/razrab_1C 1C Разработчик
https://t.me/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://t.me/rabota1C_rus Вакансии для программистов 1С
Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://t.me/pythonofff Python академия.
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://t.me/bigdata_1 Big Data, Machine Learning
Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT
https://t.me/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста
https://t.me/lifeproger Жизнь программиста. Авторский канал.
QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.me/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_2 Хакер Free
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
Математика 📌
https://t.me/Pomatematike Канал по математике
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике
https://t.me/matgeoru Математика | Геометрия | Логика
Excel лайфхак📌
https://t.me/Excel_lifehack
https://t.me/mir_teh Мир технологий (Technology World)
Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
GC-Agnostic Load Barriers for Ahead-of-Time Compilation
Автор делится результатами своей магистерской работы, выполненной совместно с командой HotSpot GC и с помощью компилятора Oracle, где исследуется идея GC-агностичных барьеров загрузки.
Он показывает, как Project Leyden может сократить время прогрева приложений с помощью AOT-компиляции, какие проблемы создают GC-барьеры и как их можно унифицировать через патчинг инструкций на уровне Assembly. Материал будет интересен тем, кто хочет глубже изучить внутреннее устройство JVM, работу сборщиков мусора и компромиссы между производительностью и гибкостью рантайма.
https://inside.java/2025/08/27/thesis-gc-agnostic-load-barriers/
👉@BookJava
Автор делится результатами своей магистерской работы, выполненной совместно с командой HotSpot GC и с помощью компилятора Oracle, где исследуется идея GC-агностичных барьеров загрузки.
Он показывает, как Project Leyden может сократить время прогрева приложений с помощью AOT-компиляции, какие проблемы создают GC-барьеры и как их можно унифицировать через патчинг инструкций на уровне Assembly. Материал будет интересен тем, кто хочет глубже изучить внутреннее устройство JVM, работу сборщиков мусора и компромиссы между производительностью и гибкостью рантайма.
https://inside.java/2025/08/27/thesis-gc-agnostic-load-barriers/
👉@BookJava
👍2
Taking Java Arrays to Another Dimension
Статья рассматривает подходы к хранению массивов в памяти в Java, акцентируя внимание на их внутреннем устройстве и оптимизации. Автор рассказывает о том, как массивы организуются в памяти, их ограничениях, а также предлагает альтернативные подходы для повышения производительности и гибкости работы с многомерными структурами данных.
https://foojay.io/today/taking-java-arrays-to-another-dimension/
👉@BookJava
Статья рассматривает подходы к хранению массивов в памяти в Java, акцентируя внимание на их внутреннем устройстве и оптимизации. Автор рассказывает о том, как массивы организуются в памяти, их ограничениях, а также предлагает альтернативные подходы для повышения производительности и гибкости работы с многомерными структурами данных.
https://foojay.io/today/taking-java-arrays-to-another-dimension/
👉@BookJava
👍1
⚡️ Отказоустойчивость и масштабируемость микросервисов
📅 17 сентября | 20:00 мск | бесплатно
Хотите, чтобы ваши микросервисы работали стабильно под нагрузкой? На вебинаре разберём:
• Паттерны отказоустойчивости: Circuit Breaker, Bulkhead, Timeouts
• Паттерны масштабируемости: Auto-scaling, Load Balancing
• Как защитить сервисы от перегрузок и сбоев
💡 Полезно для:
• Разработчиков и архитекторов микросервисов
• DevOps-инженеров
• Руководителей проектов
✅ После вебинара вы сможете:
• Проектировать отказоустойчивую архитектуру
• Настраивать автоскейлинг и балансировку
• Повышать стабильность и производительность сервисов
👉 Регистрируйтесь:
https://vk.cc/cPwgKT
Занятие приурочено к старту курса "Software Architect", обучение на котором позволит освоить компетенции архитектора по моделированию и построению отказоустойчивых, масштабируемых информационных систем.
📅 17 сентября | 20:00 мск | бесплатно
Хотите, чтобы ваши микросервисы работали стабильно под нагрузкой? На вебинаре разберём:
• Паттерны отказоустойчивости: Circuit Breaker, Bulkhead, Timeouts
• Паттерны масштабируемости: Auto-scaling, Load Balancing
• Как защитить сервисы от перегрузок и сбоев
💡 Полезно для:
• Разработчиков и архитекторов микросервисов
• DevOps-инженеров
• Руководителей проектов
✅ После вебинара вы сможете:
• Проектировать отказоустойчивую архитектуру
• Настраивать автоскейлинг и балансировку
• Повышать стабильность и производительность сервисов
👉 Регистрируйтесь:
https://vk.cc/cPwgKT
Занятие приурочено к старту курса "Software Architect", обучение на котором позволит освоить компетенции архитектора по моделированию и построению отказоустойчивых, масштабируемых информационных систем.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Debugging Transactions? Let Spring Debugger Do the Heavy Lifting
Обзор нововведений плагина Spring Debugger: теперь при дебаге приложений можно увидеть, контекст какой транзакции сейчас используется. Помимо этого, для JPA-сущностей в дебаггере можно будет увидеть текущее состояние.
https://blog.jetbrains.com/idea/2025/08/debugging-transactions-let-spring-debugger-do-the-heavy-lifting/
👉@BookJava
Обзор нововведений плагина Spring Debugger: теперь при дебаге приложений можно увидеть, контекст какой транзакции сейчас используется. Помимо этого, для JPA-сущностей в дебаггере можно будет увидеть текущее состояние.
https://blog.jetbrains.com/idea/2025/08/debugging-transactions-let-spring-debugger-do-the-heavy-lifting/
👉@BookJava
👍8🔥1
Thread.sleep(0) is not for free.
Небольшая заметка о том, что
https://mlangc.github.io/java/performance/2025/08/14/thread-sleep0-is-not-for-free.html
👉@BookJava
Небольшая заметка о том, что
Thread.sleep(0)
не бесплатный. Связано это с тем, что при таком вызове все еще вызывается нативный метод Thread.sleepNanos(0)
. А за этим методом идет выполнение метода операционной системы, и, хоть он и проводит для такого случая быстрые проверки, они замедляют систему. Поэтому стоит избегать кода:
int delay = allGood ? 0 : waitShorty;
Thread.sleep(delay);
https://mlangc.github.io/java/performance/2025/08/14/thread-sleep0-is-not-for-free.html
👉@BookJava
👍2
📕 Архитектура и написание backend тестов для разработчиков Java, QA инженеров, автоматизаторов, QA Lead и DevOps-специалистов
На открытом уроке 17 сентября в 20:00 мск мы погрузимся в тонкости построения архитектуры надежных и понятных backend-тестов:
📗 На вебинаре разберём:
1. Использование Java и RestAssured для API-тестирования, приёмы структурирования и переиспользования кода.
2. Архитектурные принципы построения надёжных тестов.
📘 В результате на практике освоите построение надежных backend-тестов, научитесь писать чистый, гибкий и поддерживаемый код на Java с RestAssured и получите архитектурные шаблоны и рабочие примеры для своих проектов.
👉 Регистрация и подробности о курсе Java QA Engineer. Professional: https://vk.cc/cPz9xM
Все участники открытого урока получат скидку на курс "Java QA Engineer. Professional"
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
На открытом уроке 17 сентября в 20:00 мск мы погрузимся в тонкости построения архитектуры надежных и понятных backend-тестов:
📗 На вебинаре разберём:
1. Использование Java и RestAssured для API-тестирования, приёмы структурирования и переиспользования кода.
2. Архитектурные принципы построения надёжных тестов.
📘 В результате на практике освоите построение надежных backend-тестов, научитесь писать чистый, гибкий и поддерживаемый код на Java с RestAssured и получите архитектурные шаблоны и рабочие примеры для своих проектов.
👉 Регистрация и подробности о курсе Java QA Engineer. Professional: https://vk.cc/cPz9xM
Все участники открытого урока получат скидку на курс "Java QA Engineer. Professional"
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤1🔥1
🔥Oracle Releases Java 25
Основные фичи:
JEP 520: Метод-трейсинг и тайминг в JFR — замер времени конкретных методов без кода и агентов
В Java 25 JFR (Java Flight Recorder) позволяет точно отслеживать выполнение конкретных методов — без изменения исходников, без логирования и без сторонних Java-агентов.
Зачем это нужно?
Допустим, приложение долго стартует или внезапно теряет соединения с БД. Раньше приходилось:
🔹Логировать вручную
🔹Добавлять JFR-события в код
🔹Подключать агент через -javaagent
🔹Пытаться что-то угадывать с sampling-профайлером
🔹Использовать Spring AOP и
https://www.oracle.com/news/announcement/oracle-releases-java-25-2025-09-16/
👉@BookJava
Основные фичи:
JEP 520: Метод-трейсинг и тайминг в JFR — замер времени конкретных методов без кода и агентов
В Java 25 JFR (Java Flight Recorder) позволяет точно отслеживать выполнение конкретных методов — без изменения исходников, без логирования и без сторонних Java-агентов.
Зачем это нужно?
Допустим, приложение долго стартует или внезапно теряет соединения с БД. Раньше приходилось:
🔹Логировать вручную
🔹Добавлять JFR-события в код
🔹Подключать агент через -javaagent
🔹Пытаться что-то угадывать с sampling-профайлером
🔹Использовать Spring AOP и
@Around
-аспектыhttps://www.oracle.com/news/announcement/oracle-releases-java-25-2025-09-16/
👉@BookJava
👍6
Java varargs
Java varargs (variable arguments) — это механизм, предоставляемый Java, который позволяет методу принимать переменное количество аргументов одного типа. Он позволяет передавать любое количество аргументов заданного типа в метод, без явного указания массива аргументов.
Для объявления переменного количества аргументов в Java используется троеточие (...) после типа данных аргумента в определении метода.
👉@BookJava
Java varargs (variable arguments) — это механизм, предоставляемый Java, который позволяет методу принимать переменное количество аргументов одного типа. Он позволяет передавать любое количество аргументов заданного типа в метод, без явного указания массива аргументов.
Для объявления переменного количества аргументов в Java используется троеточие (...) после типа данных аргумента в определении метода.
👉@BookJava
👍3🔥2
С выходом
Теперь можно видеть версии эндпоинтов прямо в Structure и получать подсказки, если версионирование не настроено.
👉@BookJava
@springboot
4 в GA, @intellijidea
добавляет полноценную поддержку версионирования API в Spring MVC.Теперь можно видеть версии эндпоинтов прямо в Structure и получать подсказки, если версионирование не настроено.
👉@BookJava
👍8
🏗 Курс “Software Architect” от OTUS — набор заканчивается. Успейте пройти вступительный тест и занять место в группе!
Почему стоит присоединиться прямо сейчас:
• 100% практики на реальных проектах
• Проектирование гибких архитектур
• Микросервисы, интеграции, Big Data
• Современные паттерны: CQRS, Event Sourcing и др.
💡 Кому подойдёт:
• Разработчикам, готовым выйти на новый уровень
• Архитекторам, углубляющим экспертизу
• Тимлидам и менеджерам
✅ После курса вы сможете:
• Проектировать масштабируемые архитектуры
• Оптимизировать взаимодействие сервисов
• Повышать качество и устойчивость систем
Места в группе ограничены — пройдите вступительное тестирование сегодня, чтобы успеть!
https://vk.cc/cPBg9X
Почему стоит присоединиться прямо сейчас:
• 100% практики на реальных проектах
• Проектирование гибких архитектур
• Микросервисы, интеграции, Big Data
• Современные паттерны: CQRS, Event Sourcing и др.
💡 Кому подойдёт:
• Разработчикам, готовым выйти на новый уровень
• Архитекторам, углубляющим экспертизу
• Тимлидам и менеджерам
✅ После курса вы сможете:
• Проектировать масштабируемые архитектуры
• Оптимизировать взаимодействие сервисов
• Повышать качество и устойчивость систем
Места в группе ограничены — пройдите вступительное тестирование сегодня, чтобы успеть!
https://vk.cc/cPBg9X
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍1
Ускорение Spring REST API на 200%
Spring Framework уже многие годы является базой, на которой разрабатывается подавляющее большинство серверных приложений на Java. Он предоставляет абстракции над множеством различных технологий, в том числе и абстракции для разработки REST API. Все эти абстракции имеют свою цену в плане производительности, и иногда эта цена является очень большой, если речь идёт о высоконагруженном приложении. В этой небольшой статье я покажу, как можно избавиться от ненужных накладных расходов и значительно увеличить производительность вашего API.
https://habr.com/ru/companies/maxilect/articles/896240/
👉@BookJava
Spring Framework уже многие годы является базой, на которой разрабатывается подавляющее большинство серверных приложений на Java. Он предоставляет абстракции над множеством различных технологий, в том числе и абстракции для разработки REST API. Все эти абстракции имеют свою цену в плане производительности, и иногда эта цена является очень большой, если речь идёт о высоконагруженном приложении. В этой небольшой статье я покажу, как можно избавиться от ненужных накладных расходов и значительно увеличить производительность вашего API.
https://habr.com/ru/companies/maxilect/articles/896240/
👉@BookJava
👍2
Библиотека для кэширования Caffeine: анализ кода
То и дело, прожигая время за чтением reddit, я натыкаюсь на очередной пост, в котором упоминается метод S3 FIFO и говорится, что он лучше LRU (вытеснение реже всего используемых значений) — потому что даёт более низкий процент промахов кэша. Видные компании, в частности, RedPandas, Rising Wave и Cloudflare уже внедрили S3 FIFO у себя на различных мощностях, что только подогрело мой интерес к нему. Кэши — чертовски интересная тема, а по работе мне приходится сильно полагаться на работу с кэшами при обслуживании нескольких сервисов. Так что я был уверен, что рано или поздно мне потребуется протестировать S3 FIFO или, как минимум, удостовериться, что я понимаю ключевые идеи, заложенные в этой технологии.
Правда, казалось, что рановато с головой погружаться в изучение нового подхода к кэшированию, пока ещё досконально не разобрался в аналогичной системе, с которой приходится иметь дело на работе сейчас. У нас в команде для работы с кэшированием используется библиотека Caffeine, и, положа руку на сердце, я не ориентировался в её внутреннем устройстве, не пытался проверить, можно ли в ней что-нибудь подкрутить, и есть ли в ней параметры, поддающиеся тонкой настройке. В этой статье я попробую законспектировать мои изыскания и рассказать, как на собственном опыте разбирался во внутреннем устройстве библиотеки Caffeine.
Все желающие приглашаются в путешествие с разбором сложностей одной из наиболее востребованных систем кэширования, используемых в мире. Будь вы бывалый инженер или просто новичок, интересующийся продвинутыми механизмами кэширования, это исследование прольёт вам свет на многие вопросы и подведёт к важным практическим выводам. Поехали!
https://habr.com/ru/articles/896266/
original https://adriacabeza.github.io/2024/07/12/caffeine-cache.html
Мы в MAX
👉@BookJava
То и дело, прожигая время за чтением reddit, я натыкаюсь на очередной пост, в котором упоминается метод S3 FIFO и говорится, что он лучше LRU (вытеснение реже всего используемых значений) — потому что даёт более низкий процент промахов кэша. Видные компании, в частности, RedPandas, Rising Wave и Cloudflare уже внедрили S3 FIFO у себя на различных мощностях, что только подогрело мой интерес к нему. Кэши — чертовски интересная тема, а по работе мне приходится сильно полагаться на работу с кэшами при обслуживании нескольких сервисов. Так что я был уверен, что рано или поздно мне потребуется протестировать S3 FIFO или, как минимум, удостовериться, что я понимаю ключевые идеи, заложенные в этой технологии.
Правда, казалось, что рановато с головой погружаться в изучение нового подхода к кэшированию, пока ещё досконально не разобрался в аналогичной системе, с которой приходится иметь дело на работе сейчас. У нас в команде для работы с кэшированием используется библиотека Caffeine, и, положа руку на сердце, я не ориентировался в её внутреннем устройстве, не пытался проверить, можно ли в ней что-нибудь подкрутить, и есть ли в ней параметры, поддающиеся тонкой настройке. В этой статье я попробую законспектировать мои изыскания и рассказать, как на собственном опыте разбирался во внутреннем устройстве библиотеки Caffeine.
Все желающие приглашаются в путешествие с разбором сложностей одной из наиболее востребованных систем кэширования, используемых в мире. Будь вы бывалый инженер или просто новичок, интересующийся продвинутыми механизмами кэширования, это исследование прольёт вам свет на многие вопросы и подведёт к важным практическим выводам. Поехали!
https://habr.com/ru/articles/896266/
original https://adriacabeza.github.io/2024/07/12/caffeine-cache.html
Мы в MAX
👉@BookJava
👍2
Быстрый поиск подстроки: Кнут–Моррис–Пратт на практике!
Разберём алгоритм Кнута–Морриса–Пратта (КМП): почему он работает за линейное время и как «переиспользует» уже найденные совпадения. Покажем, где наивный подход теряет секунды (и деньги), а КМП — нет.
После вебинара вы:
— понимаете префикс-функцию и логику «сдвигов»;
— умеете сравнить наивный поиск и КМП на реальных данных;
— знаете, как внедрить быстрый поиск в проде.
⏰ Урок пройдёт 24 сентября в 20:00 МСК в преддверие старта курса «Алгоритмы и структуры данных». Всем участникам — персональные условия обучения.
👉 Для участия зарегистрируйтесь:
https://vk.cc/cPIpN3
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Разберём алгоритм Кнута–Морриса–Пратта (КМП): почему он работает за линейное время и как «переиспользует» уже найденные совпадения. Покажем, где наивный подход теряет секунды (и деньги), а КМП — нет.
После вебинара вы:
— понимаете префикс-функцию и логику «сдвигов»;
— умеете сравнить наивный поиск и КМП на реальных данных;
— знаете, как внедрить быстрый поиск в проде.
⏰ Урок пройдёт 24 сентября в 20:00 МСК в преддверие старта курса «Алгоритмы и структуры данных». Всем участникам — персональные условия обучения.
👉 Для участия зарегистрируйтесь:
https://vk.cc/cPIpN3
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Media is too big
VIEW IN TELEGRAM
Запускаем WebSocket сервер на базе Jetty, без Spring
Иногда хочется не целый каравай, а просто хлеб с маслом.
Вот и мне понадобился простой java проект с socket-сервером, без необходимости тащить спринг.
00:00 Старт
00:05 Новый проект
01:04 Jetty dependency
01:54 App
02:14 Server
04:18 WebSocketContainer
04:58 @ WebSocket annotations
07:50 DO NOT COPY A CODE! ))
09:12 server.start()
09:56 @ OnWebSocketError ))
11:21 Done
12:04 Like & Subscribe
GitHub
Источник
Мы в MAX
👉@BookJava
Иногда хочется не целый каравай, а просто хлеб с маслом.
Вот и мне понадобился простой java проект с socket-сервером, без необходимости тащить спринг.
00:00 Старт
00:05 Новый проект
01:04 Jetty dependency
01:54 App
02:14 Server
04:18 WebSocketContainer
04:58 @ WebSocket annotations
07:50 DO NOT COPY A CODE! ))
09:12 server.start()
09:56 @ OnWebSocketError ))
11:21 Done
12:04 Like & Subscribe
GitHub
Источник
Мы в MAX
👉@BookJava
👍4
Офер в VK для бэкендеров и ML-щиков — станьте частью команды за выходные.
4–5 октября пройдёт VK Weekend Offer. Всего за 2 дня вы сможете пройти весь путь от знакомства с командами до приглашения на работу: пройти техническое собеседование, встретиться с лидами и получить офер.
Требования для бекэндеров – три года опыта коммерческой разработки, знание Java, Go, Python, C++.
Для ML-щиков – те же три года опыта + знания Classic ML, RecSys, NLP/LLM, CV, Speech.
Читайте подробности на сайте и подавайте заявку до 2 октября!
4–5 октября пройдёт VK Weekend Offer. Всего за 2 дня вы сможете пройти весь путь от знакомства с командами до приглашения на работу: пройти техническое собеседование, встретиться с лидами и получить офер.
Требования для бекэндеров – три года опыта коммерческой разработки, знание Java, Go, Python, C++.
Для ML-щиков – те же три года опыта + знания Classic ML, RecSys, NLP/LLM, CV, Speech.
Читайте подробности на сайте и подавайте заявку до 2 октября!
💩2👍1
О подводных камнях виртуальных потоков в Java
Виртуальные потоки (JEP 425) являются мощным инструментом для построения приложений, которые в теории могут обслуживать десятки тысяч запросов в секунду. Однако это в теории. Практика же может выглядеть совершенно иначе. Данная статья рассказывает о нескольких подводных камнях, из-за которых виртуальные потоки могут не сработать, а сделать даже хуже.
https://habr.com/ru/articles/950204/
Мы в MAX
👉@BookJava
Виртуальные потоки (JEP 425) являются мощным инструментом для построения приложений, которые в теории могут обслуживать десятки тысяч запросов в секунду. Однако это в теории. Практика же может выглядеть совершенно иначе. Данная статья рассказывает о нескольких подводных камнях, из-за которых виртуальные потоки могут не сработать, а сделать даже хуже.
https://habr.com/ru/articles/950204/
Мы в MAX
👉@BookJava
👍1