Easy Java
前往频道在 Telegram
Лучшие обучающие материалы и другие полезности для Java-разработчиков. Сотрудничество: @heywan_n1 Цены: @heywan_media Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy
显示更多5 220
订阅者
-124 小时
-237 天
-8730 天
帖子存档
5 220
📖 Как прокачать Java-приложения без миграции: Axiom JDK Express теперь на JVM 21
Мы знаем, как это бывает: проект на Java 8 живёт уже десятый год, релизить страшно, тестов мало, миграция пугает, а система критичная. И вот бизнес хочет «ускорить и не трогать».
⛓ Читать статью
➡️ Easy Java | #Статья
5 220
⚡️ Айтишник из «VISION» скупил курсы айти школ и выложил гигабайты материалов к себе
Каждый найдет что-то по душе:
1202 ГБ — Python
1811 ГБ — Frontend
1100 ГБ — C / C++ / C#
804 ГБ — Java
411 ГБ — SQL & БД
309 ГБ — DevOps
998 ГБ — ИБ & Хакинг
773 ГБ — Kotlin / Swift
189 ГБ — PHP
201 ГБ — GoLang
170 ГБ — Rust
167 ГБ — QA / Тестирование
310 ГБ — 1C + Лицензии
495 ГБ — Машинное обучение
704 ГБ — Аналитика Данных
991 ГБ — Дизайн
Материалы в закрепе, постоянно пополняются👆🏻
5 220
👩💻 Что такое PriorityBlockingQueue в Java и зачем она нужна?
PriorityBlockingQueue — это потокобезопасная очередь из java.util.concurrent, которая хранит элементы в отсортированном виде согласно их приоритету.
Она активно используется в задачах, где нужно управлять порядком обработки — например, в планировщиках, системах обработки задач и диспетчерах потоков.• Элементы автоматически сортируются • Работает в многопоточном режиме • Подходит для диспетчеризации задач по приоритету ⚡️ Пример:
import java.util.concurrent.PriorityBlockingQueue;
public class Main {
public static void main(String[] args) {
PriorityBlockingQueue<Integer> queue = new PriorityBlockingQueue<>();
queue.add(5);
queue.add(1);
queue.add(3);
while (!queue.isEmpty()) {
System.out.println(queue.poll()); // ➔ 1, 3, 5
}
}
}
👀 PriorityBlockingQueue особенно полезна, когда задачи имеют приоритеты — например, обработка срочных запросов, планирование задач или распределение ресурсов.➡️ Easy Java | #Теория
5 220
❓ Вопрос с собеса
Что такое ThreadLocal в Java и когда его стоит использовать?
Пример🔽
public class Main {
private static final ThreadLocal<Integer> threadId =
ThreadLocal.withInitial(() -> (int) (Math.random() * 1000));
public static void main(String[] args) {
Runnable task = () ->
System.out.println(Thread.currentThread().getName() + " → " + threadId.get());
new Thread(task, "Поток-1").start();
new Thread(task, "Поток-2").start();
new Thread(task, "Поток-3").start();
}
}
Ответ🔽
ThreadLocal хранит данные отдельно для каждого потока. Даже если переменная одна, каждый поток получает свою копию. 📌 Применения: — хранение пользовательских сессий в веб-приложениях — уникальные ID запросов в логах — объекты, которые нельзя шарить между потоками (например, SimpleDateFormat). Но важно не забывать вызывать remove(), чтобы избежать утечек памяти в пуле потоков.➡️ Easy Java | #Собес
5 220
📖 Разработка на Java без всего
Снова показываю как можно вести разработку «голыми руками» — без IDE, документации и даже интернета. На этот раз с помощью «пользовательской» Ubuntu Linux и OpenJDK.
⛓ Читать статью
➡️ Easy Java | #Статья
5 220
👩💻 Что такое DelayQueue в Java и зачем она нужна?
DelayQueue — это потокобезопасная очередь из java.util.concurrent, где элементы становятся доступными только после истечения заданного времени задержки. Элементы должны реализовывать интерфейс Delayed.
Она удобна для отложенной обработки задач — таймеров, кэшей с TTL, планировщиков.• Элементы выдаются только после задержки • Работает в многопоточном режиме • Идеальна для задач с таймаутами ⚡️ Пример:
import java.util.concurrent.*;
class Task implements Delayed {
long start = System.currentTimeMillis() + 1000;
public long getDelay(TimeUnit u) { return u.convert(start - System.currentTimeMillis(), TimeUnit.MILLISECONDS); }
public int compareTo(Delayed o) { return Long.compare(getDelay(TimeUnit.MILLISECONDS), o.getDelay(TimeUnit.MILLISECONDS)); }
public String toString() { return "Задача выполнена"; }
}
public class Main {
public static void main(String[] args) throws Exception {
DelayQueue<Task> q = new DelayQueue<>();
q.put(new Task());
System.out.println(q.take()); // ждём 1 сек
}
}
👀 DelayQueue особенно полезна для отложенных задач, TTL-кэшей и планировщиков.➡️ Easy Java | #Теория
5 220
❓ Вопрос с собеса
Что такое WeakReference в Java и зачем она используется?
Пример🔽
import java.lang.ref.WeakReference;
public class Main {
public static void main(String[] args) {
String strong = new String("Hello");
WeakReference<String> weak = new WeakReference<>(strong);
System.out.println("До GC: " + weak.get()); // ➔ Hello
strong = null;
System.gc(); // просим сборщик мусора освободить память
System.out.println("После GC: " + weak.get()); // ➔ null (объект мог быть удалён)
}
}
Ответ🔽
WeakReference позволяет держать ссылку на объект, не мешая сборщику мусора его удалить. Как только на объект не остаётся сильных (обычных) ссылок, GC может освободить память, даже если есть WeakReference. 📌 Основные применения: — кэши, где не критично хранить данные постоянно — структуры, которые не должны мешать очистке памяти — предотвращение утечек в долгоживущих коллекциях.➡️ Easy Java | #Собес
5 220
⚡️Бесплатное обучение фронтенд-разработке с нуля с личной поддержкой от наставника
На канале Интенсивный JavaScript разработчик и действующий тимлид помогает изучить фронтенд на практике
Когда-то он работал крупье в казино, а сейчас помогает новичкам попасть в IT и собеседует людей в свою команду
С 30 августа по 2 сентября он проводит бесплатный интенсив, где поможет разобраться во фронтенде с нуля
Что получите на интенсиве
✅ Напишете свой проект на JS: сайт с аниме
✅ Узнаете, как вам сейчас попасть в сферу, каких ошибок избегать
✅ Что делать с ИИ: стоит ли заходить в ИТ, или уже поздно, и нас всех заменят
✅ и получите пошаговый план изучения фронтенда с нуля до трудоустройства или стабильных 50 тысяч на фрилансе
Интенсив подойдёт, даже если вы новичок — всё объясняют так, чтобы поняла даже ваша бабушка
Подписывайтесь, осталось 27 мест
Учиться самостоятельно можно бесконечно, если не знать, куда копать. На интенсиве сократите время на поиск информации и получите пошаговый план от разработчика, который нанимает новичков в команду
📌 Если вы уже пробовали изучать фронтенд, но каждый шаг — это гуглинг, страдание и тысяча вкладок, —
приходите на интенсив. Увидите путь от вёрстки до Angular и сможете продолжать изучать фронтенд без хаоса в голове.
👉Участвовать бесплатно
🔥Первый урок уже доступен
5 220
📖 Хватит терять время! Ускоряем сборку с помощью Spring Test Profiler
Покажу: Spring Test Profiler находит лишние перезапуски контекста и рассинхрон конфигов; унифицирую окружение, чиню кэш и ускоряю интеграц-тесты. Будет чек-лист.
⛓ Читать статью
➡️ Easy Java | #Статья
5 220
👩💻 Что такое Exchanger в Java и зачем он нужен?
Exchanger — это синхронизатор из пакета java.util.concurrent, который позволяет двум потокам обмениваться данными в точке встречи. Каждый поток вызывает метод exchange(), и когда оба потока доходят до этой точки, они обмениваются переданными объектами.
Это удобно, когда два потока должны координировать свои действия, передавая результаты вычислений друг другу.• Позволяет безопасно обмениваться объектами между потоками • Подходит для реализации producer-consumer моделей • Удобен для синхронных этапов вычислений ⚡️ Пример:
import java.util.concurrent.Exchanger;
public class Main {
public static void main(String[] args) {
Exchanger<String> exchanger = new Exchanger<>();
Runnable producer = () -> {
try {
String data = "Данные от Producer";
System.out.println("Producer отправил: " + data);
String response = exchanger.exchange(data);
System.out.println("Producer получил: " + response);
} catch (InterruptedException e) {
e.printStackTrace();
}
};
Runnable consumer = () -> {
try {
String data = "Ответ от Consumer";
System.out.println("Consumer отправил: " + data);
String received = exchanger.exchange(data);
System.out.println("Consumer получил: " + received);
} catch (InterruptedException e) {
e.printStackTrace();
}
};
new Thread(producer).start();
new Thread(consumer).start();
}
}
👀 Exchanger особенно полезен, когда два потока выполняют разные задачи и должны регулярно обмениваться результатами — например, генератор данных и обработчик, или два этапа сложного расчёта.➡️ Easy Java | #Теория
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
