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

Как работают захваты переменных (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