Java библиотека – Telegram
Java библиотека
31.5K subscribers
2.37K photos
92 videos
10 files
2.19K links
Книги, статьи, мемы и многое другое для Java программиста!

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

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

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

Сообщество VK https://vk.com/javatutorial
Download Telegram
Forwarded from Java Guru 🤓
Какая настройка при создании связи Customer-Order приведет к неправильному поведению при сохранении нескольких Order, связанных с одним Customer?
Anonymous Quiz
21%
CascadeType.ALL
15%
fetch = FetchType.EAGER
10%
optional = false
45%
unique = true
10%
referencedColumnName
👍7🔥4
Паттерн Интерпретатор (Interpreter)

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

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

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

Преимущества

1️⃣ Упрощает добавление новых правил грамматики или изменение существующих.
2️⃣ Структурирует описание языка, разделяя грамматику и логику выполнения.
3️⃣ Подходит для различных задач, связанных с анализом и интерпретацией.

Недостатки

1️⃣ Становится громоздким при работе со сложными языками с большим количеством правил.
2️⃣ Показывает низкую производительность при построении деревьев выражений и их интерпретации для больших объемов данных.
3️⃣ Сложен в поддержке, если язык активно развивается и усложняется.

Interpreter хорошо подходит для создания простых языков, например, DSL (domain-specific language), и позволяет реализовать мощные возможности анализа и исполнения выражений.

Однако для более сложных языков лучше использовать специализированные инструменты вроде ANTLR или парсеров.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍156🔥5
Spring и Spring Boot. Разработка облачных приложений на Java (2025) PDF

В книге рассмотрено актуальное состояние технологий Spring и Spring Boot, помогающих шире раскрыть возможности языка Java и аспектно-ориентированного программирования. Пошагово объяснено, как самостоятельно написать и развернуть облачный проект под управлением Spring. Рассказано о координации микросервисов на Java с применением Spring и модуля Spring Core способах внедрения зависимостей, аннотировании кода. На примере сквозного веб-приложения описаны важнейшие приемы работы с данными в стиле REST, тестирование данных, обеспечение согласованности, безопасности и долговременного хранения данных в приложении.

Для Java-программистов.
👍21🔥83
🖥 OpenAPI Generator — это инструмент, который автоматизирует создание клиентских библиотек (SDK), серверных заглушек, документации и конфигураций на основе спецификаций OpenAPI (версий 2 и 3)!

🌟 Он упрощает работу с API, позволяя разработчикам быстро интегрировать их в приложения на различных языках программирования. Благодаря поддержке множества языков и шаблонов, OpenAPI Generator делает процесс разработки API более стандартизированным и ускоряет начальные этапы проектов.

🌟 Инструмент поддерживает более 50 языков программирования и фреймворков, включая Java, Python, JavaScript, TypeScript, Ruby и другие. Помимо генерации кода, он также предоставляет возможность настройки шаблонов, что делает его гибким для использования в самых разных проектах.

🔐 Лицензия: Apache-2.0

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍175🔥3
Узнаём какое аниме будет самым рейтинговым еще до выхода

Когда встал вопрос "о чем писать диплом", я точно знала, что не хочу писать о чем-то скучном или не интересным для меня. Было много идеи (не только про аниме) и даже в сфере аниме - не только про задачу прогнозирования. Когда уже надо было утверждать тему, на одной из лекции как раз рассказывали про задачи классификации и прогнозирования. Я знала, что уже есть вагон и маленькая тележка статей про прогнозирование в области фильмов, но в аниме? Критически мало. И я решила это исправить)

Читать статью
👍73🔥3
📌 Лайфхак: улучшаем производительность с StringBuilder

Если часто используете String для конкатенации (+), замените его на StringBuilder — это ускорит выполнение и снизит нагрузку на память.

Медленно:
String result = "";
for (int i = 0; i < 1000; i++) {
result += i; // Каждое сложение создаёт новый объект
}


✔️ Быстро:
StringBuilder result = new StringBuilder();
for (int i = 0; i < 1000; i++) {
result.append(i); // Использует один буфер, без лишних объектов
}


Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍21🔥75
Java Guru - вопросы и задачи с собеседований. Канал с помощью которого ты точно получишь оффер!

👩‍💻 Android Developer - канал для андроид разработчиков! Статьи, вопросы и задачи с собеседований, лайфхаки.

👩‍💻 Kotlin Developer - самый топовый канал для котлин разработчика!

📕 Книги для Java программиста - канал с книгами по Java. Постоянно выходят новинки как на русском так и на английском языке!

📰 Java News - канал с последними новостями из мира Java!
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍53🔥2
Кнопка «F5» устала: real-time уведомления в микросервисной архитектуре

Представьте себе: у вас железнодорожная станция, сотни вагонов, десятки пользователей в системе, каждый раз кто-то нажимает кнопку "Обновить", чтобы узнать — разгрузили ли нужный вагон.

Вся логика обновления построена на "manual refresh". Да-да, пользователь сам жмёт кнопку, чтобы получить свежие данные. Система автоматической разгрузки или другой человек разгрузил что-то на другом конце станции, но вы об этом не узнаете, пока не перезагрузите страницу.


Читать статью
🔥63👍3
🖥 JUring — это библиотека для Java, которая использует интерфейс асинхронного ввода-вывода Linux io_uring для достижения высокой производительности при чтении и записи данных!

🌟 Она создана как демонстрация возможностей Java в сочетании с современными системными вызовами Linux, предоставляя более быстрые операции ввода-вывода по сравнению с традиционными Java-инструментами, такими как NIO FileChannel. JUring работает через Java Foreign Function & Memory API, что позволяет использовать низкоуровневые вызовы io_uring из Java-приложений.

💡 Основные преимущества включают поддержку асинхронных операций ввода-вывода, что улучшает производительность в задачах работы с файлами, особенно при высоких нагрузках. JUring показывает прирост скорости до 33% для локальных файлов и до 78% для удалённых. Для использования требуется Linux с ядром 5.1 и выше, а также Java 22+.

🔐 Лицензия: Unlicense

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍125🔥3❤‍🔥1
GRASP: почему настоящая архитектура начинается не с SOLID

Хочу начать с личной предыстории. Давным‑давно, как и многие из вас, я читал умные книжки: «Чистый код» и «Чистая архитектура» Роберта Мартина, «Совершенный код» Стива Макконнелла и другие.

Также не обошли меня и классические принципы проектирования — SOLID, KISS, DRY — и, думаю, каждый читатель добавит сюда свои.

Безусловно, это всё важные и фундаментальные вещи.

Но однажды на горизонте появилось DDD — предметно‑ориентированное проектирование в изложении Эрика Эванса. Именно его «синяя книга» стала культовой и задала язык для архитектурного мышления.


Читать статью
👍144🔥32❤‍🔥1
MapStruct: быстрый и безопасный маппинг объектов

⚙️ Как это работает

MapStruct анализирует названия полей в исходном (source) и целевом (target) классах. Если поля совпадают по названию и типу, он автоматически создаёт код для их преобразования.

Когда названия полей не совпадают, нужно явно указать соответствие с помощью аннотации @Mapping:

— source — поле в исходном классе
— target — поле в целевом классе

@Mapping(source = "fullName", target = "name")
UserDTO toDTO(User user);


Как начать

1. Добавьте зависимости: mapstruct, mapstruct-processor

2. Выберите интерфейс или абстрактный класс и определите методы для преобразования объектов

3. Используйте маппер. В Spring-приложении маппер можно заинжектить как обычный бин.

Абстрактный класс или интерфейс

Документация MapStruct приводит примеры с интерфейсами, но библиотека поддерживает и абстрактные классы. Выбор за вами.

Интерфейс — MapStruct сам создаёт реализацию:
@Mapper(componentModel = "spring")
public interface UserMapper {
@Mapping(source = "fullName", target = "name")
UserDTO toDTO(User user);
}


Абстрактный класс — позволяет добавлять кастомную логику:
@Mapper(componentModel = "spring")
public abstract class UserMapper {
@Mapping(source = "fullName", target = "name")
public abstract UserDTO toDTO(User user);

public String mapAgeToString(int age) {
return age + " лет";
}
}


📌 Имена методов можно задавать любые. MapStruct анализирует типы аргументов и возвращаемых значений, чтобы понять, что куда маппить.

🔥 Интеграция со Spring

При использовании componentModel = "spring" маппер регистрируется как Spring-бин. Что позволяет заинжектить маппер:
@Service
public class UserService {
private final UserMapper userMapper;

public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}

public UserDTO convertUser(User user) {
return userMapper.toDTO(user);
}
}


💡 Где применять

— Маппинг DTO ↔️ Entity в Spring-приложениях
— Конвертация данных между разными объектами
— Обработка вложенных структур и коллекций

💬 Используете MapStruct в своих проектах? Делитесь опытом

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍299🔥5
🖥 OpenPDF — это библиотека с открытым исходным кодом для работы с PDF-документами на Java!

🌟 Она позволяет создавать, изменять и подписывать PDF-файлы, а также поддерживает функции шифрования и работы с формами. OpenPDF основана на старой версии iText и активно развивается сообществом для обеспечения современных возможностей работы с PDF.

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥64
Что такое Virtual Threads

В Java 21 появилась революционная фича — виртуальные потоки (Virtual Threads). Это лёгкие потоки, которые управляются самой JVM, а не операционной системой. Они позволяют создавать тысячи и даже миллионы потоков без значительных затрат ресурсов.

⚙️ Как это работает

Обычные потоки (Thread) привязаны к потокам ОС и работают с тяжёлым контекстным переключением (context switching).

Virtual Threads — это user-mode потоки, управляемые JVM, а не ОС, поэтому они могут эффективно мультиплексироваться на ограниченном количестве платформенных потоков.

🟢Ключевая особенность

Виртуальные потоки не блокируют платформенные потоки, когда выполняют блокирующие операции ввода-вывода (I/O). Они просто освобождают платформенный поток и продолжают выполнение, когда ресурс снова доступен.

Пример

public class VirtualThreadsDemo {
public static void main(String[] args) throws InterruptedException {
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0, 10_000).forEach(i ->
executor.submit(() -> {
System.out.println("Task " + i + " running on " + Thread.currentThread());
Thread.sleep(100);
})
);
}
}
}


Этот код создаёт 10 000 потоков, но JVM будет эффективно управлять ими без перегрузки системы.

✔️ Где применять

— Высоконагруженные I/O задачи.
— Обработка веб-запросов без перегрузки ресурсов.
— Микросервисы, которые взаимодействуют с API.
— Асинхронные операции, где ранее использовали CompletableFuture.

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

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

ℹ️ Преимущества и недостатки

— Плюсы: миллионы потоков без overhead, упрощённый асинхронный код без CompletableFuture, меньше блокировок и выше производительность, полная совместимость со старыми API.
— Минусы: может ломать старый код с synchronized, не даёт преимуществ для CPU-bound задач, требует оптимизации библиотек под Virtual Threads.

Virtual Threads — мощный инструмент, который не заменяет потоки ОС, но отлично подходит для массовых I/O-задач. Если у вас есть сервис, работающий с сетью, базами данных или API — пора внедрять Virtual Threads.

Делитесь опытом работы с виртуальными потоками

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥86
Компилируем компилятор или ускоряем javac вдвое

Ну блин короче :-)

Знаете ли вы, куда уходит время и ресурсы при сборке проектов на Java? Сейчас покажем и расскажем, как сберечь время, нервы и кофе.

Мы ускорили javac вдвое и теперь можно экономить на сборке.


Читать статью
🔥7👍32
🖥 OpenGrok — это инструмент для индексирования и поиска исходного кода!

🌟 Он помогает разработчикам быстро находить и анализировать код в больших репозиториях, поддерживает множество языков программирования (Java, C/C++, Python, и другие). OpenGrok предоставляет функциональность для поиска по меткам, комментариям, коду и даже документации. Инструмент ориентирован на улучшение работы с кодом в больших проектах и используется для облегчения навигации по огромным кодовым базам.

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🔥2
☄️ Интеграционное тестирование | Spring Boot + Yandex SourceCraft + Amplicode + Docker Compose Starter

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

Мы покажем, как использовать генерацию кода от Amplicode учитывающую контекст всего приложения и дополнить её точечной генерацией от Yandex SourceCraft Code Assistant, а также быстро настроить окружение для тестов с помощью не так давно появившегося Docker Compose стартера.

⚡️СМОТРЕТЬ НА YOUTUBE 
⚡️СМОТРЕТЬ В VK ВИДЕО
⚡️СМОТРЕТЬ НА RUTUBE 

#реклама
О рекламодателе
🔥5👍43
Лайфхак: оптимизируем DTO с record

Вместо обычных POJO-классов для DTO используйте record (Java 14+). Меньше кода, больше удобства.

Record автоматически создает иммутабельный класс с приватными финальными полями, конструктором, геттерами, а также переопределенными методами toString(), equals() и hashCode().

Избыточно
public class User {
private final String name;
private final int age;

public User(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() { return name; }
public int getAge() { return age; }

@Override
public String toString() {
return "User{name='" + name + "', age=" + age + "}";
}

@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
User user = (User) obj;
return age == user.age && Objects.equals(name, user.name);
}

@Override
public int hashCode() {
return Objects.hash(name, age);
}
}


✔️ Красиво и лаконично
public record User(String name, int age) {}


Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍347🔥61
🖥 Shizuku — это инструмент, позволяющий обычным Android-приложениям напрямую использовать системные API с привилегиями ADB или root!

🌟 Он работает путем запуска Java-процесса с помощью app_process, что позволяет приложениям взаимодействовать с системными сервисами без необходимости в полном рут-доступе.

🔐 Лицензия: Apache-2.0

🖥 Github

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥2
Паттерн Состояние (State)

State — это поведенческий паттерн, который позволяет объекту менять свое поведение в зависимости от внутреннего состояния. Вместо множества условных операторов (if-else или switch), каждое состояние представляется отдельным классом, а сам объект делегирует управление текущему состоянию.

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

🟢Когда у объекта есть несколько состояний, и его поведение зависит от текущего состояния.
🟢Когда код с if-else или switch начинает разрастаться и усложняет поддержку.
🟢Когда необходимо четко разделить логику различных состояний и сделать систему более гибкой.

Преимущества

1️⃣Избавляет от множества if-else конструкций, делая код более читаемым и поддерживаемым.
2️⃣Облегчает добавление новых состояний без изменения существующего кода.
3️⃣Обеспечивает инкапсуляцию логики для каждого состояния, упрощая тестирование и модификации.

Недостатки

1️⃣Может усложнить код, если состояний слишком мало, а логика простая.
2️⃣Увеличивает количество классов, так как каждое состояние реализуется отдельно.
3️⃣Вводит дополнительные связи между классами состояний и контекстом.

State — мощный инструмент, когда объекту нужно динамически изменять свое поведение. Он особенно полезен в конечных автоматах, обработке пользовательских действий и моделировании процессов с четко определенными шагами.

Java библиотека #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍138🔥7
Forwarded from Java Guru 🤓
У класса есть два конструктора с разными модификаторами доступа, и один из них помечен @Autowired, какой конструктор будет выбран для инжекта зависимостей?
Anonymous Quiz
5%
Spring вызовет оба конструктора
22%
Если модификатор доступа конструктора с @Autowired - private, Spring выбросит исключение
32%
Spring выберет тот конструктор, у которого модификатор доступа public, даже если нет @Autowired
13%
Код не скомпилируется
🔥7👍53🤩1