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

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

По рекламе: @alexzelentsov
Download Telegram
Что выведет этот код?
Anonymous Quiz
5%
A, B
75%
[A, B]
18%
[A, B,]
2%
A, B,
🔥4👍1
Что выведет этот код?
StringJoiner joiner = new StringJoiner(", ", "[", "]");
joiner.add("A").add("B");
System.out.println(joiner.toString());
👍5🔥1
🔍 Ответ на задачу про StringJoiner:
StringJoiner (Java 8) позволяет удобно собирать строки с разделителем, префиксом и суффиксом. Его главное преимущество — он сам следит за тем, чтобы разделитель НЕ ставился после последнего элемента.

Вывод:
Результат: [A, B].

⚡️ Не перепутайте:
Если вам нужно просто соединить строки через запятую без префиксов, используйте более лаконичный String.join(", ", list).

#java #string #stringjoiner #clean_code #basics #интервью #java_interview_tasks
🔥4👍2❤1
Что выведет этот код?
Anonymous Quiz
34%
Try Finally
58%
Try
6%
Finally
3%
Ошибка компиляции.
🔥3👍2🤔1
Что выведет этот код?
try {
System.out.print("Try ");
System.exit(0);
} finally {
System.out.print("Finally");
}
🤔5👍1🔥1
🔍 Ответ на задачу про System.exit(): exit или finally? 🥊

Блок finally гарантированно выполняется почти всегда. Но System.exit() - это другое). Он мгновенно останавливает работу всей виртуальной машины (JVM). В этом случае выполнение кода прерывается немедленно, и никакие finally блоки не запускаются.

Вывод:
Программа выведет только "Try " и завершится. Единственный способ выполнить код при выходе — использовать Runtime.getRuntime().addShutdownHook().

⚡️ Не перепутайте:
Во всех остальных случаях (return, exception, break) finally обязательно отработает.

#java #jvm #finally #systemexit #basics #интервью #java_interview_tasks
👍5❤2🔥1🤔1😐1
Можно ли десериализовать объект, если в новой версии класса добавилось одно поле, но `serialVersionUID` остался прежним?
Anonymous Quiz
17%
Нет, будет выброшен InvalidClassException.
47%
Да, новое поле просто получит значение по умолчанию (null или 0).
36%
Да, но только если поле помечено как `transient`.
0%
JVM упадет с ошибкой сегментации.
❤2👍2🔥1
🔍 Ответ на задачу про Serialization: Зачем нужен serialVersionUID? 🆔
serialVersionUID — это "версия" вашего класса для механизма сериализации. Если он совпадает, Java попытается сопоставить поля. Новые поля в классе просто заполнятся нулями, а лишние поля из потока данных будут проигнорированы.
Если же serialVersionUID не указан, Java вычислит его сама на основе структуры класса. Тогда любое мелкое изменение (даже переименование метода) изменит ID и сделает старые данные нечитаемыми.

Вывод:
Да, десериализация пройдет успешно (ответ 2). Всегда указывайте serialVersionUID вручную, чтобы контролировать совместимость.

#java #serialization #backend #basics #интервью #java_interview_tasks
❤1👍1🔥1🤔1
Что происходит с полями, помеченными как `transient`, при сохранении объекта?
Что увидит программа после десериализации?
Anonymous Quiz
7%
login="admin", password="123"
74%
login="admin", password=null
17%
login=null, password=null
2%
Ошибка при десериализации.
👍2🤔2🔥1
Что происходит с полями, помеченными как transient, при сохранении объекта?
Что увидит программа после десериализации?
class User implements Serializable {
String login = "admin";
transient String password = "123";
}
👍1🔥1🤔1
🔍 Ответ на задачу про transient:
Ключевое слово transient говорит механизму сериализации: "Игнорируй это поле". Оно не будет записано в поток байтов. При десериализации такое поле получит стандартное значение для своего типа (null для объектов, 0 для чисел, false для boolean).

Вывод:
Пароль будет потерян (null). Это полезно для чувствительных данных (пароли, ключи) или для тяжелых объектов, которые проще пересоздать, чем сохранять (например, кэши или ссылки на открытые файлы).

⚡️ Не перепутайте:
Статические поля (static) тоже не сериализуются, так как они принадлежат классу, а не объекту.

#java #serialization #transient #security #basics #интервью #java_interview_tasks
👍2🔥2❤1
Как Java решает, из какого Jar\-файла загрузить класс, если их несколько с одинаковым именем?
В каком порядке работают стандартные загрузчики классов?
Anonymous Quiz
42%
System -> Extension -> Bootstrap
39%
Bootstrap -> Extension -> System
10%
Сначала ищет тот, кто ближе к папке проекта.
10%
Все одновременно, кто быстрее нашел — тот и молодец.
👍2🔥1
🔍 Ответ на задачу про ClassLoader: Кто главный? 🗂
В Java используется "модель делегирования" (Parent Delegation Model). Когда нужно загрузить класс, загрузчик сначала спрашивает своего "родителя".
1. Bootstrap (загружает классы ядра JDK).
2. Extension (классы расширений).
3. System/Application (ваш classpath).
Только если родитель не нашел класс, текущий загрузчик пытается найти его сам.

Вывод:
Порядок: Bootstrap -> Extension -> System. Это защищает систему от подмены базовых классов (например, вы не сможете подсунуть свою версию java.lang.String).

⚡️ Не перепутайте:
Некоторые фреймворки (например, веб-серверы типа Tomcat) специально нарушают эту модель, чтобы разные приложения могли использовать разные версии одних и тех же библиотек.

#java #jvm #classloader #internals #интервью #java_interview_tasks
✍4
В чём разница между обычным сдвигом и беззнаковым?
Что выведет этот код?
Anonymous Quiz
2%
-1, -1
71%
-1, 2147483647
9%
1, 1
18%
-1, 1
🔥2
В чём разница между обычным сдвигом и беззнаковым?
Что выведет этот код?
int x = -2;
System.out.println(x >> 1);
System.out.println(x >>> 1);
❤2❤‍🔥1👍1
🔍 Ответ на задачу про битовые сдвиги: >>> против >> 🔢
- >> (Signed shift) — сохраняет знак. При сдвиге вправо пустые места слева заполняются значением знакового бита (для отрицательных чисел — единицами).
- >>> (Unsigned shift) — игнорирует знак. Пустые места слева всегда заполняются нулями. Отрицательное число при таком сдвиге превращается в огромное положительное.

Вывод:
-2 >> 1 даст -1. А -2 >>> 1 даст 2147483647 (максимальный int).

⚡️ Не перепутайте:
Для положительных чисел разницы между >> и >>> нет.

#java #bitwise #math #basics #интервью #java_interview_tasks
👍4❤‍🔥1🔥1
Почему Java использует разные алгоритмы сортировки для чисел и для объектов?
Гарантирует ли `Arrays.sort()` сохранение порядка равных элементов?
Anonymous Quiz
17%
Да, всегда.
15%
Только для объектов (T[]).
47%
Только для примитивов (int[]).
21%
Нет, никогда.
🔥3
🔍 Ответ на задачу про Arrays.sort: Стабильность и Примитивы 🧬
- Сортировка объектов в Java стабильна (используется TimSort). Если два объекта равны, их относительный порядок не изменится. Это важно для пользователей.
- Сортировка примитивов нестабильна (используется Dual-Pivot Quicksort). Для чисел 5 и 5 порядок не имеет значения, зато Quicksort работает быстрее и потребляет меньше памяти.

Вывод:
Стабильность гарантируется только для объектов.

⚡️ Не перепутайте:
Если вы переопределяете Comparator, убедитесь, что он корректно обрабатывает равенство (возвращает 0), иначе даже стабильная сортировка может выдать странный результат.

#java #algorithms #sorting #performance #интервью #java_interview_tasks
🤨3✍1👍1🔥1
Почему один "тяжелый" параллельный стрим может затормозить всё приложение?
Какой пул потоков используют параллельные стримы по умолчанию?
Anonymous Quiz
2%
Для каждого стрима создается свой новый пул.
86%
Используется общий `ForkJoinPool.commonPool()`.
3%
Используется фиксированный пул из 10 потоков.
9%
Стримы работают на тех же потоках, что и веб-сервер.
👍1
🔍 Ответ на задачу про Parallel Stream: Общий котел 🥘
Все параллельные стримы в рамках одной JVM по умолчанию используют один и тот же статический пул — ForkJoinPool.commonPool(). Количество потоков в нем обычно равно количеству ядер процессора минус один. Если одна задача полностью займет этот пул (например, тяжелыми вычислениями), все остальные параллельные стримы в приложении будут стоять в очереди.

Вывод:
Используется общий пул. Для тяжелых задач лучше запускать стрим внутри своего собственного ForkJoinPool.

⚡️ Не перепутайте:
Параллельные стримы хороши для CPU-intensive задач, но могут быть опасны для I/O операций.

#java #streamapi #concurrency #performance #интервью #java_interview_tasks
👍3❤2🔥1