Try   HackMD

Собеседование Java-стажера

Прохожу курс по Java в надежде получить знания и устроиться на работу. Здесь будут собраны вопросы с собеседований, представленные в данном курсе.

Вопросы про Object

Перечислите методы класса Object

  • toString()
  • equals()
  • hashCode()
  • notify()
  • notifyAll()
  • clone()
  • finalize()
  • getClass()
  • wait()
  • wait(long timeout)
  • wait(long timeout, int nanos)

Что будет, если переопределить equals, но не переопределить hashCode?

При сравнении элементов первоначально происходит проверка хэш-кода объектов.
Если не переопределить метод hashCode() объекты будут иметь различные хэш-коды и сравнение прекратится.


Зачем нужны методы wait, notify, notifyAll?

Метод wait() и его перегрузки используются для освобождения занятого монитора и перевода вызывающего потока в состояние ожидания до тех пор, пока другой поток не вызовет метод notify().

notify() возобновляет работу случайного потока, находящего в состоянии ожидания.

notifyAll() возобновляет работу всех остановленных потоков.


Как правильно клонировать объект?

Существует 2 вида клонирования: поверхностное и глубокое.

Поверхностное клонирование создает новую ссылку на имееющийся объект.

Глубокое же копирование создает новый объект и устанавливает значение атрибутов равными атрибутам клонируемого объекта.


Зачем нужен метод finalize() и как он работает?

Метод finalize() задает алгоритм действий, выполняемых объктом перед его уничтожением сборщиком мусора.

Предназначен этот метод для автоматического освобождения системных ресурсов, занимаемых объектом, на котором будет данный метод вызван, например, закрытые соединение с каким-то ресурсом, когда оно больше не требуется.

Полагаться на данный метод не стоит, так как нет никаких гарантий что он будет запущен.


В чем отличие final, finally, finalize?

final - ключевое слово, которое используется с:

  • классами (для запрета наследования от них)
  • переменными (для объявления их константами)
  • методами (для запрета переопределения)

finally - часть конструкции try..catch..finally, используемая для гарантированного выполнения блока кода (блок finally выполняется независимо от результата в try..catch)

finalize - данный метод описан выше


Что такое try-with-resources?

Конструкция для автоматического освобождения ресурсов.
Она дает возможность объявлять один или несколько ресурсов в блоке try, которые будут закрыты автоматически без использования finally блока.


Чем отличаются методы wait(1000) и sleep(1000)?

sleep() приостанавливает поток на указанное. состояние меняется на TIMED_WAITING, по истечению — RUNNABLE.

wait() меняет состояние потока на WAITING.
wait() с параметрами меняет состояние потока на TIMED_WAITING.

wait() может быть вызвано только у объекта владеющего блокировкой, в противном случае выкинется исключение IllegalMonitorStateException. При срабатывании метода блокировка отпускается, что позволяет продолжить работу другим потокам ожидающим захватить ту же самую блокировку.


В чем отличие i++ и ++i

Оба примера увеличивают значение переменной i на единицу. Однако при вычислениях проявляется различие:

  • ++i, i сначала увеличивается на 1, затем участвует в выражении.
  • i++, i сначала участвует в выражении, затем увеличивается на 1.

Вопросы про String

Как правильно сравнить две строки в Java?

Сравнивать строки необходимо с помощью метода equals(), т.к. строка в Java является объектом.