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

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

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

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

إظهار المزيد
6 953
المشتركون
-324 ساعات
-27 أيام
+630 أيام
أرشيف المشاركات
Бесплатный интенсив: Java-разработчик: старт в профессии с нуля. 📆 Когда: 25-26 февраля в 19:00 по мск. За два дня интенсива
Бесплатный интенсив: Java-разработчик: старт в профессии с нуля. 📆 Когда: 25-26 февраля в 19:00 по мск. За два дня интенсива в прямом эфире, под руководством опытного Java-разработчика, вы сможете: ✔️ Изучить базовые конструкции языка — переменные, типы данных, условные конструкции, циклы, импорты библиотек. ✔️ Написать свой первый проект и определить, подходит ли вам профессия разработчика. ✔️Создать приложение «To-do list». ✔️ Рассмотреть основы работы с SQL-базами данных. ✔️ Узнать ответы на интересующие вас вопросы. ✔️ Получить доступ к закрытому профессиональному сообществу. 🎁 Подарки для участниковинтенсива: гайд «Как заговорить на сленге IT-специалистов», карта компетенций начинающего Java-разработчика!

🔗 Разница между List, Set и Map Эти три интерфейса из java.util используются для хранения коллекций данных, но имеют разные свойства: • List – упорядоченная коллекция, допускает дубликаты (ArrayList, LinkedList). • Set – уникальные элементы, порядок может быть произвольным (HashSet, TreeSet). • Map – хранит пары "ключ-значение" (HashMap, TreeMap). ✔️ Пример:

List<String> list = new ArrayList<>(List.of("A", "B", "A")); // [A, B, A]
Set<String> set = new HashSet<>(Set.of("A", "B", "A")); // [A, B]
Map<Integer, String> map = new HashMap<>(Map.of(1, "One", 2, "Two")); // {1=One, 2=Two}
💡 Совет: Используйте List, если важен порядок и дубликаты, Set – если важна уникальность, Map – для работы с парами ключ-значение. #java #collections #list #set #map

🔍 Что такое switch с выражениями в Java 12+? В Java 12 появился улучшенный switch, который позволяет возвращать значения и использовать case без break. Код стал короче и читабельнее. Можно присваивать результат switch переменной. Поддерживает yield для возврата значений. ✔️ Пример:

String result = switch (day) {
    case "Monday", "Tuesday" -> "Рабочий день";
    case "Saturday", "Sunday" -> "Выходной";
    default -> "Неизвестный день";
};

System.out.println(result);
💡 Совет: Используйте новый switch для улучшения читаемости кода и уменьшения дублирования break. #java #switch #java12

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

🔍 5 фишек Stream API, которые упростят код Stream API – мощный инструмент, но в нём есть интересные методы, о которых многие забывают. 🟢takeWhile() – берёт элементы, пока условие true. 🟢dropWhile() – пропускает элементы, пока условие true. 🟢iterate() – создаёт бесконечный поток. 🟢flatMap() – преобразует вложенные структуры в плоский поток. 🟢collect(Collectors.toMap()) – собирает Stream в Map. ✔️ Пример:

List<Integer> numbers = List.of(1, 2, 3, 4, 5);
numbers.stream()
       .takeWhile(n -> n < 4)
       .forEach(System.out::println); // 1, 2, 3
💡 Совет: Используйте эти методы, чтобы писать более лаконичный код без лишних for. #java #streamapi #functionalprogramming

☕️ Хочешь освоить Java и построить карьеру в IT? Java — один из самых востребованных языков программирования в мире. Его испо
☕️ Хочешь освоить Java и построить карьеру в IT? Java — один из самых востребованных языков программирования в мире. Его используют разработчики, тестировщики и инженеры по автоматизации. А главное — он отлично подходит как для новичков, так и для профессионального роста! На нашем курсе ты: - Разберёшься в основах программирования, даже если раньше не писал код - Научишься разрабатывать приложения и автоматизировать процессы - Создашь свои первые проекты для портфолио Почему Java? - Востребован в разработке ПО, автоматизации и тестировании - Отлично подходит для создания веб-приложений, мобильных сервисов и корпоративных систем - Открывает путь к стабильной карьере и высоким доходам Не откладывай! Регистрируйся на наш бесплатный вебинар!

⚡️ Оптимизация работы с большими коллекциями в Java Работа с большими List и Map в Java может привести к высоким затратам памяти и снижению производительности. Как этого избежать? ❌ Ошибка: использование ArrayList без задания начального размера
List<String> list = new ArrayList<>(); // По умолчанию – 10 элементов
for (int i = 0; i < 1000000; i++) {
    list.add("data");
}
➡️ Решение: укажите размер сразу, если он известен
List<String> list = new ArrayList<>(1000000);
Ошибка: HashMap без настройки initialCapacity и loadFactor По умолчанию HashMap перераспределяет бакеты при загрузке 75%, что может вызвать лишние перераспределения. ➡️ Решение: настройка параметров
Map<String, String> map = new HashMap<>(1000000, 0.9f);
Ошибка: использование LinkedList вместо ArrayList для поиска
List<String> list = new LinkedList<>();
list.get(5000); // O(n)
➡️ Решение: используйте ArrayList, если часто выполняете get() 💡 Совет: Профилируйте код с -XX:+PrintGCDetails и jcmd GC.heap_info, чтобы следить за лишними выделениями памяти. #java #collections #performance

🔗 Что такое try-with-resources? Конструкция try-with-resources, появившаяся в Java 7, позволяет автоматически закрывать ресурсы (например, файлы, потоки). ✔️ Преимущества: 1️⃣ Облегчает управление ресурсами. 2️⃣ Избегает утечек памяти. Пример:
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    System.out.println(br.readLine());
} catch (IOException e) {
    e.printStackTrace();
}
💡 Совет: Все ресурсы, используемые в try-with-resources, должны реализовывать интерфейс AutoCloseable. #java #trywithresources #java7

⚙️ Разница между deep copy и shallow copy При копировании объектов в Java различают два типа копий: Shallow copy – копирует только ссылки на вложенные объекты, изменения в одном объекте затронут копию. Deep copy – создаёт полную копию, включая все вложенные объекты. ✔️ Пример shallow copy:

class Person implements Cloneable {
    String name;

    Person(String name) {
        this.name = name;
    }

    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
Для создания полной копии можно использовать конструктор копирования или сериализацию/десериализацию. ✔️ Пример deep copy:

import java.io.*;

public class DeepCopyExample {
    public static void main(String[] args) {
        Person person = new Person("John", 30);
        Person deepCopy = deepCopy(person);
        
        System.out.println("Original: " + person.getName() + ", " + person.getAge());
        System.out.println("Deep copy: " + deepCopy.getName() + ", " + deepCopy.getAge());
    }
    
    public static <T extends Serializable> T deepCopy(T object) {
        try {
            ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteOutputStream);
            objectOutputStream.writeObject(object);
            
            ByteArrayInputStream byteInputStream = new ByteArrayInputStream(byteOutputStream.toByteArray());
            ObjectInputStream objectInputStream = new ObjectInputStream(byteInputStream);
            T copy = (T) objectInputStream.readObject();
            
            return copy;
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }
}

class Person implements Serializable {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
}
💡 Совет: Используйте deep copy, если объект содержит изменяемые вложенные объекты, иначе изменения в одном месте могут неожиданно повлиять на копию. #java #deepcopy #shallowcopy #clone

🔍 Разница между TreeSet и HashSet Оба класса реализуют Set, но у них разные свойства: HashSet – хранит элементы в случайном порядке, обеспечивает быстрые операции add() и remove(). TreeSet – хранит элементы в отсортированном порядке, но работает медленнее. ✔️ Пример:
Set<Integer> hashSet = new HashSet<>(Set.of(3, 1, 2)); // [3, 1, 2] (порядок может быть разным)
Set<Integer> treeSet = new TreeSet<>(Set.of(3, 1, 2)); // [1, 2, 3] (отсортировано)
💡 Совет: Используйте HashSet для быстрого доступа и TreeSet, если важен порядок элементов. #java #treeset #hashset #collections

Добро пожаловать в мир IT! Специально для Вас мы создали приватный канал IT как образ жизни! Канал ведет опытный Java-ментор
Добро пожаловать в мир IT! Специально для Вас мы создали приватный канал IT как образ жизни! Канал ведет опытный Java-ментор с 10-летним стажем в индустрии: Java Core - (190 уроков) • Spring Framework - (120 уроков) • Hibernate - (80 уроков) • JUnit - (70 уроков) • Maven - (60 уроков) • Gradle - (50 уроков) • Apache Kafka - (90 уроков) • Microservices - (110 уроков) • Design Patterns - (100 уроков) • Swing - (75 уроков) • JavaFX - (65 уроков) и тд. Создавай магию кода с нами 👇

⚡️ Разница между ExecutorService и ForkJoinPool Оба механизма предназначены для работы с многопоточностью, но у них разные задачи: ExecutorService – управляет пулом потоков, подходит для выполнения Runnable и Callable. ForkJoinPool – оптимизирован для рекурсивных задач, использует алгоритм work-stealing. ✔️ Пример ExecutorService:

ExecutorService executor = Executors.newFixedThreadPool(3);
executor.submit(() -> System.out.println("Task executed"));
executor.shutdown();
✔️ Пример ForkJoinPool:

import java.util.concurrent.RecursiveTask;
import java.util.concurrent.ForkJoinPool;

class SumTask extends RecursiveTask<Integer> {
    private final int[] array;
    private final int start, end;
    private final int threshold = 10;

    public SumTask(int[] array, int start, int end) {
        this.array = array;
        this.start = start;
        this.end = end;
    }

    @Override
    protected Integer compute() {
        if (end - start <= threshold) {
            // Базовый случай: небольшая задача
            int sum = 0;
            for (int i = start; i < end; i++) {
                sum += array[i];
            }
            return sum;
        } else {
            // Разделяем задачу
            int mid = (start + end) / 2;
            SumTask leftTask = new SumTask(array, start, mid);
            SumTask rightTask = new SumTask(array, mid, end);
            
            leftTask.fork(); // Асинхронно запускаем левую подзадачу
            int rightResult = rightTask.compute(); // Синхронно вычисляем правую подзадачу
            int leftResult = leftTask.join(); // Ждем завершения левой подзадачи
            
            return leftResult + rightResult;
        }
    }
}

public class ForkJoinExample {
    public static void main(String[] args) {
        ForkJoinPool pool = new ForkJoinPool();
        int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        SumTask task = new SumTask(array, 0, array.length);
        int result = pool.invoke(task);
        System.out.println("Сумма: " + result);
    }
}
ForkJoinPool динамически управляет количеством потоков, при необходимости создавая новые. Обычно это количество соответствует числу процессоров, доступных в системе. 💡 Совет: Используйте ForkJoinPool для рекурсивных задач, а ExecutorService – для классической многопоточности. #java #executorservice #forkjoinpool #multithreading

Как делать веб приложения на Spring Boot Первая понятная инструкция от опытного Java Разработчика из BigTech в Европе. Научит
Как делать веб приложения на Spring Boot Первая понятная инструкция от опытного Java Разработчика из BigTech в Европе. Научитесь за 0 рублей и всего за 3 дня создавать собственные веб приложения. Если вы планируете стать востребованным разработчиком в кратчайшие сроки, то приходите на интенсив от FAANG School, где за 72 часа: – погрузитесь в базовые концепции Spring. Что такое бины, как работает ApplicationContext – какие типичные ошибки делают 80% новичков с этим фреймворком – разберетесь с ключевыми аннотациями и поймете, как создавать проекты для портфолио, которые способны выдерживать высокие нагрузки – вместе с senior-разработчиком в прямом эфире создадите рабочее мини приложение и закрепите навыки на практике Переходите, чтобы обучиться основам Spring на понятном языке со схемами и пошаговым планом.

⚙️ Что такое CompletableFuture в Java? CompletableFuture — это улучшенная альтернатива Future, появившаяся в Java 8, позволяющая работать с асинхронными вычислениями. ➡️ Почему стоит использовать? 1️⃣ Позволяет запускать задачи в фоне и получать результат позже. 2️⃣ Поддерживает цепочки операций .thenApply(), .thenAccept(). 3️⃣ Может выполняться параллельно без блокировки основного потока. ✔️ Пример:
import java.util.concurrent.CompletableFuture;

public class AsyncExample {
    public static void main(String[] args) {
        CompletableFuture.supplyAsync(() -> "Hello, Async!")
                .thenAccept(System.out::println);
    }
}
💡 Совет: Используйте CompletableFuture, если хотите писать неблокирующий и эффективный код. #java #completablefuture #async

💡 Как управлять потоками с помощью ExecutorCompletionService ExecutorCompletionService — это инструмент для удобной работы с потоками, позволяющий эффективно управлять задачами, выполняющимися асинхронно, и получать результаты по мере их готовности. Он сочетает в себе возможности ExecutorService и очередь для получения результатов выполнения задач. 📌 Преимущества ExecutorCompletionService: 1️⃣ Удобное управление задачами: позволяет управлять и отслеживать несколько асинхронных задач одновременно. 2️⃣ Получение результатов по мере выполнения: результаты задач можно получать в том порядке, в котором они завершены. 3️⃣ Обработка ошибок: позволяет перехватывать исключения, возникающие в процессе выполнения задач. 📌 Пример использования ExecutorCompletionService:
import java.util.concurrent.*;

public class ExecutorCompletionServiceExample {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        ExecutorService executor = Executors.newFixedThreadPool(3);
        ExecutorCompletionService<Integer> completionService = new ExecutorCompletionService<>(executor);

        // Добавляем задачи в очередь
        for (int i = 0; i < 5; i++) {
            final int taskId = i;
            completionService.submit(() -> {
                // Задача выполняется
                Thread.sleep(1000);  // Эмулируем работу
                return taskId * 2;
            });
        }

        // Получаем результаты по мере их готовности
        for (int i = 0; i < 5; i++) {
            Future<Integer> result = completionService.take(); // Возвращает первый завершившийся результат
            System.out.println("Задача завершена с результатом: " + result.get());
        }

        executor.shutdown();
    }
}
📌 Как это работает: 1️⃣ Создаём ExecutorCompletionService, передавая ему пул потоков. 2️⃣ Задачи отправляются в очередь с помощью метода submit(). 3️⃣ Метод take() извлекает завершённую задачу и её результат. 4️⃣ Метод get() позволяет получить результат выполнения задачи. 📌 Когда использовать ExecutorCompletionService? - Когда необходимо параллельно выполнить несколько задач и получить результаты по мере их завершения. - В ситуациях, когда задачи могут занять разное время на выполнение. - Для эффективного управления потоками в многозадачных приложениях. 💡 Совет: Используйте ExecutorCompletionService для повышения производительности, когда важно обрабатывать результаты задач в порядке их завершения. #Java #ExecutorCompletionService #ПараллельноеВыполнение #Многозадачность

⌨️ Что такое WeakReference? WeakReference – это специальный тип ссылки, который не предотвращает сборщик мусора от удаления объекта. Используется, когда объект не является критически важным. Полезен для кеширования, где объект можно освободить при нехватке памяти. ✔️ Пример:

import java.lang.ref.WeakReference;

public class WeakRefExample {
    public static void main(String[] args) {
        String str = new String("WeakReference");
        WeakReference<String> weakRef = new WeakReference<>(str);
        str = null; // Теперь объект доступен для GC
        System.gc();
        System.out.println(weakRef.get()); // Может быть null
    }
}
💡 Совет: Используйте WeakReference, если объект должен автоматически удаляться при нехватке памяти. #java #weakreference

Что такое Record в Java? Record – это новый тип класса, который появился в Java 14 и предназначен для создания неизменяемых объектов с минимальным кодом. Автоматически создаёт equals(), hashCode() и toString(). Подходит для DTO (Data Transfer Object) и неизменяемых объектов. ✔️ Пример:
public record Person(String name, int age) {}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("Alice", 30);
        System.out.println(person); // Person[name=Alice, age=30]
    }
}
💡 Совет: Используйте Record, если вам нужен неизменяемый объект с автогенерацией методов. #java #record #java14

👥 Совет IT-спецам на 2025 год - чаще посещайте тематические мероприятия ❔Зачем тратить время на Ютубчик, когда можно интерес
👥 Совет IT-спецам на 2025 год - чаще посещайте тематические мероприятия ❔Зачем тратить время на Ютубчик, когда можно интересно проводить время, при этом развивая свои навыки! 💡А чтобы не гуглить афиши и не подписываться на сотню разных каналов, IT-мероприятия России уже собрали все самые топовые события в одном месте. 👨‍💻 В этом канале ты найдешь самые актуальные и интересные события: анонсы форумов, конференций, митапов, вебинаров, хакатонов, олимпиад и многое другое. ⚡️ Все твои коллеги уже здесь - IT-мероприятия России / ITMeeting / IT events. 🔥 Присоединяйся и будь в курсе самых топовых IT-event'ов!

🔍 Что такое var и когда его использовать? С появлением Java 10 был добавлен var – ключевое слово для вывода типа переменной на основе присвоенного значения. Позволяет сократить код, убрав явное указание типа. Работает только для локальных переменных (нельзя использовать для аргументов метода или полей класса). ✔️ Пример использования:

var message = "Hello, Java!"; // Компилятор автоматически определит тип String
var number = 42; // int
var list = List.of("A", "B", "C"); // List<String>
Нельзя использовать var так:

var x; // Ошибка, требуется инициализация
💡 Совет: Используйте var, если тип очевиден, но не злоупотребляйте, чтобы не терять читаемость кода. #java #var #java10