Easy Java
Відкрити в Telegram
Лучшие обучающие материалы и другие полезности для Java-разработчиков. Сотрудничество: @heywan_n1 Цены: @heywan_media Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy
Показати більше5 035
Підписники
-624 години
-237 днів
-7830 день
Архів дописів
5 035
❓ Вопрос с собеса
Зачем в Java используется ключевое слово
volatile?
Пример🔽
public class Main {
private static volatile boolean running = true;
public static void main(String[] args) throws InterruptedException {
Thread worker = new Thread(() -> {
while (running) {
// бесконечный цикл, пока running == true
}
System.out.println("Поток завершён");
});
worker.start();
Thread.sleep(1000);
running = false;
}
}
Ответ🔽
volatile говорит JVM, что переменная может изменяться в других потоках, и запрещает кэшировать её значение. Без volatile поток может "застрять", не заметив изменения переменной. 📌 volatile не делает операции атомарными, но гарантирует видимость изменений между потоками. Используется для флагов, сигналов остановки и простейшей синхронизации➡️ Easy Java | #Собес
5 035
👩💻 Что такое ключевое слово
transient в Java и зачем оно нужно?
transient — это модификатор, который используется для исключения поля из сериализации. Если объект сериализуется (например, в файл или по сети), поля с transient не будут сохранены.
Это полезно для чувствительных данных (например, паролей), временных кэшей или зависимостей, которые не нужно сохранять и восстанавливать.• Исключает поле из сериализации • Помогает защитить конфиденциальные данные • Уменьшает размер сериализованных объектов ⚡️ Пример:
import java.io.*;
class User implements Serializable {
String name;
transient String password;
User(String name, String password) {
this.name = name;
this.password = password;
}
}
public class Main {
public static void main(String[] args) throws Exception {
User user = new User("admin", "12345");
// Сериализация
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("user.ser"))) {
out.writeObject(user);
}
// Десериализация
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("user.ser"))) {
User loaded = (User) in.readObject();
System.out.println("Name: " + loaded.name); // ➔ admin
System.out.println("Password: " + loaded.password); // ➔ null
}
}
}
👀 transient особенно полезен в ситуациях, когда часть данных не должна сохраняться между сессиями — будь то безопасность, производительность или структура бизнес-логики.➡️ Easy Java | #Теория
5 035
🐱 3782 приватных репо GitHub выложили в Telegram
⏺Лучшие опенсорсные проекты
⏺Сотни курсов по всем ЯП
⏺Аналоги платного софта
⏺Самые понятные гайды
⏺Подробные планы обучения
⏺Скрипты для всех языков
⏺Многое-многое другое...
Вход открыт ровно на 48 часов 🕔
5 035
👩💻 JPQL: как писать запросы, которые не сломают Hibernate
Узнайте, как писать JPQL-запросы, которые ускорят Hibernate в 5 раз, избегая критических ошибок, тормозящих 80% проектов!
Приглашаем на открытый урок
🗓 19 июня в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Professional».
🎯 О чём поговорим:
✅- JPQL vs SQL: почему ваши запросы ломают Hibernate и как их переписать так, чтобы БД не «умирала» под нагрузкой.
✅- Тайные ловушки: антипаттерны JPQL, генерирующие N+1 SELECT и тормозящие приложение, и методы их поиска в коде.
✅- Оптимизация на максимум: как использовать JOIN FETCH, подзапросы и кэширование в JPQL для мгновенного ускорения Hibernate.
👥 Кому будет интересно:
Java-разработчикам, использующим Hibernate, системным архитекторам и инженерам по оптимизации производительности.
💡В результате урока вы:
Научитесь писать эффективные JPQL-запросы, избегать распространённых ошибок и значительно ускорять работу Hibernate-приложений.
🎁 Дарим промокод, который дает скидку на обучение - JAVA_06
🔗 Регистрация на вебинар: https://otus.pw/x9BZ/
#реклама
О рекламодателе
5 035
❓ Вопрос с собеса
Что произойдёт, если в catch-блоке снова выбросить исключение?
Пример🔽
public class Main {
public static void main(String[] args) {
try {
risky();
} catch (Exception e) {
System.out.println("Обработка в main: " + e.getMessage());
}
}
static void risky() {
try {
throw new RuntimeException("Ошибка в try");
} catch (RuntimeException e) {
System.out.println("Поймано: " + e.getMessage());
throw new IllegalStateException("Повторно выброшено");
}
}
}
Ответ🔽
Если в блоке catch выбросить новое исключение, предыдущее "теряется", и наружу выйдет только то, что выбросили повторно. 📌 Чтобы сохранить оригинальное исключение, его можно передать как cause: throw new IllegalStateException("...", e); Это важно для правильной диагностики и трассировки ошибок в продакшене➡️ Easy Java | #Собес
5 035
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
Айтишники поймут
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠ
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ
5 035
Привет. Вот тебе самые топовые каналы по IT!
⚙️ Free Znanija (IT) — Самая огромная коллекция платных курсов, которые можно скачать бесплатно;
👩💻 IT библиотека — Самая огромная библиотека книг;
💻 Hacking & InfoSec Base — Крутой блог белого хакера;
🛡 CyberGuard — Всё про ИБ;
👩💻 linux administration — Всё про Линукс;
👩💻 Программистика — Python, python и ещё раз python;
👩💻 GameDev Base — Всё про GameDev;
🖥 Coding Base — Мемы, полезные репозитории и инструменты, а так же софт:
А так же крутой блог админа: Rahol Jey | тг вайб
5 035
👩💻 Что такое enum с логикой в Java и зачем это нужно?
В Java
enum — это не просто набор констант. Это полноценные классы, которые могут содержать поля, методы и даже переопределять поведение для каждой константы.
Такой подход позволяет удобно инкапсулировать логику, связанную с конкретными значениями перечисления, без использования switch.• Позволяет добавить поведение к enum • Заменяет switch-логику внутри самого enum • Делает код чище и расширяемее ⚡️ Пример:
enum Operation {
PLUS {
public int apply(int a, int b) { return a + b; }
},
MINUS {
public int apply(int a, int b) { return a - b; }
};
public abstract int apply(int a, int b);
}
public class Main {
public static void main(String[] args) {
int result = Operation.PLUS.apply(3, 5);
System.out.println(result); // ➔ 8
}
}
👀 Такой enum особенно полезен, когда у тебя есть ограниченное количество вариантов с разным поведением — например, арифметические операции, роли пользователей, состояния задач и др.➡️ Easy Java | #Теория
5 035
❓ Вопрос с собеса
В каком порядке инициализируются поля и блоки в Java?
Пример🔽
public class InitDemo {
static {
System.out.println("Статический блок");
}
{
System.out.println("Нестатический блок");
}
int x = printX();
public InitDemo() {
System.out.println("Конструктор");
}
int printX() {
System.out.println("Инициализация x");
return 10;
}
public static void main(String[] args) {
new InitDemo();
}
}
Ответ🔽
Порядок инициализации: Статические поля и статические блоки — один раз при первом обращении к классу При создании объекта: сначала инициализируются поля в порядке объявления, затем выполняются нестатические блоки, и только потом вызывается конструктор 📌 Это важно при использовании зависимых полей, шаблонов "инициализация-через-блок", и при создании сложных объектов с логикой в полях.➡️ Easy Java | #Собес
