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

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

По рекламе: @alexzelentsov и https://telega.in/c/java_interview_tasks
Download Telegram
🔍 Ответ на задачу про рекурсию, try-catch и counter:

Что там происходит?
Каждый раз в try печатается "do" и выбрасывается исключение. Затем в catch, если counter <= 3 (а это true до значения 3 включительно), снова вызывается doWithCounter, увеличивая counter при этом!

⚠️ Но! Используется counter++, а не ++counter. Это значит, что в рекурсивный вызов идёт старое значение (а counter увеличится уже после передачи в функцию).
То есть вы всегда передаёте "0" в рекурсию, и создаётся бесконечная рекурсия.

❗️Первый вызов поймает исключение, зайдёт в catch и вызовет doWithCounter(0). Этот вызов опять напечатает "do" и опять вызовет doWithCounter(0), и так далее, пока не случится StackOverflowError. "do" будет выводиться до переполнения стека.

📢 Правильный ответ: "do" напечатается более 4-х раз.

👉 Было интересно? Ставь лайк, подписывайся и пиши вопросы в комментарии!

#java #recursion #exception #interview #стек #java_interview_tasks
👍8🔥73
🔍 Ответ на задачу про CompletableFuture: join() vs get() 🥊
Объяснение:
Оба метода ждут завершения задачи, но делают это по-разному.
get() объявлен в интерфейсе Future и выбрасывает InterruptedException и ExecutionException (оба checked). Это заставляет вас писать try-catch.
join() — это метод CompletableFuture, он выбрасывает CompletionException (runtime), что гораздо удобнее при использовании в Stream API и лямбдах.

Вывод:
Логика ожидания у них одинаковая, разница только в обработке ошибок.

#java #completablefuture #concurrency #exception #java8 #backend #интервью #java_interview_tasks
🔥6