Easy Java
5.22K subscribers
311 photos
51 videos
462 links
Лучшие обучающие материалы и другие полезности для Java-разработчиков.

Сотрудничество: @heywan_n1

Цены: @heywan_media

Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy
Download Telegram
Всем бы такие софт-скиллы...

➡️ Easy Java | #Мем
Please open Telegram to view this post
VIEW IN TELEGRAM
🤡6🤔31👍1🥰1
👩‍💻 Что такое 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 | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Универсальный инструмент для работы с базами данных и SQL-клиент

Бесплатный многоплатформенный инструмент для работы с базами данных, предназначенный для разработчиков, SQL-программистов, администраторов и аналитиков баз данных.

Обладает множеством функций , включая редактор схем, редактор SQL, редактор данных, интеграцию с ИИ, ER-диаграммы, экспорт/импорт/миграцию данных, планы выполнения SQL-запросов, инструменты администрирования баз данных, панели мониторинга баз данных, средство просмотра пространственных данных, прокси-сервер и SSH-туннелирование, редактор пользовательских драйверов баз данных и т.д.

Ссылка на GitHub

➡️ Easy Java | #Ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥1
👩‍💻 Викторина: что выведет код?

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 | #Викторина
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🤔2
Признайтесь, каждый из вас ждет такую вакансию

➡️ Easy Java | #Мем
Please open Telegram to view this post
VIEW IN TELEGRAM
😁14
👩‍💻 Что такое 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 | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2
👩‍💻 Event Loop в Java для начинающих

JavaScript выполняет код в одном основном потоке. Это означает, что инструкции выполняются последовательно — одна за другой. Получил команду — выполнил.

Но что делать интерпретатору, если он встречает код, который не может выполнить сразу? Именно про это вы узнаете в данной статье

Читаем по ссылке

➡️ Easy Java | #Ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔4🤡3
👩‍💻 Викторина: что выведет код?

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 | #Викторина
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 Что такое 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 | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
Те самые странные сны…

➡️ Easy Java | #Мем
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6
👩‍💻 Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы

Автор объясняет, почему стандартные системные промпты недостаточны для защиты от таких угроз, как:

- Prompt injection / jailbreak (взлом модели через специальные инструкции)
- Утечка PII (личных данных, email, номеров карт)
- Токсичные ответы LLM
- Запрещенные темы и атаки переполнения контекста

В качестве решения предлагается JGuardrails — Java-библиотека (Java 17+), работающая как фильтр до и после вызова LLM на уровне кода, без привязки к фреймворку.

 К прочтению по ссылке

➡️ Easy Java | #Статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Что такое 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 | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопрос с собеса

Что такое Reflection в Java и как он работает?

Пример🔽
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Main {
public static void main(String[] args) throws Exception {
Class<?> clazz = Person.class;

System.out.println("Поля:");
for (Field f : clazz.getDeclaredFields())
System.out.println(" - " + f.getName());

System.out.println("\nМетоды:");
for (Method m : clazz.getDeclaredMethods())
System.out.println(" - " + m.getName());

Person p = new Person("Alice");
Method sayHello = clazz.getDeclaredMethod("sayHello");
sayHello.invoke(p); // вызов приватного метода через Reflection
}
}

class Person {
private String name;
public Person(String name) { this.name = name; }
private void sayHello() { System.out.println("Привет, " + name); }
}


Ответ🔽
Reflection (рефлексия) позволяет анализировать и изменять поведение классов во время выполнения. С её помощью можно:

— получать информацию о классах, полях и методах
— вызывать методы и изменять поля динамически
— создавать экземпляры классов без new

📌 Минусы:
— снижает производительность,
— нарушает инкапсуляцию,
— может вызывать ошибки безопасности.

Reflection активно используется в фреймворках (Spring, Hibernate, JUnit) для внедрения зависимостей, сериализации и динамического вызова кода


➡️ Easy Java | #Собес
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Викторина: что выведет код?

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 | #Викторина
Please open Telegram to view this post
VIEW IN TELEGRAM
2
👩‍💻 Kotlin vs Java: что выбрать для бэкенда?

Вечное противостояние и споры: что выбрать? Kotlin или Java? Какой язык актуальнее в 2026 году?

Автор расскажет о личном опыте работы, приведет примеры различных задач, и проведет прямые сравнительные тесты.

А если вам лень читать, победитель - Java, но с небольшим отрывом, т.к Kotlin постепенно догоняет по всем направлениям.

Читаем статью по ссылке

➡️ Easy Java | #Статья
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Не слишком жестоко? 🙂

➡️ Easy Java | #Мем
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Что такое Stream.peek() и зачем он нужен?

peek() — это промежуточный метод стримов, который позволяет выполнить произвольное действие над каждым элементом без изменения самих элементов. Классический use case: отладка пайплайнов, логирование, заполнение внешних коллекций.

⚡️ Пример:

import java.util.*;
import java.util.stream.*;

public class PeekExample {
public static void main(String[] args) {
List<String> log = new ArrayList<>();

List<String> result = Stream.of("java", "python", "rust")
.peek(s -> System.out.println("До фильтра: " + s))
.filter(s -> s.length() > 3)
.peek(s -> System.out.println("После фильтра: " + s))
.map(String::toUpperCase)
.peek(log::add) // побочный эффект
.collect(Collectors.toList());

System.out.println("Результат: " + result);
System.out.println("Лог: " + log);
}
}


Особенно полезен при откладке длинных стрим-пайплайнов, логировании промежуточных этапов, сборке метрик или статистики, побочных эффектах в тестовых сценариях.


➡️ Easy Java | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31