🔍 Ответ на задачу про Stream.reduce: Опасность
Первый аргумент
Вычисление идет так:
В нашем случае:
Вывод:
Напечатается 16. Если вы хотите просто сумму — identity должен быть 0. Если произведение — 1.
⚡️ Не перепутайте:
Identity должен быть нейтральным элементом для вашей операции. Для сложения это 0, для умножения 1, для конкатенации строк — пустая строка.
#java #streamapi #reduce #basics #интервью #java_interview_tasks
identity 🚩Первый аргумент
reduce — это identity. Это значение, которое возвращается, если стрим пуст, и которое используется как начальное при вычислении.Вычисление идет так:
identity + element1 + element2...В нашем случае:
10 + 1 + 2 + 3 = 16.Вывод:
Напечатается 16. Если вы хотите просто сумму — identity должен быть 0. Если произведение — 1.
⚡️ Не перепутайте:
Identity должен быть нейтральным элементом для вашей операции. Для сложения это 0, для умножения 1, для конкатенации строк — пустая строка.
#java #streamapi #reduce #basics #интервью #java_interview_tasks
👍5❤1👌1
Что выведет этот код?
LocalDate date = LocalDate.of(2024, 1, 1);
date.plusDays(10);
System.out.println(date.getDayOfMonth());
👏4❤1🔥1
🔥4👏3🤔1
🔍 Ответ на задачу про LocalDate: Ловушка иммутабельности 📅
Классы из пакета
Вывод:
Напечатается 1. Чтобы получить 11, нужно было написать
⚡️ Не перепутайте:
Всегда проверяйте, что вы используете возвращаемое значение методов
#java #datetime #immutable #bug #basics #интервью #java_interview_tasks
Классы из пакета
java.time (LocalDate, LocalTime, etc.) — immutable (неизменяемые), как и String. Любой метод, который якобы "меняет" объект, на самом деле возвращает новый объект с измененным состоянием. Исходный объект date остается прежним.Вывод:
Напечатается 1. Чтобы получить 11, нужно было написать
date = date.plusDays(10).⚡️ Не перепутайте:
Всегда проверяйте, что вы используете возвращаемое значение методов
java.time. Это одна из самых частых ошибок при переходе со старого Calendar.#java #datetime #immutable #bug #basics #интервью #java_interview_tasks
🔥7👏2❤1👍1
Что произойдет при вызове `new User("")`?
Anonymous Quiz
13%
Ошибка компиляции (в рекордах нельзя писать логику).
15%
Создастся объект с пустым именем.
58%
Выбросится IllegalArgumentException.
15%
Ошибка компиляции (не хватает параметров в конструкторе).
🔥3
Что произойдет при вызове
new User("")?record User(String name) {
public User {
if (name.isEmpty()) throw new IllegalArgumentException();
}
}🔥3
🔍 Ответ на задачу про Records: Компактный конструктор 📝
В рекордах (Java 16+) есть "компактный конструктор". У него нет круглых скобок с параметрами. Он автоматически получает те же параметры, что объявлены в заголовке рекорда. Это идеальное место для валидации или нормализации данных (например,
Вывод:
Код скомпилируется и выбросит исключение. Это правильный способ гарантировать валидность данных в Immutable записях.
⚡️ Не перепутайте:
В компактном конструкторе не нужно писать
#java #records #java17 #clean_code #basics #интервью #java_interview_tasks
В рекордах (Java 16+) есть "компактный конструктор". У него нет круглых скобок с параметрами. Он автоматически получает те же параметры, что объявлены в заголовке рекорда. Это идеальное место для валидации или нормализации данных (например,
name = name.trim()).Вывод:
Код скомпилируется и выбросит исключение. Это правильный способ гарантировать валидность данных в Immutable записях.
⚡️ Не перепутайте:
В компактном конструкторе не нужно писать
this.name = name, Java сделает это сама в конце.#java #records #java17 #clean_code #basics #интервью #java_interview_tasks
👍8❤1🔥1
Какой класс НЕ сможет наследоваться от `Shape`?
Anonymous Quiz
9%
Circle
7%
Square
62%
Triangle
22%
Все могут.
🔥3
Какой класс НЕ сможет наследоваться от
Shape?sealed class Shape permits Circle, Square { }
final class Circle extends Shape { }
non-sealed class Square extends Shape { }
class Triangle extends Shape { }🔥3
🔍 Ответ на задачу про Sealed Classes: Закрытая иерархия 🔒
Ключевое слово
Наследники
Вывод:
⚡️ Не перепутайте:
Sealed-классы отлично работают вместе с Pattern Matching в
#java #java17 #sealedclasses #oop #basics #интервью #java_interview_tasks
Ключевое слово
sealed (Java 17) разрешает наследование только тем классам, которые перечислены в списке permits. Любой другой класс (как Triangle) получит ошибку компиляции при попытке расширить Shape.Наследники
sealed класса обязаны быть либо final, либо sealed, либо non-sealed (открывающим иерархию обратно).Вывод:
Triangle нет в списке разрешенных. Поэтому вариант с Triangle не скомпилируется.⚡️ Не перепутайте:
Sealed-классы отлично работают вместе с Pattern Matching в
switch, позволяя компилятору проверять, все ли возможные подтипы вы обработали.#java #java17 #sealedclasses #oop #basics #интервью #java_interview_tasks
✍5
🔥3
Что выведет код?
int x = 1;
String result = switch (x) {
case 1 -> {
System.out.print("One");
yield "Result";
}
default -> "Other";
};
System.out.print(result);
🔥3
🔍 Ответ на задачу про Switch Expressions: yield или return? 🔄
В новых switch expressions (Java 14+) если вам нужно выполнить несколько действий в одном
Вывод:
Сначала выполнится
⚡️ Не перепутайте:
#java #switch #java14 #basics #syntax #интервью #java_interview_tasks
В новых switch expressions (Java 14+) если вам нужно выполнить несколько действий в одном
case, вы используете блок {}. Чтобы вернуть значение из такого блока наружу в переменную, используется ключевое слово yield.Вывод:
Сначала выполнится
System.out.print, затем значение "Result" вернется в переменную. Итого: OneResult.⚡️ Не перепутайте:
yield используется только внутри switch. Не пытайтесь использовать его вместо return в обычных методах.#java #switch #java14 #basics #syntax #интервью #java_interview_tasks
👌5
Что выведет этот код?
Anonymous Quiz
71%
HELLO JAVA
4%
Hello Java
14%
Ошибка компиляции (переменная s не определена).
12%
Short or not a string
🥱5
Что выведет этот код?
Object obj = "Hello Java";
if (obj instanceof String s && s.length() > 5) {
System.out.print(s.toUpperCase());
} else {
System.out.print("Short or not a string");
}
🔥3
🔍 Ответ на задачу про Pattern Matching: Прощай, кастинг! 👋
В Java 16 появился Pattern Matching for instanceof. Теперь мы можем объявить переменную
Вывод:
Так как длина строки 10 (> 5), условие сработает. Результат:
⚡️ Не перепутайте:
Переменная
#java #java16 #patternmatching #basics #syntax #интервью #java_interview_tasks
В Java 16 появился Pattern Matching for instanceof. Теперь мы можем объявить переменную
s прямо в проверке. Если obj является строкой, Java сама сделает приведение типов и запишет результат в s. Область видимости s ограничена блоком if.Вывод:
Так как длина строки 10 (> 5), условие сработает. Результат:
HELLO JAVA.⚡️ Не перепутайте:
Переменная
s доступна только там, где компилятор уверен в её инициализации. Например, в if (...) { здесь s доступна }.#java #java16 #patternmatching #basics #syntax #интервью #java_interview_tasks
✍5
Ответ на задачу про 3200021:
Заметим, что 32 · 100 000 = 3 200 000 = 20⁵ (потому что 32 = 2⁵, 100 000 = 10⁵, а 2⁵ · 10⁵ = 20⁵).
Тогда 3 200 021 = 20⁵ + 20 + 1, то есть это выражение x⁵ + x + 1 при x = 20.
Есть известное разложение:
x⁵ + x + 1 = (x² + x + 1)(x³ − x² + 1)
Подставляем x = 20:
x² + x + 1 = 400 + 20 + 1 = 421
x³ − x² + 1 = 8000 − 400 + 1 = 7601
7601 = 7700 − 99
7700 = 77 · 100 = 11 · 700
99 = 11 · 9
Значит, 7601 = 11 · (700 − 9) = 11 · 691.
Итого: 3 200 021 = 11 · 421 · 691.
Заметим, что 32 · 100 000 = 3 200 000 = 20⁵ (потому что 32 = 2⁵, 100 000 = 10⁵, а 2⁵ · 10⁵ = 20⁵).
Тогда 3 200 021 = 20⁵ + 20 + 1, то есть это выражение x⁵ + x + 1 при x = 20.
Есть известное разложение:
x⁵ + x + 1 = (x² + x + 1)(x³ − x² + 1)
Подставляем x = 20:
x² + x + 1 = 400 + 20 + 1 = 421
x³ − x² + 1 = 8000 − 400 + 1 = 7601
7601 = 7700 − 99
7700 = 77 · 100 = 11 · 700
99 = 11 · 9
Значит, 7601 = 11 · (700 − 9) = 11 · 691.
Итого: 3 200 021 = 11 · 421 · 691.
🥴9🤨3🔥1
Как текстовые блоки \(Java 15\+\) определяют, где начинается контент, а где — просто отступы кода?
Сколько пробелов будет перед словом "Hello" в строке `result`?
Сколько пробелов будет перед словом "Hello" в строке `result`?
Anonymous Quiz
29%
0
61%
2
6%
6
4%
4
👍2
Как текстовые блоки (Java 15+) определяют, где начинается контент, а где — просто отступы кода?
Сколько пробелов будет перед словом "Hello" в строке
Сколько пробелов будет перед словом "Hello" в строке
result?String result = """
Hello
World
""";
👍2