#Собес #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-контроллер с маппингом
🟠 Для каждого пользователя создаётся бакет с лимитом 5 запросов в минуту. Если бакет позволяет — запрос проходит. Если нет — возвращается 429 статус.
🟠 Заглушка для
👉 Новости 👉 База вопросов
Реализация rate limiting в REST API на Spring Boot с использованием Bucket4j для контроля частоты запросов на пользователя, что повышает масштабируемость API. Подходит для предотвращения злоупотреблений в продакшн-системах
/api
HttpServletResponse
, нужна чтобы код можно было запускать без настоящего HTTP-сервера.Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
👨💻 Все ключевые слова Java в одном месте
Java содержит 53 зарезервированных ключевых слова, которые нельзя использовать как имена переменных, методов или классов — каждое из них выполняет определённую роль в языке.
Независимо от того, только ли ты начинаешь изучать 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 позволяет автоматически предоставлять объектам их зависимости. Эти принципы делают код более модульным, гибким и удобным для тестирования.
👉 Новости 👉 База вопросов
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.
Пример:
👨💻 Алгоритм:
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.
😎 Решение:
👉 Новости 👉 База вопросов
Задача: 634. Find the Derangement of An Array
В комбинаторной математике отклонение - это перестановка элементов множества таким образом, что ни один элемент не оказывается на прежнем месте. Вам дано целое число n. Изначально имеется массив, состоящий из n целых чисел от 1 до n в порядке возрастания, верните количество отклонений, которые он может породить. Поскольку ответ может быть огромным, верните его по модулю 109 + 7.
Пример:
Input: n = 3
Output: 2
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
LeetCode
Find the Derangement of An Array - LeetCode
Can you solve this real interview question? Find the Derangement of An Array - Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
#полезное
👍 String.stripIndent()
Документация
👉 Новости 👉 База вопросов
String.stripIndent()
удаляет общие начальные пробелы во всех строках многострочного текста, делая его более читаемым и удобным для форматирования. Это полезно при работе с блоками текста в коде.Документация
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👋 Базовые приёмы экономии памяти в Java
1⃣ Ленивая инициализация "тяжёлых" полей
🟠 Используйте lazy initialization, чтобы откладывать создание объекта до момента, когда он действительно понадобится.
2⃣ Избегайте анонимных внутренних классов в циклах
🟠 Каждое такое использование создаёт объект внутреннего класса — это скрытая нагрузка на память.
3⃣ Используйте статические фабричные методы
🟠 Они позволяют экономить память за счёт повторного использования уже созданных экземпляров, вместо создания новых при каждом вызове.
4⃣ Применяйте метод intern()
🟠 Метод
Используя
5⃣ Используйте паттерн Flyweight для повторяющихся неизменяемых данных
🟠 Экономит память за счёт разделения общих экземпляров (используется, например, в
👉 Новости 👉 База вопросов
intern()
класса String возвращает каноническое представление строки.Используя
intern()
, можно гарантировать, что одна и та же строка будет представлена в памяти в виде единственного объекта, даже если она создаётся многократно.String s1 = "hello";
String s2 = "hello".intern();
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 позволяет минимизировать конфигурацию и быстро разрабатывать приложения, особенно микросервисы.
👉 Новости 👉 База вопросов
Spring Boot - это инструмент для быстрого создания приложений на базе Spring Framework. Он предоставляет автоматические настройки, готовые стартеры для интеграции зависимостей и встроенные серверы приложений. Благодаря этому Spring Boot позволяет минимизировать конфигурацию и быстро разрабатывать приложения, особенно микросервисы.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
😵💫 Пакетная обработка JDBC через StatelessSession в Hibernate
Статья объясняет, как использовать StatelessSession в Hibernate 6 для быстрой пакетной вставки, обновления и удаления данных с помощью JDBC Batching — без лишнего кеша и с высокой производительностью.
Читать подробнее
👉 Новости 👉 База вопросов
Статья объясняет, как использовать 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 подходит для быстрого старта проектов, минимизируя количество ручной конфигурации.
👉 Новости 👉 База вопросов
Spring Framework — это универсальный фреймворк для создания приложений с гибкой конфигурацией. Spring Boot, в свою очередь, дополняет Spring, предоставляя автоматическую конфигурацию и встроенные серверы для быстрого создания приложений. Spring Boot подходит для быстрого старта проектов, минимизируя количество ручной конфигурации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 HashSet в Java
HashSet — это коллекция для хранения уникальных элементов без гарантии порядка. Относится к пакету java.util и реализует интерфейс Set, внутренне опираясь на HashMap.
Основные особенности Java HashSet:
🟠 Дубликаты игнорируются. Если добавить элемент, который уже есть в множестве — ничего не произойдёт.
🟠 Элементы не упорядочены ни по добавлению, ни по значению.
🟠 Допускается один null-элемент.
Производительность: Базовые операции
Часто используемые операции:
—
—
—
—
—
Как работает внутри
При выводе содержимого
👉 Новости 👉 База вопросов
HashSet — это коллекция для хранения уникальных элементов без гарантии порядка. Относится к пакету java.util и реализует интерфейс Set, внутренне опираясь на HashMap.
Основные особенности Java HashSet:
Производительность: Базовые операции
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()
Документация
👉 Новости 👉 База вопросов
delayedExecutor()
CompletableFuture.delayedExecutor()
позволяет выполнить задачу с отложенным запуском без блокировки основного потока. Это удобный инструмент для асинхронных операций с задержкой.Документация
Please open Telegram to view this post
VIEW IN TELEGRAM