Продвинутые дженерики в 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