ru
Feedback
Java Interview Tasks

Java Interview Tasks

Открыть в Telegram

Реальные вопросы и задачи с собеседований. Оригинальный авторский контент. Актуальный материал. Уровень вопросов от junior до supersenior. Автор канала - @alexzelentsov По рекламе: @alexzelentsov и https://telega.in/c/java_interview_tasks

Больше
4 522
Подписчики
Нет данных24 часа
-107 дней
-2730 день
Архив постов
Вопрос для любителей точных вычеслений: Что напечатает код? ``` BigDecimal result = new BigDecimal(4.4).add(new BigDecimal(4.4)); System.out.println(result); ```
Anonymous voting

Ответ к последнему вопросу: Объявление массива как 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) был запрещён?

Какие значения могут напечаться?
Anonymous voting

Какие значения могут напечататься? (thread1 и thread2 запускаются одновременно в разных потоках)
Какие значения могут напечататься? (thread1 и thread2 запускаются одновременно в разных потоках)

Ответ к вопросу про 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)

Что напечатает код?
Anonymous voting

Что напечатает код?
Что напечатает код?

Jugru выложили недавно несколько видосов, один из которых по тематике канала: https://youtu.be/4ESHltu1YBI

Ответ на вопрос VolatileVsFinal: Тут речь идет об одном из самых интересных разрешенных сценариев JMM. Это тот факт, что volatile поле не имеет final семантики. Это означает, что если мы публикуем ссылку объекта под гонкой то мы можем увидеть дефолтное значение для volatile поля Поэтому в данном случае 0 вполне можно получить. Этот эффект можно увидеть на некоторых платформах, например AArch64: RESULT SAMPLES FREQ EXPECT -1 1,428,517,070 91.74% Acceptable 0 7,105 <0.01% Interesting 42 128,534,641 8.25% Acceptable

Какие значения может напечатать код (thread1 и thread2 запускаются одновременно в разных потоках)?
Anonymous voting

Какие значения может напечатать код (thread1 и thread2 запускаются одновременно в разных потоках)?
Какие значения может напечатать код (thread1 и thread2 запускаются одновременно в разных потоках)?

Ответ к вопросу IntVsInteger: initInteger1 создает примитив, поэтому это самый быстрый вариант. initInteger2 создает объект-обертку для примитива, бенчмарк показывает, что такой вариант в разы медленнее, это происходит, потому что initInteger2 создает каждый раз новый объект в хипе + оверхед на создание объекта + GC оверхед initInteger4 чуть хуже чем создание примитива, так как мы все таки создаем объект изначально, но потом используем кеш initInteger2 от initInteger3 сильно не отличаются, так как делают примерно одно и тоже Так же считаю вопросы про конкретные значения между вариантами не корректными. Так как на разных версиях java, разных ОС и разном hardware результаты могут сильно отличаться. Можно говорить только про результаты на конкретной машине. Имеет смысл говорить про то, например, что один вариант сильно медленнее или быстрее, понимая из-за чего это происходит. Поэтому таких вопросов, как последние 3, больше не будет. Вот такие результаты я получил на своем ноутбуке: java 8
Benchmark                  Mode  Cnt  Score   Error  Units
IntVsInteger.doNothing     avgt   20  0.268 ± 0.006  ns/op
IntVsInteger.initInteger1  avgt   20  2.236 ± 0.018  ns/op
IntVsInteger.initInteger2  avgt   20  3.981 ± 0.104  ns/op
IntVsInteger.initInteger3  avgt   20  4.073 ± 0.145  ns/op
IntVsInteger.initInteger4  avgt   20  2.786 ± 0.043  ns/op


java 17
Benchmark                  Mode  Cnt  Score   Error  Units
IntVsInteger.doNothing     avgt   20  0,451 ± 0,017  ns/op
IntVsInteger.initInteger1  avgt   20  2,103 ± 0,068  ns/op
IntVsInteger.initInteger2  avgt   20  4,056 ± 0,168  ns/op
IntVsInteger.initInteger3  avgt   20  4,332 ± 0,195  ns/op
IntVsInteger.initInteger4  avgt   20  2,394 ± 0,058  ns/op

Свежий видос про собеседования: https://youtu.be/9Y32VbdsAkA

Добро пожаловать в мир продвинутого изучения Java @javatg В канале вы найдете : 📃Статьи 📚Книги 👨‍💻 Код 🔗Ссылки 🗯 Чат ра
Добро пожаловать в мир продвинутого изучения Java @javatg В канале вы найдете : 📃Статьи 📚Книги 👨‍💻 Код 🔗Ссылки 🗯 Чат разработчиков и много другой полезной информации #Java #Coding #Books #Pro 1 канал вместо тысячи учебников и курсов, подписывайтесь: 👇👇👇

На сколько initInteger3 быстрее будет чем initInteger2?
Anonymous voting

На сколько initInteger1 быстрее будет чем initInteger4?
Anonymous voting

На сколько initInteger1 быстрее будет чем initInteger3?
Anonymous voting

Какой из методов будет работать МЕДЛЕННЕЕ?
Anonymous voting

Какой из методов будет работать быстрее?
Anonymous voting

photo content