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

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

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

Для связи: @ruslan_kuyanets
Download Telegram
#статьи
😎 Профилирование JDBC с помощью VisualVM
Читать подробнее

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

HashSet — это коллекция для хранения уникальных элементов без гарантии порядка. Относится к пакету java.util и реализует интерфейс Set, внутренне опираясь на HashMap.

Основные особенности Java HashSet:

🟠Дубликаты игнорируются. Если добавить элемент, который уже есть в множестве — ничего не произойдёт.
🟠Элементы не упорядочены ни по добавлению, ни по значению.
🟠Допускается один null-элемент.

Производительность: Базовые операции add, remove, contains выполняются за константное время O(1), при условии качественной хеш-функции.

Даже если дважды добавить строку "BMW" — в сете она появится только один раз.


Часто используемые операции:

add(E e) — добавляет элемент, если его ещё нет
remove(Object o) — удаляет элемент, если он есть
contains(Object o) — проверяет наличие элемента
size() — возвращает количество элементов
clear() — очищает сет

Как работает внутри

HashSet использует внутренний HashMap, где элементы сета хранятся как ключи, а значением выступает фиктивный объект. Это позволяет обеспечить уникальность и быстрый доступ.

При выводе содержимого HashSet — элементы отображаются в произвольном порядке.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#полезное
😇 CompletableFuture.
delayedExecutor()


CompletableFuture.delayedExecutor() позволяет выполнить задачу с отложенным запуском без блокировки основного потока. Это удобный инструмент для асинхронных операций с задержкой.
Документация

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #Spring
🤔 В чем разница между Dependency Injection и Inversion of Control?

loC — это общий принцип проектирования, согласно которому управление объектами и их зависимостями передается внешнему контейнеру или фреймворку. Dependency Injection - это конкретный способ реализации loC, при котором зависимости обьекта предоставляются ему извне, а не создаются внутри. ІС можно реализовать не только через DI, но и другими методами, например, через фабричный метод или событийное управление.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
❤️‍🔥 Чувак сделал минималистичный лаунчер для Minecraft для личного использования.

Теперь, когда кто-то из друзей спрашивает, какой лаунчер посоветуешь без вирусов — просто кидаю им свой :P


Ссылки на скачивание и исходники (если интересно, как такой написать):

🟠Скачать: https://github.com/sammwyy/MiniLaunch/releases
(Жми на ссылку с именем minilaunch.jar)

🟠Исходный код лаунчера на Java:
https://github.com/sammwyy/MiniLaunch

После скачивания просто дважды кликни по .jar, и всё готово

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
👨‍💻 Перевод Spring Boot на HTTPS без ругани браузера

Данная статья рассчитана на тех, кто хочет сделать так, чтобы их Spring Boot приложение могло работать с HTTPS без предупреждений со стороны браузера о небезопасном подключении.

В этой статье разбирается именно работа со Spring Boot и вшитым в него Apache Tomcat.
Читать статью

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
📞 Реализация паттернов проектирования на Java

Паттерны проектирования — это готовые решения распространенных задач, с которыми разработчики сталкиваются при создании сложных систем.

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

Что внутри:
🟠 Реализация классических паттернов с чистым и понятным кодом

🟠 Детальные объяснения принципов работы

🟠 Блок-схемы, иллюстрирующие работу каждого паттерна


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

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

Spring контекст (или ApplicationContext) - это ядро Spring Framework, которое управляет жизненным циклом бинов и их зависимостями. Он позволяет создавать, настраивать и связывать обьекты приложения. Контекст поддерживает интернационализацию, обработку событий, доступ к ресурсам и интеграцию с внешними технологиями. Конфигурация контекста может быть выполнена через XML, аннотации или Java-классы.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😎 JMH для микробенчмаркинга производительности:

JMH (Java Microbenchmark Harness) — это инструмент для измерения производительности небольших фрагментов кода, идеально подходит для оптимизации алгоритмов. В этом примере сравнивается простая цикл-реализация и использование Stream API.

🟠 JMH гарантирует точные и воспроизводимые тесты производительности
🟠 Используется для оптимизации критичных участков кода в продакшен-приложениях

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤯 Как работает HashMap в Java?

1⃣Внутреннее устройство – https://javarevisited.blogspot.com/2010/02/how-hashmap-works-in-java.html
2⃣Механика методов get и put – https://java67.com/2013/06/how-get-method-of-hashmap-or-hashtable-works-internally.html

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😱 Лучшие способы логировать SQL-запросы в Spring Boot
Читать подробнее

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #Spring
🤔 Зачем нужен Spring Framework?

Spring Framework - это мощный инструмент для упрощения разработки приложений. Он предоставляет механизм управления зависимостями (Dependency Injection), гибкость конфигурации, интеграцию с различными технологиями и поддержку создания веб-приложений. Благодаря своей модульности и широким возможностям, Spring подходит как для небольших проектов, так и для крупных корпоративных систем.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 636. Exclusive Time of Functions

На однопоточном процессоре выполняется программа, содержащая n функций. Каждая функция имеет уникальный ID от 0 до n-1. Вызовы функций хранятся в стеке вызовов: когда начинается вызов функции, ее ID заталкивается в стек, а когда вызов функции заканчивается, ее ID выгружается из стека. Функция, чей идентификатор находится в верхней части стека, является текущей выполняемой функцией. Каждый раз, когда функция запускается или завершается, мы пишем лог с идентификатором, началом или завершением и меткой времени. Вам предоставляется список logs, где logs[i] представляет собой i-е сообщение лога, отформатированное как строка "{function_id}:{"start" | "end"}:{timestamp}". Например, "0:start:3" означает, что вызов функции с идентификатором 0 начался в начале временной метки 3, а "1:end:2" означает, что вызов функции с идентификатором 1 завершился в конце временной метки 2. Обратите внимание, что функция может быть вызвана несколько раз, возможно, рекурсивно. Исключительное время функции - это сумма времен выполнения всех вызовов функции в программе. Например, если функция вызывается дважды, причем один вызов выполняется за 2 единицы времени, а другой - за 1 единицу, то эксклюзивное время равно 2 + 1 = 3. Верните эксклюзивное время каждой функции в массив, где значение по i-му индексу представляет собой эксклюзивное время для функции с идентификатором i.

Пример:
Input: n = 2, logs = ["0:start:0","1:start:2","1:end:5","0:end:6"]
Output: [3,4]


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

1⃣Парсинг логов: Пройдитесь по каждому логу, чтобы распознать действие (start или end) и идентификатор функции вместе с временной меткой.

2⃣Использование стека: Используйте стек для отслеживания текущих вызовов функций. Если лог содержит start, добавьте функцию в стек и начните отсчет времени. Если лог содержит end, снимите функцию со стека и обновите эксклюзивное время.

3⃣Обновление времени выполнения: Когда функция завершает выполнение, обновите ее эксклюзивное время и также учитывайте время выполнения вложенных функций.

😎 Решение:
import java.util.*;

public class Solution {
public int[] exclusiveTime(int n, List<String> logs) {
Stack<Integer> stack = new Stack<>();
int[] times = new int[n];
int prevTime = 0;

for (String log : logs) {
String[] parts = log.split(":");
int fid = Integer.parseInt(parts[0]);
String type = parts[1];
int time = Integer.parseInt(parts[2]);

if (type.equals("start")) {
if (!stack.isEmpty()) {
times[stack.peek()] += time - prevTime;
}
stack.push(fid);
prevTime = time;
} else {
times[stack.pop()] += time - prevTime + 1;
prevTime = time + 1;
}
}

return times;
}
}


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
2
#статьи
😘 Лучший способ использовать методы запросов Spring Data
Читать подробнее

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😘 Зачем использовать `@ConditionalOnProperty`?

- Включение или отключение бинов и конфигураций на основе значений в application.properties без изменения кода
- Загрузка разных бинов для разных сред с помощью конфигурационных параметров
- Исключение лишних бинов снижает потребление памяти и упрощает логику

🟠Включить бин, если свойство существует:
Используется аннотация @ConditionalOnProperty(name="my.prop").
Бин будет создан, если свойство my.prop существует и его значение не "false".

🟠Включить бин, если свойство равно определённому значению:
Добавляется параметр havingValue="yes".
Бин будет создан только в том случае, если значение свойства строго равно "yes".

🟠Включить бин, если свойство отсутствует:
Используется параметр matchIfMissing=true.
Бин будет создан даже в случае, если соответствующее свойство вообще не определено в конфигурации.

🟠Переключение реализаций в зависимости от значения свойства:
Определяются несколько бинов с разными значениями havingValue.
Будет создан только тот бин, значение которого соответствует текущему значению свойства.

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

Жизненный цикл Spring Bean состоит из этапов создания, настройки зависимостей, инициализации, использования и уничтожения. Контейнер автоматически выполняет все эти шаги, вызывая методы, такие как @PostConstruct для настройки перед использованием и @PreDestroy для завершения работы. Пользователи могут настраивать этапы жизненного цикла через интерфейсы или аннотации.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👋 Лучшие практики работы с транзакциями Spring
Читать подробнее

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#полезное
😐 Проект на Spring Boot + Spring AI + OpenAI.

Он принимает текст или файл с заметками встречи и автоматически генерирует JSON-тикеты с классификацией (баг, фича и т.д.).

Теперь в open source: чистый код и готовность к импорту в JIRA.

GitHub: https://github.com/ayushstwt/smart-ticket-ai.git

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
🥱 Лучший способ использовать аннотацию Spring Transactional
Читать подробнее

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