Java Backend | YeaHub
491 subscribers
101 photos
22 videos
2 files
215 links
Теория, подготовка к интервью и курсы для Java разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#Собес
🤔 Почему массив символов лучше строки для хранения пароля?

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🛞 Основы Java Enum

Синтаксис
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}


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

Особенности

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

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

👉Новости 👉База вопросов
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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👨‍💻 На фото показана проблема N+1 в JPA и её решение.

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

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

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Какие GOF-шаблоны используются в пуле строк?

Для реализации пула строк в Java используется шаблон "Пул объектов" (Object Pool). Он позволяет повторно использовать объекты, в данном случае строки, вместо создания новых. В Java это реализовано через внутренний механизм работы с пулом строк. Кроме того, такие шаблоны, как "Одиночка" (Singleton) и "Фабрика" (Factory), могут быть использованы для управления доступом к строкам в пуле.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😊 8 алгоритмов балансировки нагрузки, которые стоит знать

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

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

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

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

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

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

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

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👋 Ты используешь CompletableFuture, но где-то по ходу выполнения возникает исключение. Как с ним справиться?

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

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

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

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤓 Порядок выполнения блоков кода при наследовании в Java

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

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

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

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

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

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

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Что такое пул строк и для чего он нужен?

Пул строк в Java - это область памяти, где хранятся все уникальные строковые литералы. Когда создается новая строка, Java проверяет, существует ли уже такая строка в пуле, и если существует, возвращает ссылку на существующий объект, а не создает новый. Это помогает экономить память и ускоряет выполнение программы.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤯 В Java ключевые слова бывают двух типов: зарезервированные и контекстные.

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

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

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

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


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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😱 Какие типы ссылок существуют?

Существует 4 типа ссылок, которые определяют, как объект будет обрабатываться сборщиком мусора (Garbage Collector).

1⃣ Strong Reference

Это ссылки, которые используются по умолчанию.
String strongRef = new String("Strong Reference");


Объект, на который указывает сильная ссылка, никогда не будет удален сборщиком мусора, пока существует эта ссылка.
Используйте, когда объект нужен в течение всего времени выполнения.

2⃣ Soft Reference

Создаются с помощью класса SoftReference. Soft ссылка удерживает объект в памяти, пока в JVM достаточно свободной памяти. Если памяти не хватает, объект будет удален.
SoftReference<String> softRef = new SoftReference<>(new String("Soft Reference"));
String softObj = softRef.get();


Удобны для реализации кэшей. Например, если объект можно восстановить, но не хочется держать его в памяти постоянно.
Сборщик мусора удаляет объекты, на которые ссылаются мягкие ссылки, только в случае нехватки памяти.

3⃣ Weak Reference

Создаются с помощью класса WeakReference. Объект, на который ссылается слабая ссылка, удаляется сборщиком мусора, как только на него больше нет сильных или мягких ссылок.
WeakReference<String> weakRef = new WeakReference<>(new String("Weak Reference"));
String weakObj = weakRef.get();


Часто используются в структурах данных, таких как WeakHashMap, для предотвращения удержания ненужных объектов.
Удобны для создания ссылок на временные объекты.

4⃣ Phantom Reference

Создаются с помощью класса PhantomReference. Эти ссылки используются исключительно для отслеживания, когда объект будет удален сборщиком мусора.
PhantomReference<String> phantomRef = new PhantomReference<>(new String("Phantom Reference"), new ReferenceQueue<>());


Метод get() у фантомной ссылки всегда возвращает null.
Объекты, на которые ссылаются фантомные ссылки, добавляются в ReferenceQueue, когда сборщик мусора их удаляет.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😇 OpenGLFX — библиотека для интеграции OpenGL-графики с JavaFX!

Она добавляет компонент GLCanvas, который позволяет отображать графику OpenGL как обычный элемент JavaFX. Библиотека поддерживает различные движки рендеринга, включая LWJGL, JOGL, LWJGL2 и LibGDX, и оптимизирована для каждой платформы.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Что такое примитивные классы?

Примитивные классы - это классы-обертки для примитивных типов данных, которые позволяют использовать примитивы как объекты. Например, Integer для типа int, Double для типа double .

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
😊 Лучшие практики программирования на Java
Читать клик

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😐 learn.java — официальный сайт от Oracle для изучения Java. Здесь всё чётко и по делу

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

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Component → Controller → Service → Repository → База данных → Ответ

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #CIcd
🤔 Что такое Observability?

Observability (наблюдаемость) - это способность системы предоставлять метрики, логи и трассировки, чтобы быстро находить и исправлять ошибки.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🛞 Многопоточность в Java

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

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

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

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😵‍💫 ProcessHandle.info()

Метод ProcessHandle.info() позволяет получать информацию о запущенных процессах в системе, таких как аргументы командной строки, время запуска и использование ресурсов. Это полезно для мониторинга процессов в Java-приложениях.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😎 Аннотации @OneToMany и @ManyToOne помогают определить связи между сущностями в базе данных

Пример:

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

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


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

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


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM