Что вернет метод `thenRun()`, если предыдущий этап вернул строку "Success"?
Anonymous Quiz
20%
CompletableFuture<String> со значением "Success".
50%
CompletableFuture<Void>.
24%
CompletableFuture<String> со значением "Done".
7%
Результат будет null.
🔥3👍1👀1
Асинхронное программирование — мощная концепция, но важно понимать разницу в цепочках методов.
Что вернет метод
Что вернет метод
thenRun(), если предыдущий этап вернул строку "Success"?CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Success");
CompletableFuture<Void> result = future.thenRun(() -> System.out.println("Done"));
👍3🔥3❤1
🔍 Ответ на задачу про CompletableFuture: thenRun, thenAccept или thenApply? 🚀
-
-
-
Вывод:
⚡️ Не перепутайте:
Выбирайте метод в зависимости от того, нужны ли вам входные данные от предыдущего шага и хотите ли вы что-то передать дальше.
#java #concurrency #completablefuture #async #multithreading #интервью #java_interview_tasks
-
thenApply(Function) — принимает результат, возвращает новый результат (меняет тип).-
thenAccept(Consumer) — принимает результат, ничего не возвращает (CompletableFuture<Void>).-
thenRun(Runnable) — не принимает результат и ничего не возвращает (CompletableFuture<Void>). Используется просто для запуска кода после завершения этапа.Вывод:
thenRun всегда возвращает CompletableFuture<Void>, игнорируя результат предыдущего шага.⚡️ Не перепутайте:
Выбирайте метод в зависимости от того, нужны ли вам входные данные от предыдущего шага и хотите ли вы что-то передать дальше.
#java #concurrency #completablefuture #async #multithreading #интервью #java_interview_tasks
👍6❤3🔥1
Что произойдет, если внутри `computeIfAbsent` попытаться изменить эту же мапу?
Anonymous Quiz
10%
Мапа будет содержать {A=1, B=2, C=3}.
77%
ConcurrentModificationException.
7%
Зацикливание (Infinite Loop).
5%
Ошибка компиляции.
👍4🔥1👀1
Метод
Что произойдет, если внутри
computeIfAbsent в Map очень удобен, но внутри лямбды скрыта ловушка.Что произойдет, если внутри
computeIfAbsent попытаться изменить эту же мапу?Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.computeIfAbsent("B", key -> {
map.put("C", 3);
return 2;
});
👍4❤2🔥1
🔍 Ответ на задачу про computeIfAbsent: Осторожно с модификациями! ⚠️
Документация
Вывод:
В данном случае в
⚡️ Не перепутайте:
Никогда не меняйте коллекцию внутри методов, которые итерируются по ней или вычисляют ее значения.
#java #collections #hashmap #bug #concurrency #интервью #java_interview_tasks
Документация
HashMap (и большинства других реализаций) прямо запрещает модификацию структуры мапы (добавление/удаление) внутри методов вычисления (compute, merge, computeIfAbsent). Это может привести к повреждению внутренней структуры данных или выбросу ConcurrentModificationException.Вывод:
В данном случае в
HashMap будет выброшен ConcurrentModificationException.⚡️ Не перепутайте:
Никогда не меняйте коллекцию внутри методов, которые итерируются по ней или вычисляют ее значения.
#java #collections #hashmap #bug #concurrency #интервью #java_interview_tasks
🔥5👍2👀1
Какой метод вызовется?
Anonymous Quiz
31%
Object
26%
String
34%
Ошибка компиляции (неоднозначность).
8%
NullPointerException.
👍3🔥1👀1
Когда у вас есть два метода с одинаковым именем, но разными типами аргументов, какой из них выберет Java для
Какой метод вызовется?
null?Какой метод вызовется?
public class Test {
public static void print(Object o) { System.out.println("Object"); }
public static void print(String s) { System.out.println("String"); }
public static void main(String[] args) {
print(null);
}
}❤3🔥2👀2😱1
🔍 Ответ на задачу про перегрузку методов: null и неоднозначность ⚖️
Java при перегрузке (overloading) всегда выбирает наиболее специфичный (most specific) тип. Так как
Вывод:
Напечатается "String". Если бы мы добавили еще метод
⚡️ Не перепутайте:
Если нужно вызвать именно версию для
#java #overloading #basics #polymorphism #интервью #java_interview_tasks
Java при перегрузке (overloading) всегда выбирает наиболее специфичный (most specific) тип. Так как
String является наследником Object, он считается более специфичным. Компилятор отдаст предпочтение ему.Вывод:
Напечатается "String". Если бы мы добавили еще метод
print(Integer i), возникла бы ошибка компиляции, так как String и Integer не связаны иерархией, и Java не смогла бы выбрать.⚡️ Не перепутайте:
Если нужно вызвать именно версию для
Object, сделайте явное приведение: print((Object) null).#java #overloading #basics #polymorphism #интервью #java_interview_tasks
❤4👍2👀2
Что произойдет, если при формировании Map попадутся два одинаковых ключа?
Anonymous Quiz
8%
В мапе останется первый элемент ("apple").
61%
В мапе останется последний элемент ("apricot").
28%
IllegalStateException.
3%
Ошибка компиляции.
👍3❤1👀1
Что произойдет, если при формировании Map попадутся два одинаковых ключа?
List<String> list = Arrays.asList("apple12", "banana", "apricot");
Map<Integer, String> map = list.stream()
.collect(Collectors.toMap(s -> s.length(), s -> s));🔥5💩2👀1
🔍 Ответ на задачу про Collectors.toMap 💥
Дефолтная версия
Вывод:
Чтобы код не падал, нужно использовать перегруженную версию с "merge function":
⚡️ Не перепутайте:
Всегда думайте, возможны ли дубликаты в ваших данных перед использованием
#java #streamapi #collectors #map #exception #интервью #java_interview_tasks
Дефолтная версия
Collectors.toMap(keyMapper, valueMapper) предполагает, что ключи уникальны. Если встречается дубликат (и "apple12", и "apricot" имеют длину 7), метод выбрасывает IllegalStateException: Duplicate key.Вывод:
Чтобы код не падал, нужно использовать перегруженную версию с "merge function":
.collect(Collectors.toMap(s -> s.length(), s -> s, (oldValue, newValue) -> oldValue)) — это скажет стриму оставить старое значение при конфликте.⚡️ Не перепутайте:
Всегда думайте, возможны ли дубликаты в ваших данных перед использованием
toMap().#java #streamapi #collectors #map #exception #интервью #java_interview_tasks
👍9🤡3❤2
В чём разница между
Что выведет этот код?
replace() и replaceAll(), если оба принимают две строки?Что выведет этот код?
String str = "java.is.fun";
System.out.println(str.replace(".", "/"));
System.out.println(str.replaceAll(".", "/"));
🔥4
🔍 Ответ на задачу про String: replace vs replaceAll 🧐
-
-
Вывод:
Первая строка выведет
⚡️ Не перепутайте:
Если вам не нужны регулярные выражения, всегда используйте
#java #string #regex #basics #интервью #java_interview_tasks
-
replace(CharSequence target, CharSequence replacement) заменяет литеральные строки. Точка воспринимается просто как символ.-
replaceAll(String regex, String replacement) принимает регулярное выражение. В регулярках точка . означает "любой символ". Поэтому replaceAll заменит абсолютно все символы в строке на слэш.Вывод:
Первая строка выведет
java/is/fun, а вторая — ///////////.⚡️ Не перепутайте:
Если вам не нужны регулярные выражения, всегда используйте
replace(). Он быстрее и безопаснее.#java #string #regex #basics #интервью #java_interview_tasks
👍10🔥6❤1
Что останется в списке после удаления?
Anonymous Quiz
21%
[2, 3]
69%
[1, 3]
3%
[1, 2]
8%
IndexOutOfBoundsException
❤1👍1🔥1
Что останется в списке после удаления?
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
list.remove(1);
System.out.println(list);
👏5🥱3🔥2❤1
🔍 Ответ на задачу про List.remove(): Индекс или Объект? 🔢
Удаление из списка
У
Вывод:
Список станет
⚡️ Не перепутайте:
Будьте осторожны с коллекциями чисел! Всегда проверяйте, удаляете вы по индексу или по значению.
#java #collections #arraylist #list #интервью #java_interview_tasks
Удаление из списка
List<Integer> — классическая ловушка из-за перегрузки метода remove().У
List есть два метода: remove(int index) и remove(Object o). Если в списке лежат Integer, то при вызове remove(1) Java выберет версию с примитивом int (по индексу), так как это точное совпадение. В итоге удалится элемент под индексом 1 (это число 2).Вывод:
Список станет
[1, 3]. Чтобы удалить именно число 1, нужно вызвать list.remove(Integer.valueOf(1)).⚡️ Не перепутайте:
Будьте осторожны с коллекциями чисел! Всегда проверяйте, удаляете вы по индексу или по значению.
#java #collections #arraylist #list #интервью #java_interview_tasks
1👍8❤2🔥1
🔥2❤1👍1
При работе с финансами мы используем
Что выведет код?
BigDecimal. Но как их правильно сравнивать?Что выведет код?
BigDecimal d1 = new BigDecimal("1.0");
BigDecimal d2 = new BigDecimal("1.00");
System.out.println(d1.equals(d2));
System.out.println(d1.compareTo(d2) == 0);❤4👍1🔥1