Генератор надёжных паролей на Java
Пароль с заглавными, строчными, цифрами и спецсимволами? Легко.
С помощью библиотеки
Просто, удобно и безопасно.😊
👉 Java Portal
Пароль с заглавными, строчными, цифрами и спецсимволами? Легко.
С помощью библиотеки
Passay
можно сгенерировать крепкий 10-символьный пароль буквально в пару строк.Просто, удобно и безопасно.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤5🔥3
Понимание OAuth 2.0
OAuth 2.0 расшифровывается как Open Authorization 2.0
Это фреймворк авторизации, а не протокол аутентификации.
Назначение —> позволяет сторонним приложениям получать доступ к пользовательским ресурсам без раскрытия пользовательских учетных данных.
Ключевые роли в OAuth 2.0
— Владелец ресурса - пользователь, владеющий защищёнными ресурсами
— Клиент - приложение, запрашивающее доступ к защищённым ресурсам
— Сервер ресурсов - сервер, на котором хранятся защищённые ресурсы
— Сервер авторизации - сервер, выдающий токены доступа после согласия пользователя
Стандартный поток OAuth (Authorization Code Flow)
1. Клиент перенаправляет пользователя на сервер авторизации
2. Пользователь проходит аутентификацию и предоставляет разрешения
3. Сервер авторизации возвращает клиенту код авторизации
4. Клиент обменивает код на токен доступа
5. Клиент использует токен доступа для обращения к защищённым ресурсам
Лучшие практики реализации
⏩ Корректная реализация OAuth 2.0 требует внимания к деталям безопасности
⏩ Команды разработки часто используют инструменты ревью кода, чтобы на раннем этапе выявить проблемы
⏩ Инструменты вроде
⏩ При работе с протоколами авторизации стоит рассмотреть использование анализа кода с фокусом на безопасность
👉 Java Portal
OAuth 2.0 расшифровывается как Open Authorization 2.0
Это фреймворк авторизации, а не протокол аутентификации.
Назначение —> позволяет сторонним приложениям получать доступ к пользовательским ресурсам без раскрытия пользовательских учетных данных.
Ключевые роли в OAuth 2.0
— Владелец ресурса - пользователь, владеющий защищёнными ресурсами
— Клиент - приложение, запрашивающее доступ к защищённым ресурсам
— Сервер ресурсов - сервер, на котором хранятся защищённые ресурсы
— Сервер авторизации - сервер, выдающий токены доступа после согласия пользователя
Стандартный поток OAuth (Authorization Code Flow)
1. Клиент перенаправляет пользователя на сервер авторизации
2. Пользователь проходит аутентификацию и предоставляет разрешения
3. Сервер авторизации возвращает клиенту код авторизации
4. Клиент обменивает код на токен доступа
5. Клиент использует токен доступа для обращения к защищённым ресурсам
Лучшие практики реализации
@coderabbitai
могут помочь обнаружить типовые ошибки при реализации OAuth во время ревьюPlease open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥3
Типы выходных файлов, создаваемых при компиляции Java-кода
Native Image — > Нативный образ — > Работает без JVM
👉 Java Portal
.class
— > Выполняется в JVM.jar
— > Упаковка кода для повторного использования.jmod
— >Поддерживает модульные Java-приложенияNative Image — > Нативный образ — > Работает без JVM
.war
— >Развёртывание веб-приложений на Java.ear
— > Развёртывание корпоративных Java-приложений.apk
— > Установка Java-приложений на Android.so
— > Компиляция в нативный код (shared object)Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤4🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
С этим легко справиться благодаря функциям автоформатирования кода в IntelliJIDEA.
Выделите фрагмент кода и нажмите
⌘⌥L
(на macOS) или Ctrl+Alt+L
(на Windows/Linux), чтобы отформатировать его согласно настройкам стиля вашего проектаPlease open Telegram to view this post
VIEW IN TELEGRAM
👍13❤4🔥4
Продвинутые дженерики в Java
Если ты уже знаком с базовыми дженериками, пора копнуть глубже:
—> Ограниченные типы (
—> Подстановочные знаки (
—> Стирание типов (
🎩
👉 Java Portal
Если ты уже знаком с базовыми дженериками, пора копнуть глубже:
—> Ограниченные типы (
<T extends Number>
) — позволяют задать верхнюю (или нижнюю) границу для параметра типа.—> Подстановочные знаки (
? extends
, ? super
) — дают гибкость при работе с обобщёнными методами и коллекциями.—> Стирание типов (
type erasure
) — механизм, из-за которого вся информация о типах удаляется во время компиляции, и на этапе выполнения остаются только Object и приведенияPlease open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥5❤4
Основы Java Enum
Синтаксис:👇
⏩ Все значения — это константы
⏩ Java преобразует их в
Особенности
—> Перечисления (enums) не могут наследовать другие классы, так как уже наследуют
—> Enum может реализовывать интерфейсы
—> Конструкторы могут быть только приватными, иначе будет выброшено исключение
Пример Enum с конструктором на фото☕️
👉 Java Portal | #cтатья
Синтаксис:
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
public static final
переменныеОсобенности
—> Перечисления (enums) не могут наследовать другие классы, так как уже наследуют
java.lang.Enum
—> Enum может реализовывать интерфейсы
—> Конструкторы могут быть только приватными, иначе будет выброшено исключение
Пример Enum с конструктором на фото
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍6🔥2
ModelMapper — автоматическое отображение объектов в Java
Устали писать вручную мапперы между Entity и DTO?
ModelMapper сделает это за вас😱
—> Это лёгкая библиотека для Java, которая упрощает маппинг объектов.
—> Идеально подходит для REST API: быстро конвертируйте сущности в DTO и обратно.
—> Поддерживает вложенные объекты, конфигурацию и даже сложные правила сопоставления
👉 Java Portal
Устали писать вручную мапперы между Entity и DTO?
ModelMapper сделает это за вас
—> Это лёгкая библиотека для Java, которая упрощает маппинг объектов.
—> Идеально подходит для REST API: быстро конвертируйте сущности в DTO и обратно.
—> Поддерживает вложенные объекты, конфигурацию и даже сложные правила сопоставления
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍4🔥1
image_2025-04-18_09-03-49.png
1.5 MB
Что такое MapStruct?
MapStruct — это мощный процессор аннотаций для Java, который автоматически генерирует мапперы между объектами прямо на этапе компиляции
Очень быстрый, безопасный по типам и отлично работает в IDE
Идеально подходит для преобразования между Entity и DTO в REST API😊
👉 Java Portal
MapStruct — это мощный процессор аннотаций для Java, который автоматически генерирует мапперы между объектами прямо на этапе компиляции
Очень быстрый, безопасный по типам и отлично работает в IDE
Идеально подходит для преобразования между Entity и DTO в REST API
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3❤2
Оптимизация вложенных циклов в Java: пример из реальной практики
🔜 Читать: клик
👉 Java Portal | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🏆2🔥1
SpringBoot_Annotations_RU_Linked.pdf
31.5 KB
Полезный PDF с аннотациями Spring и краткими пояснениями на русском
Удобно для повторения и изучения
👉 Java Portal
Удобно для повторения и изучения
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2🔥2
На фото показана проблема N+1 в JPA и её решение.
🟣
☑
Показана разница в коде и как избежать лишних запросов при загрузке связанных сущностей (Author → Book)
👉 Java Portal
findAll()
— вызывает 1 запрос к авторам + по 1 запросу на книги каждого автора → N+1 запросовJOIN FETCH
в @Query
— решает проблему, загружая авторов и их книги одним SQL-запросомПоказана разница в коде и как избежать лишних запросов при загрузке связанных сущностей (Author → Book)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤3😁1🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
8 алгоритмов балансировки нагрузки, которые стоит знать:
🍩 Round Robin – запросы распределяются равномерно между серверами по очереди.
🍩 Least Connections – запрос направляется на сервер с наименьшим числом активных соединений.
🍩 Weighted Round Robin – серверам присваиваются веса, и запросы распределяются с учетом этих весов.
🍩 Weighted Least Connections – учитывается как число соединений, так и вес сервера.
🍩 IP Hash - запрос направляется на сервер в зависимости от хэша IP-адреса клиента.
🍩 Least Response Time – запрос идет на сервер с наименьшим временем ответа.
🍩 Random – сервер выбирается случайным образом.
🍩 Least Bandwidth – запрос идет на сервер с наименьшей текущей загрузкой сети.
👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍5🔥2😁1
image_2025-04-22_06-02-27.png
578.5 KB
Простое объяснение паттерна Фабрика
Вы создаёте уведомления. Сначала у вас только
Потом появляются другие типы:
⏩ SMSNotification
⏩ PushNotification
⏩ SlackNotification
⏩ WhatsAppNotification
Появляется дублирующийся код:
Проблемы:
—> Повтор кода.
—> Нарушение принципа Open/Closed.
—> Жёсткая связка с классами.
—> Сложно тестировать и расширять.
Как фабрика вас спасает
Вместо создания объектов напрямую или написания
Фабрика:
—> Скрывает логику создания
—> Решает, какой подкласс вернуть
—> Делает основной код чистым и слабо связанным
Теперь вам всё равно, как он создаётся. Вы просто запрашиваете и получаете готовый объект
Пример кода на фото😊
👉 Java Portal
Вы создаёте уведомления. Сначала у вас только
EmailNotification
:new EmailNotification(to, subject, body);
Потом появляются другие типы:
Появляется дублирующийся код:
if (type.equals("email")) new EmailNotification(...)
else if (type.equals("sms")) new SMSNotification(...)
...
Проблемы:
—> Повтор кода.
—> Нарушение принципа Open/Closed.
—> Жёсткая связка с классами.
—> Сложно тестировать и расширять.
Как фабрика вас спасает
Вместо создания объектов напрямую или написания
switch/if
, вы создаёте NotificationFactory
Фабрика:
—> Скрывает логику создания
—> Решает, какой подкласс вернуть
—> Делает основной код чистым и слабо связанным
Теперь вам всё равно, как он создаётся. Вы просто запрашиваете и получаете готовый объект
Пример кода на фото
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4🔥1
Коротко о фабричном методе
Начиная с JDK 19, класс HashMap предоставляет новый фабричный метод:
В этом примере возвращаемая карта будет достаточно большой, чтобы вместить 10 отображений. У неё значение коэффициента загрузки по умолчанию — 0.75. Поэтому фактическая вместимость (capacity) будет больше, чем переданный аргумент 10. Вместимость вычисляется как:
Это отличается от конструктора:
В этом случае аргумент 10 — это начальная вместимость (фактическая вместимость будет степенью двойки).
Также важно: фабричный метод внутри вызывает конструктор🔧
Java Portal
HashMap::newHashMap
Начиная с JDK 19, класс HashMap предоставляет новый фабричный метод:
var map = HashMap.<Key, String>newHashMap(10);
В этом примере возвращаемая карта будет достаточно большой, чтобы вместить 10 отображений. У неё значение коэффициента загрузки по умолчанию — 0.75. Поэтому фактическая вместимость (capacity) будет больше, чем переданный аргумент 10. Вместимость вычисляется как:
10 <-- количество отображений
capacity = -----
0.75 <-- коэффициент загрузки
Это отличается от конструктора:
var map = new HashMap<Key, String>(10);
В этом случае аргумент 10 — это начальная вместимость (фактическая вместимость будет степенью двойки).
Также важно: фабричный метод внутри вызывает конструктор
Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2🌭1
Полезнейшая инфографика для тех, кто работает с Git — всё от основ и ветвлений до разрешения конфликтов и cherry-pick
Сохрани, чтобы не гуглить каждый раз😉
👉 Java Portal
Сохрани, чтобы не гуглить каждый раз
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥4
БЕСПЛАТНЫЙ курс по backend-разработке на Java
Начни с основ Java и ООП
—> Коллекции, Исключения, Работа с файлами (I/O)
—> JDBC, MySQL
—> Spring Boot 3, REST API
—> Аутентификация с JWT, Docker + практические проекты😱
⏩ начать
👉 Java Portal
Начни с основ Java и ООП
—> Коллекции, Исключения, Работа с файлами (I/O)
—> JDBC, MySQL
—> Spring Boot 3, REST API
—> Аутентификация с JWT, Docker + практические проекты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍3🔥2
Ты используешь 😬
1.
2.
3.
👉 Java Portal
CompletableFuture
, но где-то по ходу выполнения возникает исключение. Как с ним справиться? CompletableFuture
предоставляет 3 способа обработки исключений 1.
exceptionally()
— этот метод принимает функцию обработки ошибки, которая выполняется, когда происходит исключение. Здесь у нас есть доступ только к ошибке, но не к данным, возвращённым с предыдущего этапа.2.
handle()
— этот метод принимает результат и исключение и выполняется всегда после завершения предыдущего этапа. Это может быть как в случае успешного выполнения, так и при возникновении исключений.3.
whenComplete()
— метод похож на handle()
, но не изменяет результат. Он возвращает CompletableFuture
и может быть использован в цепочке. Используется для выполнения побочных действий после завершения, вне зависимости от результатаPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤4👍3
Порядок выполнения блоков кода при наследовании в Java
1. Статический блок родителя
2. Статический блок потомка
3. Инициализационный (instance) блок родителя
4. Конструктор родителя
5. Инициализационный (instance) блок потомка
6 Конструктор потомка
При создании объекта класса-наследника сначала выполняются все статические и инициализационные блоки родителя, затем конструкция родителя, и только после этого — логика наследника😊
Java Portal
1. Статический блок родителя
2. Статический блок потомка
3. Инициализационный (instance) блок родителя
4. Конструктор родителя
5. Инициализационный (instance) блок потомка
6 Конструктор потомка
При создании объекта класса-наследника сначала выполняются все статические и инициализационные блоки родителя, затем конструкция родителя, и только после этого — логика наследника
Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥9❤2
В Java ключевые слова бывают двух типов: зарезервированные и контекстные.
Зарезервированные ключевые слова нельзя использовать, например, для имени метода — метод с именем
Контекстные ключевые слова, напротив, можно использовать в качестве идентификаторов в большинстве случае
Начиная с Java 24, контекстные ключевые слова включают следующие:
Их можно использовать почти везде, где допустимо имя идентификатора
👉 Java Portal
Зарезервированные ключевые слова нельзя использовать, например, для имени метода — метод с именем
try
не скомпилируетсяКонтекстные ключевые слова, напротив, можно использовать в качестве идентификаторов в большинстве случае
Начиная с Java 24, контекстные ключевые слова включают следующие:
exports opens requires uses yield
module permits sealed var
non-sealed provides to when
open record transitive with
Их можно использовать почти везде, где допустимо имя идентификатора
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2