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

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

По рекламе: @alexzelentsov и https://telega.in/c/java_interview_tasks
Download Telegram
Ответ на вопрос VolatileVsFinal (https://t.me/java_interview_tasks/140) :

Тут речь идет об одном из самых интересных разрешенных сценариев JMM. Это тот факт, что volatile поле не имеет final семантики.
Это означает, что если мы публикуем ссылку объекта под гонкой, то мы можем увидеть дефолтное значение для volatile поля
Поэтому в данном случае 0 вполне можно получить.

Этот эффект можно увидеть на некоторых платформах, например AArch64:
RESULT SAMPLES FREQ
-1 1,428,517,070 91.74%
0 7,105 <0.01%
42 128,534,641 8.25%
👍16🔥7🤯31
Что напечатает код?
👍14🔥6
Что напечатает код?
Anonymous Quiz
12%
true, true
16%
true, false
12%
false, true
60%
false, false
👍21🔥10👎9
Java Interview Tasks
Что напечатает код?
Ответ к вопросу про allMatch/anyMatch:

Малоизвестный факт, в документации написано следующее:

boolean allMatch(Predicate<? super T> predicate);

return true if either all elements of the stream match the
provided predicate or the stream is empty, otherwise false

и
boolean anyMatch(Predicate<? super T> predicate);

return true if any elements of the stream match the provided predicate, otherwise false


То есть allMatch() для пустого стрима вернет true, а anyMatch() вернет false.

Объяснить это можно так: для всех элементов пустого стрима любое условие выполнено.
В тоже время anyMatch вернет false, потому что нельзя найти элемент из коллекции, который удовлятворяет этому условию.

Такое поведение консистенто, например, для закона Де Моргана:
stream.allMatch(condition) равносильно !stream.anyMatch(!condition)
👍27🔥19🤔6👏2
Какие значения могут напечататься?
(thread1 и thread2 запускаются одновременно в разных потоках)
👍10🔥3👏1
Какие значения могут напечаться?
Anonymous Quiz
11%
"0, 0", "1, 1"
14%
"0, 0", "1, 1", "0, 1"
47%
"0, 0", "1, 1", "0, 1", "1, 0"
16%
"1, 1"
13%
"0, 0"
👍7🔥4👎2
Java Interview Tasks
Какие значения могут напечататься? (thread1 и thread2 запускаются одновременно в разных потоках)
Ответ к последнему вопросу:
Объявление массива как volatile не делает доступ к его элемента volatile.
Поэтому hb семантика тут не применима и никаких гарантий относительно исполнения дать нельзя
Правильный вариант - "0, 0", "1, 1", "0, 1", "1, 0"
Были вопросы откуда может взяться вариант "1, 0":
Тут происходит запись элементов в массив и их чтение под гонкой,
jmm не дает в этом случае каких то гарантий на порядок выполнения операций.
Например компилятор может выполнить запись в другом порядке,
отличающимся от порядка в коде, то есть сначала записать a[1] = 1 а потом a[0] = 1

Вот пример, когда volatile даёт гарантии видимости в другом треде: https://t.me/java_interview_tasks/53

Вопрос для читателей: что нужно сделать, что бы вариант (1,0) был запрещён?
👍15🔥2
Вопрос для любителей точных вычеслений:
Что напечатает код?
``` BigDecimal result = new BigDecimal(4.4).add(new BigDecimal(4.4)); System.out.println(result); ```
Anonymous Quiz
1%
0
37%
8.8
48%
8.8000000000000000000
2%
9
0%
10
0%
42
0%
-1
11%
что-то другое
👍14👏4😁3
Java Interview Tasks
Вопрос для любителей точных вычеслений:
Что напечатает код?
``` BigDecimal result = new BigDecimal(4.4).add(new BigDecimal(4.4)); System.out.println(result); ```
Разъяснение:
В конструктор BigDecimal(4.4) передаётся примитив double, в котором вместо 4.4 лежит
4.4000000000000003552713678800500929355621337890625
Поэтому объект BigDecimal будет хранить это число, а не 4.4

Вопрос к читателям: как переписать код, что бы результат стал точным (8.8) ?
👍19🔥3👏2💩1
Новая рубрика - говнокод.

Какие проблемы вы видите в данном коде?
👍22💩7🔥5
Java Interview Tasks
Новая рубрика - говнокод. Какие проблемы вы видите в данном коде?
Проблемы:
1) код вообще не компилируется, так как метод void, но есть return
2) relatedId странное название, по факту это carId
3) внутри map, завернут еще один optional, это не нужно делать - тут лучше использовать flatMap, он уже возвращает optional
4) 'c' внутри map запутывает, это car, но такое название уже занято и, видимо, поэтому назвали 'c', лучше назвать как то более понятно, например, car, а параметр метода carToFill
5) 'c' внутри ifPresent запутывает еще больше, это owner и надо назвать именно так
6) если поправить пунтк 3, то и вложенный ifPresent внутри ifPresent'a будет не нужен
7) Возможно лучше вообще сделать так, что бы метод возвращал matadata, а потом уже другой метод проставлял в Car метадату
8) optional.of вернёт npe для null, правильно использовать optional.ofNullable

Если нашли что-то ещё - пишите в комменты
👍26🔥2👎1
Код может быть например такой
👍22🔥6👎3
Какой из классов immutable?
👍5🔥3
👍3🔥2
Какой из классов immutable?
Anonymous Quiz
4%
Class1
30%
Class2
16%
Оба
51%
Ни один
🔥15👍8👏2
Java Interview Tasks
Photo
Ответ к вопросу про immutability:

Immutable класс — это класс, который после инициализации не может изменить свое состояние. То есть если в коде есть ссылка на экземпляр иммутабельного класса, то любые изменения в нем приводят к созданию нового экземпляра.

Чтобы класс был immutable, он должен соответствовать следующим требованиям:
1) Все поля класса должны быть приватными в соответствии с принципами инкапсуляции.
2) Для корректного создания экземпляра в нем должны быть параметризованные конструкторы, через которые осуществляется первоначальная инициализация полей класса.
3) Для исключения возможности изменения состояния после инстанцирования, в классе не должно быть сеттеров.
4) Должен быть объявлен как final, чтобы от него нельзя было наследоваться. Иначе дочерние классы могут нарушить иммутабельность.
5) Для полей-коллекций и ссылочных полей необходимо делать копии, чтобы гарантировать их неизменность.
👍27🤯5🔥2
👍14
Java Interview Tasks
Class3 immutable?
Class3 не immutable, так как в конструкторе присваивается массив, ссылка на который осталась вне этого класса. Его можно изменять там, откуда он пришел и эти изменения будут менять поле array внутри Class3
Пример immutable класса, в котором эта проблема решена:
👍21🔥5
👍31🔥6👏2😱1💩1