Easy Java
Открыть в Telegram
Лучшие обучающие материалы и другие полезности для Java-разработчиков. Сотрудничество: @heywan_n1 Цены: @heywan_media Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy
Больше5 220
Подписчики
-124 часа
-237 дней
-8730 день
Архив постов
5 220
👩💻 Что такое enum-синглтон в Java и зачем он нужен?
В Java можно реализовать шаблон "Singleton" с помощью enum. Это считается самым безопасным и лаконичным способом создания синглтона, так как гарантирует:
🟢 отсутствие повторного создания 🟢 защиту от сериализации и reflection-атак 🟢 потокобезопасность без дополнительного кода• Простой синтаксис • Безопасность на уровне JVM • Гарантированная единственность экземпляра ⚡️ Пример:
public enum AppConfig {
INSTANCE;
private final String baseUrl = "https://example.com";
public String getBaseUrl() {
return baseUrl;
}
}
public class Main {
public static void main(String[] args) {
System.out.println(AppConfig.INSTANCE.getBaseUrl()); // ➔ https://example.com
}
}
👀 enum-синглтон особенно полезен для конфигураций, логгеров, глобальных менеджеров ресурсов и других классов, где нужен один и только один экземпляр во всём приложении.➡️ Easy Java | #Теория
5 220
❓ Вопрос с собеса
В каком порядке вызываются конструкторы при наследовании в Java?
Пример🔽
class Parent {
Parent() {
System.out.println("Конструктор родителя");
}
}
class Child extends Parent {
Child() {
System.out.println("Конструктор потомка");
}
}
public class Main {
public static void main(String[] args) {
new Child();
}
}
Ответ🔽
При создании объекта дочернего класса сначала вызывается конструктор родителя, а затем — конструкция потомка. Это гарантирует, что базовая часть объекта будет инициализирована до расширений. 📌 Даже если в конструкторе дочернего класса нет явного вызова super(), он вставляется компилятором автоматически➡️ Easy Java | #Собес
5 220
👩💻 Что такое SoftReference в Java и зачем она нужна?
SoftReference — это тип ссылки, который позволяет объекту быть удалённым сборщиком мусора, если в системе заканчивается память, но до тех пор он остаётся доступным. Это полезно для построения умных кэшей, которые не мешают работе JVM.
В отличие от обычной ссылки, SoftReference не мешает сбору мусора, и в отличие от WeakReference, она удаляется только при нехватке памяти.• Идеальна для кэширования больших объектов • Помогает избежать OutOfMemoryError • Учитывает приоритет: сначала удаляются weak, потом soft ⚡️ Пример:
import java.lang.ref.SoftReference;
public class Main {
public static void main(String[] args) {
SoftReference<byte[]> cache = new SoftReference<>(new byte[10 * 1024 * 1024]); // 10MB
byte[] data = cache.get();
if (data != null) {
System.out.println("Кэш доступен");
} else {
System.out.println("Кэш удалён сборщиком мусора");
}
}
}
👀 SoftReference особенно полезна в ситуациях, где нужно хранить тяжёлые объекты (например, образы, данные из БД или сжатие), но не жертвовать стабильностью приложения при нехватке памяти.➡️ Easy Java | #Теория
5 220
Зови друзей и приходи на Java AI meetup от VK — уже 9 июля.
В программе — доклады от сильнейших спикеров, живые обсуждения и возможность завести знакомства с профи из Java- и AI-индустрии.
Подробности — по ссылке.
5 220
❓ Вопрос с собеса
Почему важно переопределять
equals() вместе с hashCode() в Java?
Пример🔽
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
class User {
String name;
User(String name) {
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof User user)) return false;
return Objects.equals(name, user.name);
}
// hashCode не переопределён!
}
public class Main {
public static void main(String[] args) {
Set<User> users = new HashSet<>();
users.add(new User("Alice"));
System.out.println(users.contains(new User("Alice"))); // ➔ false
}
}
Ответ🔽
Если переопределить equals() без hashCode(), коллекции вроде HashSet, HashMap будут работать некорректно, потому что объект может попасть в неправильный "бакет". Даже если equals() вернёт true, hashCode() может быть разным — и объект не найдётся. 📌 Контракт: если два объекта равны по equals(), они обязаны иметь одинаковый hashCode().➡️ Easy Java | #Собес
5 220
Не уверены, что у вас на сервере Postgres установлен правильный набор расширений?
Удивляетесь, что сервер ваших коллег умеет больше, чем ваш?
Присоединяйтесь к нашему вебинару «Особенности реализации запросов в PostgreSQL» и узнайте, как сделать все правильно!
✅ Практика: Создание собственных решений на основании самых полезных расширений Postgres, которые ставятся на большинство производственных серверов
📌Регистрируйтесь на урок, чтобы сделать ваш сервер Postgres лучше!
https://tglink.io/e744fc8720d7?erid=2W5zFHXPBUk
#реклама
О рекламодателе
5 220
Зарплата 207.000р у Middle-разработчика в Яндекс
Основной язык: Java
«В день уходит несколько часов на созвоны, в остальное время закрываю задачки из спринта, редко перерабатываю. У компании топовый офис, но с коллективом как-то не заладилось. Радуюсь классному ДМС и стабильной зарплате» - middle разработчик из Яндекса.
Бигтех по-русски - канал с реальными зарплатами и историями IT-специалистов российского БигТеха. Там уже опубликованы рассказы программистов Альфа-банка, Сбера и Тинькофф 🤯
Читайте: @bigtech_russia
5 220
👩💻 Что такое ThreadLocal в Java и зачем он нужен?
ThreadLocal — это специальный механизм, позволяющий хранить данные отдельно для каждого потока. Каждый поток получает свою копию значения, даже если переменная одна и та же.
Это удобно, когда нужно избежать синхронизации, но при этом обеспечить потокобезопасность — например, при работе с форматированием дат, сессиями или кэшами в потоках.• У каждого потока своё значение • Избавляет от использования synchronized • Удобен в многопоточном программировании и фреймворках ⚡️ Пример:
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("ID потока: " + threadId.get());
new Thread(task).start();
new Thread(task).start();
new Thread(task).start();
}
}
👀 ThreadLocal особенно полезен в веб-приложениях, логгерах, и при реализации механизма хранения "контекста" внутри каждого потока — например, RequestContext, SecurityContext, TransactionContext.➡️ Easy Java | #Теория
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
