Что произойдет, если поместить оператор return или System.exit () в блок try/catch?
Это очень популярный вопрос "на засыпку" по Java. Хитрость его в том, что многие программисты считают, что блок
Ответ на этот каверзный вопрос: блок будет выполняться при помещении оператора return в блок , и не будет выполняться при вызове из блока оператора .
👉
Это очень популярный вопрос "на засыпку" по Java. Хитрость его в том, что многие программисты считают, что блок
finally
выполнится в любом случае. Данный вопрос ставит эту концепцию под сомнение, путем помещения оператора return
в блок try/catch
или вызова из блока try/catch
оператора System.exit ()
.finally
try/catch
try/catch
System.exit ()
👉
Поддерживает ли язык Java множественное наследование?
Это очень хитрый вопрос. Интервьюеры часто говорят: если язык C++ может поддерживать непосредственное множественное наследование, то почему Java не может?
Ответ несколько более сложен, чем может показаться, поскольку Java поддерживает множественное наследование типов, ведь интерфейс в нём может расширять другие интерфейсы. Но множественное наследование реализаций язык Java не поддерживает.
👉
Это очень хитрый вопрос. Интервьюеры часто говорят: если язык C++ может поддерживать непосредственное множественное наследование, то почему Java не может?
👉
В случае, когда метод генерирует исключение
Еще один каверзный вопрос, связанный с концепциями перегрузки и переопределения.
Ответ:в переопределенном методе можно спокойно генерировать родительский класс исключения – , но нельзя сделать то же самое с проверяемым исключением типа .
👉
NullPointerException
в родительском классе, можно ли его переопределить методом, генерирующим RuntimeException
?Еще один каверзный вопрос, связанный с концепциями перегрузки и переопределения.
Ответ:
NullPointerException
RuntimeException
Exception
👉
Test Driven Development (TDD) in Java
Creating a Queue Abstract Data Type class
Introduction to Test Doubles Dummies and Stubs
Introduction to Test Doubles Spies
Introduction to Test Doubles Mocks
Introduction to Test Doubles - Fakes
источник
👉
Creating a Queue Abstract Data Type class
Introduction to Test Doubles Dummies and Stubs
Introduction to Test Doubles Spies
Introduction to Test Doubles Mocks
Introduction to Test Doubles - Fakes
источник
👉
Как гарантировать возможность обращения
Если вы не слишком хорошо разбираетесь в написании многопоточного кода, этот вопрос будет для вас по-настоящему каверзным. Он может оказаться непростым даже для опытного программиста, не имевшего дела с взаимными блокировками и состояниями гонки.
Весь трюк тут в упорядочении: предотвратить взаимную блокировку можно благодаря освобождению ресурсов в порядке, обратном порядку их получения.
👉
N
нитей к N
ресурсам без взаимной блокировки?Если вы не слишком хорошо разбираетесь в написании многопоточного кода, этот вопрос будет для вас по-настоящему каверзным. Он может оказаться непростым даже для опытного программиста, не имевшего дела с взаимными блокировками и состояниями гонки.
Весь трюк тут в упорядочении: предотвратить взаимную блокировку можно благодаря освобождению ресурсов в порядке, обратном порядку их получения.
👉
This media is not supported in your browser
VIEW IN TELEGRAM
Java spring exception handling | обработка исключений за 5 минут
В этом видео речь пойдет об обработке исключений на уровне контроллера на языке Java. Покажу, какие инструменты есть у Spring.
00:23 - try catch, ResponseEntity
00:47 - наследование ResponseStatusException
01:10 - настройки отображения сообщения, названия ошибки и стек трейс в ответе
01:47 - бросаем ResponseStatusException
02:04 - аннотация @ ExceptionHandler
03:05 - аннотация @ RestControllerAdvice
03:40 - кастомный объект вместо ResponseEntity
04:02 - аннотация @ ResponseStatus
Код можно посмотреть тут: https://github.com/dispikerton/exceptionHandling
источник
👉
В этом видео речь пойдет об обработке исключений на уровне контроллера на языке Java. Покажу, какие инструменты есть у Spring.
00:23 - try catch, ResponseEntity
00:47 - наследование ResponseStatusException
01:10 - настройки отображения сообщения, названия ошибки и стек трейс в ответе
01:47 - бросаем ResponseStatusException
02:04 - аннотация @ ExceptionHandler
03:05 - аннотация @ RestControllerAdvice
03:40 - кастомный объект вместо ResponseEntity
04:02 - аннотация @ ResponseStatus
Код можно посмотреть тут: https://github.com/dispikerton/exceptionHandling
источник
👉
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Уроки Java для начинающих
#1 — Установка JDK и IDE
#2 — Переменные. Примитивные типы данных
#3 — Строки (String). Ссылочные типы данных
#4 — Условные конструкции (if-else, switch-case)
#5 — Цикл for
#6— Циклы While и Do While
#7 — Консольный ввод данных
#8 — Массивы
#9 — Многомерные массивы
#10 — Классы и объекты
источник
👉
#1 — Установка JDK и IDE
#2 — Переменные. Примитивные типы данных
#3 — Строки (String). Ссылочные типы данных
#4 — Условные конструкции (if-else, switch-case)
#5 — Цикл for
#6— Циклы While и Do While
#7 — Консольный ввод данных
#8 — Массивы
#9 — Многомерные массивы
#10 — Классы и объекты
источник
👉
Многопоточность в Java
В Java многопоточность реализована через класс
🔵1. Создание и запуск потока
- Поток может быть создан двумя способами:
- Наследование от класса Thread:
- Реализация интерфейса
🔵2. Основные методы класса
-
-
-
-
-
🔵3. Синхронизация
- Чтобы избежать проблем с конкурентным доступом к данным, используется синхронизация:
Это гарантирует, что только один поток может выполнить код внутри синхронизированного блока.
🔵4. Пул потоков
- Для управления большим количеством потоков используется пул потоков, который управляется через
🔵5. Состояния потока
Потоки могут находиться в разных состояниях:
- NEW: Поток создан, но не запущен.
- RUNNABLE: Поток готов к выполнению.
- WAITING: Поток ожидает другого потока.
- TIMED_WAITING: Поток ожидает в течение определенного времени.
- TERMINATED: Поток завершен.
🔵6. Проблемы многопоточности
- Состояние гонки (Race condition) — ситуация, когда несколько потоков одновременно пытаются изменить данные, что может привести к некорректным результатам.
- Блокировки — проблемы с мертвыми блокировками (deadlocks), когда потоки навсегда блокируются, ожидая друг друга.
🔵7. Современные подходы и классы
-
-
🔵8. Параллельное выполнение коллекций
- Коллекции в Java также могут работать с потоками через
Многопоточность — мощный инструмент для улучшения производительности приложений, но требует внимательности при реализации, чтобы избежать ошибок, таких как мертвые блокировки или некорректный доступ к данным.
👉
В Java многопоточность реализована через класс
Thread
и интерфейс Runnable
. Вот основные моменты, которые могут быть полезны при работе с многопоточностью:🔵1. Создание и запуск потока
- Поток может быть создан двумя способами:
- Наследование от класса Thread:
class MyThread extends Thread {
public void run() {
// Код, выполняемый в потоке
}
}
MyThread t = new MyThread();
t.start();
- Реализация интерфейса
Runnable
:
class MyRunnable implements Runnable {
public void run() {
// Код, выполняемый в потоке
}
}
Thread t = new Thread(new MyRunnable());
t.start();
🔵2. Основные методы класса
Thread
-
start()
— запуск потока.-
sleep(long millis)
— приостановка потока на определенное время.-
join()
— ожидание завершения потока.-
interrupt()
— прерывание потока.-
isAlive()
— проверка, работает ли поток.🔵3. Синхронизация
- Чтобы избежать проблем с конкурентным доступом к данным, используется синхронизация:
synchronized (this) {
// Критическая секция
}
Это гарантирует, что только один поток может выполнить код внутри синхронизированного блока.
🔵4. Пул потоков
- Для управления большим количеством потоков используется пул потоков, который управляется через
ExecutorService
. Пример:
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(() -> {
// Задача для потока
});
executor.shutdown();
🔵5. Состояния потока
Потоки могут находиться в разных состояниях:
- NEW: Поток создан, но не запущен.
- RUNNABLE: Поток готов к выполнению.
- WAITING: Поток ожидает другого потока.
- TIMED_WAITING: Поток ожидает в течение определенного времени.
- TERMINATED: Поток завершен.
🔵6. Проблемы многопоточности
- Состояние гонки (Race condition) — ситуация, когда несколько потоков одновременно пытаются изменить данные, что может привести к некорректным результатам.
- Блокировки — проблемы с мертвыми блокировками (deadlocks), когда потоки навсегда блокируются, ожидая друг друга.
🔵7. Современные подходы и классы
-
ForkJoinPool
— используется для параллельного выполнения задач с разделением на подзадачи.-
CountDownLatch
, CyclicBarrier
, Semaphore
— различные утилиты для синхронизации между потоками.🔵8. Параллельное выполнение коллекций
- Коллекции в Java также могут работать с потоками через
parallelStream()
:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.parallelStream().forEach(System.out::println);
Многопоточность — мощный инструмент для улучшения производительности приложений, но требует внимательности при реализации, чтобы избежать ошибок, таких как мертвые блокировки или некорректный доступ к данным.
👉