#Вопросы_с_собеседования
Чем отличается переопределение от перегрузки?
Переопределение — это возможность наследника предоставить свою реализацию метода, который уже предоставлен в родительском классе. При переопределении сигнатура метода (имя и параметры) в суперклассе и дочернем классе должны совпадать.
Перегрузка — это возможность определить несколько методов с одинаковым именем, но разными параметрами. При перегрузке сигнатура методов должна различаться по количеству, типу или порядку параметров.
Чем отличается переопределение от перегрузки?
Переопределение — это возможность наследника предоставить свою реализацию метода, который уже предоставлен в родительском классе. При переопределении сигнатура метода (имя и параметры) в суперклассе и дочернем классе должны совпадать.
Перегрузка — это возможность определить несколько методов с одинаковым именем, но разными параметрами. При перегрузке сигнатура методов должна различаться по количеству, типу или порядку параметров.
👍25❤1
DelayQueue
Элементы
#для_продвинутых
DelayQueue — это очередь, которая хранит элементы в порядке их задержки. Элементы в очереди извлекаются только после истечения их задержки.DelayQueue реализует интерфейс BlockingQueue, поэтому элементы могут извлекаться из нее только блокирующими методами take() или poll(long timeout, TimeUnit unit).Элементы
DelayQueue должны реализовывать интерфейс Delayed. Интерфейс Delayed определяет два метода:getDelay(): возвращает оставшуюся задержку элемента в миллисекундах.isExpired(): возвращает true, если задержка элемента истекла.#для_продвинутых
👍11
Что такое интерфейс Cloneable?
Это маркерный интерфейс, то есть он не содержит никаких методов, а только сигнализирует о том, что объекты класса, реализующего этот интерфейс, могут быть клонированы.
Клонирование объекта означает создание его независимой копии.
Как работает клонирование в Java?
1. Реализация интерфейса
2. Переопределение метода
3. Вызов метода
#для_продвинутых
Это маркерный интерфейс, то есть он не содержит никаких методов, а только сигнализирует о том, что объекты класса, реализующего этот интерфейс, могут быть клонированы.
Клонирование объекта означает создание его независимой копии.
Как работает клонирование в Java?
1. Реализация интерфейса
Cloneable: Класс, объекты которого вы хотите клонировать, должен реализовывать интерфейс Cloneable.2. Переопределение метода
clone(): Вам необходимо переопределить метод clone() из класса Object в вашем классе. Этот метод возвращает копию объекта.3. Вызов метода
clone(): Чтобы создать копию объекта, вызовите метод clone() у этого объекта.#для_продвинутых
👍15
Атомарные переменные в Java.util.concurrent
Пакет
Ниже перечислены все переменные, определенные в пакете:
В этом примере создается
Пакет
java.util.concurrent.atomic определяет классы, которые поддерживают атомарные операции над отдельными переменными. Все классы имеют методы get и set, которые работают как чтение и запись волатильных переменных. То есть set имеет отношение happens-before с любым последующим get на той же переменной. Ниже перечислены все переменные, определенные в пакете:
AtomicBoolean, AtomicInteger, AtomicLong, AtomicReference.В этом примере создается
AtomicInteger со значением 0. Затем значение инкрементируется с помощью метода incrementAndGet(). В конце значение получается с помощью метода get().👍11
Даны 3 потока Т1, Т2 и Т3? Как реализовать выполнение в последовательности Т1, Т2, Т3?
Такой последовательности выполнения можно достичь многими способами, например просто воспользоваться методом
Такой последовательности выполнения можно достичь многими способами, например просто воспользоваться методом
join(), чтобы запустить поток в момент, когда другой уже закончит своё выполнение. Для реализации заданной последовательности, нужно запустить последний поток первым, и затем вызывать метод join() в обратном порядке, то есть Т3 вызывает Т2.join, а Т2 вызывает Т1.join, таким образом Т1 закончит выполнение первым, а Т3 последним.👍22
ExecutorService
Лучший вариант использования
В этом примере создается
ExecutorService — это API JDK, который упрощает запуск задач в асинхронном режиме. В общем смысле, ExecutorService автоматически предоставляет пул потоков и API для назначения задач. Лучший вариант использования
ExecutorService — это обработка независимых задач, таких как транзакции или запросы по схеме "один поток для одной задачи".В этом примере создается
ExecutorService с помощью фабричного метода Executors.newSingleThreadExecutor(). Затем запускается задача с помощью метода submit(). В конце работы ExecutorService завершается с помощью метода shutdown().👍15
Класс Character
Класс
#для_начинающих
Класс
Character в Java является классом-обёрткой для примитивного типа данных char. Он предоставляет несколько полезных методов для работы с символами, таких как проверка на принадлежность к различным категориям (цифры, буквы, пробелы и т.д.) и преобразование регистров.#для_начинающих
👍13
Класс System
Класс
Класс
Класс
#для_начинающих
Класс
System представляет собой системный класс, который предоставляет набор методов и свойств, позволяющих взаимодействовать с операционной системой, окружением выполнения и осуществлять различные системные операции.Класс
System является частью пакета java.lang, который импортируется по умолчанию во все программы на Java.Класс
System является важным инструментом для взаимодействия с операционной системой и окружением выполнения. Он предоставляет широкий набор методов и свойств, которые могут быть использованы для различных целей.#для_начинающих
👍22
Класс Calendar
Класс
Момент времени можно представить в виде значения в миллисекундах, которое является смещением от эпохи, 1 января 1970 года 00:00:00.000 GMT (григорианский). Класс также предоставляет дополнительные поля и методы для реализации конкретной системы календаря за пределами пакета. Эти поля и методы определены как protected.
#для_продвинутых
Класс
Calendar представляет собой абстрактный класс, который предоставляет методы для преобразования между конкретным моментом времени и набором полей календаря, таких как год, месяц, день, часы, минуты, секунды и т. д., а также для манипулирования полями календаря, такими как получение даты следующей недели.Момент времени можно представить в виде значения в миллисекундах, которое является смещением от эпохи, 1 января 1970 года 00:00:00.000 GMT (григорианский). Класс также предоставляет дополнительные поля и методы для реализации конкретной системы календаря за пределами пакета. Эти поля и методы определены как protected.
#для_продвинутых
👍14❤1
Класс TimeZone
Класс
Класс
#для_продвинутых
Класс
TimeZone представляет собой часовой пояс. Часовой пояс — это географическая область, в которой используется один и тот же стандарт времени.Класс
TimeZone имеет несколько методов для работы с часовыми поясами. Например, метод getAvailableIDs() возвращает список всех известных часовых поясов. Метод getTimeZone(String id) возвращает объект TimeZone по его идентификатору.#для_продвинутых
👍13❤1
DecimalFormat
Чтобы использовать
Шаблон — это строка, которая определяет, как будет отображаться число.
#для_продвинутых
DecimalFormat — это класс, предназначенный для форматирования десятичных чисел. Он имеет множество параметров, которые позволяют настроить вывод числа в соответствии с вашими потребностями.Чтобы использовать
DecimalFormat, сначала вам нужно создать экземпляр класса. Вы можете сделать это, используя конструктор без параметров или конструктор с шаблоном.Шаблон — это строка, которая определяет, как будет отображаться число.
#для_продвинутых
👍7
ThreadDeath
Когда поток получает исключение
Важно отметить, что исключение
#для_продвинутых
ThreadDeath представляет собой исключение, которое указывает на то, что поток должен быть остановлен. Это исключение является подклассом Error, а не Exception, потому что оно является нормальным явлением и не должно обрабатываться в коде приложения.Когда поток получает исключение
ThreadDeath, он немедленно завершается. Если поток был заблокирован на мониторе, он сначала разблокирует монитор.Важно отметить, что исключение
ThreadDeath не может быть обработано с помощью блока try-catch. Если поток получает исключение ThreadDeath, оно просто игнорируется и поток завершается.#для_продвинутых
👍12❤1
Класс Throwable
Класс
Класс
Исключения делятся на две категории: ошибки и исключения. Ошибки являются необратимыми ситуациями, которые приводят к завершению работы программы. Исключения же являются обратимыми ситуациями, которые можно обработать и продолжить выполнение программы.
#для_продвинутых
Класс
Throwable является суперклассом для всех ошибок и исключений. Объекты класса Throwable используются для представления нештатных ситуаций, которые могут возникнуть во время выполнения программы.Класс
Throwable имеет следующие важные методы:getMessage() — возвращает строковое сообщение, описывающее исключение.printStackTrace() — выводит в стандартный поток ошибок подробную информацию об исключении, включая его тип, сообщение и стек вызовов.Исключения делятся на две категории: ошибки и исключения. Ошибки являются необратимыми ситуациями, которые приводят к завершению работы программы. Исключения же являются обратимыми ситуациями, которые можно обработать и продолжить выполнение программы.
#для_продвинутых
👍9
#вопросы_с_собеседований
В чем разница между Iterator и Enumeration?
— Iterator появился в JDK 1.2 и реализует интерфейс Iterable, в то время как Enumeration существовал в более ранних версиях JDK и не реализует Iterable.
— Методы Iterator позволяют удалять элементы во время итерации, в то время как методы Enumeration не предоставляют такой возможности.
— Iterator является "fail-fast", то есть выбросит ConcurrentModificationException, если коллекция была изменена, а Enumeration не гарантирует такого поведения.
— Iterator поддерживает обобщенные типы, а Enumeration работает только с объектами типа Object.
В чем разница между Iterator и Enumeration?
— Методы Iterator позволяют удалять элементы во время итерации, в то время как методы Enumeration не предоставляют такой возможности.
— Iterator является "fail-fast", то есть выбросит ConcurrentModificationException, если коллекция была изменена, а Enumeration не гарантирует такого поведения.
— Iterator поддерживает обобщенные типы, а Enumeration работает только с объектами типа Object.
👍17
#вопросы_с_собеседований
Почему современные фреймворки используют в основном только unchecked exceptions?
Unchecked exceptions используются в основном потому, что они не требуют обязательной обработки исключений в коде. Это позволяет упростить код и сделать его более читаемым. Однако, это также может привести к тому, что исключения не будут обработаны и программа может завершиться аварийно.
Некоторые же фреймворки используют checked exceptions для обработки ошибок ввода-вывода или других проблем, которые могут возникнуть в процессе выполнения программы. Однако, это может привести к тому, что код становится более сложным и менее читаемым.
Почему современные фреймворки используют в основном только unchecked exceptions?
Некоторые же фреймворки используют checked exceptions для обработки ошибок ввода-вывода или других проблем, которые могут возникнуть в процессе выполнения программы. Однако, это может привести к тому, что код становится более сложным и менее читаемым.
👍22
#вопросы_с_собеседований
Что будет, если в static блоке кода возникнет исключение?
Если в static блоке кода возникнет исключение, то это приведет к ошибке инициализации класса.
Static блок выполняется при загрузке класса, и любые исключения в нем приведут к сбою и невозможности загрузить класс.
Поэтому нужно либо обрабатывать исключения в static блоке, либо избегать кода, который может привести к исключениям.
Лучше выносить в static блок только простую инициализацию, а сложную логику помещать в конструктор или методы класса.
Что будет, если в static блоке кода возникнет исключение?
Static блок выполняется при загрузке класса, и любые исключения в нем приведут к сбою и невозможности загрузить класс.
Поэтому нужно либо обрабатывать исключения в static блоке, либо избегать кода, который может привести к исключениям.
Лучше выносить в static блок только простую инициализацию, а сложную логику помещать в конструктор или методы класса.
👍31
Класс Unsafe
Класс
#для_продвинутых
Класс
Unsafe — это мощный, но опасный инструмент, который позволяет выполнять низкоуровневые операции с памятью и внутренними механизмами JVM. Его использование не рекомендуется для обычных задач веб-разработки или стандартных приложений, но он может быть полезен в специфических ситуациях, требующих высокой производительности и обхода стандартных механизмов Java.#для_продвинутых
👍21
Класс MathContext
Класс
По умолчанию точность вычислений в Java равна 16 знакам после запятой, а режим округления —
#для_начинающих
Класс
MathContext используется для указания точности вычислений с плавающей запятой. Он определяет два параметра:precision — количество знаков после запятой, которые должны сохраняться в результате вычислений.roundingMode — способ округления значений, которые не могут быть точно представлены с заданной точностью.По умолчанию точность вычислений в Java равна 16 знакам после запятой, а режим округления —
HALF_UP.#для_начинающих
👍16❤1
EventListener
#для_продвинутых
EventListener (слушатель событий) — это интерфейс, который позволяет объектам реагировать на события, происходящие в системе. Он используется для создания интерактивных приложений, где действия пользователя или изменения в системе должны вызывать определенные реакции.#для_продвинутых
👍17
#вопросы_с_собеседований
Для чего используется оператор assert?
Оператор assert используется для проверки условий во время выполнения программы.
Он позволяет проверить истинность некоторого логического выражения и выбросить исключение AssertionError, если выражение ложно.
Основные применения assert:
- Проверка предусловий и постусловий в методах.
- Проверка инвариантов в критических секциях кода.
- Отладка при разработке, чтобы проверить ожидаемое состояние программы в определенных точках.
- Проверка условий в потенциально опасных ситуациях, например при работе с массивами.
assert лучше использовать для отладки и проверки инвариантов, а для критически важных проверок предусловий лучше применять явную проверку условий и выброс исключений.
Для чего используется оператор assert?
Он позволяет проверить истинность некоторого логического выражения и выбросить исключение AssertionError, если выражение ложно.
Основные применения assert:
- Проверка предусловий и постусловий в методах.
- Проверка инвариантов в критических секциях кода.
- Отладка при разработке, чтобы проверить ожидаемое состояние программы в определенных точках.
- Проверка условий в потенциально опасных ситуациях, например при работе с массивами.
assert лучше использовать для отладки и проверки инвариантов, а для критически важных проверок предусловий лучше применять явную проверку условий и выброс исключений.
👍9❤4