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

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

Цены: @heywan_media

Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy
Download Telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔11😁4
Вопрос с собеса

Что произойдёт, если в Java вызвать System.exit()?

Пример🔽
public class Main {
public static void main(String[] args) {
try {
System.out.println("Начало работы");
System.exit(0);
System.out.println("Этот код не выполнится");
} finally {
System.out.println("И этот тоже"); // не будет выведен
}
}
}


Ответ🔽
System.exit() немедленно завершает работу JVM, останавливая все потоки, включая демоны. При этом:

— Все блоки finally и shutdown hooks могут не выполниться, если вызвать Runtime.getRuntime().halt() или если ОС аварийно завершает процесс.
— Код после System.exit() никогда не выполняется.
— Аргумент метода (0 или ненулевое значение) используется как код возврата процесса в ОС.

📌 Обычно System.exit() применяют в утилитах, CLI-программах или при фатальных ошибках, но в серверных приложениях лучше использовать корректное завершение с shutdown hooks


➡️ Easy Java | #Собес
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Please open Telegram to view this post
VIEW IN TELEGRAM
Ответ:
Anonymous Quiz
13%
1
19%
2
47%
3
20%
4
👩‍💻 Что такое Phaser в Java и зачем он нужен?

Phaser — это продвинутый синхронизатор из java.util.concurrent, который позволяет потокам координироваться по фазам выполнения.

В отличие от CountDownLatch и CyclicBarrier, он гибче: количество участников можно динамически добавлять и убирать.


• Поддерживает несколько фаз
• Гибко управляет количеством потоков
• Удобен для пошаговых алгоритмов

⚡️ Пример:

import java.util.concurrent.Phaser;

public class Main {
public static void main(String[] args) {
Phaser phaser = new Phaser(3);

Runnable task = () -> {
System.out.println(Thread.currentThread().getName() + " — фаза 1");
phaser.arriveAndAwaitAdvance();
System.out.println(Thread.currentThread().getName() + " — фаза 2");
};

new Thread(task).start();
new Thread(task).start();
new Thread(task).start();
}
}


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


➡️ Easy Java | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣21👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
6
Вопрос с собеса

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

Пример🔽
public class Main {
public static void main(String[] args) {
ClassLoader loader = Main.class.getClassLoader();

System.out.println("ClassLoader: " + loader);
System.out.println("Parent: " + loader.getParent());
System.out.println("Grandparent: " + loader.getParent().getParent()); // ➔ null (Bootstrap)
}
}


Ответ🔽
ClassLoader отвечает за загрузку классов в память JVM. Он превращает байткод (.class файлы) в объекты Class во время выполнения.
Загрузка происходит каскадно — через цепочку загрузчиков:

Bootstrap ClassLoader — загружает базовые классы JDK (java.lang.*, java.util.*)

Platform (или Extension) ClassLoader — загружает расширения из jmods

Application ClassLoader — загружает классы приложения из classpath

📌 Можно создать свой ClassLoader для динамической подгрузки плагинов, изоляции зависимостей или перезапуска модулей без перезапуска JVM


➡️ Easy Java | #Собес
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔52
Please open Telegram to view this post
VIEW IN TELEGRAM
Ответ:
Anonymous Quiz
11%
1
18%
2
33%
3
37%
4
3
👩‍💻 Что такое ReentrantReadWriteLock в Java и зачем он нужен?

ReentrantReadWriteLock — это улучшенная альтернатива synchronized, позволяющая одновременно выполнять несколько чтений, но блокировать доступ на запись.

Он состоит из двух независимых замков:
• readLock() — совместимый, позволяет многим потокам читать параллельно
• writeLock() — эксклюзивный, разрешает только одному потоку писать


⚡️ Пример:

import java.util.concurrent.locks.*;

public class Main {
private static final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
private static int value = 0;

public static void main(String[] args) {
Runnable reader = () -> {
lock.readLock().lock();
try {
System.out.println("Чтение: " + value);
} finally {
lock.readLock().unlock();
}
};

Runnable writer = () -> {
lock.writeLock().lock();
try {
value++;
System.out.println("Запись: " + value);
} finally {
lock.writeLock().unlock();
}
};

new Thread(reader).start();
new Thread(writer).start();
}
}


👀 ReentrantReadWriteLock особенно полезен, когда чтений гораздо больше, чем записей — например, в кэшах, справочниках или аналитических сервисах


➡️ Easy Java | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
7
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁14🤣5
Вопрос с собеса

Что такое 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
3
Please open Telegram to view this post
VIEW IN TELEGRAM
Ответ:
Anonymous Quiz
14%
1
38%
2
43%
3
5%
4
👩‍💻 Что такое ReentrantLock в Java и зачем он нужен?

ReentrantLock — это продвинутый вариант synchronized, который даёт больше контроля над блокировками. Он позволяет явно захватывать и освобождать замок, а также проверять, свободен ли он.

Главные преимущества:

• можно прервать ожидание блокировки (lockInterruptibly())
• можно попытаться захватить её с таймаутом (tryLock())
• поддерживает справедливость (fair mode) и повторный вход


⚡️ Пример:

import java.util.concurrent.locks.ReentrantLock;

public class Main {
private static final ReentrantLock lock = new ReentrantLock();
private static int count = 0;

public static void main(String[] args) {
Runnable task = () -> {
if (lock.tryLock()) {
try {
count++;
System.out.println(Thread.currentThread().getName() + " увеличил count: " + count);
} finally {
lock.unlock();
}
} else {
System.out.println(Thread.currentThread().getName() + " не смог захватить замок");
}
};

new Thread(task).start();
new Thread(task).start();
}
}


👀 ReentrantLock особенно полезен, когда нужна гибкость управления блокировками — например, для тайм-аутов, справедливого доступа или реализации сложных синхронизаторов


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