Easy Java
Open in Telegram
Лучшие обучающие материалы и другие полезности для Java-разработчиков. Сотрудничество: @heywan_n1 Цены: @heywan_media Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy
Show more5 037
Subscribers
-224 hours
-187 days
-7430 days
Posts Archive
5 037
👩💻 Что такое 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 037
🎭 #fsociety >> пробив данным нового уровня!
Мгновенные результаты для соло-осинтеров и корпоративный API 🔥 Если ты хотел создать своего бота для пробива — дешевле и быстрее API, чем у нас, ты не найдёшь.⚜️ Для корпоративных клиентов: 🏆
API для пробива от $0,0049 за запрос!
🎯 Глубина поиска: до 500 слоёв утечек данных!
🥇 Скорость API: 25 RPS
📂 База на ~20.000.000.000 строк
_________
⚜️ Для соло-доксеров и деанонщиков:
🔰10 бесплатных запросов ежедневно 🔰+40% реферальная система 🔰Каждый реферал добавляет +3 запроса 🔰Тарифы или запросы на выбор 🔰Установка отзывов и репутации цели 🔰Мониторинг доксинга 🔰Telegram Radar 🔰OSINT-профиль цели через ИИ_________ @fsociety_r0bot — оператор доступа к данным, которые скрыты от остальных. «Доступ — это форма власти, поэтому не теряй постоянную ссылку — fsociety.wiki» © MrRobot
5 037
👩💻 Викторина: что выведет код?
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
public class Main {
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
Singleton s1 = Singleton.getInstance();
System.out.print("T1 ");
});
Thread t2 = new Thread(() -> {
Singleton s2 = Singleton.getInstance();
System.out.print("T2 ");
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print("Done");
}
}
➡️ Easy Java | #Викторина5 037
👩💻 Что такое Arrays.parallelSort() и зачем он нужен?
Arrays.parallelSort() — это метод из класса java.util.Arrays, который сортирует массивы с использованием параллельных алгоритмов, задействуя несколько ядер процессора для ускорения сортировки больших объемов данных.
⚡️ Преимущества:
– Значительно ускоряет сортировку больших массивов
– Автоматически использует ForkJoinPool для параллельной обработки
– Минимальные изменения кода по сравнению с обычной сортировкой
Пример кода:
import java.util.*;
import java.util.concurrent.TimeUnit;
public class ParallelSortExample {
public static void main(String[] args) {
// Создаем большой массив случайных чисел
int size = 10_000_000;
int[] numbers = new int[size];
Random random = new Random();
for (int i = 0; i < size; i++) {
numbers[i] = random.nextInt(1_000_000);
}
// Копируем массив для сравнения сортировок
int[] numbersCopy = numbers.clone();
System.out.println("Начата параллельная сортировка...");
long startTime = System.nanoTime();
Arrays.parallelSort(numbers);
long parallelTime = System.nanoTime() - startTime;
System.out.println("Параллельная сортировка заняла: " +
TimeUnit.NANOSECONDS.toMillis(parallelTime) + " мс");
System.out.println("Начата обычная сортировка...");
startTime = System.nanoTime();
Arrays.sort(numbersCopy);
long sequentialTime = System.nanoTime() - startTime;
System.out.println("Обычная сортировка заняла: " +
TimeUnit.NANOSECONDS.toMillis(sequentialTime) + " мс");
// Сортировка объектов
String[] cities = {"Москва", "Санкт-Петербург", "Казань",
"Екатеринбург", "Новосибирск", "Владивосток"};
Arrays.parallelSort(cities);
System.out.println("\nОтсортированные города: " + Arrays.toString(cities));
// Сортировка с компаратором
Arrays.parallelSort(cities, Comparator.comparingInt(String::length));
System.out.println("Города по длине названия: " + Arrays.toString(cities));
}
}
Особенности:
– Работает с массивами примитивов и объектами
– Автоматически выбирает алгоритм сортировки в зависимости от размера массива
– Для небольших массивов может использовать последовательную сортировку
– Поддерживает пользовательские компараторы для объектов
👀 Особенно полезен при обработке больших датасетов, сортировке больших логов и обработе данных в многопоточных приложениях.➡️ Easy Java | #Теория
5 037
👩💻 Викторина: что выведет код?
public class Main {
static class Resource implements AutoCloseable {
private String name;
Resource(String name) { this.name = name; }
void use() throws Exception {
throw new Exception(name + " use exception");
}
@Override
public void close() throws Exception {
throw new Exception(name + " close exception");
}
}
public static void main(String[] args) {
try {
try (Resource r1 = new Resource("1");
Resource r2 = new Resource("2")) {
r1.use();
r2.use();
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
➡️ Easy Java | #Викторина5 037
NZT существует.
В фильме «Области тьмы»
герой выпивает NZT — и за день
становится трейдером,
мастером кунг-фу и полиглотом.
Дело не в таблетке.
А в состоянии.
Химия не нужна.
Когда ум чист,
внимание собрано,
и сомнений нет —
ты уже на NZT.
Ты замечаешь всё.
Действуешь без разрывов.
И мир отвечает тебе.
Как включить режим NZT?
Подписывайся на Мэверика.
• входи в состояние
всё «получается само».
• мгновенно принимай
лучшие решения.
• считывай сложные связи
там, где все видят хаос.
• управляй фокусом
и вероятностями событий.
Твоя таблетка NZT.
👇
Мэверик.
Ясность. Точность.
ㅤ
5 037
Самые хитрые и частые вопросы на собеседованиях
В статье рассказано про 10 самых «каверзных» вопросах на собеседованих, где достаточно часто допускают ошибки. Есть и те, что больше похожи на головоломки или касаются нюансов, которые прочувствовать без практики очень тяжело.
⛓ Читать статью
➡️ Easy Java | #Статья
5 037
👩💻 Что такое Files.walk() и зачем он нужен?
Files.walk() — это метод из Java NIO (пакет java.nio.file), который рекурсивно обходит файловое дерево, начиная с указанной директории, и возвращает Stream с путями ко всем найденным файлам и папкам.
Преимущества:
– Простой рекурсивный обход файловой системы
– Автоматическое управление ресурсами
– Поддержка параллельной обработки
– Фильтрация и преобразование прямо в потоке
⚡️ Пример кода:
import java.nio.file.*;
import java.io.IOException;
import java.util.stream.Stream;
public class FilesWalkExample {
public static void main(String[] args) {
Path startDir = Paths.get(".");
try (Stream<Path> paths = Files.walk(startDir, 3)) {
// Найти все .java файлы до глубины 3
paths.filter(Files::isRegularFile)
.filter(p -> p.toString().endsWith(".java"))
.forEach(p -> System.out.println("Java файл: " + p));
} catch (IOException e) {
System.err.println("Ошибка обхода: " + e.getMessage());
}
// Подсчет общего размера файлов
try (Stream<Path> allPaths = Files.walk(startDir)) {
long totalSize = allPaths.filter(Files::isRegularFile)
.mapToLong(p -> {
try {
return Files.size(p);
} catch (IOException e) {
return 0;
}
})
.sum();
System.out.println("Общий размер: " + totalSize + " байт");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Особенности:
– Возвращает Stream<Path> для ленивой обработки
– Принимает параметр глубины поиска (максимальный уровень вложенности)
– Автоматически закрывает ресурсы при использовании try-with-resources
– Может выбрасывать IOException
👀 Особенно полезен при рекурсии файлов, вычислении статистики по директории, при сборе метаданных о файлах и т.п.➡️ Easy Java | #Теория
5 037
👩💻 Викторина: что выведет код?
class Parent {
static void print() {
System.out.print("Parent ");
}
void show() {
System.out.print("ParentShow ");
}
}
class Child extends Parent {
static void print() {
System.out.print("Child ");
}
@Override
void show() {
System.out.print("ChildShow ");
}
}
public class Main {
public static void main(String[] args) {
Parent obj = new Child();
obj.print();
obj.show();
Child child = new Child();
child.print();
}
}
➡️ Easy Java | #Викторина5 037
👩💻 Что такое String.join() и зачем он нужен?
String.join() — это статический метод класса String, который объединяет несколько строк в одну с использованием указанного разделителя.
Преимущества:
— Простой и читаемый способ конкатенации строк
— Избегает ручного управления разделителями
— Поддерживает коллекции и массивы
⚡️ Пример кода:
import java.util.*;
public class StringJoinExample {
public static void main(String[] args) {
// Объединение массива строк
String[] colors = {"красный", "зеленый", "синий"};
String result1 = String.join(" | ", colors);
System.out.println(result1); // красный | зеленый | синий
// Объединение коллекции
List<String> cities = Arrays.asList("Москва", "Санкт-Петербург", "Казань");
String result2 = String.join(", ", cities);
System.out.println(result2); // Москва, Санкт-Петербург, Казань
// Динамическое формирование пути
String path = String.join("/", "home", "user", "documents", "file.txt");
System.out.println(path); // home/user/documents/file.txt
// Объединение без разделителя
String words = String.join("", "Hello", "World");
System.out.println(words); // HelloWorld
}
}
Особенности:
— Не изменяет исходные строки
— Возвращает новую строку
— Принимает CharSequence (String, StringBuilder и т.д.)
👀 Особенно полезен в формировании CSV строк из коллекций, создании путей файловой системы и генерация SQL-запросов с IN условиями.➡️ Easy Java | #Теория
5 037
🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊
Каналы с IT мероприятиями
Подписывайся,
чтобы не пропустить 👨💻
1. IT мероприятия для стажеров и студентов
2. IT мероприятия по РФ
3. IT мероприятия и хакатоны
4. Бесплатные IT мероприятия
5. IT мероприятия онлайн
6. IT мероприятия Москва
7. IT мероприятия Санкт-Петербург
5 037
📖 Насколько безграничны возможности Java?
Многие с этого канала как-либо работают с Java, но все ли осознают, насколько много у Java возможностей? В этой статье вы узнаете о всех масштабах и возможностях данного языка.
⛓ Читать статью
➡️ Easy Java | #Статья
5 037
💸 Разработчики из Яндекса создали IT каналы для обучения своих сотрудников.
Здесь информация, которая реально помогает изучать программирование с полного нуля!
Выбирайте своё направление и подписывайся:
👩💻 Python Flow — @python_flow
👩💻 C & C++ Flow — @cpp_flow
💻 IT News Flow — @itnews_flow
👩💻 Java Flow — @java_flow
👩💻 SQL & Базы данных Flow — @sql_flow
👩💻 C# & Unity Flow — @csharp_flow
👩💻 Node.js Flow — @nodejs_flow
👩💻 Linux & DevOps Flow — @linux_flow
👩💻 InfoSec & Хакинг — @hacking_flow
👩💻 Git & GitHub Flow — @git_flow
Прием заявок действует до завтра ⚠️
5 037
👩💻 Викторина: что выведет код?
public class Main {
public static void main(String[] args) {
Test test = new Test();
test.process(10);
test.process(10.0);
}
}
class Test {
void process(int i) {
System.out.print("A");
}
void process(double d) {
System.out.print("B");
}
void process(Integer i) {
System.out.print("C");
}
}
➡️ Easy Java | #Викторина