fa
Feedback
Easy Java

Easy Java

رفتن به کانال در Telegram

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

نمایش بیشتر
5 038
مشترکین
-224 ساعت
-187 روز
-7430 روز
آرشیو پست ها
👩‍💻 Что такое CompletableFuture.supplyAsync() и зачем он нужен? Это статический метод для асинхронного выполнения задачи с возвратом результата. Он запускает код в отдельном потоке из общего пула (ForkJoinPool.commonPool()), не блокируя главный поток. ⚡️ Пример:
import java.util.concurrent.*;

public class AsyncExample {
    public static void main(String[] args) throws Exception {
        System.out.println("Начало: " + Thread.currentThread().getName());

        // Асинхронный вызов API / тяжёлый расчёт
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(2000); // симуляция долгой операции
            } catch (InterruptedException e) { }
            return "Результат: " + Thread.currentThread().getName();
        });

        System.out.println("Главный поток не заблокирован");

        // Получение результата (блокируется, только если надо)
        String result = future.join();
        System.out.println(result);
    }
}
Особенно полезен при вызове внешних API, параллельной обработке списков, построении неблокирующих пайплайнов
➡️ Easy Java | #Теория

Что выведет код?
Anonymous voting

👩‍💻 Викторина: что выведет код?
public class Main {
    public static void main(String[] args) {
        try {
            throw new RuntimeException("Oops");
        } catch (Exception e) {
            System.out.print("A");
        } finally {
            System.out.print("B");
        }
        System.out.print("C");
    }
}
➡️ Easy Java | #Викторина

👩‍💻 Event Loop в Java для начинающих JavaScript выполняет код в одном основном потоке. Это означает, что инструкции выполня
👩‍💻 Event Loop в Java для начинающих JavaScript выполняет код в одном основном потоке. Это означает, что инструкции выполняются последовательно — одна за другой. Получил команду — выполнил. Но что делать интерпретатору, если он встречает код, который не может выполнить сразу? Именно про это вы узнаете в данной статье ⛓ Читаем по ссылке ➡️ Easy Java | #Ресурс

👩‍💻 Что такое LocalDate.now() и зачем он нужен? LocalDate.now() — это статический метод класса java.time.LocalDate, который возвращает текущую дату в системном часовом поясе. ⚡️ Пример: import java.time.*; import java.time.format.*; public class LocalDateExample { public static void main(String[] args) { // Получение текущей даты LocalDate today = LocalDate.now(); System.out.println("Сегодня: " + today); // Разные форматы System.out.println("Год: " + today.getYear()); System.out.println("Месяц: " + today.getMonth()); System.out.println("День недели: " + today.getDayOfWeek()); // Форматирование DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); System.out.println("Форматированная: " + today.format(formatter)); // Арифметика с датами LocalDate nextWeek = today.plusDays(7); LocalDate nextMonth = today.plusMonths(1); System.out.println("Через неделю: " + nextWeek); System.out.println("Через месяц: " + nextMonth); // Сравнение дат if (today.isAfter(LocalDate.of(2024, 1, 1))) { System.out.println("Мы уже в 2024 году или позже"); } } }
Особенно полезен при логировании даты событий, расчете сроков, фильтрации записей и генерации отчетов.
➡️ Easy Java | #Теория

😢 Надоел медленный интернет? Подключи «VISION VPN» и забудь о любых проблемах. 🔸3 дня бесплатно 🔸Одна подписка — 10+ локац
😢 Надоел медленный интернет? Подключи «VISION VPN» и забудь о любых проблемах.
🔸3 дня бесплатно 🔸Одна подписка — 10+ локаций. 🔸Безлимитный трафик 🔸Работает на всех устройствах
Работает когда? Работает всегда — «VISION VPN»!

Признайтесь, каждый из вас ждет такую вакансию ➡️ Easy Java | #Мем
Признайтесь, каждый из вас ждет такую вакансию ➡️ Easy Java | #Мем

Что выведет код?
Anonymous voting

👩‍💻 Викторина: что выведет код?
public class Main {
    static class A {
        static final B b = new B();
        static final int value = 42;
    }
    
    static class B {
        static final int value = A.value;
    }
    
    public static void main(String[] args) {
        System.out.println(A.b.value);
    }
➡️ Easy Java | #Викторина

👩‍💻 Универсальный инструмент для работы с базами данных и SQL-клиент Бесплатный многоплатформенный инструмент для работы с
👩‍💻 Универсальный инструмент для работы с базами данных и SQL-клиент Бесплатный многоплатформенный инструмент для работы с базами данных, предназначенный для разработчиков, SQL-программистов, администраторов и аналитиков баз данных. Обладает множеством функций , включая редактор схем, редактор SQL, редактор данных, интеграцию с ИИ, ER-диаграммы, экспорт/импорт/миграцию данных, планы выполнения SQL-запросов, инструменты администрирования баз данных, панели мониторинга баз данных, средство просмотра пространственных данных, прокси-сервер и SSH-туннелирование, редактор пользовательских драйверов баз данных и т.д. ⛓ Ссылка на GitHub ➡️ Easy Java | #Ресурс

👩‍💻 Что такое Optional.ifPresent() и зачем он нужен? Optional.ifPresent() — это метод класса Optional<T>, который выполняет заданное действие, если значение присутствует. Если значение отсутствует, ничего не происходит. ⚡️ Пример:
import java.util.*;

public class IfPresentExample {
    public static void main(String[] args) {
        // Поиск пользователя
        Optional<String> email = findUserEmail(123);
        
        // Старый способ (много кода)
        if (email.isPresent()) {
            sendEmail(email.get(), "Привет!");
        }
        
        // Новый способ (кратко и элегантно)
        email.ifPresent(e -> sendEmail(e, "Привет!"));
        
        // С method reference
        email.ifPresent(System.out::println);
        
        // Работа со списком опциональных значений
        List<Optional<String>> names = Arrays.asList(
            Optional.of("Анна"),
            Optional.empty(),
            Optional.of("Иван")
        );
        
        // Обрабатываем только существующие значения
        names.forEach(opt -> 
            opt.ifPresent(name -> 
                System.out.println("Привет, " + name)
            )
        );
        // Вывод: Привет, Анна
        //        Привет, Иван
    }
    
    static Optional<String> findUserEmail(int id) {
        return id == 123 ? 
            Optional.of("user@mail.com") : 
            Optional.empty();
    }
    
    static void sendEmail(String email, String msg) {
        System.out.println("Отправлено на " + email + ": " + msg);
    }
}
Особенно полезен для отправки уведомлений при наличии данных, логировании опциональных значений, обновлении объектов, выполнении побочных эффектов, обработке результатов поиска.
➡️ Easy Java | #Теория

Всем бы такие софт-скиллы... ➡️ Easy Java | #Мем
Всем бы такие софт-скиллы... ➡️ Easy Java | #Мем

Что выведет код?
Anonymous voting

👩‍💻 Викторина: что выведет код?
public class Main {
    private static ThreadLocal<String> threadLocal = new ThreadLocal<>();
    private static InheritableThreadLocal<String> inheritable = new InheritableThreadLocal<>();
    
    public static void main(String[] args) {
        threadLocal.set("main");
        inheritable.set("main");
        
        Thread child = new Thread(() -> {
            System.out.print(threadLocal.get() + " ");
            System.out.print(inheritable.get() + " ");
            
            inheritable.set("child");
            
            Thread grandChild = new Thread(() -> {
                System.out.print(inheritable.get());
            });
            grandChild.start();
            try { grandChild.join(); } catch (Exception e) {}
        });
        
        child.start();
    }
}
➡️ Easy Java | #Викторина

👩‍💻 Марафон на GitHub: Java за 30 дней Пошаговое руководство по изучению языка программирования JavaScript за 30 дней, подо
👩‍💻 Марафон на GitHub: Java за 30 дней Пошаговое руководство по изучению языка программирования JavaScript за 30 дней, подойдет преимущественно для новичков. Несмотря на свое название, курс может занять более 100 дней, однако, все зависит только от вас. В курсе темы поделены по дням начиная с самой базы и заканчивая визуализацией и анимацией. ⛓ Ссылка на курс ➡️ Easy Java | #Ресурс

Вопрос с собеса Чем ReentrantLock отличается от synchronized в Java? Пример🔽
import java.util.concurrent.locks.ReentrantLock;

public class Main {
    private static final ReentrantLock lock = new ReentrantLock();
    private static int counter = 0;

    public static void main(String[] args) {
        Runnable task = () -> {
            lock.lock();
            try {
                counter++;
            } finally {
                lock.unlock();
            }
        };

        new Thread(task).start();
        new Thread(task).start();
    }
}
Ответ🔽
ReentrantLock — это класс из java.util.concurrent.locks, который предоставляет больше возможностей, чем synchronized: — Можно пытаться захватить блокировку с таймаутом (tryLock) — Можно использовать блокировку с несколькими условиями (Condition) — Можно вручную управлять моментом захвата и освобождения 📌 В отличие от synchronized, ReentrantLock требует явного вызова lock() и unlock(), что даёт гибкость, но требует дисциплины.
➡️ Easy Java | #Собес

Бесплатная конференция по PostgreSQL Регистрируйся на бесплатную конференцию по PostgreSQL — 19.03.2026.📅 Эксперты расскажут
Бесплатная конференция по PostgreSQL Регистрируйся на бесплатную конференцию по PostgreSQL — 19.03.2026.📅 Эксперты расскажут о разработке, администрировании и новинках мира Postgres. ✅ Бесплатное участие ✅ Опытные спикеры ✅ 25+ тематических докладов ✅ Рабочие кейсы Каждый участник получает именной Сертификат участника мероприятия. Одни из немногих спикеров конференции: — Андрей Бородин PostgreSQL Major contributor, руководитель подразделения разработки РСУБД с открытым исходным кодом Yandex Cloud — Родион Хабибов DevOps-инженер «СберСервис» — Андрей Овчаренко Руководитель отдела Java-разработки Московской биржи ... и многие другие. Регистрируйся, будет интересно! И бесплатно! Зарегистрироваться #реклама 16+ pgbootcamp.ru О рекламодателе

👩‍💻 Что такое Collections.unmodifiableList() и зачем он нужен? Collections.unmodifiableList() — это статический метод, который создает неизменяемую (read-only) обертку над существующим списком. Любая попытка изменить такой список приводит к выбросу UnsupportedOperationException. ⚡️ Пример:
import java.util.*;

public class UnmodifiableListExample {
    public static void main(String[] args) {
        // Создаем изменяемый список
        List<String> mutableList = new ArrayList<>();
        mutableList.add("Java");
        mutableList.add("Python");
        mutableList.add("C++");
        
        // Создаем неизменяемую обертку
        List<String> immutableList = Collections.unmodifiableList(mutableList);
        
        System.out.println("Исходный список: " + mutableList);
        System.out.println("Неизменяемая обертка: " + immutableList);
        
        // Попытка изменить неизменяемый список
        try {
            immutableList.add("JavaScript"); // Бросит исключение
        } catch (UnsupportedOperationException e) {
            System.out.println("Ошибка: нельзя добавить элемент в неизменяемый список");
        }
        
        try {
            immutableList.remove(0); // Бросит исключение
        } catch (UnsupportedOperationException e) {
            System.out.println("Ошибка: нельзя удалить элемент из неизменяемого списка");
        }
        
        // Важно: изменения в оригинальном списке отражаются в обертке!
        mutableList.add("JavaScript");
        System.out.println("После изменения оригинала:");
        System.out.println("Оригинал: " + mutableList);
        System.out.println("Обертка: " + immutableList); // JavaScript появился и здесь
        
        // Правильный способ - полная копия
        List<String> safeImmutable = Collections.unmodifiableList(
            new ArrayList<>(mutableList) // Создаем копию
        );
        
        // Использование в API
        DataService service = new DataService();
        List<String> data = service.getReadOnlyData();
        
        try {
            data.add("Новый элемент"); // Ошибка - список только для чтения
        } catch (UnsupportedOperationException e) {
            System.out.println("API вернуло защищенные данные");
        }
    }
    
    static class DataService {
        private List<String> internalData = Arrays.asList("A", "B", "C");
        
        public List<String> getReadOnlyData() {
            // Возвращаем неизменяемую обертку для защиты данных
            return Collections.unmodifiableList(internalData);
        }
    }
}
Особенно полезен при возврате данных из API, передаче коллекций в методы, создании константных коллекций и защите внутреннего состояния объекта от внешних изменений.
➡️ Easy Java | #Теория

Редко, когда сразу пишут всю правду о вакансии😁 ➡️ Easy Java | #Мем
Редко, когда сразу пишут всю правду о вакансии😁 ➡️ Easy Java | #Мем

👩‍💻 Шаблоны проектирования, реализованные в Java Репозиторий с десятками шаблонов, которые помогут вам как ускорить процесс
👩‍💻 Шаблоны проектирования, реализованные в Java Репозиторий с десятками шаблонов, которые помогут вам как ускорить процесс разработки, так и лучше разобраться в некоторых аспектах, используя шаблоны как пример готового проекта. ⛓ Переход к репозиторию ➡️ Easy Java | #Ресурс