Популярные вопросы по Java на собеседованиях

В этой статье мы рассмотрим самые распространенные вопросы, которые задают на собеседованиях Java-разработчикам, а также дадим ответы на них.
Оцените по десятибалльной шкале — насколько вы хороши в Java?
Это очень каверзный вопрос. Если вы не совсем уверены в своем уровне владения Java, не стоит оценивать себя на 10, лучше немного занизить оценку. Потому что, если вы оцените себя слишком высоко и не сможете ответить на сложный вопрос, это сыграет не в вашу пользу.
Объясните отличия между Java 7 и 8 ?
На самом деле отличий очень много. Достаточно перечислить наиболее значимые. Вы должны объяснить новые функции Java 8. Полный список можно посмотреть тут Java 8 JDK.
Минимум который вы должны знать:
  • Лямбда-выражения — это анонимные методы, который позволяют использовать код, как данные и передавать его в качестве аргумента в методы.
  • Ссылки на методы сокращают написание лямбда-выражений.
  • Методы по умолчанию позволяют добавлять реализации методов в интерфейсы. Это облегчает работу разработчиков библиотек, обеспечивая возможность добавления новых методов в интерфейсы не нарушаю работу их старых версий.
  • Повторяемые аннотации позволяют использовать множество аннотаций одного типа в одном и том же элементе.
Какие типы коллекций вы знаете?
Вы должны знать о наиболее важных:
  • ArrayList
  • LinkedList
  • HashMap
  • HashSet
После этого вас, вероятнее всего, спросят в каких случаях лучше использовать ту или иную коллекцию, как в них хранятся данные, преимущества и недостатки по сравнению с другими. Узнайте как можно больше об этих типах коллекций, потому что разнообразие вопросов по этой теме почти неисчерпаемо.
Какие методы имеет класс Object?
Это очень распространенный вопрос, который задают, чтобы определить, насколько вы знакомы с основами.
Класс Object, из пакета java. lang, находится на вершине иерархии классов. Каждый класс является прямым или косвенным потомком класса Object. Любой класс, который вы используете или пишете, наследует методы Object:
  • protected Object clone() throws CloneNotSupportedException
    создает и возвращает копию данного объекта
  • public boolean equals(Object obj) используется для сравнения объектов
    Реализация по умолчанию сравнивает ссылки на объекты
  • protected void finalize() throws Throwable
    вызывается сборщиком мусора, когда он определяет, что на объект больше не существует ни одной ссылки
  • public final Class getClass()
    возвращает объект типа Class для данного объекта
  • public int hashCode()
    возвращает значение хеш-кода объекта
  • public String toString()
    возвращает строковое представление объекта
Метода notify, notifyAll иwait класса Object необходимы для синхронизации работы потоков. Вот все эти методы:
  • public final void notify()
  • public final void notifyAll()
  • public final void wait()
  • public final void wait(long timeout)
  • public final void wait(long timeout, int nanos)
Почему объект String в Java является неизменяемым?
  1. Существование пула строк возможно только потому, что строки в Java являются неизменяемыми. Это позволяет среде Java сэкономить большие объемы памяти в куче, потому что разные строковые переменные могут ссылаться на один и тот же объект строки в пуле. Это было бы невозможным, будь строки изменяемыми. Потому что изменение значения какой-либо строки отразилось бы на остальных строках.

  2. Неизменяемость строк обеспечивает безопасность приложений. Например, имена пользователей и пароли передаются в виде строк. Изменяемость строк позволила бы злоумышленникам изменить передаваемое значение, что вызвало бы проблемы безопасности в приложении.

  3. Неизменяемость строк позволяет избегать использования синхронизации в многопоточных приложениях. Так как один и тот же экземпляр строки может использоваться одновременно несколькими потоками.

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

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

Какая разница между final, finally и finalize()?
  • final — ключевое слово, используемое в различных обстоятельствах, для обозначение сущности (объекта, метода, класса) которая может быть определена единожды.

  • Словом finally в Java обозначаются блоки кода, которые должны быть обязательно исполнены. Например закрытие подключения к базе или освобождение других ресурсов. Блоки finally используются при обработке исключений и исполняются независимо от того, было исключение выброшено или нет.

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

Что такое проблема ромба?
Проблема ромба показывает, почему в Java нет множественного наследования.
Есть два класса, имеющих общий суперкласс с определенным методом, и они оба переопределяют этот метод. Затем, если мы решим наследоваться от этих двух классов одновременно и вызовем тот самый метод, то Java не сможет определить какую из реализаций мы хотим получить.
Проблема ромба получила свое названия из-за структуры наследования, при которой эта проблема возникает.
Как вы можете сделать класс неизменяемым?
Чтобы достичь неизменяемости класса необходимо сделать несколько модификаций вашего класса:
  1. Объявите класс как final, чтобы от него нельзя было наследоваться;
  2. Сделайте все поля приватными чтобы запретить прямой доступ;
  3. Не создавайте сеттеры для полей;
  4. Сделайте все поля класса финальными, чтобы их можно было инициализировать только один раз;
  5. Инициализируйте все поля через конструктор, делающий глубокую копию;
  6. Реализуйте клонирование объектов в getter методах так, чтобы они возвращали копии объектов, а не ссылки на них.

Что значит синглтон?
Синглтон (Singleton) — это класс (а также название паттерна), который позволяет создать только один экземпляр и предоставляет доступ к этому экземпляру. Он используется в сценариях, когда пользователь хочет ограничить создание экземпляра класса только одним объектом. Это полезно, когда требуется один объект для координации действий в системе.
Вывод
В этой статье мы рассмотрели несколько популярных вопросов на собеседованиях по Java. Если вы будете знать на них ответы, то у вас будет большое преимущество во время поиска работы.
Оцените статью, если она вам понравилась!