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
Вопрос на собеседовании

Как работают immutable коллекции в Java, и когда их стоит использовать?

Ответ ⬇️
Immutable коллекции в Java — это неизменяемые структуры данных, которые нельзя модифицировать после их создания. Они были введены в Java 9 через методы List.of(), Set.of(), Map.of(). Immutable коллекции полезны для повышения безопасности и читаемости кода, а также для работы в многопоточной среде, где изменение данных может привести к ошибкам.

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

public class Main {
public static void main(String[] args) {
List<String> immutableList = List.of("A", "B", "C");

System.out.println(immutableList); // [A, B, C]

// Попытка модификации вызовет исключение
// immutableList.add("D"); // UnsupportedOperationException
}
}


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

Вместо того чтобы использовать явные циклы для поиска элемента в коллекции, Java предоставляет методы для упрощения и оптимизации таких операций, особенно с использованием Stream API.

✔️ Используйте Stream API для лаконичного и производительного поиска элементов.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🤔4🔥2😱1
⚙️ Phaser.arriveAndAwaitAdvance()

Метод Phaser.arriveAndAwaitAdvance() из пакета java.util.concurrent синхронизирует выполнение нескольких потоков, ожидая, пока все участники завершат текущую фазу, прежде чем перейти к следующей. Это полезно для организации этапов выполнения в многопоточных задачах.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
⚙️ UUID.randomUUID()

Метод UUID.randomUUID() из пакета java.util генерирует случайный UUID. Это полезно для создания уникальных идентификаторов в приложениях.

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

Метод Files.isReadable() из java.nio.file проверяет, доступен ли файл для чтения. Это полезно для предварительной проверки перед открытием файла.

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

Метод CompletableFuture.thenCombine() позволяет объединить результаты двух асинхронных задач после их завершения. Это полезно для выполнения зависимых операций без блокирования потоков.

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

Пояснение
⬇️
Метод append добавляет " World" в конец строки, а insert вставляет запятую на позицию 5 (после Hello). Результирующая строка: Hello, World. Код выполняется корректно.


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

Пояснение
⬇️
При попытке деления на ноль возникает исключение ArithmeticException, которое перехватывается в блоке catch. Блок finally всегда выполняется независимо от того, произошло ли исключение. Поэтому вывод включает обе строки.


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

Что такое эффективная финализация (Effective Finality) в Java и как она связана с анонимными классами и лямбда-выражениями?

Ответ ⬇️
Эффективная финализация означает, что переменные, используемые внутри анонимных классов или лямбда-выражений, должны быть либо явно объявлены как final, либо эффективно финализированными — то есть не изменяться после своей инициализации. Это необходимо, чтобы гарантировать, что значение переменной не изменится, пока анонимный класс или лямбда-выражение её использует.

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

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

Consumer<Integer> consumer = value -> {
System.out.println(value + number); // Использование effectively final переменной
};

consumer.accept(5); // Вывод: 15

// number = 20; // Ошибка: переменная number должна быть эффективно финализированной
}
}


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

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

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

Метод Instant.now() из пакета java.time возвращает текущее время в UTC с высокой точностью. Это полезно для работы с временными метками в приложениях, где важна точность времени.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🤔1
⚙️ Collectors.partitioningBy

Метод partitioningBy из класса Collectors используется для разделения элементов потока на две группы, основываясь на предикате. Он возвращает карту с двумя списками: одна группа удовлетворяет предикату, другая — нет.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥4
⚙️ Collectors.teeing

Метод Collectors.teeing, представленный в Java 12, позволяет объединять результаты двух различных коллекторов в одном Stream. Это делает его полезным для выполнения нескольких операций над потоком данных одновременно.

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

Пояснение
⬇️
Когда класс реализует два интерфейса с одинаковыми default методами, требуется явное указание, какой метод вызывать. В данном коде в методе show() вызываются A.super.show() и B.super.show(), поэтому выполняются оба метода. Код компилируется и корректно выводит A's show и B's show.


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

Использование списка 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