Java for Beginner
685 subscribers
585 photos
161 videos
12 files
898 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Всем привет! ✌️

Сегодня мы вновь соберемся с @Shikin_Anatoliy, в 16:00 по МСК в Яндекс.Телемост, чтобы закончить тестовое задание по написанию футбольного сервиса. ⚽️

Приходите и учитесь вместе с нами! 💪

Ждем всех 🫵
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥11
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
Пишем тестовое задание от реального работодателя для новичков! Часть 2 (начало).

Встреча от 13.04.25

Запись встречи -
YOUTUBE
RUTUBE

На сегодняшней встрече наш подписчик @Shikin_Anatoliy рискнул продолжить писать тестовое задание от реального работодателя.

Что мы успели в рамках второй серии:
- Доработали Player
- Создали CRUD для Team
- Все простестили и проработали

Допустили и решили пару систематических ошибок, повторили основы написания.

Ждите продолжения!

Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!

@Shikin_Anatoliy - респект и уважуха 💪
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍1
📌 Факт дня:

А вы знали, что первое фото, загруженное в интернет, было сделано в 1992 году?

Первое фото, загруженное в интернет, было сделано в 1992 году и изображало комедийную группу "Les Horribles Cernettes", состоявшую из сотрудников CERN.
Это событие стало важной вехой в истории цифровой фотографии и интернета.


Взглянуть на историю

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
📌 Цитата дня: Брэд Фельд

"Стартапы — это искусство управления хаосом."


Брэд Фельд, венчурный капиталист, сказал это в 2012 году в книге "Startup Communities", объясняя природу устройства своих стартапов.

Почитать короткую биографию
Его история успеха, которую мы должны повторить

#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
@LazyCollection в Hibernate

Аннотация @LazyCollection управляет стратегией ленивой загрузки для коллекций (например, @OneToMany, @ManyToMany) в Hibernate. Определяет, когда и как должны загружаться связанные сущности.
Пакет: org.hibernate.annotations
Применяется к: полям-коллекциям (List, Set, Map и др.) с аннотациями @OneToMany или @ManyToMany.

Параметры и настройки

Аннотация принимает один обязательный параметр — value, который может быть одним из следующих вариантов:

LazyCollectionOption.TRUE (по умолчанию для @OneToMany и @ManyToMany):
Коллекция загружается лениво (при первом обращении).
Используется прокси-объект (PersistentBag, PersistentSet).


LazyCollectionOption.EXTRA:
"Сверхленивая" загрузка: Hibernate загружает только необходимые данные при вызове методов коллекции (например, size(), contains()).
Полезно для больших коллекций, чтобы избежать полной загрузки.

LazyCollectionOption.FALSE:
Коллекция загружается жадно (eager loading), аналогично fetch = FetchType.EAGER.
Не рекомендуется для больших коллекций из-за риска N+1 проблемы.

Жизненный цикл и обработка

Инициализация прокси:
При загрузке родительской сущности коллекция заменяется прокси (реализацией Hibernate).
Прокси перехватывает вызовы методов (например, getItems()) и загружает данные.


Загрузка данных:
Для TRUE: при первом обращении к коллекции выполняется SQL-запрос.
Для EXTRA: методы вроде size() генерируют SELECT COUNT(*), а не загружают все элементы.


Сессия и LazyInitializationException:

Если коллекция запрашивается после закрытия сессии, возникнет исключение (если не используется OpenSessionInView).

Механизмы Hibernate и Spring Boot

Глобальная настройка ленивой загрузки:
Параметр spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true (не рекомендуется, приводит к N+1).
spring.jpa.open-in-view=true (держит сессию открытой до конца HTTP-запроса).


Интеграция с FetchType:
@LazyCollection переопределяет поведение fetch в @OneToMany:

@OneToMany(fetch = FetchType.EAGER) // Игнорируется, если есть @LazyCollection
@LazyCollection(LazyCollectionOption.TRUE)
private List<Order> orders;


Оптимизация запросов:
Для EXTRA Hibernate использует:

SELECT COUNT(*) FROM orders WHERE user_id = ? — для collection.size().
SELECT id FROM orders WHERE user_id = ? LIMIT 1 — для collection.isEmpty().


Примеры использования

Ленивая загрузка с проверкой размера без загрузки элементов:
@OneToMany
@LazyCollection(LazyCollectionOption.EXTRA)
private Set<Comment> comments; // Для comments.size() не загружает все комментарии


Отключение ленивой загрузки (редкий случай):
@OneToMany
@LazyCollection(LazyCollectionOption.FALSE) // Аналог FetchType.EAGER
private List<Post> posts;


Ограничения и лучшие практики

N+1 проблема: Даже с LazyCollectionOption.TRUE при обходе коллекции (for (Order o : user.getOrders())) выполняется один запрос для загрузки всех элементов. Решение: @EntityGraph или JOIN FETCH.
EXTRA не поддерживает List.get(index): Для этого требуется полная загрузка.
Тестирование: В тестах с закрытой сессией используйте Hibernate.initialize(collection).


#Java #Training #Hard #Spring #Hibernate #LazyCollection
👍1
Что выведет код?

import java.util.HashMap;

public class Task140425 {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put(null, 1);
map.put("null", 2);
map.put(null, 3);

System.out.println(map.get(null) + " " + map.get("null"));
}
}


#Tasks
👍1
Варианты ответа:
Anonymous Quiz
8%
1 2
53%
3 2
13%
null 2
28%
Ошибка выполнения
👍2
Короче качаем вайб, нафиг нам Java 😉

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🤪1
Вопросы с собеседования 👩‍💻

Какой метод используется для преобразования строки в массив символов?
Anonymous Quiz
4%
getChars()
83%
toCharArray()
6%
split()
6%
chars()
👍1
@LazyToOne в Hibernate

Аннотация
@LazyToOne управляет стратегией ленивой загрузки для ассоциаций @ManyToOne и @OneToOne в Hibernate. В отличие от стандартного FetchType.LAZY, она позволяет более гибко настраивать механизм проксирования и инициализации связанных сущностей.

Пакет: org.hibernate.annotations

Применяется к: полям или методам с аннотациями
@ManyToOne или @OneToOne.

1. Параметры и настройки

Аннотация @LazyToOne принимает один обязательный параметр — value, который может быть одним из следующих вариантов:

Доступные варианты загрузки:
LazyToOneOption.PROXY (по умолчанию, если FetchType.LAZY):
Создается прокси-объект, который загружает данные только при первом обращении.
Если связанная сущность уже удалена (и
@ManyToOne nullable), может возникнуть LazyInitializationException.

LazyToOneOption.NO_PROXY:
Использует байткодовую модификацию (требует инструментирования, например, через javassist).
Позволяет избежать некоторых проблем с прокси, но сложнее в настройке.


LazyToOneOption.FALSE:
Эквивалентно FetchType.EAGER — загружает сущность сразу.

2. Жизненный цикл и обработка

При загрузке сущности:
Если PROXY → Hibernate подставляет прокси-объект, не загружая данные из БД.
Если NO_PROXY → генерируется специальный подкласс (требует hibernate.bytecode.provider=javassist).


При первом обращении:
Прокси инициализируется и выполняет SQL-запрос.

При закрытии сессии:
Если сессия закрыта до обращения к полю → LazyInitializationException.

Отличие от стандартного FetchType.LAZY
Обычный LAZY в @ManyToOne/@OneToOne не всегда работает (особенно если optional=false).
@LazyToOne дает больше контроля над механизмом ленивой загрузки.

3. Механизмы Hibernate и Spring Boot

Настройки, влияющие на @LazyToOne
hibernate.bytecode.provider (для NO_PROXY):

spring.jpa.properties.hibernate.bytecode.provider=javassist
Без этого NO_PROXY может не работать.


Открытие сессии в View (OpenSessionInView)
``
spring.jpa.open-in-view=true # Держит сессию открытой до конца HTTP-запроса
Позволяет избежать LazyInitializationException в веб-приложениях.
```

Глобальная настройка ленивой загрузки
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true  # Не рекомендуется!
(Может привести к N+1 и утечкам памяти.)


4. Примеры использования

Пример 1: Ленивая загрузка с прокси (PROXY)
@Entity
public class Order {
@ManyToOne(fetch = FetchType.LAZY) // Стандартный LAZY
@LazyToOne(LazyToOneOption.PROXY) // Явное указание прокси
private User user;
}


Пример 2: Ленивая загрузка без прокси (NO_PROXY)
@Entity
public class Employee {
@OneToOne(fetch = FetchType.LAZY)
@LazyToOne(LazyToOneOption.NO_PROXY) // Требует инструментирования
private ParkingSpot parkingSpot;
}


#Java #Training #Hard #Spring #Hibernate #LazyToOne
👍1
📌 Факт дня:

А вы знали, что первая коммерческая SMS была отправлена в 1992 году?

Первая коммерческая SMS была отправлена 3 декабря 1992 года с текстом "С Рождеством!" от компании Sema Group на сеть Vodafone. Сегодня ежедневно отправляется более 6 миллиардов текстовых сообщений по всему миру. Это событие стало началом эры мобильной коммуникации, которая трансформировала способы общения людей.


proof

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
📌 Цитата дня: Пол Бакхейт

"Делайте что-то простое, что люди будут использовать каждый день."


Пол Бакхейт, создатель Gmail, сказал это в 2004 году в интервью о запуске сервиса, подчеркивая практичность.

Почитать короткую биографию
И о его работе

#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2