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
Задача:
Реализуйте функцию для проверки сбалансированности двоичного дерева поиска. Сбалансированное дерево - это дерево, в котором высота поддеревьев различается не более чем на единицу.
👍11🔥31
Чему равны d1,d2 ?
👍7🤡5🤮4🔥2🤔1
Что не так в этом многопоточном коде?
😁12🔥4🥱1
Основная проблема в том , что код по факту не является многопоточным, вызывается метод Feature.get(), который блокируется до тех пор, пока не отработает код внутри callable и не вернется результат, поэтому в цикле блокируется по очереди каждый вызов и следующий запускается после того, как предыдущий уже завершен. Пример того, как можно сделать код многопоточным 👆
🔥11🥱6👍1👨‍💻1
👍5🔥4
В каком месте код упадет из-за NPE?
Anonymous Quiz
42%
.mapToDouble(v -> v)
30%
double x = v * v;
4%
System.out.println(x);
24%
не упадет
🔥15🤯5👍2
Есть ли проблемы в этом коде?
🔥11🤔4👍1
Ответ к коду про тред пул и строки из файла
(https://t.me/java_interview_tasks/316):
В тред пуле неограниченная по размеру очередь и все таски будут складываться в эту очередь,
Так как потока всего два и разгребать они очередь будут не успевать , если строк в файле довольно много будет, то случиться OutOfMemoryError.
👍5🔥32
Java Interview Tasks
В каком месте код упадет из-за NPE?
Здесь не будет никакой ошибки, так как стрим вообще не будет запущен из-за отсутствия терминальной операции.
Вопрос для читателей, упадет ли код с ошибкой (если да, то с какой?) если в этот стрим добавить .count() ?
🔥6👍2
Проверим мощь Virtual Threads: какой метод отработает быстрее?

# JMH version: 1.33
# VM version: JDK 21.0.1, OpenJDK 64-Bit Server VM, 21.0.1+12-29
# 16 cores
👍5🔥3😨1
Какой тред пул быстрее отработает?
Anonymous Quiz
17%
Fixed thread pool
34%
Cached thread pool
42%
Virtual thread pool
8%
Другой вариант
🤣11👍5🔥3🤯2🤡2👎1
Результаты на моем ноуте:
# JMH version: 1.33
# VM version: JDK 21.0.1, OpenJDK 64-Bit Server VM, 21.0.1+12-29
# 16 cores

Benchmark Mode Cnt Score Error Units
Test.testCachedExecutorTask200ms avgt 2 214770,671 us/op
Test.testFixedExecutorTask200ms avgt 2 4260257,133 us/op
Test.testVirtualExecutorTask200ms avgt 2 212590,221 us/op

Интерпретация:
Разницы между Cached и Virtual нет. Это было ожидаемо. На такой нагрузке работа с потоками занимает относительно малое время по сравнению с бизнес логикой (200 ms в тестах).
Разница между Fixed может быть объяснена тем что плохо подобрано количество потоков в пуле.
4🔥32👍1
👍5🔥3
👍9
какие тут проблемы могут быть? (метод get могут вызывать разные потоки одновременно)
🔥8👍2
проблемы в https://t.me/java_interview_tasks/328:

1) метод load() будет вызываться несколько раз , если новые потоки будут приходить до того как doLoad загрузит данные => одни и те же данные будут грузится паралельно, что может вызвать проблемы, например оом, плюс к этому на каждый вызову будет создаваться новый тред
2) возможно подразумевается что эксепшен из метода load перехватится в методе get, но этого не будет, так как он был выброшен в другом треде

Вопрос к экспертам по jmm: надо ли поле lastUpdate делать volatile ?
🔥52👍1
Java Interview Tasks
какие тут проблемы могут быть? (метод get могут вызывать разные потоки одновременно)
Что бы понять нужен ли volatile над полем, проведем несколько тестов:
Будем использовать jcstress - https://openjdk.org/projects/code-tools/jcstress/
(https://youtu.be/uZfK-9ixxec?si=oE1Lqvp8_wxoLOuY)
Код двух экспериментов ниже:
🔥32👍1
👍3🔥3
👍3🔥3