Java библиотека
31.6K subscribers
2.31K photos
85 videos
9 files
2.09K links
Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrT4A

Мы на бирже: https://telega.in/c/javalib/

Сообщество VK https://vk.com/javatutorial
Download Telegram
Что такое Serial Garbage Collector?

Serial GC — это однопоточный сборщик мусора, работающий по принципу "Stop-the-World". Он останавливает выполнение всех потоков во время сборки мусора и использует копирующий алгоритм для молодых поколений (Young Gen) и компактирующий алгоритм для старших (Old Gen).

🟢 Как работает

1️⃣ В молодом поколении (Minor GC) используется копирующая стратегия: выжившие объекты перемещаются из Eden в Survivor, а из Survivor в Old Gen.
2️⃣ В старом поколении (Major GC / Full GC) выполняется уплотнение памяти для уменьшения фрагментации.
3️⃣ Так как GC работает в одном потоке, во время сборки остановка приложения неизбежна.

🟢 Когда использовать

В одноядерных системах или при ограниченных ресурсах, где многопоточный GC создаст больше нагрузки.
В маленьких JVM (до 1-2 ГБ памяти), где G1 или Parallel GC будут избыточны.
В приложениях без жестких требований к паузам, например, в небольших утилитах или CLI-инструментах.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍104🔥3
🧑‍💻 Магия IntelliJ IDEA

Все знают Ctrl + Alt + L (форматирование кода), но мало кто знает это сочетание:

Ctrl + Alt + Shift + L → Гибкое форматирование

🟢 Зачем это нужно

— Позволяет выбрать, что именно форматировать: весь файл, выделенный код или даже только измененные строки.
— Можно отключить автоформатирование аннотаций, импортов или пробелов, если не хотите, чтобы IDEA ломала ваш стиль.
— Полезно, если работаете в команде с жесткими code style правилами, можно форматировать только нужные части, не трогая остальной код.

🟢 Дополнительные трюки

— Выделите код, затем Ctrl + Alt + Shift + L, чтобы форматировать только его.
— Используйте Settings → Editor → Code Style, чтобы настроить форматирование под себя.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
26🔥3👍2
Чек-лист: эффективная работа с многопоточностью

Держите под рукой этот чек-лист, чтобы избежать проблем с многопоточностью и повысить производительность кода:

🟢 Синхронизация

✓ Избегайте synchronized для долгих операций
✓ Используйте ReentrantLock для гибкой блокировки
✓ Следите за возможностью deadlock

🟢 Исполнители (Executors)

✓ FixedThreadPool подходит, когда количество потоков заранее известно и ограничено
✓ CachedThreadPool динамически создает потоки, но может привести к их неконтролируемому росту
✓ ForkJoinPool для задач, разбиваемых на подзадачи

🟢 Коллекции и очереди

✓ ConcurrentHashMap потокобезопасная альтернатива HashMap, но не подходит для сценариев с частыми изменениями
✓ BlockingQueue для потокобезопасных очередей
✓ CopyOnWriteArrayList хорош при редких изменениях списка, но ⚠️ медленный при частых модификациях (из-за копирования)

🟢 Работа с Future & CompletableFuture

✓ Используйте CompletableFuture для асинхронных операций вместо Future
✓ thenApply() и thenCompose() позволяют строить цепочки вызовов без блокировки
✓ exceptionally() для обработка ошибок без использования try-catch в коде

Автоматизируйте проверку кода с помощью FindBugs, SonarQube и Checkstyle.

Какие задачи на проекте решаете с помощью многопоточки?

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍207🔥5
Lombok — да или нет?

✔️ За Lombok

— Убирает тонны шаблонного кода (геттеры, сеттеры, toString(), equals(), hashCode()).
— Делает код компактнее и читабельнее.
— Ускоряет разработку, снижает когнитивную нагрузку.

Против Lombok

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

За Lombok или против? Пишите в комменты

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
💯30👍14🔥3
👩‍💻 База по Spring Boot

🟢 @Transactional — оборачивает метод в транзакцию

@Transactional
public void saveData(Entity entity) {
repository.save(entity);
}


Автооткат при исключениях, но не ловит checked-исключения без rollbackFor = Exception.class.

🟢 @Async — делает метод асинхронным

@Async
public CompletableFuture<String> fetchData() {
return CompletableFuture.completedFuture("Hello");
}


Использует TaskExecutor, но не забываем про конфиг @EnableAsync.

🟢 @RestControllerAdvice — глобальный хендлер ошибок

@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
public ResponseEntity<String> handleException(RuntimeException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
}


Вместо тонны try-catch обрабатываем ошибки централизованно.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥76
Forwarded from Java Guru 🤓
new String("Hello_42") == "Hello_" + 42?

Такие вопросы о сравнении строковых и числовых констант проверяют знания о понятии пулов литералов (literal pool). Не следует путать с пулом констант класса. Виртуальная машина переиспользует один и тот же объект для строкового литерала при загрузке класса, если такой уже выделен в куче. Вот почему "Hello" == "Hello" истинно, не смотря на то что String – ссылочный тип. Такая оптимизация возможна благодаря свойству неизменяемости (immutable) класса String, и называется интернирование строк.

Кроме самих литералов, интернирование применяется ко всем константным выражениям. К таким выражениям в этом примере относятся неявное приведение числа 42 к строке и конкатенация констант. Это делает истинным "Hello_42" == "Hello_" + 42.

Пул литералов не работает, когда явно используется оператор new. Это причина, по которой выражение new String("Hello_42") == "Hello_" + 42 ложно.


Java Guru🤓 #java
👍193🔥3
Forwarded from Java News
Задачи на собеседованиях. Денежные переводы в SQL. Обновление счетов и уровни изоляций

Задача перевода денег в первом приближении сводится к обновлению пары строк и кажется простой — но обеспечение корректности при параллельном доступе может быть неожиданно сложным для только знакомящихся с уровнями изоляций БД.

Читать статью
👍10🔥64🍾1
📌 Сохраняйте шпаргалку по командам docker compose

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍64
🖥 Tika — набор инструментов на Java для извлечения текста и метаданных из PPT, XLS и PDF и многих других типов данных

Tika можно использовать как компонент индексации в поисковых системах, в системах, связанных с переводом и во многих других приложениях

🖥 GitHub
🟡 Wiki

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥21
Как маппить объекты

Часто приходится конвертировать Entity -> DTO или DTO -> Model. Вот основные способы, как это сделать.

1️⃣ Ручной маппинг

Простой, но не очень масштабируемый.
public class UserMapper {
public static UserDto toDto(User user) {
return new UserDto(user.getId(), user.getName());
}

public static User toEntity(UserDto dto) {
return new User(dto.getId(), dto.getName());
}
}


2️⃣ MapStruct

Генерирует код на этапе компиляции → быстрее, чем рефлексия.
@Mapper
public interface UserMapper {
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);

UserDto toDto(User user);
User toEntity(UserDto dto);
}


3️⃣ ModelMapper

Просто, но медленнее из-за рефлексии.
ModelMapper modelMapper = new ModelMapper();
UserDto dto = modelMapper.map(user, UserDto.class);


4️⃣ Record + Java 17

Используем record вместо классов DTO для упрощения кода.
record UserDto(Long id, String name) {}

UserDto dto = new UserDto(user.getId(), user.getName());


5️⃣ Stream API для маппинга коллекций

Если нужно преобразовать список объектов.
List<UserDto> dtos = users.stream()
.map(UserMapper::toDto)
.collect(Collectors.toList());


Какой способ используете в проектах?

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥94
Forwarded from Java News
JForge: Создаем свою мини-IDE на Java Swing с нуля (с темной темой и подсветкой синтаксиса!)

Каждый из нас, Java-разработчиков, хоть раз задумывался: "А что, если взять и написать свою IDE?". Ну, может, не полноценную замену IntelliJ IDEA, но что-то компактное, для души, для изучения Swing или просто для фана. Сегодня я хочу поделиться именно таким проектом – JForge, простой IDE для Java, написанной полностью на Swing, с акцентом на приятный темный интерфейс и базовые, но необходимые фичи.

Читать статью
👍84🔥3
🧑‍💻 Универсальный инструмент рефакторинга в IntelliJ IDEA

Знакомы с отдельными сочетаниями клавиш для рефакторинга, такими как Shift + F6 или Ctrl + Alt + V?
Сочетание Ctrl + Alt + Shift + T открывает перед вами целый спектр возможностей рефакторинга в одном окне.

🟢Зачем это нужно

— Открывает меню, предоставляющее доступ к различным видам рефакторинга, таким как переименование, перемещение, изменение сигнатуры, извлечение метода, переменной, константы и другие. ​
— В зависимости от выделенного фрагмента, IntelliJ IDEA предложит только те варианты рефакторинга, которые применимы к текущему элементу кода.​

🟢Как использовать

1. Выделите часть кода, которую хотите рефакторить (например, переменную, метод или класс).​
2. Нажмите Ctrl + Alt + Shift + T.​
3. Выберите необходимый тип рефакторинга из появившегося меню с помощью стрелок → Enter.​
4. Следуйте дальнейшим инструкциям IDE для завершения процесса рефакторинга.​

Знали о таком?

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥64
🖥 Git-команда для особого случая

Случайно удалили ветку, а в ней была недоделанная фича или рабочий хотфикс? Паника близко?

💡 Команда спасения
git reflog


📌 Что делает

Показывает историю всех действий в Git — коммиты, переключения веток, ребейзы и даже force-push’и. Идеально, чтобы вернуть ветку из забвения или откатиться на стабильное состояние.

Например:
git checkout -b restore-branch HEAD@{3}

Создаёт новую ветку с того момента, где были 3 действия назад.

Использовали раньше?

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥318👍7
🖥 fastjson2 — очень быстрая библиотека Java для работы с JSON

<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.51</version>
</dependency>


Особенности fastjson2:

— скорость работы fastjson2 намного больше, чем у других популярных JSON библиотек, включая jackson/gson/org.json, бенчмарки тут

— fastjson2 поддерживает новые возможностей JDK, включая JDK 11/JDK 17, имеется поддержка Record, поддержка GraalVM Native-Image

— fastjson2 поддерживает JSONPath, поддерживает синтаксис SQL:2016 JSONPath

🟡 Доки
🖥 GitHub

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍194🔥3
Media is too big
VIEW IN TELEGRAM
🖥 Изучаешь Java - создай проект. Перезагрузка.

Выпуск 4. Делаем начальный вариант ГРН на Spring Boot.

В
этом выпуске мы посмотрим, как просто можно сформировать начальный вариант web-приложения на Spring Boot.

🌐🗣СМОТРЕТЬ VKVIDEO

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥2
Предположим, есть метод, который может выбросить IOException и FileNotFoundException в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?

Общее правило: обрабатывать исключения нужно от «младшего» к старшему. Т.е. нельзя поставить в первый блок catch(Exception ex) {}, иначе все дальнейшие блоки catch() уже ничего не смогут обработать, т.к. любое исключение будет соответствовать обработчику catch(Exception ex).

Таким образом, исходя из факта, что FileNotFoundException extends IOException сначала нужно обработать FileNotFoundException, а затем уже IOException.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍183🔥3
Лайфхаки визуального сторителлинга 😉

Рассказываем, почему это полезно и как его построить, чтобы было понятно всем: и менеджерам, и разработчикам, и дизайнерам

И да, вы справитесь, даже если не умеете рисовать! Александр Зинченко, СТО Яндекс 360, поделился инструментами для быстрых и удобных скетчей. А ещё рассказал про сложности передачи идей в проектных командах, которые можно решить с помощью визуального сторителлинга 😎

Больше интересной и полезной информации в канале от команды Яндекс 360
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43🔥2