TGViewer
Channel Public Channel
Java Backend | YeaHub

Java Backend | YeaHub

@yeahub_java_backend

Теория, подготовка к интервью и курсы для Java разработчиков

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

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

Для связи: @ruslan_kuyanets
Subscribers
920
Photos
361
Videos
28
Links
606

Showing posts older than #188 · Back to latest

Older Posts 20 shown
Post #187 198
#Собес
🤔 Какие GOF-шаблоны используются в пуле строк?

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

👉Новости 👉База вопросов
Post #186 228
#полезное
👨‍💻 На фото показана проблема N+1 в JPA и её решение.

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

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

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

👉Новости 👉База вопросов
Post #185 224
image_2025-04-18_09-03-49.png1.5 MB
#полезное
😎 Что такое MapStruct?

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

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

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

👉Новости 👉База вопросов
Post #184 240
#полезное
🛞 Основы Java Enum

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


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

Особенности

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

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

👉Новости 👉База вопросов
Post #183 249
#Собес
🤔 Почему массив символов лучше строки для хранения пароля?

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

👉Новости 👉База вопросов
Post #182 283
#полезное
😎 Продвинутые дженерики в Java

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

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

👉Новости 👉База вопросов
Post #181 245
#полезное
😬 Повышайте качество кода, сохраняя его чистым и единообразным

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

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

👉Новости 👉База вопросов
Post #179 243
#полезное
🏕 Типы выходных файлов, создаваемых при компиляции Java-кода

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

👉Новости 👉База вопросов
Post #178 205
#Собес
🤔 Какая разница между String, StringBuffer и StringBuilder?

String - неизменяемый класс, каждый раз при изменении строки создаетсяновый обьект.
StringBuffer - изменяемый класс, потокобезопасен, но менее эффективен,чем StringBuilder.
StringBuilder - изменяемый класс, не является потокобезопасным, но более эффективен в однопоточных приложениях.

👉Новости 👉База вопросов
Post #177 245
#полезное
🥺 Генератор надёжных паролей на Java

Пароль с заглавными, строчными, цифрами и спецсимволами? Легко.

С помощью библиотеки Passay можно сгенерировать крепкий 10-символьный пароль буквально в пару строк.

👉Новости 👉База вопросов
  • ❤ 3
Post #176 198
#полезное
👍 JWT vs Сессии — что выбрать для авторизации?

Кратко и наглядно разобрали плюсы и минусы двух популярных подходов

👉Новости 👉База вопросов
  • ❤ 1
Post #175 210
#ЛитКод
Задача: 563. Binary Tree Tilt

Дано корневое значение бинарного дерева. Вернуть сумму значений наклонов всех узлов дерева.

Наклон узла дерева - это абсолютная разница между суммой всех значений узлов левого поддерева и всех значений узлов правого поддерева. Если у узла нет левого потомка, то сумма значений узлов левого поддерева считается равной 0. То же правило применяется, если у узла нет правого потомка.

Пример:
Input: root = [1,2,3]
Output: 1
Explanation:
Tilt of node 2 : |0-0| = 0 (no children)
Tilt of node 3 : |0-0| = 0 (no children)
Tilt of node 1 : |2-3| = 1 (left subtree is just left child, so sum is 2; right subtree is just right child, so sum is 3)
Sum of every tilt : 0 + 0 + 1 = 1


👨‍💻 Алгоритм:

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

2⃣Для каждого узла вычислите сумму значений левого и правого поддерева, а также их наклон, добавляя наклон к общей сумме.

3⃣Верните общую сумму наклонов всех узлов.

😎 Решение:
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}

public class Solution {
private int totalTilt = 0;

public int findTilt(TreeNode root) {
sumAndTilt(root);
return totalTilt;
}

private int sumAndTilt(TreeNode node) {
if (node == null) {
return 0;
}
int leftSum = sumAndTilt(node.left);
int rightSum = sumAndTilt(node.right);
int nodeTilt = Math.abs(leftSum - rightSum);
totalTilt += nodeTilt;
return node.val + leftSum + rightSum;
}
}


👉Новости 👉База вопросов
  • ❤ 1
Post #174 201
#Собес
🤔 В чем разница между = = и equals()?

Оператор == сравнивает ссылки на объекты, то есть проверяет, указывают ли две переменные на один и тот же объект в памяти. Метод equals() сравнивает содержимое объектов, что важно, если нужно проверить равенство значений объектов.

👉Новости 👉База вопросов
Post #173 241
#полезное
🤯 Быстрее находите и устраняйте ошибки в коде с IntelliJIDEA

Используйте ⇧F2 (macOS) / Shift + F2 (Windows, Linux), чтобы переходить между проблемами.

Куда бы ни был установлен курсор, IDE сразу перенесёт вас к проблеме с полезными объяснениями и предложениями по быстрому исправлению

👉Новости 👉База вопросов
  • 👍 3
  • ❤ 1
Post #172 197
#полезное
📞 Pattern.asMatch
Predicate()


Метод Pattern.asMatchPredicate(), добавленный в Java 11, позволяет преобразовать регулярное выражение в предикат, который можно использовать для фильтрации потоков или проверки строк на полное совпадение с шаблоном.

👉Новости 👉База вопросов
  • ❤ 1
Post #171 217
#полезное
😴 ByteArrayOutput
Stream.writeTo()

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

👉Новости 👉База вопросов
  • ❤ 1
Post #169 277
#полезное
😇 Уровни доступа при наследовании

Подкласс:

private —> Не видно в подклассе

default —> Видно, если в одном пакете

protected —> Видно в подклассе

public —> Видно всем

👉Новости 👉База вопросов
  • ❤ 3
Post #168 262
#полезное
🤓 Миграция от монолита к микросервисам в Spring Boot Java

🟠Определите границы контекста —> используйте Domain-Driven Design (DDD) для логического разделения модулей

🟠Модульность внутри приложения —> применяйте модули и пакеты Spring для изоляции сервисов

🟠Вынос в микросервисы —> начинайте перенос модулей (например, пользователь, заказы) в отдельные сервисы

🟠Внедрение API Gateway и сервис-дискавери —> используйте Spring Cloud Gateway и Eureka/Nacos

🟠Безопасность взаимодействия —> добавьте уровни безопасности OAuth2/JWT

🟠CI/CD пайплайн —> автоматизируйте сборку, тестирование и деплой с помощью Jenkins/GitHub Actions

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