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
🚫 Антипаттерн недели: Использование списков для проверки на принадлежность

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

✔️ Используйте Set, который обеспечивает время выполнения O(1) для операций поиска.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥1
⚙️ MethodHandle.invokeExact()

Метод MethodHandle.invokeExact() из пакета java.lang.invoke позволяет вызывать метод или конструктор через ссылку MethodHandle. Это мощный инструмент для динамического вызова методов с высокой производительностью.

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

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

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

Как работают захваты переменных (variable capture) в лямбда-выражениях Java, и какие ограничения на них накладываются?

Ответ ⬇️
В Java лямбда-выражения могут использовать переменные из окружающего контекста, но только если они являются effectively final (фактически финализированными). Это значит, что переменная должна быть объявлена как final или её значение не должно изменяться после инициализации.

Это ограничение связано с тем, что лямбды могут выполняться в другой потоковой среде, и изменение переменной вне лямбды может привести к непредсказуемым результатам.


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

public class Main {
public static void main(String[] args) {
int base = 10;

Consumer<Integer> multiplier = value -> {
System.out.println(value * base); // Использование захваченной переменной
};

multiplier.accept(5); // Вывод: 50

// base = 20; // Ошибка компиляции: переменная должна быть effectively final
}
}


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🎄1
⚙️ MethodHandles.privateLookupIn

Метод MethodHandles.privateLookupIn позволяет получить доступ к приватным методам, полям и конструкторам класса через MethodHandle. Это мощный и редкий инструмент для работы с закрытыми членами классов.

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

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

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
⚙️ 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