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

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

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

Для связи: @ruslan_kuyanets
Download Telegram
#Собес #Spring
🤔 В чём основное различие между @RestController и @Controller?

@Controller используется для обработки запросов в традиционных веб-приложениях и возвращает HTML-представления. @RestController автоматически возвращает данные в формате JSON или XML, что делает его идеальным для создания RESTful API.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#полезное
😱 Ограничение частоты запросов в Spring Boot с помощью Bucket4j

Реализация rate limiting в REST API на Spring Boot с использованием Bucket4j для контроля частоты запросов на пользователя, что повышает масштабируемость API. Подходит для предотвращения злоупотреблений в продакшн-системах

🟠 Импортируются классы из Bucket4j, Spring и Java SDK.
🟠 Создаётся REST-контроллер с маппингом /api
🟠 Для каждого пользователя создаётся бакет с лимитом 5 запросов в минуту. Если бакет позволяет — запрос проходит. Если нет — возвращается 429 статус.
🟠 Заглушка для HttpServletResponse, нужна чтобы код можно было запускать без настоящего HTTP-сервера.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
1
#полезное
👨‍💻 Все ключевые слова Java в одном месте

Java содержит 53 зарезервированных ключевых слова, которые нельзя использовать как имена переменных, методов или классов — каждое из них выполняет определённую роль в языке.

Независимо от того, только ли ты начинаешь изучать Java или готовишься к собеседованию — знание этих ключевых слов обязательно

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
📞 Добавление логирования HTTP-запросов в Spring Boot API
Читать подробнее

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

Spring построен на принципах инверсии управления (IC) и внедрения зависимостей (DI). оС означает, что создание и управление объектами берёт на себя контейнер Spring, a DI позволяет автоматически предоставлять объектам их зависимости. Эти принципы делают код более модульным, гибким и удобным для тестирования.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
#ЛитКод
Задача: 634. Find the Derangement of An Array

В комбинаторной математике отклонение - это перестановка элементов множества таким образом, что ни один элемент не оказывается на прежнем месте. Вам дано целое число n. Изначально имеется массив, состоящий из n целых чисел от 1 до n в порядке возрастания, верните количество отклонений, которые он может породить. Поскольку ответ может быть огромным, верните его по модулю 109 + 7.

Пример:
Input: n = 3
Output: 2


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

1⃣Инициализация массива для хранения результатов: Создайте массив dp для хранения количества отклонений для каждого значения от 0 до n. Установите начальные значения: dp[0] = 1 и dp[1] = 0.

2⃣Вычисление количества отклонений: Используйте динамическое программирование для вычисления количества отклонений для каждого значения от 2 до n. Формула для вычисления: dp[i] = (i - 1) * (dp[i - 1] + dp[i - 2]) % MOD.

3⃣Возвращение результата: Верните значение dp[n], которое будет количеством отклонений для n элементов, по модулю 10^9 + 7.

😎 Решение:
public class Solution {
public int countDerangements(int n) {
final int MOD = 1000000007;
if (n == 0) return 1;
if (n == 1) return 0;
int[] dp = new int[n + 1];
dp[0] = 1;
dp[1] = 0;
for (int i = 2; i <= n; i++) {
dp[i] = (int)((long)(i - 1) * (dp[i - 1] + dp[i - 2]) % MOD);
}
return dp[n];
}
}


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

String.stripIndent() удаляет общие начальные пробелы во всех строках многострочного текста, делая его более читаемым и удобным для форматирования. Это полезно при работе с блоками текста в коде.
Документация

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👋 Базовые приёмы экономии памяти в Java

1⃣ Ленивая инициализация "тяжёлых" полей

🟠 Используйте lazy initialization, чтобы откладывать создание объекта до момента, когда он действительно понадобится.

2⃣ Избегайте анонимных внутренних классов в циклах

🟠 Каждое такое использование создаёт объект внутреннего класса — это скрытая нагрузка на память.

3⃣ Используйте статические фабричные методы

🟠 Они позволяют экономить память за счёт повторного использования уже созданных экземпляров, вместо создания новых при каждом вызове.

4⃣ Применяйте метод intern()

🟠 Метод intern() класса String возвращает каноническое представление строки.
Используя intern(), можно гарантировать, что одна и та же строка будет представлена в памяти в виде единственного объекта, даже если она создаётся многократно.

String s1 = "hello";
String s2 = "hello".intern();


5⃣ Используйте паттерн Flyweight для повторяющихся неизменяемых данных

🟠 Экономит память за счёт разделения общих экземпляров (используется, например, в Integer.valueOf(), Boolean.TRUE и т.п.).

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
#Собес #Spring
🤔 Что такое Spring Boot и в чём его основное преимущество?

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
🛞 Наблюдаемость Java-бэкенда с помощью OpenTelemetry
Читать подробнее

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
😵‍💫 Пакетная обработка JDBC через StatelessSession в Hibernate

Статья объясняет, как использовать StatelessSession в Hibernate 6 для быстрой пакетной вставки, обновления и удаления данных с помощью JDBC Batching — без лишнего кеша и с высокой производительностью.
Читать подробнее

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😴 Советы по Java Stream API: Ленивое вычисление с использованием Supplier<Stream<T>>

Когда возникает необходимость повторно использовать потоковую обработку, можно воспользоваться Supplier. В обычных случаях поток (Stream) нельзя использовать повторно после его обработки.

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

Spring Framework — это универсальный фреймворк для создания приложений с гибкой конфигурацией. Spring Boot, в свою очередь, дополняет Spring, предоставляя автоматическую конфигурацию и встроенные серверы для быстрого создания приложений. Spring Boot подходит для быстрого старта проектов, минимизируя количество ручной конфигурации.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN 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