java_iibrary | Unsorted

Telegram-канал java_iibrary - Java Portal | Программирование

12073

Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

Subscribe to a channel

Java Portal | Программирование

Component → Controller → Service → Repository → База данных → Ответ

Так проходит поток данных в приложении Spring Boot — чисто и по слоям

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Недавно открыл для себя learn.java — официальный сайт от Oracle для изучения Java. Здесь всё чётко и по делу 😈

> Установка JDK и настройка IDE
> Пошаговые уроки по основам Java
> Практические задания в онлайн-редакторе
> Мини-проекты для закрепления знаний
> Дополнительные ресурсы для углубленного обучения

Плюс — есть Java Playground, где можно писать и запускать код прямо в браузере, без лишних установок

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Откопал шикарную штуку — Python Tutor

Пишете код на Python, Java, C, C++ или JavaScript прямо в браузере, а этот сервис пошагово показывает, что происходит под капотом. Видно каждую переменную, каждую строчку кода в действии

Плюс, тут есть AI-репетитор для разъяснений

Годный инструмент для обучения или разборов: https://pythontutor.com/

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Простое объяснение паттерна Singleton

Ситуация: Вы создаете менеджер подключения к базе данных

Вам нужно подключить ваше приложение к базе данных.

Просто. Вы пишете:

DatabaseConnection conn = new DatabaseConnection();


И всё круто.

Но потом разные части приложения начинают плодить свои собственные соединения. Это дорого (память, сеть) и приводит к багам вроде гонок данных и грязных чтений.

Теперь вы застряли в дебаггинге странных ошибок, причина которых в том, что у вас несколько экземпляров объекта, который должен был быть только один

Проблемы:

⏩Много экземпляров вместо одного общего.
⏩Трата ресурсов.
⏩Нестабильное поведение.
⏩Отладка превращается в ад.

Как Singleton спасает ситуацию

⏩Создаём экземпляр один раз
⏩Переиспользуем везде
⏩Контролируем доступ через одну глобальную точку

class DatabaseConnection {
private static DatabaseConnection instance;

private DatabaseConnection() {
System.out.println("Connecting to database...");
}

public static synchronized DatabaseConnection getInstance() {
if (instance == null) {
instance = new DatabaseConnection();
}
return instance;
}

public void query(String sql) {
System.out.println("Running query: " + sql);
}
}


Когда использовать:

— Когда нужен только один объект (БД, логгер, менеджер потоков)
— Когда нужен глобальный доступ
— Когда важно беречь ресурсы

Java Portal

Читать полностью…

Java Portal | Программирование

Для компилятора Java аннотации — это просто модификаторы объявления

Это значит, что их можно ставить до, после или между обычными модификаторами (например public, final и т.д.).

Причём это относится не только к методам, но и к другим сущностям: типам, конструкторам, полям, параметрам и локальным переменным.

Многие думают, что метод можно аннотировать только вот так:

@Override
public final String toString() {
return "Annotations are just modifiers";
}


Но на самом деле все эти варианты работают одинаково:

public @Override final String toString() ...

public final @Override String toString() ...

Все три записи синтаксически корректны и эквивалентны, компилятору всё равно, где стоит аннотация, он воспринимает её как модификатор 😉

👉 Java Portal

Читать полностью…

Java Portal | Программирование

В Java ключевые слова бывают двух типов: зарезервированные и контекстные.

Зарезервированные ключевые слова нельзя использовать, например, для имени метода — метод с именем try не скомпилируется

Контекстные ключевые слова, напротив, можно использовать в качестве идентификаторов в большинстве случае

Начиная с Java 24, контекстные ключевые слова включают следующие:

exports     opens       requires    uses        yield
module permits sealed var
non-sealed provides to when
open record transitive with


Их можно использовать почти везде, где допустимо имя идентификатора

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Ты используешь CompletableFuture, но где-то по ходу выполнения возникает исключение. Как с ним справиться? 😬

CompletableFuture предоставляет 3 способа обработки исключений

1. exceptionally() — этот метод принимает функцию обработки ошибки, которая выполняется, когда происходит исключение. Здесь у нас есть доступ только к ошибке, но не к данным, возвращённым с предыдущего этапа.

2. handle() — этот метод принимает результат и исключение и выполняется всегда после завершения предыдущего этапа. Это может быть как в случае успешного выполнения, так и при возникновении исключений.

3. whenComplete() — метод похож на handle(), но не изменяет результат. Он возвращает CompletableFuture и может быть использован в цепочке. Используется для выполнения побочных действий после завершения, вне зависимости от результата

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Полезнейшая инфографика для тех, кто работает с Git — всё от основ и ветвлений до разрешения конфликтов и cherry-pick

Сохрани, чтобы не гуглить каждый раз 😉

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Простое объяснение паттерна Фабрика

Вы создаёте уведомления. Сначала у вас только EmailNotification:

new EmailNotification(to, subject, body);


Потом появляются другие типы:

⏩SMSNotification
⏩PushNotification
⏩SlackNotification
⏩WhatsAppNotification

Появляется дублирующийся код:

if (type.equals("email")) new EmailNotification(...)
else if (type.equals("sms")) new SMSNotification(...)
...


Проблемы:

—> Повтор кода.

—> Нарушение принципа Open/Closed.

—> Жёсткая связка с классами.

—> Сложно тестировать и расширять.

Как фабрика вас спасает

Вместо создания объектов напрямую или написания switch/if, вы создаёте NotificationFactory

Фабрика:

—> Скрывает логику создания

—> Решает, какой подкласс вернуть

—> Делает основной код чистым и слабо связанным

Теперь вам всё равно, как он создаётся. Вы просто запрашиваете и получаете готовый объект

Пример кода на фото 😊

👉 Java Portal

Читать полностью…

Java Portal | Программирование

На фото показана проблема N+1 в JPA и её решение.

🟣findAll() — вызывает 1 запрос к авторам + по 1 запросу на книги каждого автора → N+1 запросов

☑JOIN FETCH в @Query — решает проблему, загружая авторов и их книги одним SQL-запросом

Показана разница в коде и как избежать лишних запросов при загрузке связанных сущностей (Author → Book)

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Полезный PDF с аннотациями Spring и краткими пояснениями на русском

Удобно для повторения и изучения

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Что такое MapStruct?

MapStruct — это мощный процессор аннотаций для Java, который автоматически генерирует мапперы между объектами прямо на этапе компиляции

Очень быстрый, безопасный по типам и отлично работает в IDE

Идеально подходит для преобразования между Entity и DTO в REST API 😊

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Основы Java Enum

Синтаксис:👇

enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}


⏩Все значения — это константы
⏩Java преобразует их в public static final переменные

Особенности

—> Перечисления (enums) не могут наследовать другие классы, так как уже наследуют java.lang.Enum
—> Enum может реализовывать интерфейсы
—> Конструкторы могут быть только приватными, иначе будет выброшено исключение

Пример Enum с конструктором на фото ☕️

👉 Java Portal | #cтатья

Читать полностью…

Java Portal | Программирование

Реальные проекты и отличная возможность для старта карьеры: Летняя школа бэкенд‑разработки Яндекса открыла набор

Начинающие бэкендеры, есть планы на лето? Летняя школа бэкенда — ваш шанс прокачаться в разработке, даже если вы обладаете базовыми знаниями в Python, Java или C++.

Как проходит обучение:
— со 2 июня по 27 июля — онлайн-лекции, семинары и практические задания
— с 28 июля по 24 августа — разработка реальных проектов офлайн или онлайн

Вас ждут:
— работа в фулстек-командах в коворкингах Яндекса
— лекции от специалистов компании в летнем лектории
— возможность стать частью команды и получить офер: больше половины выпускников становятся стажерами или сотрудниками компании

Школа бесплатная, но нужно пройти отбор. Если у вас есть минимальный опыт в бэкенде и желание стать частью одной из команд сервисов, то отправляйте заявку на обучение до 27 апреля!

Читать полностью…

Java Portal | Программирование

Чему должны научиться Java-разработчики в 2025 году

🔜 Читать: клик

👉 Java Portal | #cтатья

Читать полностью…

Java Portal | Программирование

Обзор Spring Security

Spring Security предназначен для защиты приложений на базе Spring, предоставляя комплексные сервисы безопасности.

Он предлагает аутентификацию, авторизацию и защиту от распространённых уязвимостей. Архитектура модульная, что позволяет разработчикам адаптировать конфигурацию безопасности под свои задачи.

Ключевые компоненты

1. Authentication Manager
> Authentication Manager отвечает за обработку запросов на аутентификацию. Он делегирует процесс проверки различным провайдерам, которые можно настроить для поддержки разных способов аутентификации (например, логин/пароль, OAuth, LDAP).

2. Security Filter Chain
> Security Filter Chain — это набор фильтров, перехватывающих HTTP-запросы. Каждый фильтр выполняет свою задачу, например, проверку аутентификации, контроль доступа или управление сессией. Фильтры выполняются в определённой последовательности, обеспечивая многоуровневую защиту.

3. UserDetailsService
> Интерфейс UserDetailsService используется для загрузки пользовательских данных, необходимых для процессов аутентификации и авторизации. Разработчики могут реализовать его, чтобы подключаться к внешним источникам данных, таким как базы данных или сторонние сервисы.

4. GrantedAuthority
> GrantedAuthority представляет собой полномочие, предоставляемое объекту Authentication. Обычно используется для определения ролей или разрешений пользователя в приложении, обеспечивая тонкую настройку доступа.

5. Security Context
> Security Context хранит информацию о текущем пользователе — его данные аутентификации и полномочия. Эта информация размещается в потоко-безопасной переменной и доступна на протяжении всей сессии пользователя.


Spring Security можно настраивать через XML или на Java. В современных приложениях предпочтение отдают Java-конфигурации за счёт её простоты и типобезопасности.

На фото базовый пример настройки на Java 🤪

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Как вызвать java.lang.ClassCircularityError в Java

JVM выбрасывает java.lang.ClassCircularityError, если при загрузке классов обнаруживает циклическую зависимость, например:

class A extends B {}
class B extends A {}


Такую ошибку можно спровоцировать, если скомпилировать классы в два этапа или сгенерировать их во время выполнения.

Пример через компиляцию:

Создаем три файла:

// A.java
public class A extends B {}
class B {}

// B.java
public class B extends A {}
class A {}

// Run.java
void main() {
new A();
}


Выполняем команды:

mkdir step{1..3}
javac -d step1 A.java
javac -d step2 B.java
cp step1/A.class step3/
cp step2/B.class step3/
rm A.java B.java
java --enable-preview -cp step3/ Run.java


На этапе запуска получите ошибку:

Exception in thread "main" java.lang.ClassCircularityError: A
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:962)
...
at Run.main(Run.java:2)


👉 Java Portal

Читать полностью…

Java Portal | Программирование

Лучшие практики программирования на Java

🔜 Читать: клик

👉 Java Portal | #cтатья

Читать полностью…

Java Portal | Программирование

Spring Boot против Micronaut

В PDF cравнили ключевые плюсы и минусы

🕵️‍♂️🕵️‍♂️

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Что такое Docker? 🤷‍♂️

Слово Docker происходит от «dock worker» — это работник порта, который загружает и разгружает контейнеры с кораблей. Именно отсюда и пошло название «Docker»

С помощью Docker можно реализовать технологии контейнеризации — изолировать приложения вместе со всеми их зависимостями, чтобы они стабильно работали в любой среде

Контейнеризация — это концепция, с помощью которой мы можем упаковать программное приложение вместе со всеми необходимыми библиотеками и бинарниками для его запуска. Такая упаковка называется образом (image)

Docker — это инструмент, который упрощает процесс создания и запуска контейнеров на основе этих образов

Можно сказать: образ — это как JAR-файл, а контейнер — это уже запущенное приложение

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Порядок выполнения блоков кода при наследовании в Java

1. Статический блок родителя

2. Статический блок потомка

3. Инициализационный (instance) блок родителя

4. Конструктор родителя

5. Инициализационный (instance) блок потомка

6 Конструктор потомка

При создании объекта класса-наследника сначала выполняются все статические и инициализационные блоки родителя, затем конструкция родителя, и только после этого — логика наследника 😊

Java Portal

Читать полностью…

Java Portal | Программирование

БЕСПЛАТНЫЙ курс по backend-разработке на Java

Начни с основ Java и ООП

—> Коллекции, Исключения, Работа с файлами (I/O)
—> JDBC, MySQL
—> Spring Boot 3, REST API
—> Аутентификация с JWT, Docker + практические проекты 😱

⏩начать

👉 Java Portal

Читать полностью…

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

Читать полностью…

Java Portal | Программирование

8 алгоритмов балансировки нагрузки, которые стоит знать:

🍩Round Robin – запросы распределяются равномерно между серверами по очереди.

🍩Least Connections – запрос направляется на сервер с наименьшим числом активных соединений.

🍩Weighted Round Robin – серверам присваиваются веса, и запросы распределяются с учетом этих весов.

🍩Weighted Least Connections – учитывается как число соединений, так и вес сервера.

🍩IP Hash - запрос направляется на сервер в зависимости от хэша IP-адреса клиента.

🍩Least Response Time – запрос идет на сервер с наименьшим временем ответа.

🍩Random – сервер выбирается случайным образом.

🍩Least Bandwidth – запрос идет на сервер с наименьшей текущей загрузкой сети.

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Шпаргалка по сочетаниям клавиш IntelliJ IDEA для Java-разработчиков

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Оптимизация вложенных циклов в Java: пример из реальной практики

🔜 Читать: клик

👉 Java Portal | #cтатья

Читать полностью…

Java Portal | Программирование

ModelMapper — автоматическое отображение объектов в Java

Устали писать вручную мапперы между Entity и DTO?

ModelMapper сделает это за вас 😱

—> Это лёгкая библиотека для Java, которая упрощает маппинг объектов.
—> Идеально подходит для REST API: быстро конвертируйте сущности в DTO и обратно.
—> Поддерживает вложенные объекты, конфигурацию и даже сложные правила сопоставления

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Продвинутые дженерики в Java

Если ты уже знаком с базовыми дженериками, пора копнуть глубже:

—> Ограниченные типы (<T extends Number>) — позволяют задать верхнюю (или нижнюю) границу для параметра типа.
—> Подстановочные знаки (? extends, ? super) — дают гибкость при работе с обобщёнными методами и коллекциями.
—> Стирание типов (type erasure) — механизм, из-за которого вся информация о типах удаляется во время компиляции, и на этапе выполнения остаются только Object и приведения

🎩

👉 Java Portal

Читать полностью…

Java Portal | Программирование

👩‍💻 Повышайте качество кода, сохраняя его чистым и единообразным

С этим легко справиться благодаря функциям автоформатирования кода в IntelliJIDEA.

Выделите фрагмент кода и нажмите ⌘⌥L (на macOS) или Ctrl+Alt+L (на Windows/Linux), чтобы отформатировать его согласно настройкам стиля вашего проекта

👉 Java Portal

Читать полностью…

Java Portal | Программирование

Типы выходных файлов, создаваемых при компиляции Java-кода

.class — > Выполняется в JVM
.jar — > Упаковка кода для повторного использования
.jmod — >Поддерживает модульные Java-приложения
Native Image — > Нативный образ — > Работает без JVM
.war — >Развёртывание веб-приложений на Java
.ear — > Развёртывание корпоративных Java-приложений
.apk — > Установка Java-приложений на Android
.so — > Компиляция в нативный код (shared object)

👉 Java Portal

Читать полностью…
Subscribe to a channel