Зачем используется Serial Version UID? Что если не определить его?
Сериализуемый класс явно или неявно, но всегда имеет
Для совпадающих версий работает мощная поддержка эволюции класса – совместимые изменения, такие как добавление или удаление полей, не приводят к
Неявное значение вычисляется автоматически в рантайме, и включает в себя информацию о имени типа, списке родителей и полей (с точностью до коллизии). По смыслу это похоже на хэш-сумму класса. Соответственно, при любом изменении класса значение изменится, и поддержка эволюции окажется бесполезной.
Всегда лучше явно указывать любое значение
Явное значение устанавливается в переменную
👉
Сериализуемый класс явно или неявно, но всегда имеет
serialVersionUID
. Это число типа long
, которое представляет собой «версию» сериализационной формы класса. Если при сериализации/десериализации значения serialVersionUID
не совпадают – будет выброшено InvalidClassException
.Для совпадающих версий работает мощная поддержка эволюции класса – совместимые изменения, такие как добавление или удаление полей, не приводят к
InvalidClassException
. Неявное значение вычисляется автоматически в рантайме, и включает в себя информацию о имени типа, списке родителей и полей (с точностью до коллизии). По смыслу это похоже на хэш-сумму класса. Соответственно, при любом изменении класса значение изменится, и поддержка эволюции окажется бесполезной.
Всегда лучше явно указывать любое значение
serialVersionUID
, и изменять только в тех редких случаях, когда требуется сломать совместимость с предыдущими версиями. Стандартная утилита JDK serialver
умеет «угадывать» авто-генерированное значение. Она используется чтобы зафиксировать значение для включения поддержки эволюции созданного ранее класса.Явное значение устанавливается в переменную
static final long serialVersionUID
. 👉
Media is too big
VIEW IN TELEGRAM
Разрешаем фронту подписаться на бэкенд. Server Sent Events на Java Spring Boot.
Простой способ избежать постоянного опроса сервера. Событийный способ работы.
источник
👉
Простой способ избежать постоянного опроса сервера. Событийный способ работы.
источник
👉
🎬 Amplicode – конвейер для Spring-приложений прямо в IntelliJ IDEA
На прошлой неделе мы провели митап, который длился 3,5 часа!
Мы понимаем, что усвоить столько информации за раз непросто (если только ты не Илья Кучмин :D ). Поэтому мы выложили запись в высоком качестве и разбили её на плейлист с полной записью мероприятия и отдельными его частями.
Всего получилось 6 докладов:
– История и философия Amplicode (Илья Кучмин)
– Локальное окружение с Docker Compose для Spring Boot (Кирилл Толкачёв)
– Проблемы JPA в Spring PetClinic и способы их решения (Илья и Фёдор Сазоновы)
– Разрабатываем правильный REST API для Spring Boot (Рустам Курамшин)
– Настраиваем Spring Security и Keycloak (Павел Кислов)
– Admin UI с использованием React Admin для Spring Boot (Александр Шустанов)
✔️СМОТРЕТЬ НА YOUTUBE
✔️СМОТРЕТЬ В VK ВИДЕО
✔️СМОТРЕТЬ НА RUTUBE
На прошлой неделе мы провели митап, который длился 3,5 часа!
Мы понимаем, что усвоить столько информации за раз непросто (
Всего получилось 6 докладов:
– История и философия Amplicode (Илья Кучмин)
– Локальное окружение с Docker Compose для Spring Boot (Кирилл Толкачёв)
– Проблемы JPA в Spring PetClinic и способы их решения (Илья и Фёдор Сазоновы)
– Разрабатываем правильный REST API для Spring Boot (Рустам Курамшин)
– Настраиваем Spring Security и Keycloak (Павел Кислов)
– Admin UI с использованием React Admin для Spring Boot (Александр Шустанов)
✔️СМОТРЕТЬ НА YOUTUBE
✔️СМОТРЕТЬ В VK ВИДЕО
✔️СМОТРЕТЬ НА RUTUBE
Опыт отладки хитрой утечки прямой памяти
Pinterest поддерживает формирование отчётов по метрикам рекламных объявлений внешних рекламодателей и расчёт рекламных бюджетов в реальном времени. Всё это основано на потоковых конвейерах обработки данных, созданных с помощью на Apache Flink. Доступность заданий (job) Flink для пользователей находится на уровне 99-го перцентиля. Но время от времени некоторые задачи (task) «валятся» под ударами неприятных ошибок, вызванных утечками прямой памяти (Out-Of-Memory, OOM), возникающими сразу в нескольких операторах.
https://habr.com/ru/companies/wunderfund/articles/843618/
👉
Pinterest поддерживает формирование отчётов по метрикам рекламных объявлений внешних рекламодателей и расчёт рекламных бюджетов в реальном времени. Всё это основано на потоковых конвейерах обработки данных, созданных с помощью на Apache Flink. Доступность заданий (job) Flink для пользователей находится на уровне 99-го перцентиля. Но время от времени некоторые задачи (task) «валятся» под ударами неприятных ошибок, вызванных утечками прямой памяти (Out-Of-Memory, OOM), возникающими сразу в нескольких операторах.
https://habr.com/ru/companies/wunderfund/articles/843618/
👉
Принципы SOLID в Java с примерами
Принципы SOLID - это набор из пяти принципов проектирования в объектно-ориентированном программировании, которые помогают разработчикам создавать более удобное, понятное и гибкое программное обеспечение. Эти принципы были введены Робертом К. Мартином, также известным как Дядя Боб. SOLID означает:
1 - Single Responsibility Principle (SRP)
2 - Open/Closed Principle (OCP)
3 - Liskov Substitution Principle (LSP)
4 - Interface Segregation Principle (ISP)
5 - Dependency Inversion Principle (DIP)
https://www.javaguides.net/2020/01/solid-principles-in-java-with-examples.html
👉
Принципы SOLID - это набор из пяти принципов проектирования в объектно-ориентированном программировании, которые помогают разработчикам создавать более удобное, понятное и гибкое программное обеспечение. Эти принципы были введены Робертом К. Мартином, также известным как Дядя Боб. SOLID означает:
1 - Single Responsibility Principle (SRP)
2 - Open/Closed Principle (OCP)
3 - Liskov Substitution Principle (LSP)
4 - Interface Segregation Principle (ISP)
5 - Dependency Inversion Principle (DIP)
https://www.javaguides.net/2020/01/solid-principles-in-java-with-examples.html
👉
Используйте плагин checkstyle
Подключить его очень легко и в Gradle, и в Maven.
Плагин проверяет форматирование, неиспользуемые импорты и когнитивную сложность ваших методов при каждой сборке приложения, что помогает поддерживать ваш код удобочитаемым, а следовательно, лучше сопровождаемым.
👉
Подключить его очень легко и в Gradle, и в Maven.
plugins {
id 'checkstyle'
Плагин проверяет форматирование, неиспользуемые импорты и когнитивную сложность ваших методов при каждой сборке приложения, что помогает поддерживать ваш код удобочитаемым, а следовательно, лучше сопровождаемым.
👉
Какие бывают строковые классы?
В Java строковые классы — это классы, которые используются для работы со строками, то есть последовательностями символов. Основные строковые классы в Java:
1. String
- Неизменяемый класс (immutable): После создания объекта
- Использование: Широко используется для представления строковых значений.
- Особенности:
- Строки могут быть созданы с использованием строковых литералов или через конструктор.
- Для сравнения строк рекомендуется использовать метод
- Пример:
2. StringBuilder
- Изменяемый класс (mutable): Этот класс позволяет изменять строки без создания нового объекта.
- Основное применение: Используется, когда требуется частое изменение строк, например при конкатенации.
- Не синхронизирован: Этот класс не потокобезопасен, что делает его быстрее при работе в однопоточных приложениях.
- Пример:
3. StringBuffer
- Изменяемый класс (mutable): Как и
- Синхронизирован: Потокобезопасный, что делает его более медленным по сравнению с
- Основное применение: Рекомендуется использовать в многопоточных приложениях.
- Пример:
Различия между
- Неизменяемость:
- Потокобезопасность:
- Производительность:
👉
В Java строковые классы — это классы, которые используются для работы со строками, то есть последовательностями символов. Основные строковые классы в Java:
1. String
- Неизменяемый класс (immutable): После создания объекта
String
его нельзя изменить.- Использование: Широко используется для представления строковых значений.
- Особенности:
- Строки могут быть созданы с использованием строковых литералов или через конструктор.
- Для сравнения строк рекомендуется использовать метод
equals()
, а не оператор ==
.- Пример:
String str = "Hello, World!";
2. StringBuilder
- Изменяемый класс (mutable): Этот класс позволяет изменять строки без создания нового объекта.
- Основное применение: Используется, когда требуется частое изменение строк, например при конкатенации.
- Не синхронизирован: Этот класс не потокобезопасен, что делает его быстрее при работе в однопоточных приложениях.
- Пример:
StringBuilder sb = new StringBuilder("Hello");
sb.append(", World!");
3. StringBuffer
- Изменяемый класс (mutable): Как и
StringBuilder
, позволяет изменять строки.- Синхронизирован: Потокобезопасный, что делает его более медленным по сравнению с
StringBuilder
.- Основное применение: Рекомендуется использовать в многопоточных приложениях.
- Пример:
StringBuffer sb = new StringBuffer("Hello");
sb.append(", World!");
Различия между
String
, StringBuilder
и StringBuffer
:- Неизменяемость:
String
неизменяемый, тогда как StringBuilder
и StringBuffer
изменяемы.- Потокобезопасность:
StringBuffer
синхронизирован, в отличие от StringBuilder
.- Производительность:
StringBuilder
быстрее, чем StringBuffer
при работе в однопоточных средах.👉
🚀 Совет по Java - Comparator 🚀
Принимает Comparator в качестве аргумента, который отвечает за сравнение ненулевых элементов. В случае, если переданный компаратор равен null, ненулевые значения считаются равными. 🔥
https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/util/Comparator.html#nullsLast(java.util.Comparator)
👉
Comparator.nullsLast
Принимает Comparator в качестве аргумента, который отвечает за сравнение ненулевых элементов. В случае, если переданный компаратор равен null, ненулевые значения считаются равными. 🔥
https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/util/Comparator.html#nullsLast(java.util.Comparator)
👉
Как заставить code coverage работать на вас
Недавно я снова услышал тезис, что code coverage не нужен и совсем не обязательно за ним следить, а нужно просто делать black-box тесты и считать количество тест-кейсов. Я не согласен с подобного рода категоричными утверждениями. В этой статье постараюсь изложить свою точку зрения и развеять некоторые мифы, опираясь на свой опыт в разработке и идеи, которые почерпнул из книг и статей других инженеров.
https://habr.com/ru/articles/836366/
👉
Недавно я снова услышал тезис, что code coverage не нужен и совсем не обязательно за ним следить, а нужно просто делать black-box тесты и считать количество тест-кейсов. Я не согласен с подобного рода категоричными утверждениями. В этой статье постараюсь изложить свою точку зрения и развеять некоторые мифы, опираясь на свой опыт в разработке и идеи, которые почерпнул из книг и статей других инженеров.
https://habr.com/ru/articles/836366/
👉
Media is too big
VIEW IN TELEGRAM
Создание REST API с использованием Spring WebFlux и Security
00:00:00 Введение
00:00:20 Создание проекта
00:11:36 Создание миграций БД
00:15:40 Создание базовых классов
00:23:20 Реализация логики генерации JWT токена
00:46:30 Реализация логики валидации JWT токена
00:53:05 Построения цепочки аутентификации
01:04:22 Финальная конфигурация с использованием SecurityWebFilterChain
01:12:11 Реализация REST контроллеров
01:23:15 Проверка REST API средствами Postman
01:24:21 Добавление и конфигурация обработчика ошибок
01:25:40 Заключение
Ссылка на Github репозиторий https://github.com/proselytear/webfluxsecurity
источник
👉
00:00:00 Введение
00:00:20 Создание проекта
00:11:36 Создание миграций БД
00:15:40 Создание базовых классов
00:23:20 Реализация логики генерации JWT токена
00:46:30 Реализация логики валидации JWT токена
00:53:05 Построения цепочки аутентификации
01:04:22 Финальная конфигурация с использованием SecurityWebFilterChain
01:12:11 Реализация REST контроллеров
01:23:15 Проверка REST API средствами Postman
01:24:21 Добавление и конфигурация обработчика ошибок
01:25:40 Заключение
Ссылка на Github репозиторий https://github.com/proselytear/webfluxsecurity
источник
👉
Паттерны применения многопоточности на коммерческом проекте (на примере Java)
Многопоточность неразрывно связана с отзывчивостью вашего приложения под нагрузкой. Если нагрузки нет, скажем 5 запросов в час, то и о многопоточности можно особо не задумываться
На коммерческих проектах чаще встречается ситуация, когда вашим приложением пользуются сотни и даже тысячи клиентов одновременно, в такие моменты без многопоточности никуда, при этом приложение должно работать эффективно, не расходуя лишние ресурсы
Я собрал самые часто встречаемые паттерны работы с многопоточностью из своей практики, которые помогают писать отказоустойчивые и надежные приложения
Многопоточность неразрывно связана с отзывчивостью вашего приложения под нагрузкой. Если нагрузки нет, скажем 5 запросов в час, то и о многопоточности можно особо не задумываться
На коммерческих проектах чаще встречается ситуация, когда вашим приложением пользуются сотни и даже тысячи клиентов одновременно, в такие моменты без многопоточности никуда, при этом приложение должно работать эффективно, не расходуя лишние ресурсы
Я собрал самые часто встречаемые паттерны работы с многопоточностью из своей практики, которые помогают писать отказоустойчивые и надежные приложения
В данной статье будем рассматривать многопоточность без применения webflux, однако если будет спрос, то распишу те же паттерны на webflux'е, там они выглядят более органично...
Также не буду затрагивать Project Loom, поскольку мне не приходилось отлаживать и поддерживать код с использованием Loom на коммерческом проекте (Java 21 еще не используем), но когда-ниб
Взлом JVM-приложения с помощью отладчика IntelliJ IDEA
Что если мы скажем вам, что отладчик может стать не просто инструментом для поиска ошибок, а настоящим «режимом бога» в мире кода?
В новом переводе от команды Spring АйО рассматривается, как можно исследовать память приложения и изменить его функциональность, при этом не затрагивая исходного кода, а используя только лишь отладчик IntelliJ IDEA.
https://habr.com/ru/companies/spring_aio/articles/845554/
original https://blog.jetbrains.com/idea/2024/08/hacking-a-jvm-application-with-intellij-idea-s-debugger/
👉
Что если мы скажем вам, что отладчик может стать не просто инструментом для поиска ошибок, а настоящим «режимом бога» в мире кода?
В новом переводе от команды Spring АйО рассматривается, как можно исследовать память приложения и изменить его функциональность, при этом не затрагивая исходного кода, а используя только лишь отладчик IntelliJ IDEA.
https://habr.com/ru/companies/spring_aio/articles/845554/
original https://blog.jetbrains.com/idea/2024/08/hacking-a-jvm-application-with-intellij-idea-s-debugger/
👉
Совет по Spring Boot 🚀
Создайте свой собственный
Перехват исключений при запуске и их преобразование в читаемые сообщения можно эффективно реализовать с помощью
https://docs.spring.io/spring-boot/how-to/application.html#howto.application.failure-analyzer
👉
Создайте свой собственный
FailureAnalyzer
Перехват исключений при запуске и их преобразование в читаемые сообщения можно эффективно реализовать с помощью
FailureAnalyzer
в Spring Boot 🔥https://docs.spring.io/spring-boot/how-to/application.html#howto.application.failure-analyzer
👉
14 советов по высокопроизводительной персистентности в Java
В этой статье я расскажу вам о различных советах по оптимизации высокопроизводительной Java Persistence, которые помогут вам получить максимальную отдачу от уровня доступа к данным.
Для создания высокопроизводительного уровня доступа к данным требуется много знаний о внутреннем устройстве баз данных, JDBC, JPA, Hibernate, и в этой статье обобщены некоторые из наиболее важных приемов, которые можно использовать для оптимизации корпоративного приложения.
https://vladmihalcea.com/14-high-performance-java-persistence-tips/
👉
В этой статье я расскажу вам о различных советах по оптимизации высокопроизводительной Java Persistence, которые помогут вам получить максимальную отдачу от уровня доступа к данным.
Для создания высокопроизводительного уровня доступа к данным требуется много знаний о внутреннем устройстве баз данных, JDBC, JPA, Hibernate, и в этой статье обобщены некоторые из наиболее важных приемов, которые можно использовать для оптимизации корпоративного приложения.
https://vladmihalcea.com/14-high-performance-java-persistence-tips/
👉