Quizz for interview Flashcards
Перечислите методы класса Object
equals() hashCode() toString() getClass() notify() notifyAll() wait() wait(long timeOut) wait(long timeOut, int nanos)
Зачем нужны методы equals & hashCode?
Метод equals() для определения способа сравнения двух объектов.
Метод hashCode() для ускорения процесса сравнения: если хеши объектов не равны, значит полное сравнение делать не нужно.
Что будет, если переопределить equals, но не переопределить hashCode?
Будет нарушен контракт между equals() и hashCode() :
1) Если два объекта равны, тогда они должны иметь одинаковые хеш-коды.
2) Если два объекта имеют одинаковые хеш-коды, то они могут быть не равны между собой.
В случае, если hashCode() не переопределен, то HashMap HashSet будут работать не верно - вставлять одинаковые ключи или не находить существующие.
Зачем нужны методы wait, notify, notifyAll?
Все методы используются в механизме многопоточности Java.
wait() - вызывается нитью в синхронизированном блоке у объекта-монитора. В результате вызова нить,которая его осуществила становиться в режим ожидания и отпускает мютекс объекта-монитора
notify() - вызывается у монитора и снимает с wait’а одну случайную нить
notifyAll() - снимает с паузы все заснувшие нити
Как правильно клонировать объект?
- Переопределение метода clone() и реализация интерфейса Cloneable();
- Использование конструктора копирования;
- Использовать для клонирования механизм сериализации
Зачем нужен метод finalize() и как он работает?
Перед удалением объекта сборщик мусора может вызвать метод finalize() (а может и не вызвать).
Метод предназначен для освобождение не Java ресурсов перед удалением объекта из памяти.
Время и факт вызова этого метода непредсказуемы и зависят от алгоритмов работы сборщика мусора.
В чем отличие final, finally, finalize?
final - модификатор доступа
finally - блок конструкции try/catch/finally
finalize - метод класса Object, который вызывает сборщик мусора.
Что такое try-with-resources?
Специальная конструкция блока try, которая гарантирует вызов метода close() у объектов созданным try(// ТУТ///).
Эти объекты должны реализовывать интерфейс AutoClosable.
Обычно используется при работе с потоками ввода вывода, которые обязательно должны быть закрыты после использования.
Чем отличаются методы wait(1000) и sleep(1000)?
wait(1000) - должен быть вызван на объекте-мьютексе в блоке syncronized и может быть выключен методами notify().
Используется для multi-thread-synchronization
sleep(1000) - вызывается на текущем потоке и может быть остановлен прерыванием выполнения потока
используется для time-syncronization
В чем отличие i++ и ++i ?
i++ - i сначала участвует в выражении и только потом инкрементируется
++i - i сначала инкрементируется, затем используется в выражении.
Как правильно сравнить две строки в Java?
str1.equals(str2)
потому, что строка - это всегда новый объект класса String и “==” ,будет возвращать false.
В сравнении могут быть как литералы строк, так и новые объекты класса String.
equals() - всегда сравнивает правильно.
Как правильно сравнить две строки в Java игнорируя регистр букв?
str1.equalsIgnoreCase(str2)
Как отсортировать список строк в алфавитном порядке?
Collections.sort(list)
В какой кодировке хранятся строки в Java?
Строки в java хранятся в Unicode
Как преобразовать строку в кодировку Windows-1251?
byte[] byte1251 = "Hello world".getBytes("windows-1251"); String outString = new String(byte1251,"windows-1251");
Как разбить строку на отдельные слова?
s. split(“\s+”) - разделитель пробел(ы)
s. split(“\W+”) - разделитель любой не буквенный сивмол
Как развернуть строку задом наперед?
StringBuilder sb = new StringBuilder("Строка для разворота"); String reversed = sb.reverse();
Что происходит, когда мы пишем “A”+”b”+”C”?
Конкатенация.
получится строка “AbC”
Что такое mutable и immutable типы?
mutable - типы, чьи объекты могут изменять свое состояние в течение жизни.
immutable - типы, чьи объекты не могут изменять своего состояния в течение жизни
Что дает типу String то, что его сделали immutable?
- Безопасность.
String широко используется, как параметр для многих классов Java, в частности для открытия сетевых соединений, подключений к БД, открытию файлов и пр. И если бы строка изменялась, то мы могли получить доступ к объекту (файлу например), на который мы имеем право, затем изменить строку с именем (случайно или намеренно) и получить доступ уже к другому файлу.
Так же String используется в механизме загрузки файлов, и это – фундаментальный аспект. И если бы строка изменялась, то запрос на загрузку “java.io.Writer” мог бы быть изменён на “DiskErasingWriter”.
- Hashcode
Из-за того, что строка не изменяется, она кэширует свой хэшкод и не вычисляет его каждый раз, когда мы его вызываем, что делает строку очень быстрой как ключ для hashmap. - Многопоточность
immutable делает экземпляры строк потокобезопасными.
Какие бывают внутренние классы?
- Внутренние
- локальные
- анонимные
- Статические вложенные
Во что компилируется анонимный внутренний класс?
Во внутренний не статический класс
Зачем использовать ключевое слово final при создании анонимных классов?
Если определяется анонимный внутренний класс и ему нужно при этом использовать объекты, определенные вне этого внутреннего класса, компилятор требует, чтобы переданные на них ссылки объявлялись неизменными (final). Без такого объявления вы получите сообщение об ошибке при компиляции программы.
Как правильно создать объект внутреннего класса?
Внутренние (не статические) классы, как переменные и методы связаны с объектом внешнего класса.
Внутренние классы так же имеют прямой доступ к полям внешнего класса. Такие классы не могут содержать в себе статические методы и поля. Внутренние классы не могут существовать без экземпляра внешнего.
Для создания объекта: Outer outer = new Outer(); Innter inner = outer.new Inner();