В Spring Boot проверка входных данных делается прямо в DTO с помощью аннотаций:
public class RegistrationRequest {
@Email(message = "Please provide a valid email address")
@NotBlank(message = "Email is required")
private String email;
@Size(min = 8, max = 16, message = "Password must be 8–16 characters long")
private String password;
@Pattern(
regexp = "^[0-9]{10,15}$",
message = "Phone number must be 10–15 digits"
)
private String phone;
// getters & setters
}
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍3🔥3
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤3👍2
Project Valhalla: революция в памяти Java
Java-разработчики годами жили по принципу «Everything is an object». И всё бы хорошо, если бы за это нам не приходилось платить «налогом на объект»: каждый раз, когда вы создаёте простой класс из двух полей int, JVM бережно дописывает к нему тяжёлый заголовок, упаковывает в ссылку и разбрасывает по куче, заставляя процессор страдать от постоянных промахов кеша.
Мы привыкли к этому компромиссу. Мы научились использовать примитивные коллекции и костыли, чтобы выжать производительность там, где объектная модель Java начинает буксовать. Project Valhalla призван изменить сами правила игры.
Читать статью
Java-разработчики годами жили по принципу «Everything is an object». И всё бы хорошо, если бы за это нам не приходилось платить «налогом на объект»: каждый раз, когда вы создаёте простой класс из двух полей int, JVM бережно дописывает к нему тяжёлый заголовок, упаковывает в ссылку и разбрасывает по куче, заставляя процессор страдать от постоянных промахов кеша.
Мы привыкли к этому компромиссу. Мы научились использовать примитивные коллекции и костыли, чтобы выжать производительность там, где объектная модель Java начинает буксовать. Project Valhalla призван изменить сами правила игры.
Читать статью
VK
Project Valhalla: революция в памяти Java
Java-разработчики годами жили по принципу «Everything is an object». И всё бы хорошо, если бы за это не приходилось платить «налогом на о..
👍7🔥7❤4
Если API отвечает ошибками или падает, вам не обязательно вручную писать циклы повторных попыток.
Аннотация
Retryable позволяет:• автоматически повторять вызовы при определённых исключениях
• управлять количеством попыток
• настраивать задержку и экспоненциальный backoff
• выполнять fallback через
@Recover, если всё-таки не удалосьПример на картинке:
✔️ делает 3 попытки при указанных исключениях
✔️ начинает с задержки 2 секунды и удваивает её каждый раз
✔️ вызывает
recover() если попытки закончилисьУдобно, читаемо и избавляет от шаблонного кода при интеграции с внешними API.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤6👍5
Media is too big
VIEW IN TELEGRAM
Security со Spring Boot 3.1 | Авторизация и Аутентификация
В этом видео мы разберемся, как выполнить аутентификацию и авторизацию с помощью spring boot 3.1 и spring security 6
🌐 🗣 СМОТРЕТЬ VKVIDEO
📺 🗣 СМОТРЕТЬ RUTUBE
🎞 🗣 СМОТРЕТЬ YOUTUBE
Подписывайся на наш канал в Max🟪
В этом видео мы разберемся, как выполнить аутентификацию и авторизацию с помощью spring boot 3.1 и spring security 6
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥3
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3🔥3
Как работает ConcurrentSkipListSet под капотом?
ConcurrentSkipListSet — это потокобезопасная и отсортированная реализация интерфейса NavigableSet. Она построена на основе ConcurrentSkipListMap, что позволяет ей быть не только упорядоченной, но и эффективной для параллельного доступа. В основе её работы лежит структура данных skip list (список с пропусками).
Skip list — это многослойная структура данных, состоящая из нескольких уровней связных списков. На нижнем уровне содержатся все элементы в отсортированном порядке, а верхние уровни хранят лишь часть элементов для ускорения операций поиска. Благодаря этому достигается логарифмическая сложность операций add, remove и contains — O(log n).
Пример структуры:
💡 Основные механизмы:
🟢 Skip List: Многослойная структура, где верхние уровни позволяют быстро "перепрыгивать" через диапазоны элементов. Это минимизирует количество переходов по связным спискам.
🟢 Под капотом ConcurrentSkipListSet использует ConcurrentSkipListMap, где ключи — это элементы множества, а значения — фиктивные объекты.
🟢 Потокобезопасность достигается благодаря минимальному блокированию и использованию атомарных операций (CAS — Compare-And-Swap).
🟢 Элементы всегда упорядочены в соответствии с их натуральным порядком или компаратором, переданным в конструктор.
⚠️ Особенности:
🟡 Эффективен для операций чтения (contains, iterators), так как они выполняются без блокировок.
🟡 Операции модификации (add, remove) потокобезопасны, но слегка дороже из-за использования CAS.
🟡 Поддерживает сортировку элементов в натуральном порядке или порядке, определённом компаратором.
🟡 Высокая производительность для сценариев с преобладанием чтений и умеренным количеством обновлений.
🚀 Когда использовать ConcurrentSkipListSet?
- Если нужен потокобезопасный доступ к отсортированному множеству.
- При необходимости частого чтения упорядоченных данных (например, для диапазонов).
- Для сценариев с конкурентным доступом, где важна производительность операций чтения.
🔗 Документация
Подписывайся на наш канал в Max🟪
ConcurrentSkipListSet — это потокобезопасная и отсортированная реализация интерфейса NavigableSet. Она построена на основе ConcurrentSkipListMap, что позволяет ей быть не только упорядоченной, но и эффективной для параллельного доступа. В основе её работы лежит структура данных skip list (список с пропусками).
Skip list — это многослойная структура данных, состоящая из нескольких уровней связных списков. На нижнем уровне содержатся все элементы в отсортированном порядке, а верхние уровни хранят лишь часть элементов для ускорения операций поиска. Благодаря этому достигается логарифмическая сложность операций add, remove и contains — O(log n).
Пример структуры:
lvl 3: A ------- H
lvl 2: A --- D -- H
lvl 1: A - B - D - F - H - J
🚀 Когда использовать ConcurrentSkipListSet?
- Если нужен потокобезопасный доступ к отсортированному множеству.
- При необходимости частого чтения упорядоченных данных (например, для диапазонов).
- Для сценариев с конкурентным доступом, где важна производительность операций чтения.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍5🔥5
Java Performance Update: From JDK 21 to JDK 25
JDK 25 has arrived, bringing a major set of performance gains over JDK 21—often letting your existing, unchanged Java applications run faster right away. In this talk, we’ll dive into 13 concrete performance improvements delivered between JDK 21 and JDK 25 across the standard libraries, the JIT compiler, and garbage collectors.
Along the way, you’ll get an inside look at the design tradeoffs behind these optimizations and how JDK engineers evaluate performance in the real world—where platforms differ and optimization goals can conflict.
We’ll also spotlight one of the most exciting new additions: the preview feature Stable Value, which lets a field combine key benefits of both mutable and immutable data. You’ll learn how Stable Value works, what kinds of speedups it can unlock, and how you can start taking advantage of it today.
🌐 🗣 СМОТРЕТЬ VKVIDEO
📺 🗣 СМОТРЕТЬ RUTUBE
🎞 🗣 СМОТРЕТЬ YOUTUBE
Подписывайся на наш канал в Max🟪
JDK 25 has arrived, bringing a major set of performance gains over JDK 21—often letting your existing, unchanged Java applications run faster right away. In this talk, we’ll dive into 13 concrete performance improvements delivered between JDK 21 and JDK 25 across the standard libraries, the JIT compiler, and garbage collectors.
Along the way, you’ll get an inside look at the design tradeoffs behind these optimizations and how JDK engineers evaluate performance in the real world—where platforms differ and optimization goals can conflict.
We’ll also spotlight one of the most exciting new additions: the preview feature Stable Value, which lets a field combine key benefits of both mutable and immutable data. You’ll learn how Stable Value works, what kinds of speedups it can unlock, and how you can start taking advantage of it today.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍2🔥2🎄1
IDE понимает ваш код. AI-агент — нет. Это можно исправить
Ваша IDE знает о проекте всё — иерархии типов, ссылки между модулями, исходники библиотек, ошибки компиляции. AI-агент ничего из этого не видит и вынужден грепать код и логи. За один выходной можно написать плагин и CLI, которые выставят семантику IDE наружу — и агент получит те же суперсилы, что и вы. В статье — как это сделано на примере Eclipse и JDT, но подход переносим на любую IDE.
Читать статью
Ваша IDE знает о проекте всё — иерархии типов, ссылки между модулями, исходники библиотек, ошибки компиляции. AI-агент ничего из этого не видит и вынужден грепать код и логи. За один выходной можно написать плагин и CLI, которые выставят семантику IDE наружу — и агент получит те же суперсилы, что и вы. В статье — как это сделано на примере Eclipse и JDT, но подход переносим на любую IDE.
Читать статью
VK
IDE понимает ваш код. AI-агент — нет. Это можно исправить
TL;DR: Ваша IDE знает о проекте всё — иерархии типов, ссылки между модулями, исходники библиотек, ошибки компиляции. AI-агент ничего из э..
❤7👍6🔥5
Media is too big
VIEW IN TELEGRAM
ДАМПЫ В JAVA на практике, разбираем проблемы
Всем привет! Разбираем как дампы памяти и потоков позволяют найти реальные проблемы
Разобрал:
Теорию, какие дампы бывают, как профилировщики их используют
Прожигание cpu, cycles
Проблемы с логгерами
Проблемы пулов потоков
Утечки памяти в мапах
Проблемы с загрузкой слишком большого количества данных
Как смотреть дампы, эвристики по количеству и памяти
Как я уложил прод большой коллекцией
Распределенные дедлоки
🌐 🗣 СМОТРЕТЬ VKVIDEO
📺 🗣 СМОТРЕТЬ RUTUBE
🎞 🗣 СМОТРЕТЬ YOUTUBE
Подписывайся на наш канал в Max🟪
Всем привет! Разбираем как дампы памяти и потоков позволяют найти реальные проблемы
Разобрал:
Теорию, какие дампы бывают, как профилировщики их используют
Прожигание cpu, cycles
Проблемы с логгерами
Проблемы пулов потоков
Утечки памяти в мапах
Проблемы с загрузкой слишком большого количества данных
Как смотреть дампы, эвристики по количеству и памяти
Как я уложил прод большой коллекцией
Распределенные дедлоки
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍5🔥4
С помощью аннотации @ConditionalOnMissingBean можно задать дефолтный бин, который пользователь сможет переопределить своей стандартной реализацией.
✔️ В конфигурации объявляем бин по умолчанию
✔️ Если пользователь определит свой бин — он автоматически заменит дефолтный
Удобный способ давать базовую реализацию и оставлять гибкость расширения в проектах Spring Boot.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥3
240 вопросов и ответов на собеседование по Java Core
🌐 🗣 СМОТРЕТЬ VKVIDEO
📺 🗣 СМОТРЕТЬ RUTUBE
🎞 🗣 СМОТРЕТЬ YOUTUBE
Подписывайся на наш канал в Max🟪
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍7🔥5
Наш чатик с вакансиями и резюме, присоединяйся: https://t.me/job_java
Telegram
Java Job - Вакансии и резюме
Наш канал по Java @javalib
Вакансии Java, также можете скидывать свои резюме!
Разместить вакансию или резюме вы теперь можете всего за 10 звёзд без очереди или просто написав @rinaka в порядке очереди.
Купить звёзды: @PremiumBot
Вакансии Java, также можете скидывать свои резюме!
Разместить вакансию или резюме вы теперь можете всего за 10 звёзд без очереди или просто написав @rinaka в порядке очереди.
Купить звёзды: @PremiumBot
❤2🔥2
Как задеплоить Java-приложение: Docker, AWS, Kubernetes
В этом видео автор кратко рассказывает о популярных вариантах деплоймента Java-приложений. Вы узнаете о локальном запуске, деплое в контейнер сервлетов, использовании AWS Elastic Beanstalk и Lambda, Docker Compose, Kubernetes, а также о том, какие решения он встречал на реальных проектах.
🌐 🗣 СМОТРЕТЬ VKVIDEO
📺 🗣 СМОТРЕТЬ RUTUBE
🎞 🗣 СМОТРЕТЬ YOUTUBE
Подписывайся на наш канал в Max🟪
В этом видео автор кратко рассказывает о популярных вариантах деплоймента Java-приложений. Вы узнаете о локальном запуске, деплое в контейнер сервлетов, использовании AWS Elastic Beanstalk и Lambda, Docker Compose, Kubernetes, а также о том, какие решения он встречал на реальных проектах.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🔥4
🧩 Как Java загружает классы динамически
Java использует механизм ClassLoader, который подгружает классы прямо во время выполнения программы. Это даёт гибкость - код может загружаться по запросу, подключать модули и расширения на лету.
Как это работает:
• Bootstrap ClassLoader - загружает базовые классы JVM (java.lang, java.util).
• Extension / Platform ClassLoader - подгружает стандартные библиотеки расширений.
• Application / System ClassLoader — загружает классы приложения и внешние зависимости из classpath.
• Можно создать собственные ClassLoader-ы, чтобы загружать классы из БД, по сети, шифрованных файлов и других источников.
Модель делегирования:
Каждый загрузчик сначала спрашивает родителя, и только если он не справился — пытается загрузить класс сам.
Когда класс найден - ClassLoader читает байткод, проверяет его и “определяет” внутри JVM, чтобы его можно было выполнять.
Зачем это нужно?
• плагины
• hot-swap модулей
• модульные системы
• загрузка зависимостей на лету
Система ClassLoader делает Java гибкой, безопасной и расширяемой во время выполнения.
Java использует механизм ClassLoader, который подгружает классы прямо во время выполнения программы. Это даёт гибкость - код может загружаться по запросу, подключать модули и расширения на лету.
Как это работает:
• Bootstrap ClassLoader - загружает базовые классы JVM (java.lang, java.util).
• Extension / Platform ClassLoader - подгружает стандартные библиотеки расширений.
• Application / System ClassLoader — загружает классы приложения и внешние зависимости из classpath.
• Можно создать собственные ClassLoader-ы, чтобы загружать классы из БД, по сети, шифрованных файлов и других источников.
Модель делегирования:
Каждый загрузчик сначала спрашивает родителя, и только если он не справился — пытается загрузить класс сам.
Когда класс найден - ClassLoader читает байткод, проверяет его и “определяет” внутри JVM, чтобы его можно было выполнять.
Зачем это нужно?
• плагины
• hot-swap модулей
• модульные системы
• загрузка зависимостей на лету
Система ClassLoader делает Java гибкой, безопасной и расширяемой во время выполнения.
❤8🔥6👍5
Forwarded from Java News
Java без розовых очков: какие знания отделяют грейды
Почти каждый разработчик рано или поздно задается вопросом: «Я уже Middle или все еще уверенный Junior?» Опыт растет, задач становится больше, стек шире — но вместе с этим появляется и иллюзия, что раз ты пишешь на Java каждый день, значит, язык знаешь. На практике же границы между грейдами проходят не по количеству лет в профессии и не по числу реализованных фич. Они проходят по глубине понимания: платформы, архитектуры, производительности, работы с данными и собственных ограничений.
Читать статью
Почти каждый разработчик рано или поздно задается вопросом: «Я уже Middle или все еще уверенный Junior?» Опыт растет, задач становится больше, стек шире — но вместе с этим появляется и иллюзия, что раз ты пишешь на Java каждый день, значит, язык знаешь. На практике же границы между грейдами проходят не по количеству лет в профессии и не по числу реализованных фич. Они проходят по глубине понимания: платформы, архитектуры, производительности, работы с данными и собственных ограничений.
Читать статью
VK
Java без розовых очков: какие знания отделяют грейды
Почти каждый разработчик рано или поздно задается вопросом: «Я уже Middle или все еще уверенный Junior?» Опыт растет, задач становится бо..
🔥5❤3👍3
Forwarded from Java Guru 🤓
Что делает сборщик мусора (Garbage Collector) в Java?
Anonymous Quiz
12%
Освобождает память от неиспользуемых переменных
1%
Снимает объекты с очереди после их использования
3%
Управляет выделением памяти для объектов
84%
Удаляет неиспользуемые объекты и освобождает память
0%
Контролирует поток данных в системе
🔥5❤2👍2
Два самых полезных слова в многопоточности join() и Future
Синхронизируем потоки между собой и получаем данные из потока на языке программирования Java.
🌐 🗣 СМОТРЕТЬ VKVIDEO
📺 🗣 СМОТРЕТЬ RUTUBE
🎞 🗣 СМОТРЕТЬ YOUTUBE
Подписывайся на наш канал в Max🟪
Синхронизируем потоки между собой и получаем данные из потока на языке программирования Java.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥2
💡 Простой пример зависимости vs правильной абстракции
❌ В первой версии Application напрямую создаёт ConsoleLogger.
Это жёсткая связка: класс невозможно переиспользовать с другим типом логгера.
✔️ В правильной версии вводится интерфейс Logger.
И Application зависит не от конкретного класса, а от абстракции - и логгер передаётся извне.
Это принцип инверсии зависимостей в действии:
клиент выбирает реализацию, а приложение остаётся гибким и расширяемым.
Подписывайся на наш канал в Max🟪
❌ В первой версии Application напрямую создаёт ConsoleLogger.
Это жёсткая связка: класс невозможно переиспользовать с другим типом логгера.
✔️ В правильной версии вводится интерфейс Logger.
И Application зависит не от конкретного класса, а от абстракции - и логгер передаётся извне.
Это принцип инверсии зависимостей в действии:
клиент выбирает реализацию, а приложение остаётся гибким и расширяемым.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍4🔥4
75 проектов в IntelliJ IDEA: как я перестал тонуть в Recent Projects и написал свой плагин
Всем привет. Я уже около 10 лет занимаюсь разработкой и около 5 лет полностью перешел на продукты JetBrains, и за все это время у меня накопилось около 150 проектов как рабочих, так и своих личных, я их конечно же красиво разложил по папочкам на диске, поставил теги на папки в маке и добавил быстрый доступ.
Я работаю с несколькими клиентами, активных проектов в работе около 25 штук, стандартные средства и функционал IntelliJ IDEA(Recent projects) с таким количеством прекрасно справляется, быстро ввел название сервиса в поиск и так же быстро открыл.
Идеальная жизнь закончилась когда ко мне пришел клиент с еще 25 микросервисами в разных репозиториях и беклогом с багами в 300+ задач(white-label решение), я вздохнул и начал работать с 50 активными проектами и обнаружил что "Recent projects" в IDEA умеет хранить только 30 последних открытых проектов, и если ты открываешь 31 проект, увы первый пропадает как из поиска, так и из списка.
Читать статью
Всем привет. Я уже около 10 лет занимаюсь разработкой и около 5 лет полностью перешел на продукты JetBrains, и за все это время у меня накопилось около 150 проектов как рабочих, так и своих личных, я их конечно же красиво разложил по папочкам на диске, поставил теги на папки в маке и добавил быстрый доступ.
Я работаю с несколькими клиентами, активных проектов в работе около 25 штук, стандартные средства и функционал IntelliJ IDEA(Recent projects) с таким количеством прекрасно справляется, быстро ввел название сервиса в поиск и так же быстро открыл.
Идеальная жизнь закончилась когда ко мне пришел клиент с еще 25 микросервисами в разных репозиториях и беклогом с багами в 300+ задач(white-label решение), я вздохнул и начал работать с 50 активными проектами и обнаружил что "Recent projects" в IDEA умеет хранить только 30 последних открытых проектов, и если ты открываешь 31 проект, увы первый пропадает как из поиска, так и из списка.
Читать статью
VK
75 проектов в IntelliJ IDEA: как я перестал тонуть в Recent Projects и написал свой плагин
Всем привет! Я около 10 лет в разработке и последние 5 лет полностью живу в экосистеме JetBrains. За это время у меня накопилось порядка..
❤9🔥5👍3
Пример TDD-методологии используя Spring Boot | Test Driven Development
В этом видео автор использует TDD подход для построения REST-API вместе со Spring Boot. Автор расскажет, что такое Test Driven Development (TDD) и зачем нужна данная методология. На наглядном примере мы посмотрим основные шаги, которые предпринимаются в TDD. От написания UNIT-тестов, до рефакторинга.
🌐 🗣 СМОТРЕТЬ VKVIDEO
📺 🗣 СМОТРЕТЬ RUTUBE
🎞 🗣 СМОТРЕТЬ YOUTUBE
Подписывайся на наш канал в Max🟪
В этом видео автор использует TDD подход для построения REST-API вместе со Spring Boot. Автор расскажет, что такое Test Driven Development (TDD) и зачем нужна данная методология. На наглядном примере мы посмотрим основные шаги, которые предпринимаются в TDD. От написания UNIT-тестов, до рефакторинга.
Подписывайся на наш канал в Max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4🔥2