Генератор надёжных паролей на Java
Пароль с заглавными, строчными, цифрами и спецсимволами? Легко.
С помощью библиотеки
Просто, удобно и безопасно.😊
👉 Java Portal
Пароль с заглавными, строчными, цифрами и спецсимволами? Легко.
С помощью библиотеки
Passay
можно сгенерировать крепкий 10-символьный пароль буквально в пару строк.Просто, удобно и безопасно.
Please open Telegram to view this post
VIEW IN TELEGRAM
Понимание 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
Типы выходных файлов, создаваемых при компиляции 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
Please open Telegram to view this post
VIEW IN TELEGRAM
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
Реальные проекты и отличная возможность для старта карьеры: Летняя школа бэкенд‑разработки Яндекса открыла набор
Начинающие бэкендеры, есть планы на лето? Летняя школа бэкенда — ваш шанс прокачаться в разработке, даже если вы обладаете базовыми знаниями в Python, Java или C++.
Как проходит обучение:
— со 2 июня по 27 июля — онлайн-лекции, семинары и практические задания
— с 28 июля по 24 августа — разработка реальных проектов офлайн или онлайн
Вас ждут:
— работа в фулстек-командах в коворкингах Яндекса
— лекции от специалистов компании в летнем лектории
— возможность стать частью команды и получить офер: больше половины выпускников становятся стажерами или сотрудниками компании
Школа бесплатная, но нужно пройти отбор. Если у вас есть минимальный опыт в бэкенде и желание стать частью одной из команд сервисов, то отправляйте заявку на обучение до 27 апреля!
Начинающие бэкендеры, есть планы на лето? Летняя школа бэкенда — ваш шанс прокачаться в разработке, даже если вы обладаете базовыми знаниями в Python, Java или C++.
Как проходит обучение:
— со 2 июня по 27 июля — онлайн-лекции, семинары и практические задания
— с 28 июля по 24 августа — разработка реальных проектов офлайн или онлайн
Вас ждут:
— работа в фулстек-командах в коворкингах Яндекса
— лекции от специалистов компании в летнем лектории
— возможность стать частью команды и получить офер: больше половины выпускников становятся стажерами или сотрудниками компании
Школа бесплатная, но нужно пройти отбор. Если у вас есть минимальный опыт в бэкенде и желание стать частью одной из команд сервисов, то отправляйте заявку на обучение до 27 апреля!
Продвинутые дженерики в Java
Если ты уже знаком с базовыми дженериками, пора копнуть глубже:
—> Ограниченные типы (
—> Подстановочные знаки (
—> Стирание типов (
🎩
👉 Java Portal
Если ты уже знаком с базовыми дженериками, пора копнуть глубже:
—> Ограниченные типы (
<T extends Number>
) — позволяют задать верхнюю (или нижнюю) границу для параметра типа.—> Подстановочные знаки (
? extends
, ? super
) — дают гибкость при работе с обобщёнными методами и коллекциями.—> Стирание типов (
type erasure
) — механизм, из-за которого вся информация о типах удаляется во время компиляции, и на этапе выполнения остаются только Object и приведенияPlease open Telegram to view this post
VIEW IN TELEGRAM
Основы 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
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
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
Оптимизация вложенных циклов в Java: пример из реальной практики
🔜 Читать: клик
👉 Java Portal | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
SpringBoot_Annotations_RU_Linked.pdf
31.5 KB
Полезный PDF с аннотациями Spring и краткими пояснениями на русском
Удобно для повторения и изучения
👉 Java Portal
Удобно для повторения и изучения
Please open Telegram to view this post
VIEW IN TELEGRAM
Оказывается, чтобы расти в доходе в ML и IT, недостаточно закончить топовый матфак, работать 24/7 и знать все фреймворки мира
Да, это круто, но это – далеко не главное. На самом деле чаще всего выигрывают людис прокаченным софт скиллами – те, кто уверенно ведет диалог и грамотно доносит ценность своих решений.
Вот вам пример: Senior ML-инженер Олег Андриянов рассказывает в своем канале, как его доход вырос за 4 года в 12,5 раз. В блоге куча крутых статей, вот наш топ-3:
– Как гарантированно повысить свою зарплату?
– Какие 2 ключевых софт-скилла делают тебя на голову выше конкурентов на рынке труда?
– Как Олегу удалось вырасти в доходах в 12,5 раз за 4 года?
У автора большой опыт руководителя, так что он знает, чего хочет от сотрудника индустрия, и в его канале – не фантазии, а настоящие практические инструменты, которые помогут быстрее достичь карьерных целей.
Подписывайся, если хочешь стать незаменимым в любой IT-команде: @andriyanov_leads
Реклама. СЗ Волков Д.Д. ИНН: 370701873479, erid: 2Vtzqwy7BPx
Да, это круто, но это – далеко не главное. На самом деле чаще всего выигрывают люди
Вот вам пример: Senior ML-инженер Олег Андриянов рассказывает в своем канале, как его доход вырос за 4 года в 12,5 раз. В блоге куча крутых статей, вот наш топ-3:
– Как гарантированно повысить свою зарплату?
– Какие 2 ключевых софт-скилла делают тебя на голову выше конкурентов на рынке труда?
– Как Олегу удалось вырасти в доходах в 12,5 раз за 4 года?
У автора большой опыт руководителя, так что он знает, чего хочет от сотрудника индустрия, и в его канале – не фантазии, а настоящие практические инструменты, которые помогут быстрее достичь карьерных целей.
Подписывайся, если хочешь стать незаменимым в любой IT-команде: @andriyanov_leads
Реклама. СЗ Волков Д.Д. ИНН: 370701873479, erid: 2Vtzqwy7BPx
Telegram
Развитие в IT | Олег Андриянов
Личный блог Lead ML инженера:
— пишу, как быстрее расти в деньгах через хард и софт скиллы
— разбираю новости об ИИ
Записаться на карьерную консультацию: @onlycska
По вопросам сотрудничества: @P_tatiana07
— пишу, как быстрее расти в деньгах через хард и софт скиллы
— разбираю новости об ИИ
Записаться на карьерную консультацию: @onlycska
По вопросам сотрудничества: @P_tatiana07
Please open Telegram to view this post
VIEW IN TELEGRAM
На фото показана проблема 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
Осталось всего 2 дня — углубитесь в функциональное программирование на Scala в Otus 📢
24 апреля в 20:00 пройдёт открытый вебинар с Алексеем Воронцом — руководителем разработки в Naumen, 14 лет опыта, из них 9 лет на Scala. Он расскажет:
— почему Scala — функциональный язык
— как работать с ключевыми библиотеками
— как повысить выразительность кода
Если вы уже знакомы со Scala или желаете перейти на него и хотите развивать функциональный подход в своих проектах — этот вебинар для вас.
Каждый участник:
— сможет задать вопросы эксперту
— получит скидку на полный курс по Scala-разработке
👉 Не упустите возможность перейти на новый уровень — регистрируйтесь, осталось 2 дня до начала
https://otus.pw/J8FF/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
24 апреля в 20:00 пройдёт открытый вебинар с Алексеем Воронцом — руководителем разработки в Naumen, 14 лет опыта, из них 9 лет на Scala. Он расскажет:
— почему Scala — функциональный язык
— как работать с ключевыми библиотеками
— как повысить выразительность кода
Если вы уже знакомы со Scala или желаете перейти на него и хотите развивать функциональный подход в своих проектах — этот вебинар для вас.
Каждый участник:
— сможет задать вопросы эксперту
— получит скидку на полный курс по Scala-разработке
👉 Не упустите возможность перейти на новый уровень — регистрируйтесь, осталось 2 дня до начала
https://otus.pw/J8FF/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
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
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
В 2025 году на кодинге уже не вывезешь, перспектива года - Информационная Безопасность.
Ловите полезные каналы, которые помогут ворваться в новое направление.
Please open Telegram to view this post
VIEW IN TELEGRAM
Коротко о фабричном методе
Начиная с 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