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

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

@java_iibrary

Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Subscribers
11.6K
Photos
1.6K
Videos
118
Links
1.6K

Showing posts older than #1371 · Back to latest

Older Posts 20 shown
Post #1370 3.44K
Дорожная карта Spring Boot для Java-разработчиков

💪💪💪

👉 Java Portal
  • 👍 14
  • 🤔 2
Post #1368 3.16K
В Java можно столкнуться с ситуацией, когда поле final кажется имеющим два разных значения. Рассмотрим такой пример:

void main() {
var after = new Final(this::before);

IO.println("After value=" + after.value);
}

private void before(Final before){
IO.println("Before value=" + before.value);
}

class Final {
final int value;

Final(Consumer<? super Final> listener) {
listener.accept(this);
value = 123;
}
}


Результат выполнения будет таким:

Before value=0  
After value=123


Это пример утечки this.

JEP 401 называет это larval object leakage — ситуация, когда объект, ещё не до конца инициализированный, "просачивается" из конструктора и используется раньше времени.

В JDK 24 в рамках JEP о гибких телах конструкторов (Flexible Constructor Bodies) эта проблема решается следующим образом:

Код в начале конструктора не должен использовать this, кроме как для инициализации полей, у которых нет своих инициализаторов.


Иначе говоря, в начальной части конструктора теперь нельзя "утечь" наружу с this, пока объект не готов

👉 Java Portal
  • 👍 19
  • 🔥 1
Post #1367 2.83K
Pattern Matching в switch — Java

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

👉 Java Portal | #cтатья
  • 👍 4
  • ❤ 3
Post #1361 3.05K
В Java тело лямбды прозрачно для this. Например, следующий код выведет Hello, World!:

private Runnable runnable = () -> {
System.out.println(this);
};

@Override
public String toString() {
return "Hello, World!";
}

void main() {
runnable.run();
}


А если заменить лямбду на анонимный класс, результат будет вроде InnerClassThis$1@568bf312:

private Runnable runnable = new Runnable() {
@Override public void run() {
System.out.println(this);
}
};

@Override
public String toString() {
return "Hello, World!";
}

void main(String[] args) {
runnable.run();
}


То есть у лямбды нет собственного this — она использует this из внешнего контекста. Это чётко описано в спецификации Java:

Значение this в теле лямбды — то же самое, что и this во внешнем контексте.


Если хочешь разобраться глубже, смотри официальный гайд

👉 Java Portal
  • 👍 14
  • 🔥 1
Post #1360 2.89K
Как синхронизировать двунаправленные ассоциации сущностей с помощью JPA и Hibernate

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

👉 Java Portal | #cтатья
  • 👍 4
  • 🔥 3
Post #1358 2.87K
Аннотации @OneToMany и @ManyToOne помогают определить связи между сущностями в базе данных

Пример:

Пользователь может иметь много заказов →

@OneToMany(mappedBy = "user")
private List<Order> orders;


Каждый заказ принадлежит одному пользователю →

@ManyToOne
@JoinColumn(name = "user_id")
private User user;


👉 Java Portal
  • 👍 11
  • ❤ 3
  • 🔥 2
Post #1357 2.89K
Модификаторы и пакеты доступа Java

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

👉 Java Portal | #cтатья
  • 👍 4
  • ❤ 2
Post #1356 3.06K
Многопоточность в Java

Есть основной метод, а вместе с ним — несколько потоков

Каждый поток выполняет свою задачу одновременно с другими

Это даёт прирост в скорости и производительности.

Полезно, когда нужно делать несколько вещей сразу — например, загружать файлы или обслуживать пользователей

👉 Java Portal
  • 👍 9
  • ❤ 2
  • 🤔 1
Post #1355 2.93K
Component → Controller → Service → Repository → База данных → Ответ

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

👉 Java Portal
  • 👍 11
  • ❤ 2
  • 🔥 1
Post #1354 3.16K
Обзор 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
  • 👍 10
  • 🔥 1
  • 💊 1
Post #1353 3.04K
Недавно открыл для себя learn.java — официальный сайт от Oracle для изучения Java. Здесь всё чётко и по делу 😈

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

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

👉 Java Portal
  • 👍 13
  • 👀 2
Post #1352 2.83K
Как вызвать 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
  • 👍 8
  • 🔥 1
Post #1351 2.89K
Откопал шикарную штуку — Python Tutor

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

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

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

👉 Java Portal
  • ❤ 7
  • 🔥 5
  • 🤣 4
  • 😁 1
  • 🤯 1
Post #1349 2.94K
Лучшие практики программирования на Java

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

👉 Java Portal | #cтатья
  • 👍 4
  • ❤ 2
  • 💊 2
  • 🔥 1
  • 👀 1
Post #1347 3.01K
image_2025-04-27_06-48-52.png415.9 KB
Простое объяснение паттерна 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
  • 👍 10
  • ❤ 4
Post #1345 3.19K
Для компилятора 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
  • 👍 23
  • ❤ 4
  • 🤣 3
  • 🤯 2
Post #1344 2.86K
Что такое Docker? 🤷‍♂️

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

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

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

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

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

👉 Java Portal
  • ❤ 7
  • 👍 5
  • 🤣 3
  • 😁 2
Post #1343 2.88K
В Java ключевые слова бывают двух типов: зарезервированные и контекстные.

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

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

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

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


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

👉 Java Portal
  • 👍 5
  • ❤ 2
Post #1342 2.79K
Порядок выполнения блоков кода при наследовании в Java

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

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

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

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

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

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

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

Java Portal
  • 👍 13
  • 🔥 9
  • ❤ 2
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →