Java Interview Tasks
4.9K subscribers
213 photos
1 video
1 file
141 links
Реальные вопросы и задачи с собеседований.
Оригинальный авторский контент.
Актуальный материал.
Уровень вопросов от junior до supersenior.

Автор канала - @alexzelentsov

По рекламе: @alexzelentsov
Download Telegram
Что произойдет при вызове new User("")?
record User(String name) {
public User {
if (name.isEmpty()) throw new IllegalArgumentException();
}
}
🔥3
🔍 Ответ на задачу про Records: Компактный конструктор 📝
В рекордах (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 (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+) если вам нужно выполнить несколько действий в одном case, вы используете блок {}. Чтобы вернуть значение из такого блока наружу в переменную, используется ключевое слово yield.

Вывод:
Сначала выполнится System.out.print, затем значение "Result" вернется в переменную. Итого: OneResult.

⚡️ Не перепутайте:
yield используется только внутри switch. Не пытайтесь использовать его вместо return в обычных методах.

#java #switch #java14 #basics #syntax #интервью #java_interview_tasks
👌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. Теперь мы можем объявить переменную s прямо в проверке. Если obj является строкой, Java сама сделает приведение типов и запишет результат в s. Область видимости s ограничена блоком if.

Вывод:
Так как длина строки 10 (> 5), условие сработает. Результат: HELLO JAVA.

⚡️ Не перепутайте:
Переменная s доступна только там, где компилятор уверен в её инициализации. Например, в if (...) { здесь s доступна }.

#java #java16 #patternmatching #basics #syntax #интервью #java_interview_tasks
✍5
Собес в гугл:

3200021 разложить на множители
🔥4
Ответ на задачу про 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.
🥴9🤨3🔥1
Как текстовые блоки \(Java 15\+\) определяют, где начинается контент, а где — просто отступы кода?
Сколько пробелов будет перед словом "Hello" в строке `result`?
Anonymous Quiz
30%
0
60%
2
6%
6
4%
4
👍2
Как текстовые блоки (Java 15+) определяют, где начинается контент, а где — просто отступы кода?
Сколько пробелов будет перед словом "Hello" в строке result?
String result = """
Hello
World
""";
👍2
🔍 Ответ на задачу про Text Blocks: Считаем пробелы 📏
Текстовые блоки используют "алгоритм смещения" (incidental whitespace). Java находит самую левую границу текста во всем блоке (в данном случае это начало слова "World") и считает её за "ноль". Всё, что находится левее этой границы, отбрасывается.

Вывод:
Так как "Hello" смещено на 2 пробела относительно "World", в итоговой строке перед ним останется именно 2 пробела.

⚡️ Не перепутайте:
Положение закрывающих кавычек """ тоже влияет на отступы! Если вы сдвинете их левее текста, это создаст дополнительные пробелы.

#java #java15 #textblocks #syntax #basics #интервью #java_interview_tasks
🔥6❤3👍1
😊 Ламповое комьюнити про ИТ, ИИ и digital

Наш канал вошел в подборку тг-каналов про ИТ, диджитал и Tech — это ламповое комьюнити для своих, где собраны люди из индустрии, кейсы, инструменты и полезные наблюдения.

В папке — каналы про:
➕новые инструменты, реальные кейсы и применение в работе
➕тренды, обзоры и взгляд tech-практиков
➕карьера и развитие в tech
➕поиск рабочих подходов и инструментов для ежедневных задач

🔠 Тык на папку https://t.me/addlist/Jyt5789h67djMDBi
Please open Telegram to view this post
VIEW IN TELEGRAM
Какая строка НЕ скомпилируется?
Anonymous Quiz
49%
Только 3
14%
3 и 4
18%
Только 4
19%
Все верны.
🤯2
Какая строка НЕ скомпилируется?
var a = 10;            // 1
var b = "Java"; // 2
var c = null; // 3
var d = (String) null; // 4
👍1🔥1
🔍 Ответ на задачу про var: Не всё так просто с null 🚫
Ключевое слово var (Java 10+) выводит тип переменной на основе инициализатора. Если мы пишем var c = null, компилятор не имеет ни малейшего представления, список это, строка или ваш кастомный класс. Поэтому такая запись запрещена.
Однако, если сделать явное приведение (String) null, тип становится известен, и var сработает.

Вывод:
Не скомпилируется только строка 3.

⚡️ Не перепутайте:
var — это не динамическая типизация как в JS. Тип определяется один раз при компиляции и не может быть изменен позже.

#java #java10 #var #inference #basics #интервью #java_interview_tasks
❤3👍1🔥1