Чтобы сделать большие и сложные цепочки компараторов более читаемыми, мне нравится присваивать компараторы переменным, имена которых начинаются с "by".
Таким образом, вызов
sorted()
становится меньше и читается почти как естественный язык. Кроме того, вы можете использовать статический импорт.Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🤔5
JWT в Spring Boot: Используется вместе с Spring Security для аутентификации пользователей в REST API.
JWT (JSON Web Token) – это компактный, безопасный для URL токен, используемый для безопасной аутентификации и авторизации. Он состоит из трех частей:
🍩 Заголовок (Header) → Содержит тип токена (JWT) и алгоритм подписи (например, HS256).
🍩 Полезная нагрузка (Payload) → Содержит утверждения (claims) – информацию о пользователе, роли, срок действия и т. д.
🍩 Подпись (Signature) → Обеспечивает целостность токена и создается с использованием секретного ключа.
Зачем использовать JWT?
☑ Бесстейтная аутентификация (не требуется хранение сессии).
☑ Безопасная передача данных между клиентом и сервером.
☑ Можно использовать в API для авторизации.
👉 Java Portal | #tips
JWT (JSON Web Token) – это компактный, безопасный для URL токен, используемый для безопасной аутентификации и авторизации. Он состоит из трех частей:
Зачем использовать JWT?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3🔥3
Одна из подводных камней при использовании аннотации
В приведенном выше коде можно ожидать, что первый вызов
👉 Java Portal | #tips
@Transactional
в java с @springframework
— это самовызов метода. В приведенном выше коде можно ожидать, что первый вызов
save()
будет откатан, но этого не произойдет. Чтобы все работало правильно, метод с аннотацией @Transactional
должен быть вызван из другого сервиса.Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍4🔥2
В Java может быть неясно, относится ли аннотация к объявлению, к типу или к обоим одновременно.
Это происходит в полях, методах, локальных переменных и других случаях.
В таких ситуациях понимание того, что именно аннотируется, зависит от значения мета-аннотации
👉 Java Portal | #tips
Это происходит в полях, методах, локальных переменных и других случаях.
В таких ситуациях понимание того, что именно аннотируется, зависит от значения мета-аннотации
@Target
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3
В Java может быть неясно, применяется ли аннотация к объявлению, к типу или к обоим.
Это происходит с полями, методами, локальными переменными и другими элементами.
🧠 В таких случаях, чтобы понять, что именно аннотируется, нужно учитывать значение мета-аннотации
👉 Java Portal | #tips
Это происходит с полями, методами, локальными переменными и другими элементами.
@Target.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Управляйте своим проектом как профессионал и повышайте продуктивность с лучшим сочетанием клавиш в IntelliJIDEA 👩💻
Используйте ⇧⇧ | Shift+Shift, чтобы мгновенно найти:
🟢 Классы, файлы, символы, действия или текст
🟢 Настройки редактора
🟢 Элементы интерфейса и многое другое! 🔥
👉 Java Portal | #tips
Используйте ⇧⇧ | Shift+Shift, чтобы мгновенно найти:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👀4🔥3
Шпаргалка по GitHub для начинающих
Этот список команд помогает пользователям быстро освоить базовые операции при работе с Git и GitHub.
👉 Java Portal | #tips
Этот список команд помогает пользователям быстро освоить базовые операции при работе с Git и GitHub.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2🔥2
Виды Dependency Injection в Spring Boot:
Инъекция через поля (Field Injection)
☑ Плюсы: Простота и краткость.
❌ Минусы: Трудно тестировать из-за приватности полей.
Инъекция через сеттеры (Setter Injection)
☑ Плюсы: Позволяет повторно внедрять зависимости при необходимости.
❌ Минусы: Делает зависимости изменяемыми, что может привести к ошибкам во время выполнения.
Инъекция через конструктор (Constructor Injection)
☑ Плюсы: Гарантирует неизменяемость и обеспечивает наличие всех необходимых зависимостей.
❌ Минусы: Требует больше шаблонного кода, если не использовать Lombok.
👉 Java Portal | #tips
Инъекция через поля (Field Injection)
Инъекция через сеттеры (Setter Injection)
Инъекция через конструктор (Constructor Injection)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3❤2
Чтобы заставить её работать, необходимо использовать усиление байткода через плагин. Тогда поля, помеченные как ленивые, будут загружаться при первом обращении к ним.
Это делается через Maven-плагин
hibernate-enhance-maven-plugin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🌭4🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2
Совет: если в Java Map нужно хранить несколько значений для одного ключа, можно использовать Apache Commons MultiValuedMap. Вы добавляете значения, а MultiValuedMap хранит их в List или Set.
👉 Java Portal | #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤4🔥2
Стратегии распределения памяти в Java
🟡 Stack Memory (Стековая память) – используется для хранения вызовов методов, локальных переменных и деталей вызовов функций.
🟡 Heap Memory (Куча) – содержит динамически выделенные объекты и экземпляры классов, подлежит сборке мусора.
🟡 Metaspace (Метапространство) – хранит метаданные классов, определения методов и статические переменные.
🟡 Off-Heap Memory (Память вне кучи) – используется, например, для DirectByteBuffer в NIO и полезна при обработке больших объемов данных, не управляется сборщиком мусора.
Основные различия — скорость доступа, необходимость сборки мусора и предназначение каждого вида памяти.
👉 Java Portal | #tips
Основные различия — скорость доступа, необходимость сборки мусора и предназначение каждого вида памяти.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2
ZonedDateTime, OffsetDateTime и OffsetTime ведут себя по-разному:
equals(): Сравнивает все поля (включая зону/смещение)
isEqual(): Сравнивает моменты времени (игнорируя зону/смещение)
Один и тот же момент, но разный результат.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3🤔1
К вашему вниманию — механизмы блокировки в Java ☕️
Это таблица, описывающая различные механизмы блокировки (Locking Mechanisms) в многопоточной среде. В ней представлены механизмы, их использование, производительность и наиболее подходящие сценарии применения.
👉 Java Portal | #tips
Это таблица, описывающая различные механизмы блокировки (Locking Mechanisms) в многопоточной среде. В ней представлены механизмы, их использование, производительность и наиболее подходящие сценарии применения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤4
При создании стандартных HttpHeaders для ответов Spring MVC, вместо того чтобы предоставлять их как строки, для некоторых есть специальные строители (Builders), которые позволяют создавать заголовки более безопасным с точки зрения типов способом. Смотри методы set() в HttpHeaders, которые можно настроить таким образом.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1
Держи таблицу, сравнивающую различные фреймворки логирования для Java.
В ней указаны их назначение, производительность и рекомендации по использованию в разных типах проектов.
На заметку🫡
👉 Java Portal | #tips
В ней указаны их назначение, производительность и рекомендации по использованию в разных типах проектов.
На заметку
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1
Хотите быстро собрать некоторые данные в POST-запросе? Создайте быстрый встроенный объект в вашем
@RestController
и используйте его как @RequestBody
. Нет необходимости определять DTO в отдельном классе. Он виден только в этом классе.Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Повышайте свою продуктивность, а именно: находите ответы быстрее прямо в IntelliJIDEA! 👩💻
🍩 Установите плагин Help Search через Настройки | Плагины | Маркетплейс.
🍩 Нажмите ⇧⇧ | Shift+Shift, перейдите на вкладку Help и ищите любую нужную информацию!
Вот ссылка на плагин: клик
👉 Java Portal | #tips
Вот ссылка на плагин: клик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥4❤2
Чтобы получить все дни месяца, можно начать с объекта
YearMonth
, взять его первый день, а затем использовать функцию datesUntil()
, которая возвращает поток (Stream) всех дней до указанной даты.Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥4
getDepartmentDeptName()
получает deptName
из связанной сущности Department
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4