uz
Feedback
Easy Java

Easy Java

Kanalga Telegram’da o‘tish

Лучшие обучающие материалы и другие полезности для Java-разработчиков. Сотрудничество: @heywan_n1 Цены: @heywan_media Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy

Ko'proq ko'rsatish
5 037
Obunachilar
-224 soatlar
-187 kunlar
-7430 kunlar
Postlar arxiv
Ответ:
Anonymous voting

➡️ Easy Java | #Викторина
➡️ Easy Java | #Викторина

Вопрос с собеса Что такое CompletableFuture в Java и чем он отличается от Future? Пример🔽
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class Main {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CompletableFuture<String> future =
                CompletableFuture.supplyAsync(() -> "Hello")
                                 .thenApply(str -> str + ", world!")
                                 .thenApply(String::toUpperCase);

        System.out.println(future.get()); // ➔ HELLO, WORLD!
    }
}
Ответ🔽
Future позволяет запустить задачу в отдельном потоке и получить результат, но работать с ним неудобно: нет удобных методов для цепочек, обработки ошибок и асинхронных комбинаций. CompletableFuture — это расширение Future, которое: — поддерживает асинхронные цепочки вычислений (thenApply, thenAccept, thenCompose) — умеет комбинировать несколько задач (allOf, anyOf) — позволяет удобно обрабатывать исключения (exceptionally) — работает в стиле промисов из JavaScript 📌 Future подходит для простых асинхронных вычислений, а CompletableFuture — для сложных асинхронных цепочек и реактивного программирования.
➡️ Easy Java | #Собес

ChatGPT 5 — страшное оружие в умелых руках Российский разработчик Олег Миллер, занимающий обучением и тренировкой новой модел
ChatGPT 5 — страшное оружие в умелых руках Российский разработчик Олег Миллер, занимающий обучением и тренировкой новой модели Open AI в Сан-Франциско, рассказывает в своём блоге: Как отключить цензуру у ChatGPT (инструкция) Малоизвестные ИИ, с которыми вы станете богатым Почему человечество обречено на катастрофу из-за развития ИИ За такие инсайды он может быть уволен. Поэтому блог закрытый, а ссылка на него постоянно меняется. Успей вступить: https://t.me/+jIH7Az70b68xMDJi

Ответ:
Anonymous voting

➡️ Easy Java | #Викторина
➡️ Easy Java | #Викторина

⚡️ RECURA — один из лучших каналов для разработчиков и программистов. Канал ведёт практикующий DevOps-инженер, который ежедне
⚡️ RECURA — один из лучших каналов для разработчиков и программистов. Канал ведёт практикующий DevOps-инженер, который ежедневно публикует: • код, повышающий эффективность разработкилайфхаки и полезные трюки для Bash и Linuxготовые решения для Docker и Kubernetesинструменты и утилиты для автоматизации полезные материалы и советы по информационной безопасности Подпишись, чтобы быть востребованным специалистом.

👩‍💻 Что такое Phaser в Java и зачем он нужен? Phaser — это гибкий синхронизатор из пакета java.util.concurrent, который работает как усовершенствованный вариант CyclicBarrier и CountDownLatch. Он позволяет потокам синхронизироваться по фазам (этапам) выполнения задачи.
Главное отличие: количество участников (parties) можно динамически регистрировать и снимать с регистрации, что делает Phaser более универсальным.
• Поддерживает несколько фаз (циклов синхронизации) • Позволяет динамически добавлять/удалять потоки • Можно строить сложные сценарии синхронизации ⚡️ Пример:
import java.util.concurrent.Phaser;

public class Main {
    public static void main(String[] args) {
        Phaser phaser = new Phaser(3); // 3 потока-участника

        Runnable task = () -> {
            System.out.println(Thread.currentThread().getName() + " — фаза 1");
            phaser.arriveAndAwaitAdvance(); // ждём остальных

            System.out.println(Thread.currentThread().getName() + " — фаза 2");
            phaser.arriveAndAwaitAdvance(); // ждём остальных
        };

        new Thread(task, "Поток 1").start();
        new Thread(task, "Поток 2").start();
        new Thread(task, "Поток 3").start();
    }
}
👀 Phaser особенно полезен, когда у задачи есть несколько этапов, и все потоки должны переходить к следующему этапу только синхронно — например, в симуляциях, распределённых вычислениях или пошаговых моделях.
➡️ Easy Java | #Теория

Ответ:
Anonymous voting

➡️ Easy Java | #Викторина
➡️ Easy Java | #Викторина

Вопрос с собеса В чём разница между ExecutorService и ForkJoinPool в Java? Пример🔽
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;

public class Main {
    public static void main(String[] args) {
        // Пример с ExecutorService
        ExecutorService executor = Executors.newFixedThreadPool(2);
        executor.submit(() -> System.out.println("Задача в ExecutorService"));
        executor.shutdown();

        // Пример с ForkJoinPool
        ForkJoinPool pool = new ForkJoinPool();
        int sum = pool.invoke(new SumTask(1, 5));
        System.out.println("Сумма: " + sum);
    }

    static class SumTask extends RecursiveTask<Integer> {
        int start, end;

        SumTask(int start, int end) {
            this.start = start;
            this.end = end;
        }

        @Override
        protected Integer compute() {
            if (end - start <= 1) {
                return start + end;
            }
            int mid = (start + end) / 2;
            SumTask left = new SumTask(start, mid);
            SumTask right = new SumTask(mid + 1, end);
            left.fork();
            return right.compute() + left.join();
        }
    }
}
Ответ🔽
ExecutorService — это абстракция для управления пулом потоков и выполнения задач (Runnable или Callable) в очереди. Он отлично подходит для стандартных многопоточных задач, где нужно управлять количеством потоков и временем жизни пула. ForkJoinPool — это специальная реализация ExecutorService, оптимизированная для задач типа divide-and-conquer, где задачи рекурсивно делятся на подзадачи (через RecursiveTask или RecursiveAction) и выполняются с помощью алгоритма "work-stealing". 📌 Если задачи независимые и нет сложного деления — хватит обычного ExecutorService. Если нужна параллельная рекурсия и максимальная загрузка процессоров — лучше ForkJoinPool.
➡️ Easy Java | #Собес

⚡️⚡️⚡️⚡️Нейросети объявили нам войну — и мы терпим поражение 👨‍💻Канал BlackDragon документирует наше отставание в реальном
⚡️⚡️⚡️⚡️Нейросети объявили нам войну — и мы терпим поражение 👨‍💻Канал BlackDragon документирует наше отставание в реальном времени! ➡️ Алгоритмы уже заменяют нас в ряде профессий! ➡️ИИ создает контент, который сложно отличить от человеческого! ➡️Нейросети анализируют данные быстрее человека в 17 раз! На канале расскажем как получать профит от нейронки, а не увольнение — https://t.me/+ONBHuVEQcz8xYjY6

Ответ:
Anonymous voting

➡️ Easy Java | #Викторина
➡️ Easy Java | #Викторина

👩‍💻 Что такое CyclicBarrier в Java и зачем он нужен? CyclicBarrier — это синхронизатор из пакета java.util.concurrent, который позволяет группе потоков дождаться друг друга, прежде чем продолжить выполнение.
В отличие от CountDownLatch, барьер можно использовать многократно — после того как все потоки достигли точки синхронизации, он сбрасывается и готов к новому циклу.
• Синхронизирует несколько потоков в «точках встречи» • Можно выполнять дополнительное действие при достижении барьера • Подходит для повторяющихся этапов работы в параллельных задачах ⚡️ Пример:
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

public class Main {
    public static void main(String[] args) {
        CyclicBarrier barrier = new CyclicBarrier(3, () -> 
            System.out.println("Все потоки достигли барьера, продолжаем!")
        );

        Runnable task = () -> {
            try {
                System.out.println(Thread.currentThread().getName() + " готов");
                barrier.await();
                System.out.println(Thread.currentThread().getName() + " продолжает работу");
            } catch (InterruptedException | BrokenBarrierException e) {
                e.printStackTrace();
            }
        };

        new Thread(task, "Поток 1").start();
        new Thread(task, "Поток 2").start();
        new Thread(task, "Поток 3").start();
    }
}
👀 CyclicBarrier особенно полезен, когда несколько потоков должны синхронизировать свои шаги — например, в параллельных алгоритмах, симуляциях, или играх с одновременным обновлением состояния.
➡️ Easy Java | #Теория

Ответ:
Anonymous voting

➡️ Easy Java | #Викторина
➡️ Easy Java | #Викторина

Вопрос с собеса Когда стоит использовать CopyOnWriteArrayList в Java? Пример🔽
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class Main {
    public static void main(String[] args) {
        List<String> list = new CopyOnWriteArrayList<>();
        list.add("A");
        list.add("B");

        for (String s : list) {
            list.add("C"); // не вызовет ConcurrentModificationException
        }

        System.out.println(list);
    }
}
Ответ🔽
CopyOnWriteArrayList — это потокобезопасная реализация List, которая копирует весь массив при каждой модификации. Она идеально подходит, когда: — много операций чтения и мало операций записи — нужно избежать ConcurrentModificationException при итерации — важна простая потокобезопасность без внешней синхронизации 📌 Недостаток — высокая стоимость записи, так как создаётся новая копия массива при каждом изменении.
➡️ Easy Java | #Собес

Ответ:
Anonymous voting

➡️ Easy Java | #Викторина
➡️ Easy Java | #Викторина