Java | Фишки и трюки
Ir al canal en Telegram
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna
Mostrar más6 953
Suscriptores
-324 horas
-27 días
+630 días
Archivo de publicaciones
6 954
⌨️ Что же это такое Records и sealed classes?
🔹Комбинация records и sealed classes позволяет создавать строгие и безопасные модели данных с ограничениями на наследование. Это особенно полезно при реализации доменных моделей.
Records, введенные в Java 14, предоставляют лаконичный способ создания неизменяемых классов данных. Sealed classes, появившиеся в Java 17, позволяют ограничивать наследование.
🫥 Пример реализации системы управления платежами:
public sealed interface PaymentMethod permits CreditCard, BankTransfer, PayPal {
boolean isValid();
void process();
}
public record CreditCard(String cardNumber, String expiryDate, String cvv) implements PaymentMethod {
@Override
public boolean isValid() {
return cardNumber != null && cardNumber.length() == 16
&& expiryDate != null && cvv != null;
}
@Override
public void process() {
System.out.println("Processing credit card payment");
}
}
public record BankTransfer(String accountNumber, String bankCode) implements PaymentMethod {
@Override
public boolean isValid() {
return accountNumber != null && bankCode != null;
}
@Override
public void process() {
System.out.println("Processing bank transfer");
}
}
public record PayPal(String email) implements PaymentMethod {
@Override
public boolean isValid() {
return email != null && email.contains("@");
}
@Override
public void process() {
System.out.println("Processing PayPal payment");
}
}
public record Payment(UUID id, BigDecimal amount, PaymentMethod method) {
public boolean processPayment() {
if (method.isValid()) {
method.process();
return true;
}
return false;
}
}
➕Преимущества:
1. Типобезопасность: Компилятор гарантирует, что только определенные классы могут реализовывать PaymentMethod.
2. Неизменяемость: Records обеспечивают неизменяемость данных.
3. Краткость кода: Records автоматически генерируют методы.
Пример использования:
public void handlePayment(Payment payment) {
if (payment.processPayment()) {
switch (payment.method()) {
case CreditCard cc -> handleCreditCardPayment(cc);
case BankTransfer bt -> handleBankTransferPayment(bt);
case PayPal pp -> handlePayPalPayment(pp);
}
} else {
handleFailedPayment(payment);
}
}
Этот подход особенно полезен для моделирования бизнес-доменов и реализации паттерна "Состояние".
Он позволяет создавать более безопасный и поддерживаемый код.6 954
Эффективная разработка на Spring Boot без ограничений.
Пока зарубежные компании отзывают лицензии у пользователей РФ, Amplicode продолжает помогать максимально удобно работать со Spring Boot, JPA, Docker, Kafka, Liquibase, MapStruct и т.д.
Amplicode можно установить как плагин в IntelliJ IDEA Community и Ultimate, а также в Giga IDE.
Что умеет Amplicode?
⚡ Легкая навигация по проекту
⚡ Создание объектов сразу в терминах фреймворка: контроллеры, репозитории, сервисы, сущности, события, DTO, мапперы и т.д.
⚡ Палитра и инспектор, позволяющие видеть опции, доступные разработчику в текущем контексте
⚡ Умные инжекции, подсказки и исправление ошибок
⚡ и многое другое!
А самое главное, Amplicode доступен бесплатно и без региональных ограничений!
Познакомьтесь со всеми возможностями Amplicode
Читайте наш гайд: «Как превратить IntelliJ IDEA Community Edition в Ultimate за 3 простых шага»
#реклама
О рекламодателе
6 954
👀Как применить Valhalla?
❗️Проект Valhalla: будущее Java с инлайн-классами
❇️Инлайн-классы (или value-классы) представляют собой ключевую часть проекта Valhalla, который значительно изменяет подход к организации данных в Java. Основная идея заключается в объединении производительности примитивов с гибкостью объектов, что позволяет создавать легковесные структуры данных без накладных расходов на размещение в куче.
👾Основные особенности инлайн-классов:
1. ❌Отсутствие идентичности объекта. Инлайн-классы не имеют ссылочной идентичности, то есть сравнение через оператор "==" проверяет содержимое, а не ссылки.
2. 🟢Плоская структура памяти. Данные хранятся компактно, без указателей, что улучшает производительность за счет кэширования.
3. 🔹Zero-Cost Abstraction. Использование инлайн-классов не добавляет накладных расходов по сравнению с примитивами.
Пример использования инлайн-класса:
Рассмотрим класс Point,который представляет координаты на плоскости:
public primitive class Point {
private final int x;
private final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
Ключевое слово primitive указывает, что это инлайн-класс. Его экземпляры хранятся как примитивы, без заголовков и указателей.
✅Преимущества инлайн-классов:
1.💠 Улучшенная производительность массивов. Массив Point[] будет хранить данные в плоском виде, а не как массив ссылок на объекты.
2.📉 Снижение накладных расходов на сборку мусора. Инлайн-объекты не требуют частого вмешательства сборщика мусора (GC).
3. 🛡Оптимизация локальности данных. Данные хранятся компактно, что уменьшает количество промахов кэша.
Пример работы с массивом:
Point[] points = new Point[100];
for (int i = 0; i < points.length; i++) {
points[i] = new Point(i, i * 2);
}
System.out.println(points[50].getX()); // 50
В данном случае массив points занимает меньше памяти и обрабатывается быстрее по сравнению с обычными объектами.
🚫Ограничения инлайн-классов:
1.❇️ Инлайн-классы неизменяемы, все поля должны быть final.
2.❌ Они не могут содержать ссылочные циклы, например, ссылки на самих себя или другие объекты с циклическими зависимостями.
3. 💤В настоящее время находятся в экспериментальной стадии начиная с Java 19.6 954
⚡️ JSON в Java (Jackson vs Gson vs JSON-B)
Работа с JSON – частая задача, но Jackson, Gson и JSON-B работают по-разному. Какой выбрать?
⚙️ Скорость сериализации (от самого быстрого):
• Jackson – самый быстрый (использует ByteBuffer).
• Gson – медленнее, так как использует Reflection.
• JSON-B – стандартный API, но проигрывает по производительности.
✔️ Пример с использованием Jackson:
ObjectMapper objectMapper = new ObjectMapper();
// Объект → JSON (сериализация)
Person person = new Person("Alice", 30);
String json = objectMapper.writeValueAsString(person);
System.out.println("Jackson Serialized: " + json);
// JSON → Объект (десериализация)
Person deserialized = objectMapper.readValue(json, Person.class);
System.out.println("Jackson Deserialized: " + deserialized.name + ", " + deserialized.age);
✔️ Пример с использованием Gson:
Gson gson = new Gson();
// Объект → JSON (сериализация)
Person person = new Person("Bob", 25);
String json = gson.toJson(person);
System.out.println("Gson Serialized: " + json);
// JSON → Объект (десериализация)
Person deserialized = gson.fromJson(json, Person.class);
System.out.println("Gson Deserialized: " + deserialized.name + ", " + deserialized.age);
✔️ Пример с использованием JSON-B:
Jsonb jsonb = JsonbBuilder.create();
// Объект → JSON (сериализация)
Person person = new Person("Charlie", 35);
String json = jsonb.toJson(person);
System.out.println("JSON-B Serialized: " + json);
// JSON → Объект (десериализация)
Person deserialized = jsonb.fromJson(json, Person.class);
System.out.println("JSON-B Deserialized: " + deserialized.name + ", " + deserialized.age);
💡 Совет: Используйте Jackson для high-performance API, но если важен стандарт – выбирайте JSON-B.
#java #json #jackson #performance6 954
Онлайн-интенсив для ИТ-специалистов в Открытых школах Т1
Открытые школы — это возможность за месяц прокачать свои навыки и получить оффер в ИТ-холдинг Т1.
С тебя — год опыта работы в ИТ, с нас — бесплатный онлайн-интенсив и топовые преподаватели.
Что ты получишь?
✅ Уникальный рыночный опыт. Наши проекты ежегодно получают награды на ИТ-конкурсах: Global CIO, Национальной банковской премии и др.
✅ Быстрый рост в ИТ при экспертной поддержке.
✅ Материалы от HR, которые помогут прокачать резюме и подготовиться к интервью в Т1.
✅ Поддержка опытных преподавателей и уникальный карьерный фаст-трек до мидла в Т1 для выпускников интенсива.
✅ Реальный шанс получить оффер в Т1.
Подавай заявку до 14 марта и приходи учиться! Старт ИТ-интенсива уже 17 марта.
Подать заявку
#реклама 16+
t1.ru
О рекламодателе
6 954
⌨️ О чем говорит ключевое слово final?
Модификатор
final может применяться к переменным, параметрам методов, полям и методам класса или самим классам.
✔️ Класс не может иметь наследников;
✔️ Метод не может быть переопределен в классах наследниках;
✔️ Поле не может изменить свое значение после инициализации;
✔️ Параметры методов не могут изменять своё значение внутри метода;
✔️ Локальные переменные не могут быть изменены после присвоения им значения.
#java #final6 954
— «ИИ заменит программистов»
— «Без вышки в IT делать нечего»
— «IT - это пузырь»
Все слышали эти фразы? Спешу расстроить — это пи*$@ж!
Айтишник из «VISION» убивает стереотипы и даёт самую нужную информацию для входа в айти. Никакой воды, всё по делу, остаётся только выбрать нужное направление:
➖ Backend (Python, Java, C/C++, C#, Go, SQL)
➖ Frontend (JavaScript, HTML, CSS, React, Vue.js)
➖ ИБ & Хакинг, DevOps, Data Science, ML
Самобытно и с юмором о программировании — https://t.me/+zSOr3Ob0Z8w3ZjAx
6 954
🚀 ZGC vs G1GC – какой GC лучше?
В Java 17 появился ZGC – он обещает минимальную задержку. Но лучше ли он G1GC?
✔️ Сравнение:
+------+----------+-----------+----------+ | GC | Паузы | Поддержка | CPU | | | | хипа | нагрузка | +------+----------+-----------+----------+ | G1GC | До 200ms | До 16ТБ | Средняя | | ZGC | <10ms | До 16ТБ | Низкая | +------+----------+-----------+----------+📌 Как включить?
-XX:+UseZGC💡 Совет: ZGC идеально подходит для low-latency приложений, но G1GC лучше сбалансирован для большинства случаев. #java #gc #performance
6 954
🔄 StructuredTaskScope — это класс, появившийся в Java 21 в рамках проекта Loom, который помогает управлять группами фоновых задач в многопоточной среде. Он предоставляет удобный механизм для управления задачами в рамках структурированного параллелизма (Structured Concurrency).
📌 Для чего нужен
StructuredTaskScope?
🟢Управление жизненным циклом нескольких задач в пределах одного контекста.
🟢Упрощение обработки исключений и отмены всех задач при сбое одной из них.
🟢Автоматическое ожидание завершения всех задач.
🟢Оптимизация работы с виртуальными потоками (Virtual Threads), повышая эффективность работы.
✔️ Преимущества StructuredTaskScope
🟢Простота кода – избавляет от ручного управления Future, CompletableFuture и ExecutorService.
🟢Безопасность – если одна задача падает, можно отменить другие.
🟢Эффективность – интеграция с виртуальными потоками позволяет выполнять множество задач с минимальными накладными расходами.
➡️ Пример:
import java.util.concurrent.*;
public class StructuredTaskScopeExample {
public static void main(String[] args) throws InterruptedException, ExecutionException {
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
// Запускаем две параллельные задачи
var task1 = scope.fork(() -> fetchDataFromAPI("API 1"));
var task2 = scope.fork(() -> fetchDataFromAPI("API 2"));
// Дожидаемся завершения (или отмены в случае ошибки)
scope.join();
scope.throwIfFailed(); // Выбросит исключение, если одна из задач завершилась с ошибкой
// Получаем результаты
String result1 = task1.get();
String result2 = task2.get();
System.out.println("Result 1: " + result1);
System.out.println("Result 2: " + result2);
}
}
private static String fetchDataFromAPI(String apiName) throws InterruptedException {
Thread.sleep(1000); // Имитация задержки запроса
if (Math.random() > 0.8) throw new RuntimeException(apiName + " failed!"); // Имитация ошибки
return apiName + " response";
}
}
#java #concurrency #structuredconcurrency6 954
Java + QA =
👉👉👉 QA.GURU
5 лет назад мы сложили тестирование и Джава, став самым крупным сообществом QA Automation инженеров. И выпустили уже около двух тысяч джавистов.
В сообществе школы мы обсуждаем вызовы QA: инженеры разного уровня помогают друг другу.
А еще постим много полезного контента: архитектура, автоматизация, работа с базами данных, REST, gRPC, GraphQL и не только.
👉 Сохрани ссылку на @qa_guru_chat
👉 Сохрани ссылку на @qa_guru_chat
👉 Сохрани ссылку на @qa_guru_chat
И не пропусти ближайший открытый вебинар по Java Advanced.
6 954
🔍
JVM Warm-up – почему Java работает медленно при старте?
➡️ Проблема:
JVM использует JIT-компилятор, но оптимизация занимает время. Это приводит к медленному запуску.
📌 Решение 1: предварительная компиляция (AOT, GraalVM)
jaotc --output=app.aot MyApp.class
java -XX:AOTLibrary=app.aot MyApp
📌 Решение 2: заранее прогревать код
for (int i = 0; i < 10000; i++) {
someMethod(); // Прогреваем JIT-компилятор
}
#java #jvm #performance6 954
+5
В канале Selectel Newsfeed новые бесплатные курсы!
Наши бесплатные курсы для специалистов всех уровней помогут разобраться в темах быстро, структурно и последовательно.
Вступайте в сообщество IT-специалистов в Telegram от Selectel и развивайте новые навыки📚
Смотреть
#реклама 16+
О рекламодателе
6 954
❓ Хотите писать смарт-контракты, но кажется, что для этого нужны танцы с бубном?
🫣 Solidity пугает, инструменты кажутся сложными, а блокчейн — вообще отдельной вселенной. Но на самом деле разработка для EVM не так далека от классического программирования. Главное — разобраться с инструментами и подходами.
👉 Изучим это на открытом уроке «Обзор инструментов и методик» 11 марта в 20:00 (мск):
- Какие языки используют для блокчейн-разработки и чем они отличаются
- Как работают компиляторы и анализаторы кода для Solidity
- На что обращать внимание при написании смарт-контрактов
Блокчейн-рынок растёт, и специалисты по Solidity востребованы уже сегодня. Начните разбираться в EVM, пока другие только задаются вопросом «А что это такое?».
Все участники получат скидку на большое обучение «Solidity Developer».
👉 Регистрируйтесь и заходите в Web3 осознанно: https://otus.pw/W8gk/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
6 954
🔥
java.lang.Record vs Lombok @Value – что лучше?
Многие используют Lombok для DTO, но с Java 14 появился record. Стоит ли переходить?
🤔 Чем record лучше Lombok?
🟢 Автоматически создаёт toString(), equals(), hashCode().
🟢 Immutable без аннотаций.
🟢 Улучшенная поддержка в JVM и JIT.
📌 Сравнение синтаксиса:
// Java Record
public record User(String name, int age) {}
// Lombok
@Value
public class User {
String name;
int age;
}
💡 Совет: Используйте record, если вам не нужен полный функционал Lombok – код будет чище.
#java #record #lombok #bestpractices6 954
🔍Что спрашивают на собеседовании у Middle Java-разработчика❔
Уже завтра, 5 марта в 19:00 мск — бесплатное открытое собеседование в прямом эфире!
Интервьюер Алексей Ушаровский (Oracle, Сбер) задаст реальные вопросы разработчику-добровольцу и разберёт его ответы. В конце — время вопросов ментору из зала.
Что узнаешь на эфире:
📂 Какие вопросы задают на собеседованиях и зачем
📂 Как подготовиться, чтобы получить достойный оффер
📂 Чего ждут от кандидатов на Middle Java
Запишись на эфир в боте ШОРТКАТ → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqxfFGD4
6 954
🛠 Object.
finalize() устарел! Как правильно освобождать ресурсы?
Метод finalize() объявлен устаревшим в Java 9 и удалён в Java 18, так как он ненадёжный и медленный.
📌 Как освобождать ресурсы правильно?
🟢 Используйте try-with-resources для Closeable объектов:
try (FileInputStream fis = new FileInputStream("file.txt")) {
// Работа с файлом
}
🟢 Для кастомных классов используйте AutoCloseable:
class MyResource implements AutoCloseable {
@Override
public void close() {
System.out.println("Ресурс закрыт");
}
}
💡 Совет: Если ваш объект использует ресурсы (файлы, сокеты, соединения) – реализуйте AutoCloseable.
#java #finalize #autocloseable6 954
👺 Программирование — В С Ё
В 2025 году на кодинге уже не вывезешь, перспектива года - Информационная Безопасность.
Ловите полезные каналы, которые помогут ворваться в новое направление.
⚡ Пакет Безопаности — Авторский канал матёрого кибербезопасника
😈 Культ Безопаности — Свежие новости из мира ИБ с остринкой
🧠 Пакет Знаний — Инструменты и гайды для кибербезопасников
👨🏫 Менторство ИБ — Вкатываемся в кибербез с двух ног
📂 Вступай и изучай новое направление!
6 954
⚙️
Compact Strings – как Java экономит память на строках?
В Java 9 появилась Compact Strings, уменьшающая использование памяти на 30-40%.
✔️ Как это работает?
🟢 До Java 9 каждая String хранила char[], занимающий 2 байта на символ.
🟢 В Java 9+ String хранит byte[], если все символы – ASCII.
📌 Как включить/выключить?
-XX:+CompactStrings // Включить (по умолчанию) -XX:-CompactStrings // Выключить💡 Совет: Если работаете с огромным количеством строк (логирование, JSON), Compact Strings может существенно снизить нагрузку на память. #java #strings #memoryoptimization
6 954
Для тех кто просил, наш канал с мемами для программистов и айтишников
👇🏻
https://t.me/+HfhWYqpIgz01ODNi
6 954
⌨️ Полезные методы Collections
1️⃣
Collections.min() и Collections.max()
List<Integer> list = Arrays.asList(10, 5, 30, 7);
System.out.println(Collections.min(list)); // 5
System.out.println(Collections.max(list)); // 30
2️⃣ Collections.fill() — заполнение списка одним значением
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
Collections.fill(list, "X");
System.out.println(list); // [X, X, X]
3️⃣ Collections.replaceAll() — замена значений
List<String> list = new ArrayList<>(Arrays.asList("яблоко", "груша", "яблоко"));
Collections.replaceAll(list, "яблоко", "банан");
System.out.println(list); // [банан, груша, банан]
4️⃣ Collections.frequency() — подсчет вхождений элемента
List<String> list = Arrays.asList("A", "B", "A", "C", "A");
int count = Collections.frequency(list, "A");
System.out.println(count); // 3
#java #Collections #min #max #fill #replaceAll #frequency
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
