es
Feedback
Easy Java

Easy Java

Ir al canal en Telegram

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

Mostrar más
5 220
Suscriptores
-124 horas
-237 días
-8730 días
Archivo de publicaciones
Ответ:
Anonymous voting

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

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

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new ConcurrentHashMap<>();

        map.put("A", 1);
        map.put("B", 2);

        map.forEach((k, v) -> {
            System.out.println(k + " = " + v);
            map.put("C", 3); // не вызовет ConcurrentModificationException
        });

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

Вот вот ➡️ Easy Java | #Мемы
Вот вот ➡️ Easy Java | #Мемы

Ответ:
Anonymous voting

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

📖 Как заменить GitHub Copilot на полностью офлайн‑Continue Plugin Покажу, как приручить Continue вместо Copilot: подключу ло
📖 Как заменить GitHub Copilot на полностью офлайн‑Continue Plugin Покажу, как приручить Continue вместо Copilot: подключу локальную LLM, всё без сети — файлы не утекут. Настройка в IDE+LM Studio, фишки, грабли, бенч, выводы. ⛓ Читать статью ➡️ Easy Java | #Статья

👩‍💻 Что такое Semaphore в Java и зачем он нужен? Semaphore — это синхронизатор из пакета java.util.concurrent, который ограничивает количество потоков, одновременно обращающихся к ресурсу. Он работает как счётчик разрешений (permits): поток должен получить разрешение, чтобы продолжить работу, и обязан его освободить после завершения.
Это удобно, когда ресурс ограничен — например, доступ к базе, пулу соединений или ограниченному количеству файлов.
• Контролирует доступ к общим ресурсам • Поддерживает справедливый режим (fair) для очередности • Помогает избежать перегрузки системных ресурсов ⚡️ Пример:
import java.util.concurrent.Semaphore;

public class Main {
    private static final Semaphore semaphore = new Semaphore(2); // максимум 2 потока одновременно

    public static void main(String[] args) {
        Runnable task = () -> {
            try {
                semaphore.acquire();
                System.out.println(Thread.currentThread().getName() + " получил доступ");
                Thread.sleep(1000);
                System.out.println(Thread.currentThread().getName() + " освобождает доступ");
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                semaphore.release();
            }
        };

        for (int i = 1; i <= 5; i++) {
            new Thread(task, "Поток " + i).start();
        }
    }
}
👀 Semaphore особенно полезен в системах, где необходимо ограничить количество одновременных операций — например, при обращении к API с лимитами, управлении пулом соединений или ограничении нагрузки на сервис.
➡️ Easy Java | #Теория

AI-агенты: новая волна автоматизации бизнеса 🔛 Бизнес все активнее внедряет AI-агентов, которые работают быстрее, дешевле и
AI-агенты: новая волна автоматизации бизнеса 🔛 Бизнес все активнее внедряет AI-агентов, которые работают быстрее, дешевле и без усталости. Это не просто чат-боты, а полноценные цифровые сотрудники, которые автоматизируют процессы в HR, финансах, маркетинге и других сферах. Админ канала Ai, работай! подготовил обзор российских и зарубежных решений: где AI-агенты уже зарабатывают деньги, как они трансформируют рынок и какие технологии стоит изучить сегодня, чтобы не остаться позади. Забирай PDF бесплатно: https://t.me/+fSgLZqj-yt04MWYy

Ответ:
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 | #Собес