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

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

По рекламе: @alexzelentsov и https://telega.in/c/java_interview_tasks
Download Telegram
С какой джавы можно написать так?
🔥5👍2
С какой версии джавы будет компилироваться код выше?
Anonymous Quiz
5%
7
16%
8
2%
9
15%
11
15%
15
23%
17
10%
21
15%
Ни одна из перечисленных
🤡25👍5
Text blocks появились с java 15, но после начала блока должен быть переход на новую строку, поэтому вариант из прошлого вопроса не компилируется, правильный вариант будет такой
🔥13👍2
👍28🔥3
Что вернет метод, если value = null?
🔥11👍1🌚1
🔥11👎4👍1
Тут опять проблема в порядке операций, что может ввести в заблуждение - тернарный оператор имеет низкий приоритет.
Пример корректного варианта (который не вводит в заблуждение других): return "Str:" + (value != null ? value : "(---)");
👍10🔥4👎1
Что напечатает код, если obj = "123"?
🔥9👍2
Тут проблема в отсутствии скобок и поэтому отрицание пытается примениться к obj, а это Object и поэтому код не скомпилируется. Правильный вариант будет такой: if (!(obj instanceof String)) {...}
👍15🔥5🐳2
Что напечатает код?
🔥6👍2
Что напечатает код?
Anonymous Quiz
12%
1
29%
2
47%
3
12%
узнать ответ
🔥10👍2
В приведенном коде ошибка заключается в том, что метод add класса BigInteger не изменяет текущее значение объекта, а возвращает новый объект BigInteger, который является результатом сложения. BigInteger является неизменяемым классом, что значит, что все его методы возвращают новые объекты, а не изменяют текущий объект.

Поэтому, результат вызова value.add(BigInteger.ONE) не сохраняется и не присваивается обратно переменной value. Исходная переменная value остается прежней и не изменяется.

Вот как выглядит исходный код:

BigInteger value = BigInteger.TWO;
value.add(BigInteger.ONE);

System.out.println(value); // Выводит 2, а не 3


В этом коде System.out.println(value) выведет 2, потому что переменная value не была изменена.

Чтобы исправить этот код и получить правильный результат, необходимо присвоить результат выполнения метода add обратно переменной value:

BigInteger value = BigInteger.TWO;
value = value.add(BigInteger.ONE);

System.out.println(value); // Теперь выведет 3
👍15🔥3
String str = "s=" + index + 1;
Что будет в переменной str, если index = 3?
Anonymous Quiz
1%
s=1
0%
s=2
4%
s=3
73%
s=31
19%
s=4
3%
Узнать ответ
👍11🐳2
Тут может возникнуть ощущение что будет s=4, но сложение идет перед конкатенацией, однозначно бы выглядел код:
String str = "s=" + (index + 1);
👍6🔥2🐳2
Что напечатает код?
👍11
Проблема, с которой мы сталкиваемся, связана с тем, как компилятор Java обрабатывает varargs внутри условных выражений, особенно когда ветви условия производят разные типы. Вот подробное объяснение и пошаговое решение:
когда мы используем условное выражение, компилятор не может обернуть только одну из ветвей. Он воспринимает условное выражение как целое. Поскольку тип ветви then — String, а тип ветви else — Object[], тип всего условного выражения является общим суперклассом для String и Object[], то есть просто Object. Это не массив, поэтому компилятор добавляет автоматическое оборачивание, что означает, что массив params будет обернут ещё раз.

Вы можете исправить это, если не будете полагаться на компилятор и обернете строку вручную: params.length == 0 ? new Object[]{"default"} : params. Однако, вероятно, будет менее запутанно вообще избегать условных выражений внутри вызова метода с varargs.
🔥9🐳41👍1
Что может напечатать метод print?
🔥6👍2
👍6🔥4🥰1
Ответ к вопросу про инкремент под гонкой:
Рассуждения аналогичные как и тут:
https://t.me/java_interview_tasks/96
Для примера, посмотрим, как может получится 2 - это самый интересный случай (см. картинку к посту)
Остальные варианты (больше 2) возможно получить аналогичными рассуждениями.

Выводы: этот простой пример показывает, что не синхронизированный счётчик может терять много данных.
Если вам нужно использовать счётчик под гонкой, то надо синхронизировать инкремент или использовать уже синхронизированные счётчики, например, AtomicInteger
👍7🔥5