☕ Методы класса Vector синхронизированы, а ArrayList — нет; ☕ По умолчанию Vector удваивает свой размер, когда заканчивается выделенная под элементы память. ArrayList же увеличивает свой размер только на половину.
Vector это устаревший класс и его использование не рекомендовано.
Потоками-демонами называются потоки, работающие в фоновом режиме для нашей программы.
В Java процесс завершается тогда, когда завершается последний его поток. Даже если метод main() уже завершился, но еще выполняются порожденные им потоки, система будет ждать их завершения. Однако это правило не относится к особому виду потоков — демонам. Если завершился последний обычный поток процесса, и остались только потоки-демоны, то они будут принудительно завершены и выполнение процесса закончится. Чаще всего потоки-демоны используются для выполнения фоновых задач, обслуживающих процесс в течение его жизни.
Какая разница между абстрактным классом и интерфейсом?
Абстрактный класс: ☕ абстрактные классы имеют дефолтный конструктор; он вызывается каждый раз, когда создается потомок этого абстрактного класса; ☕ содержит как абстрактные методы, так и не абстрактные. По большому счету может и не содержать абстрактных методов, но все равно быть абстрактным классом; ☕ класс, который наследуется от абстрактного, должен реализовать только абстрактные методы; ☕ абстрактный класс может содержать Instance Variable.
Интерфейс: ☕ не имеет никакого конструктора и не может быть инициализирован; ☕ только абстрактные методы должны быть добавлены (не считая default methods); ☕ классы, реализующие интерфейс, должны реализовать все методы (не считая default methods); ☕ интерфейсы могут содержать только константы.
Можно ли переопределить статический или частный метод в Java?
Частный метод недоступен вне класса, поэтому он не будет переопределен подклассом. Следовательно, его нельзя переопределить. Точно так же статический метод не может быть переопределен, потому что если мы создадим статические методы с одним и тем же именем метода и сигнатурой как в базовом, так и в производном классе, производный класс скроет методы в базовом классе. Это известно как сокрытие метода.
🧠 Это неизменяемый (immutable) и финализированный тип данных; 🧠 Все объекты класса String JVM хранит в пуле строк; 🧠 Объект класса String можно получить, используя двойные кавычки; 🧠 Можно использовать оператор + для конкатенации строк; 🧠 Начиная с Java 7 строки можно использовать в конструкции switch.
Map.of() — это метод, представленный в Java 9, который позволяет разработчикам создавать неизменяемый Map, содержащий до десяти пар ключ-значение. Он обеспечивает удобный и лаконичный способ создания Map без необходимости написания большого количества кода.
Map.of() является улучшением по сравнению с предыдущим способом создания небольших Map с использованием конструктора класса HashMap, который может быть довольно громоздким и многословным.
Что такое пул строк? Это набор строк, хранящийся в Heap.
☕ Пул строк возможен благодаря неизменяемости строк в Java и реализации идеи интернирования строк; ☕ Пул строк помогает экономить память, но по этой же причине создание строки занимает больше времени; ☕ Когда для создания строки используются ", то сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка на неё; ☕ При использовании оператора new создаётся новый объект String. Затем при помощи метода intern() эту строку можно поместить в пул или же получить из пула ссылку на другой объект String с таким же значением; ☕ Пул строк является примером паттерна «Приспособленец» (Flyweight).
Он не скомпилируется. Это вопрос на знание иерархии исключений: FileNotFoundException унаследован от IOException, первый catch будет перехватывать все исключения, а в следующий блок catch управление передано не будет. Поэтому возникнет ошибка: exception FileNotFoundException has already been caught.
Какое худшее время работы метода get(key) для ключа, который есть в HashMap?
O(N). Худший случай — это поиск ключа в HashMap, вырожденного в список по причине совпадения ключей по hashCode() и для выяснения хранится ли элемент с определённым ключом может потребоваться перебор всего списка.
Сессия — это сеанс связи между клиентом и сервером, устанавливаемый на определенное время. Сеанс устанавливается непосредственно между клиентом и веб-сервером в момент получения первого запроса к веб-приложению. Каждый клиент устанавливает с сервером свой собственный сеанс, который сохраняется до окончания работы с приложением.
Популярный вопрос на собеседовании Java-разработчика. Local variable — это переменная, которая определена внутри метода и существует вплоть до того момента, пока выполняется этот метод. Как только выполнение закончится, локальная переменная перестанет существовать.
Вот программа, которая использует локальную переменную helloMessage в методе main().
☕ Методы класса Hashtable синхронизированы, что приводит к снижению производительности, а HashMap — нет; ☕ HashTable не может содержать элементы null, тогда как HashMap может содержать один ключ null и любое количество значений null; ☕ Iterator у HashMap, в отличие от Enumeration у HashTable, работает по принципу «fail-fast» (выдает исключение при любой несогласованности данных).
Hashtable это устаревший класс и его использование не рекомендовано.
Верно ли утверждение, что примитивные типы данных всегда хранятся в стеке, а экземпляры ссылочных типов данных в куче?
Ответ: Не совсем. Примитивное поле экземпляра класса хранится не в стеке, а в куче. Любой объект (всё, что явно или неявно создаётся при помощи оператора new) хранится в куче.
Метод clone() по умолчанию объявлен как protected, чтобы ограничить возможность клонирования объектов. Если бы метод был public, то любой код мог бы клонировать объекты класса. А это не всегда желательно по соображениям безопасности и корректности программы.
С protected доступом клонирование разрешено только внутри класса и его наследников. Таким образом разработчик класса может сам решить, будет ли класс поддерживать клонирование и как именно оно будет реализовано в методе clone().
Делая клонирование protected по умолчанию, Java принуждает разработчика сознательно разрешить клонирование класса путем переопределения метода clone() как public в самом классе. Это позволяет более гибко контролировать возможности клонирования в каждом конкретном классе.