ar
Feedback
Java | Фишки и трюки

Java | Фишки и трюки

الذهاب إلى القناة على Telegram

Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg

إظهار المزيد
6 811
المشتركون
-624 ساعات
-137 أيام
-6930 أيام
أرشيف المشاركات
👀Как применить 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.

⚡️ 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 #performance

Онлайн-интенсив для ИТ-специалистов в Открытых школах Т1 Открытые школы — это возможность за месяц прокачать свои навыки и получить оффер в ИТ-холдинг Т1. С тебя — год опыта работы в ИТ, с нас — бесплатный онлайн-интенсив и топовые преподаватели. Что ты получишь? ✅ Уникальный рыночный опыт. Наши проекты ежегодно получают награды на ИТ-конкурсах: Global CIO, Национальной банковской премии и др. ✅ Быстрый рост в ИТ при экспертной поддержке. ✅ Материалы от HR, которые помогут прокачать резюме и подготовиться к интервью в Т1. ✅ Поддержка опытных преподавателей и уникальный карьерный фаст-трек до мидла в Т1 для выпускников интенсива. ✅ Реальный шанс получить оффер в Т1. Подавай заявку до 14 марта и приходи учиться! Старт ИТ-интенсива уже 17 марта. Подать заявку #реклама 16+ t1.ru О рекламодателе

⌨️ О чем говорит ключевое слово final? Модификатор final может применяться к переменным, параметрам методов, полям и методам класса или самим классам. ✔️ Класс не может иметь наследников; ✔️ Метод не может быть переопределен в классах наследниках; ✔️ Поле не может изменить свое значение после инициализации; ✔️ Параметры методов не могут изменять своё значение внутри метода; ✔️ Локальные переменные не могут быть изменены после присвоения им значения. #java #final

— «ИИ заменит программистов» — «Без вышки в IT делать нечего» — «IT - это пузырь» Все слышали эти фразы? Спешу расстроить — э
«ИИ заменит программистов» — «Без вышки в 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

🚀 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

🔄 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 #structuredconcurrency

Java + QA = 👉👉👉 QA.GURU 5 лет назад мы сложили тестирование и Джава, став самым крупным сообществом QA Automation инженеро
Java + QA = 👉👉👉 QA.GURU 5 лет назад мы сложили тестирование и Джава, став самым крупным сообществом QA Automation инженеров. И выпустили уже около двух тысяч джавистов. В сообществе школы мы обсуждаем вызовы QA: инженеры разного уровня помогают друг другу. А еще постим много полезного контента: архитектура, автоматизация, работа с базами данных, REST, gRPC, GraphQL и не только. 👉 Сохрани ссылку на @qa_guru_chat 👉 Сохрани ссылку на @qa_guru_chat 👉 Сохрани ссылку на @qa_guru_chat И не пропусти ближайший открытый вебинар по Java Advanced.

🔍 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 #performance

В канале Selectel Newsfeed новые бесплатные курсы! Наши бесплатные курсы для специалистов всех уровней помогут разобраться в
+5
В канале Selectel Newsfeed новые бесплатные курсы! Наши бесплатные курсы для специалистов всех уровней помогут разобраться в темах быстро, структурно и последовательно. Вступайте в сообщество IT-специалистов в Telegram от Selectel и развивайте новые навыки📚 Смотреть #реклама 16+ О рекламодателе

❓ Хотите писать смарт-контракты, но кажется, что для этого нужны танцы с бубном? 🫣 Solidity пугает, инструменты кажутся слож
❓ Хотите писать смарт-контракты, но кажется, что для этого нужны танцы с бубном? 🫣 Solidity пугает, инструменты кажутся сложными, а блокчейн — вообще отдельной вселенной. Но на самом деле разработка для EVM не так далека от классического программирования. Главное — разобраться с инструментами и подходами. 👉 Изучим это на открытом уроке «Обзор инструментов и методик» 11 марта в 20:00 (мск): - Какие языки используют для блокчейн-разработки и чем они отличаются - Как работают компиляторы и анализаторы кода для Solidity - На что обращать внимание при написании смарт-контрактов Блокчейн-рынок растёт, и специалисты по Solidity востребованы уже сегодня. Начните разбираться в EVM, пока другие только задаются вопросом «А что это такое?». Все участники получат скидку на большое обучение «Solidity Developer». 👉 Регистрируйтесь и заходите в Web3 осознанно: https://otus.pw/W8gk/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🔥 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 #bestpractices

🔍Что спрашивают на собеседовании у Middle Java-разработчика❔ Уже завтра, 5 марта в 19:00 мск — бесплатное открытое собеседов
🔍Что спрашивают на собеседовании у Middle Java-разработчикаУже завтра, 5 марта в 19:00 мск — бесплатное открытое собеседование в прямом эфире! Интервьюер Алексей Ушаровский (Oracle, Сбер) задаст реальные вопросы разработчику-добровольцу и разберёт его ответы. В конце — время вопросов ментору из зала. Что узнаешь на эфире: 📂 Какие вопросы задают на собеседованиях и зачем 📂 Как подготовиться, чтобы получить достойный оффер 📂 Чего ждут от кандидатов на Middle Java Запишись на эфир в боте ШОРТКАТ → @shortcut_sh_bot Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqxfFGD4

🛠 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 #autocloseable

👺 Программирование — В С Ё В 2025 году на кодинге уже не вывезешь, перспектива года - Информационная Безопасность. Ловите по
👺 Программирование — В С Ё В 2025 году на кодинге уже не вывезешь, перспектива года - Информационная Безопасность. Ловите полезные каналы, которые помогут ворваться в новое направление. ⚡ Пакет Безопаности — Авторский канал матёрого кибербезопасника 😈 Культ Безопаности — Свежие новости из мира ИБ с остринкой 🧠 Пакет Знаний — Инструменты и гайды для кибербезопасников 👨‍🏫 Менторство ИБ — Вкатываемся в кибербез с двух ног 📂 Вступай и изучай новое направление!

⚙️ 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

Для тех кто просил, наш канал с мемами для программистов и айтишников 👇🏻 https://t.me/+HfhWYqpIgz01ODNi

⌨️ Полезные методы 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

⚡️ Дождались! Ребята сделали крутейшие каналы про Айти ⚡️ Здесь сложные темы объясняют на простых картинках, понятном языке.
+4
⚡️ Дождались! Ребята сделали крутейшие каналы про Айти ⚡️ Здесь сложные темы объясняют на простых картинках, понятном языке. А также решаем задачки, делимся ресурсами и советами. Принимаем заявки, не упусти: ⚙️ Webdev | Backend & Frontend 📱 Python | Программирование 😷 Hacking | Кибербезопасность 🖥 CodHub | Программирование 🖥 Memes | Мемы айтишников

⌨️ Метод Stream.reduce() Метод reduce() используется для агрегирования (свёртки) элементов стрима в одно значение. Это мощный инструмент для вычислений, таких как сумма, произведение, конкатенация строк и т. д. 1️⃣ T reduce(T identity, BinaryOperator<T> accumulator) 🟢identity – начальное значение (например, 0 для суммы, 1 для произведения). 🟢accumulator – функция, которая объединяет элементы. ✅ Пример: сумма чисел

List<Integer> numbers = List.of(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, Integer::sum);
System.out.println(sum); // 15
2️⃣ reduce(accumulator) (без начального значения)

Optional<T> reduce(BinaryOperator<T> accumulator)
📌 Здесь возвращается Optional<T>, потому что стрим может быть пустым. ✅ Пример: наибольшее число

Optional<Integer> max = numbers.stream().reduce(Integer::max);
max.ifPresent(System.out::println); // 5
3️⃣ reduce(identity, accumulator, combiner) (для параллельных потоков)

<U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner)
Пример: длина всех строк в списке

List<String> words = List.of("Java", "Stream", "Reduce");
int totalLength = words.parallelStream()
    .reduce(0, (sum, word) -> sum + word.length(), Integer::sum);
System.out.println(totalLength); // 16
Здесь: 🟢sum + word.length() – считает длину строк, 🟢Integer::sum – объединяет результаты. 💡 Совет: Для простых случаев (сумма, максимум) используйте sum(), max(), count(), а reduce() – для сложных операций. #java #reduce