Java Learning
18.3K subscribers
1.62K photos
2 videos
3 files
1K links
№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://t.iss.one/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
⚙️ Pattern Matching for switch

Pattern Matching for switch из позволяет использовать шаблоны для более гибкого и читаемого сопоставления значений в операторе switch. Это значительно упрощает работу с различными типами данных и структурами.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15😢1🎄1
Что будет выведено при выполнении кода?

Пояснение
⬇️
В HashMap ключи уникальны. При добавлении нового значения с тем же ключом ("a"), старое значение (1) заменяется на новое (3). Поэтому map.get("a") возвращает 3, а map.get("b") возвращает 2. Код компилируется и выполняется корректно.


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
⚙️ ByteArrayOutputStream.writeTo()

Метод ByteArrayOutputStream.writeTo() позволяет записывать содержимое байтового массива (ByteArrayOutputStream) напрямую в другой выходной поток (OutputStream). Это удобно, когда нужно перенаправить данные, например, в файл или сетевой сокет, без промежуточного копирования.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Вопрос на собеседовании

Как работает JVM String Deduplication, и как оно оптимизирует использование памяти?

Ответ ⬇️
JVM String Deduplication — это механизм, появившийся в Java 8 (с G1 GC), который позволяет JVM автоматически находить и переиспользовать одинаковые строки в памяти. Это особенно полезно в приложениях с большим количеством повторяющихся строк, таких как веб-серверы или системы логирования.

Обычно, даже если строки идентичны, они хранятся как отдельные объекты в куче. Deduplication позволяет JVM находить дубликаты и заменять их ссылками на уже существующие строки, уменьшая потребление памяти.


Пример использования ⚙️
import java.util.ArrayList;
import java.util.List;

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

for (int i = 0; i < 1_000_000; i++) {
list.add(("String_" + (i % 100)).intern()); // Используем String.intern() для принудительного объединения
}

System.out.println("Генерация завершена");
}
}


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
🚫 Антипаттерн недели: Использование String вместо StringBuilder при конкатенации в цикле

В Java строки (String) неизменяемы. При каждой конкатенации через + создаётся новый объект, что приводит к избыточным затратам памяти и снижает производительность, особенно в циклах.

✔️ Используйте StringBuilder, который изменяем и работает быстрее при частых операциях с текстом.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🎄1
⚙️ Pattern.asMatchPredicate()

Метод Pattern.asMatchPredicate(), добавленный в Java 11, позволяет преобразовать регулярное выражение в предикат, который можно использовать для фильтрации потоков или проверки строк на полное совпадение с шаблоном.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1🎄1
⚙️ ProcessHandle.info()

Метод ProcessHandle.info() позволяет получать информацию о запущенных процессах в системе, таких как аргументы командной строки, время запуска и использование ресурсов. Это полезно для мониторинга процессов в Java-приложениях.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
Что будет выведено при выполнении кода?

Пояснение
⬇️
Абстрактный класс Animal содержит абстрактный метод makeSound() и обычный метод sleep(). Класс Dog наследует Animal и реализует makeSound(). При вызове myDog.makeSound(), выполняется переопределённый метод Woof, а затем вызывается унаследованный метод sleep(), который выводит Sleeping.... Код компилируется и выполняется корректно.


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
⚙️ Files.mismatch()

Метод Files.mismatch(), добавленный в Java 12, позволяет сравнить два файла и найти позицию первого несовпадающего байта. Если файлы идентичны, метод возвращает -1. Это полезно для проверки целостности данных или сравнения файлов.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤‍🔥2
⚙️ LockSupport.park()

Метод LockSupport.park() позволяет приостановить выполнение потока без использования synchronized или wait(). Это полезно для низкоуровневой синхронизации потоков.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
JarFile

JarFile — это класс в Java, который используется для чтения содержимого JAR-файла. JAR-файл (Java ARchive) — это формат архива, который используется для объединения нескольких файлов Java (.class), а также других ресурсов, таких как изображения, звуки и текстовые файлы, в один файл.

Создание объекта JarFile
Для создания объекта JarFile необходимо использовать его конструктор, который принимает путь к JAR-файлу в качестве параметра.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
⚙️ MethodHandles.arrayElementVarHandle()

Метод MethodHandles.arrayElementVarHandle() создаёт VarHandle для работы с элементами массива, позволяя выполнять атомарные операции без блокировки.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
⚙️ StackWalker.walk()

Метод StackWalker.walk() позволяет динамически получать информацию о текущем стеке вызовов, фильтровать его и анализировать. Это полезно для логирования, отладки и мониторинга исполнения кода.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
⚙️ Thread.onSpinWait()

Метод Thread.onSpinWait() сообщает процессору, что поток ожидает без выполнения полезной работы. Это позволяет улучшить производительность в многопоточных приложениях, уменьшая нагрузку на процессор во время активного ожидания.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
⚙️ ProcessHandle.onExit()

Метод ProcessHandle.onExit() позволяет отслеживать завершение внешнего процесса в асинхронном режиме. Это полезно для управления запущенными процессами и выполнения действий после их завершения.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Вопрос на собеседовании

Как работает Virtual Threads (виртуальные потоки) в Java, и чем они отличаются от обычных потоков (Thread)?

Ответ ⬇️
Виртуальные потоки (Virtual Threads) появились в Java 21 и позволяют создавать тысячи потоков без значительных накладных расходов. В отличие от классических потоков (Thread), которые привязаны к системным потокам ОС, виртуальные потоки управляются самой JVM и не блокируют системные ресурсы.

Использование виртуальных потоков значительно улучшает производительность приложений, выполняющих множество операций ввода-вывода (например, сетевые запросы).


Пример использования ⚙️
public class VirtualThreadsExample {
public static void main(String[] args) {
try (var executor = java.util.concurrent.Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 0; i < 10; i++) {
executor.submit(() -> {
System.out.println(Thread.currentThread());
});
}
}
}
}


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥2
🚫 Антипаттерн недели: Использование == для сравнения строк

В Java строки (String) — это объекты, а оператор == сравнивает ссылки, а не их содержимое. Это может привести к неожиданным ошибкам при сравнении строк, особенно если строки создаются динамически.

✔️ Используйте метод equals(), который сравнивает содержимое строк, а не ссылки.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10😁10❤‍🔥1🎄1
⚙️ java.util.Timer()

Метод java.util.Timer() позволяет создавать таймеры, которые выполняют определенные задачи через заданные интервалы времени. Это полезно для планирования и отложенного выполнения задач без блокировки основного потока.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11