Вопросы и ответы на собеседование по основам Java помогут вам подготовиться к собеседованиям на основе Java. Независимо от того, являетесь ли вы новичком или высококвалифицированным профессионалом, основы Java играют ключевую роль в любом собеседовании по Java/JEE.
Основы Java – это любимая тема в большинстве интервью и играют решающую роль в определении результата вашего собеседования.
Этот пост напрямую основан на моем 14-летнем опыте программирования на Java и множестве собеседований. Недавно был выпущен Java 16, и я обновил пост, чтобы включить в него некоторые вопросы из последних релизов.
Вопросы и ответы на собеседование по основам Java
I have already written a lot about java interview questions for specific topics such as String, Collections, and Multithreading.
- Вопросы на собеседование по строкам Java
- Вопросы на собеседование по потокам Java
- Вопросы на собеседование по коллекциям Java
- Вопросы на собеседование по исключениям Java
Здесь я предоставляю некоторые важные вопросы с ответами на собеседования по ядру Java, которые вы должны знать. Вы можете добавить этот пост в закладки, чтобы освежить свои знания перед собеседованием.
1. Назовите некоторые важные особенности релиза Java 14?
Java 14 была выпущена 17 марта 2020 года. Это не является LTS-версией. Некоторые из специфических для разработчика особенностей Java 14:Особенности Java 14:
- Выражения Switch – JEP 361
- Улучшения сопоставления шаблонов оператора instanceof – Превью, JEP 305
- Полезные сообщения NullPointerException – JEP 358
- Текстовые блоки – Второе Превью, JEP 368
- Records – класс данных, превью-функция, JEP 359.
2. Назовите некоторые важные особенности релиза Java 13?
Java 13 была запущена 17 сентября 2019 года. Это не является LTS-версией. Некоторые из специфических для разработчика особенностей Java 13:Особенности Java 13:
- Текстовые блоки – Превью, JEP 355
- Переключение выражений – функция предварительного просмотра, JEP 354
- Переоснащение API сокетов Java – JEP 353
- Динамический архив CDS – JEP 350
- Метод FileSystems.newFileSystem()
- Фабрики DOM и SAX с поддержкой пространства имен
- Поддержка Unicode 12.1
- Улучшения ZGC для возврата неиспользуемой памяти – JEP 351
3. Назовите некоторые важные функции релиза Java 12?
Java 12 была запущена 19 марта 2019 года. Это не является LTS-версией. Некоторые из Функций Java 12 следующие:
- Изменения в JVM – JEP 189, JEP 346, JEP 344 и JEP 230.
- Переключение выражений
- Метод mismatch() файла
- Компактное форматирование чисел
- Сборщики Teeing в API потоков
- Новые методы в классе String
- JEP 334: API констант JVM
- JEP 305: Сопоставление шаблонов для instanceof
- Литералы сырых строк удалены из JDK 12.
4. Каковы важные особенности выпуска Java 11?
Java 11 – это второй выпуск с долгосрочной поддержкой после Java 8. Изменилась лицензионная и модель поддержки, что означает, что если вы загружаете Oracle JDK Java 11, то для коммерческого использования придется платить. Если вы хотите использовать бесплатную версию, вы можете загрузить ее с веб-сайта OpenJDK.
Некоторые из важных особенностей Java 11:
- Мы можем запустить программу Java напрямую через команду
java
. Исходный файл будет неявно скомпилирован и выполнен. Это часть реализации функции JEP 330. - В класс String добавлено 6 новых методов – isBlank(), lines(), strip(), stripLeading(), stripTrailing() и repeat(). Вы можете прочитать о них в нашей статье о классе Java String.
- Класс Files получил два новых метода для чтения/записи строковых данных – readString() и writeString().
- Мы можем использовать “var” также с лямбда-выражениями. Это часть реализации JEP 323.
- Эпсилон: No-Op сборщик мусора для тестовых сред. Это экспериментальная функция и часть JEP 318.
- Модули Java EE и CORBA были удалены из стандартной сборки JDK. JavaScript-движок Nashorn также устарел.
- Новый HTTP-клиент (JEP 321) и Flight Recorder (JEP 328)
Для полного обзора, пожалуйста, прочтите Особенности Java 11.
5. Каковы важные особенности релиза Java 10?
Java 10 – первый выпуск каждые шесть месяцев от корпорации Oracle, поэтому это не основной релиз, как более ранние версии. Тем не менее, некоторые из важных особенностей Java 10:
- Локальный вывод типа переменной
- Усовершенствование java.util.Locale и связанных API для реализации дополнительных расширений Unicode тегов языка BCP 47.
- Включение возможности HotSpot VM выделять кучу объектов Java на альтернативном устройстве памяти, таком как NV-DIMM, указанном пользователем.
- Предоставление набора сертификатов корневого удостоверяющего центра (CA) по умолчанию в JDK.
Java 10 в основном является версией с исправлениями, однако мне очень понравилась функция локального вывода типа переменной. Для подробного обзора Java 10, пожалуйста, прочтите Особенности Java 10.
6. Какие важные особенности выпуска Java 9?
Java 9 была крупным релизом и принесла множество нововведений. Некоторые из важных особенностей включают:
- Java 9 REPL (JShell)
- Система модулей Java 9
- Фабричные методы для неизменяемых списков, множеств, карт и Map.Entry
- Приватные методы в интерфейсах
- Реактивные потоки
- Улучшения сборщика мусора (Garbage Collector)
Более подробную информацию о них можно найти в разделе Особенности Java 9.
7. Какие важные особенности выпуска Java 8?
Java 8 была выпущена в марте 2014 года, поэтому это одна из горячих тем в вопросах на собеседовании по Java. Если вы четко ответите на этот вопрос, это покажет, что вы следите за последними технологиями.
Java 8 стала одним из крупнейших релизов после введения аннотаций и обобщений в Java 5. Некоторые важные особенности Java 8:
- Изменения интерфейса с методами по умолчанию и статическими методами
- Функциональные интерфейсы и лямбда-выражения
- Java Stream API для классов коллекций
- Java Date Time API
I strongly recommend to go through above links to get proper understanding of each one of them, also read Java 8 Features.
8. Назовите некоторые концепции ООП в Java?
Java основана на концепциях объектно-ориентированного программирования, вот некоторые из них, реализованные в программировании на Java.
- Абстракция
- Инкапсуляция
- Полиморфизм
- Наследование
- Ассоциация
- Агрегация
- Композиция
Читайте подробнее о них по ссылке Концепции ООП в Java.
9. Что означает независимость от платформы в Java?
Независимость от платформы означает, что вы можете запускать одну и ту же программу на Java в любой операционной системе. Например, вы можете написать программу на Java в Windows и запустить ее в Mac OS.
10. Что такое JVM и является ли она независимой от платформы?
Java Virtual Machine (JVM) – это сердце языка программирования Java. JVM отвечает за преобразование байт-кода в машинно-читаемый код. JVM не является независимой от платформы, поэтому для разных операционных систем существуют разные JVM. Мы можем настраивать JVM с помощью параметров Java, таких как выделение минимальной и максимальной памяти для JVM. Ее называют виртуальной, потому что она предоставляет интерфейс, который не зависит от базовой ОС.
11. В чем разница между JDK и JVM?
Java Development Kit (JDK) предназначен для разработки, а JVM является его частью для выполнения программ на Java.
JDK предоставляет все инструменты, исполняемые файлы и бинарные файлы, необходимые для компиляции, отладки и выполнения программы на Java. Часть выполнения обрабатывается JVM для обеспечения независимости от машины.
12. В чем разница между JVM и JRE?
Java Runtime Environment (JRE) – это реализация JVM. JRE состоит из JVM и бинарных файлов Java, а также других классов, необходимых для успешного выполнения программы. В JRE нет инструментов разработки, таких как компилятор Java, отладчик и т. д. Для выполнения программы на Java необходимо установить JRE.
13. Какой класс является суперклассом всех классов?
java.lang.Object
является корневым классом для всех классов Java, и нам не нужно его расширять.
14. Почему Java не поддерживает множественное наследование?
Java не поддерживает множественное наследование в классах из-за “Проблемы бриллианта”. Чтобы узнать больше о проблеме бриллианта с примером, прочтите Множественное наследование в Java.
Однако множественное наследование поддерживается в интерфейсах. Интерфейс может расширять несколько интерфейсов, потому что они просто объявляют методы, а реализация будет присутствовать в классе-реализаторе. Поэтому здесь нет проблемы бриллианта с интерфейсами.
15. Почему Java не является чистым объектно-ориентированным языком?
Java не считается чисто объектно-ориентированным, потому что она поддерживает примитивные типы, такие как int, byte, short, long и т. д. Я считаю, что это приносит простоту в язык при написании кода. В Java могли бы быть объекты-обертки для примитивных типов, но только для представления, они не предоставили бы никакой пользы.
Как мы знаем, для всех примитивных типов у нас есть классы-обертки, такие как Integer, Long и т. д., которые предоставляют дополнительные методы.
16. В чем разница между переменными path и classpath?
Переменная PATH – это переменная среды, используемая операционной системой для определения местоположения исполняемых файлов. Поэтому, когда мы устанавливаем Java или хотим, чтобы любой исполняемый файл был доступен ОС, нам нужно добавить расположение каталога в переменную PATH. Если вы работаете в операционной системе Windows, прочтите этот пост, чтобы узнать, как настроить переменную PATH в Windows.
Classpath специфичен для Java и используется исполняемыми файлами java для определения местоположения файлов классов. Мы можем указать местоположение classpath при запуске java-приложения, и это может быть каталог, ZIP-файлы, JAR-файлы и т. д.
17. В чем важность метода main в Java?
Метод main() является точкой входа для любого автономного java-приложения. Синтаксис метода main – public static void main(String args[])
.
Метод main Java является публичным и статическим, чтобы Java Runtime могла получить к нему доступ без инициализации класса. Входным параметром является массив String, через который мы можем передавать аргументы времени выполнения в программу Java. Проверьте этот пост, чтобы узнать, как скомпилировать и запустить java-программу.
18. Что такое перегрузка и переопределение в Java?
Когда у нас есть более одного метода с одним и тем же именем в одном классе, но с разными аргументами, тогда это называется перегрузкой методов.
Концепция переопределения возникает в контексте наследования, когда у нас есть два метода с одной и той же сигнатурой, один в родительском классе, а другой в дочернем классе. Мы можем использовать аннотацию @Override в переопределяемом методе дочернего класса, чтобы убедиться, что если метод родительского класса изменен, то изменится и метод дочернего класса.
19. Можем ли мы перегрузить метод main()?
Да, мы можем иметь несколько методов с именем “main” в одном классе. Однако, если мы запустим класс, среда выполнения Java будет искать метод main с синтаксисом public static void main(String args[])
.
20. Можем ли мы иметь несколько публичных классов в исходном файле Java?
Мы не можем иметь более одного публичного класса в одном исходном файле Java. В одном исходном файле может быть несколько классов, которые не являются публичными.
21. Что такое пакет Java и какой пакет импортируется по умолчанию?
Пакет Java – это механизм организации классов Java путем их группировки. Логика группировки может быть основана на функциональности или модульном подходе. Полностью классифицированное имя класса Java содержит имя пакета и имя класса. Например, java.lang.Object
– это полностью классифицированное имя класса Object
, который является частью пакета java.lang
.
Пакет java.lang
импортируется по умолчанию, и нам не нужно явно импортировать какой-либо класс из этого пакета.
22. Что такое модификаторы доступа в Java?
Java обеспечивает контроль доступа с помощью ключевых слов модификаторов доступа public, private и protected. Когда ни одно из них не используется, это называется модификатором доступа по умолчанию.
A java class can only have public or default access modifier. Read Java Access Modifiers to learn more about these in detail.
23. Что такое ключевое слово final?
Ключевое слово final используется с классом, чтобы гарантировать, что никакой другой класс не может его расширить. Например, класс String является final, и мы не можем его расширить.
Мы можем использовать ключевое слово final с методами, чтобы гарантировать, что дочерние классы не могут его переопределить.
Ключевое слово final в Java можно использовать с переменными, чтобы гарантировать, что ей можно присвоить значение только один раз. Однако состояние переменной может измениться, например, мы можем присвоить значение final переменной объекта только один раз, но переменные объекта могут измениться позже.
Переменные интерфейса Java по умолчанию являются final и static.
24. Что такое ключевое слово static?
Ключевое слово static можно использовать с переменными на уровне класса, чтобы сделать ее глобальной, то есть все объекты будут использовать одну и ту же переменную.
Мы также можем использовать ключевое слово static с методами. Статический метод может обращаться только к статическим переменным класса и вызывать только статические методы класса.
Читайте подробности на java static keyword.
25. Что такое finally и finalize в Java?
Блок finally используется с try-catch для размещения кода, который вы хотите выполнить всегда, даже если блок try-catch генерирует исключение. Блок finally в основном используется для освобождения ресурсов, созданных в блоке try.
Метод finalize() – это специальный метод в классе Object, который мы можем переопределить в наших классах. Этот метод вызывается сборщиком мусора, когда объект подлежит сборке мусора. Этот метод обычно переопределяется для освобождения системных ресурсов при сборке мусора объекта.
26. Можем ли мы объявить класс как static?
Мы не можем объявить верхний уровень класса как static, однако внутренний класс может быть объявлен как static. Если внутренний класс объявлен как static, он называется статическим вложенным классом.
Статический вложенный класс такой же, как любой другой класс верхнего уровня, и является вложенным только для удобства упаковки.
Читайте больше о внутренних классах на java inner class.
27. Что такое статический импорт?
Если нам нужно использовать какую-либо статическую переменную или метод из другого класса, обычно мы импортируем класс и затем используем метод/переменную с именем класса.
Мы можем сделать то же самое, импортируя только статический метод или переменную, а затем использовать их в классе, как если бы они принадлежали ему.
Использование статического импорта может вызывать путаницу, поэтому лучше избегать его. Чрезмерное использование статического импорта может сделать вашу программу нечитаемой и необслуживаемой.
28. Что такое try-with-resources в Java?
Одной из функций Java 7 является оператор try-with-resources для автоматического управления ресурсами. До Java 7 не было автоматического управления ресурсами, и мы должны были явно закрывать ресурс. Обычно это делалось в блоке finally
в операторе try-catch. Этот подход приводил к утечкам памяти, когда мы забывали закрыть ресурс.
С Java 7 мы можем создавать ресурсы внутри блока try и использовать их. Java заботится о закрытии ресурсов сразу после завершения блока try-catch. Узнайте больше на Автоматическое управление ресурсами в Java.
29. Что такое мультикэтч блок в Java?
Одним из улучшений в Java 7 был мультикэтч блок, где мы можем перехватывать несколько исключений в одном блоке catch. Это делает наш код более коротким и чище, когда каждый блок catch содержит схожий код.
Если блок catch обрабатывает несколько исключений, их можно разделять с помощью вертикальной черты (|), и в этом случае параметр исключения (ex) является финальным, поэтому его нельзя изменить.
Узнайте больше на Мультикэтч блок в Java.
30. Что такое статический блок?
Статический блок Java – это группа операторов, которая выполняется при загрузке класса в память с помощью ClassLoader Java. Он используется для инициализации статических переменных класса. В основном он используется для создания статических ресурсов при загрузке класса.
31. Что такое интерфейс?
Интерфейсы являются основными концепциями языка программирования Java и широко используются не только в JDK, но и в шаблонах проектирования Java, большинстве фреймворков и инструментах. Интерфейсы предоставляют способ достижения абстракции в Java и используются для определения контракта, который подклассы должны реализовать.
Интерфейсы хорошо подходят для определения типа и создания иерархии верхнего уровня в нашем коде. Поскольку в Java класс может реализовывать несколько интерфейсов, в большинстве случаев лучше использовать интерфейсы в качестве суперкласса. Узнайте больше на java interface.
32. Что такое абстрактный класс?
Абстрактные классы используются в Java для создания класса с некоторой реализацией метода по умолчанию для подклассов. Абстрактный класс может иметь абстрактный метод без тела, а также методы с реализацией.
Ключевое слово abstract используется для создания абстрактного класса. Абстрактные классы не могут быть созданы и в основном используются для предоставления базы для расширения и реализации абстрактных методов подклассами, а также для переопределения или использования реализованных методов в абстрактном классе. Прочтите важные моменты об абстрактных классах по адресу java abstract class.
33. В чем разница между абстрактным классом и интерфейсом?
- Ключевое слово abstract используется для создания абстрактного класса, тогда как интерфейс — это ключевое слово для интерфейсов.
- Абстрактные классы могут иметь реализации методов, в то время как интерфейсы этого не могут.
- A class can extend only one abstract class but it can implement multiple interfaces.
- Мы можем запустить абстрактный класс, если у него есть метод main(), тогда как интерфейс запустить нельзя.
Еще несколько различий подробно описаны по адресу Разница между абстрактным классом и интерфейсом.
34. Может ли интерфейс реализовывать или расширять другой интерфейс?
Интерфейсы не реализуют другие интерфейсы, они расширяют их. Поскольку интерфейсы не могут иметь реализаций методов, нет проблемы с алмазом. Вот почему у нас есть множественное наследование в интерфейсах, т.е. интерфейс может расширять несколько интерфейсов.
Начиная с Java 8, интерфейсы могут иметь реализации методов по умолчанию. Поэтому для решения проблемы с алмазом, когда общий метод по умолчанию присутствует в нескольких интерфейсах, обязательно предоставить реализацию метода в классе, реализующем их. Для получения более подробной информации с примерами читайте Изменения интерфейса Java 8.
35. Что такое маркерный интерфейс?
A marker interface is an empty interface without any method but used to force some functionality in implementing classes by Java. Some of the well known marker interfaces are Serializable and Cloneable.
36. Что такое оберточные классы?
Оберточные классы Java – это объектное представление восьми примитивных типов в Java. Все оберточные классы в Java являются неизменяемыми и финальными. Автоматическое упаковывание и распаковывание Java 5 позволяет легко преобразовывать примитивные типы и их соответствующие оберточные классы.
Читайте дополнительно на Оберточные классы в Java.
37. Что такое Enum в Java?
Enum был введен в Java 1.5 как новый тип, поля которого состоят из фиксированного набора констант. Например, в Java мы можем создать направление в виде enum с фиксированными полями EAST, WEST, NORTH, SOUTH.
enum – это ключевое слово для создания типа enum, аналогичного классу. Константы Enum неявно являются статическими и финальными. Подробнее читайте на java enum.
38. Что такое аннотации Java?
Аннотации Java предоставляют информацию о коде и не имеют прямого влияния на код, который они аннотируют. Аннотации были введены в Java 5. Аннотация – это метаданные о программе, встроенные непосредственно в саму программу. Ее можно анализировать с помощью инструмента анализа аннотаций или компилятора. Мы также можем указать доступность аннотации как только на этапе компиляции, так и до момента выполнения. Встроенные аннотации Java включают @Override, @Deprecated и @SuppressWarnings. Узнайте больше по адресу java annotations.
39. Что такое Java Reflection API и почему это так важно?
Java Reflection API обеспечивает возможность исследования и изменения поведения java-приложения во время выполнения. Мы можем исследовать java-класс, интерфейс, перечисление и получить информацию о их методах и полях. API Reflection является продвинутой темой, и мы должны избегать его в обычном программировании. Использование API Reflection может нарушить шаблон проектирования, такой как шаблон Singleton, вызвав закрытый конструктор, нарушая правила модификаторов доступа.
Хотя мы не используем API отражения в обычном программировании, он очень важен. Мы не можем использовать какие-либо фреймворки, такие как Spring, Hibernate или серверы, такие как Tomcat, JBoss без API отражения. Они вызывают соответствующие методы и создают экземпляры классов через API отражения и часто используют его для других обработок.
Прочтите Руководство по отражению Java, чтобы получить глубокие знания об API отражения.
40. Что такое композиция в Java?
Композиция – это техника проектирования для реализации отношения has-a в классах. Мы можем использовать композицию объектов для повторного использования кода.
Композиция в Java достигается путем использования переменных экземпляра, которые ссылаются на другие объекты. Преимущество использования композиции заключается в том, что мы можем контролировать видимость других объектов для клиентских классов и использовать только то, что нам нужно. Узнайте больше с примером на Пример композиции Java.
41. Каковы преимущества композиции перед наследованием?
Одна из лучших практик программирования на Java – “предпочтение композиции перед наследованием”. Некоторые из возможных причин:
- Любое изменение в суперклассе может повлиять на подкласс, даже если мы не используем методы суперкласса. Например, если у нас есть метод test() в подклассе, и вдруг кто-то вводит метод test() в суперклассе, мы получим ошибки компиляции в подклассе. С композицией этой проблемы не возникает, потому что мы используем только те методы, которые нам нужны.
- Наследование предоставляет клиенту доступ ко всем методам и переменным суперкласса, и если мы не контролируем проектирование суперкласса, это может привести к уязвимостям безопасности. Композиция позволяет нам ограничить доступ к методам и, следовательно, сделать код более безопасным.
- Мы можем получить динамическое связывание в композиции, где наследование связывает классы на этапе компиляции. Таким образом, композиция обеспечивает гибкость в вызове методов.
Вы можете узнать больше о вышеперечисленных преимуществах композиции перед наследованием по ссылке java composition vs inheritance.
42. Как отсортировать коллекцию пользовательских объектов на Java?
Мы должны реализовать интерфейс Comparable для поддержки сортировки пользовательских объектов в коллекции. Интерфейс Comparable имеет метод compareTo(T obj), который используется методами сортировки, и предоставляя эту реализацию метода, мы можем предоставить стандартный способ сортировки коллекции пользовательских объектов.
Однако, если вы хотите сортировать по разным критериям, таким как сортировка коллекции сотрудников по зарплате или возрасту, то мы можем создать экземпляры Comparator и передать их в качестве методологии сортировки. Для получения более подробной информации читайте Java Comparable и Comparator.
43. Что такое внутренний класс в Java?
Мы можем определить класс внутри класса, и они называются вложенными классами. Любой нестатический вложенный класс известен как внутренний класс. Внутренние классы связаны с объектом класса, и они могут получить доступ ко всем переменным и методам внешнего класса. Поскольку внутренние классы связаны с экземпляром, мы не можем иметь в них статические переменные.
Мы можем иметь локальный внутренний класс или анонимный внутренний класс внутри класса. Для получения более подробной информации читайте внутренний класс java.
44. Что такое анонимный внутренний класс?
A local inner class without a name is known as an anonymous inner class. An anonymous class is defined and instantiated in a single statement. Anonymous inner class always extend a class or implement an interface.
Поскольку анонимный класс не имеет имени, невозможно определить конструктор для анонимного класса. Анонимные внутренние классы доступны только в той точке, где они определены.
45. Что такое Classloader в Java?
Classloader Java – это программа, которая загружает байт-код программы в память, когда мы хотим получить доступ к любому классу. Мы можем создать собственный загрузчик классов, расширив класс ClassLoader и переопределив метод loadClass(String name). Узнайте больше на java classloader.
46. Какие существуют различные типы загрузчиков классов?
Существует три типа встроенных загрузчиков классов в Java.
- Загрузчик Bootstrap ClassLoader – загружает внутренние классы JDK, обычно загружает rt.jar и другие основные классы.
- Загрузчик классов расширений – он загружает классы из каталога расширений JDK, обычно из каталога $JAVA_HOME/lib/ext.
- Загрузчик классов системы – он загружает классы из текущего пути классов, который можно задать при вызове программы с помощью параметров командной строки -cp или -classpath.
47. Что такое тернарный оператор в Java?
Тернарный оператор Java – это единственный условный оператор, который принимает три операнда. Это однострочная замена оператору if-then-else и широко используется в программировании на Java. Мы можем использовать тернарный оператор для условий if-else или даже для условий switch, используя вложенные тернарные операторы. Пример можно найти по ссылке тернарный оператор Java.
48. Что делает ключевое слово super?
Ключевое слово super может использоваться для доступа к методу суперкласса, когда вы переопределяете метод в дочернем классе.
Мы можем использовать ключевое слово super для вызова конструкторов суперкласса в конструкторе дочернего класса, но в этом случае оно должно быть первым оператором в методе конструктора.
Использование ключевого слова super можно увидеть в реализации дочернего класса ниже.
49. Что такое операторы break и continue?
Мы можем использовать оператор break для завершения цикла for, while или do-while. Мы также можем использовать оператор break в операторе switch для выхода из блока switch case. Пример использования оператора break можно увидеть по ссылке java break. Мы можем использовать оператор break с меткой, чтобы завершить вложенные циклы.
Оператор continue пропускает текущую итерацию цикла for, while или do-while. Мы можем использовать оператор continue с меткой, чтобы пропустить текущую итерацию внешнего цикла.
50. Что такое ключевое слово this в Java?
Ключевое слово this предоставляет ссылку на текущий объект и в основном используется для того, чтобы убедиться, что используются переменные объекта, а не локальные переменные с тем же именем.
Мы также можем использовать это ключевое слово для вызова других конструкторов из конструктора.
51. Что такое конструктор по умолчанию?
Конструктор без аргументов класса известен как конструктор по умолчанию. Когда мы не определяем никакого конструктора для класса, компилятор Java автоматически создает конструктор по умолчанию без аргументов для класса. Если определены другие конструкторы, то компилятор не создаст для нас конструктор по умолчанию.
52. Можем ли мы использовать try без блока catch?
Да, мы можем использовать оператор try-finally и, следовательно, избежать блока catch.
53. Что такое сборщик мусора?
Сборка мусора – это процесс просмотра кучи памяти, определения, какие объекты используются, а какие нет, и удаление неиспользуемых объектов. В Java процесс освобождения памяти обрабатывается автоматически сборщиком мусора.
Мы можем запустить сборщик мусора с помощью кода Runtime.getRuntime().gc()
или использовать утилитный метод System.gc()
. Для подробного анализа кучи памяти и сборки мусора, пожалуйста, прочтите Сборка мусора в Java.
54. Что такое сериализация и десериализация?
Мы можем преобразовать объект Java в поток, который называется сериализацией. После того как объект преобразуется в поток, его можно сохранить в файле, отправить по сети или использовать в сокетных соединениях.
Объект должен реализовать интерфейс Serializable, и мы можем использовать java.io.ObjectOutputStream для записи объектов в файл или в любой объект OutputStream. Узнайте больше в Сериализация в Java.
Процесс преобразования потоковых данных, созданных через сериализацию, в объект называется десериализацией. Узнайте больше в Десериализация в Java.
Как запустить файл JAR через командную строку?
Мы можем запустить файл JAR с помощью команды java, но для этого требуется запись Main-Class в манифест-файле JAR. Main-Class является точкой входа в JAR и используется командой java для выполнения класса. Узнайте больше на java jar file.
56. Для чего используется класс System?
Класс System Java является одним из основных классов. Один из самых простых способов записи информации для отладки – это метод System.out.print().
Класс System является final, поэтому мы не можем создать подкласс и переопределить его поведение через наследование. Класс System не предоставляет общедоступных конструкторов, поэтому мы не можем создать экземпляр этого класса, и поэтому все его методы являются статическими.
Некоторые из утилитных методов класса System предназначены для копирования массива, получения текущего времени, чтения переменных среды. Узнайте больше на Java System Class.
57. Что такое ключевое слово instanceof?
Мы можем использовать ключевое слово instanceof для проверки, принадлежит ли объект к классу или нет. Мы должны избегать его использования насколько это возможно. Пример использования:
Поскольку str имеет тип String во время выполнения, первое условие if вычисляется как true, а второе как false.
58. Можем ли мы использовать String с оператором switch case?
Одна из функций Java 7 – улучшение оператора switch case для возможности использования строк. Так что если вы используете Java 7 или более новую версию, вы можете использовать String в операторах switch-case. Узнайте больше на Примере использования строк в switch-case в Java.
59. Java – это передача по значению или по ссылке?
Это очень запутанный вопрос, мы знаем, что переменные объекта содержат ссылку на объекты в куче. Когда мы вызываем любой метод, копия этих переменных передается и сохраняется в стековой памяти метода. Мы можем проверить любой язык на то, передается ли он по ссылке или по значению, с помощью простого общего метода swap, чтобы узнать больше, прочтите Java это Передача по Значению, а не по Ссылке.
60. В чем разница между кучей и стековой памятью?
Основные различия между кучей и стековой памятью следующие:
- Куча используется всеми частями приложения, тогда как стековая память используется только одним потоком выполнения.
- Всякий раз, когда создается объект, он всегда хранится в куче, а стековая память содержит ссылку на него. Стековая память содержит только локальные примитивные переменные и переменные ссылки на объекты в куче.
- Управление памятью в стеке осуществляется в порядке LIFO, тогда как оно более сложно в куче, потому что она используется глобально.
Для подробного объяснения с примерной программой см. Куча Java против Стековой Памяти.
61. Java Компилятор хранится в JDK, JRE или JVM?
Задача java-компилятора – преобразовать программу на java в байт-код, для этого у нас есть исполняемый файл javac
. Поэтому он должен храниться в JDK, нам не нужен он в JRE, а JVM просто спецификация.
62. Каков будет вывод следующих программ?
Контекст: статический метод в классе
Ответ: Код не скомпилируется, потому что мы не можем иметь метод класса Object с ключевым словом static. Обратите внимание, что у класса Object есть метод toString()
. Вы получите ошибку времени компиляции вида “Этот статический метод не может скрыть метод экземпляра из Object”. Причина в том, что статический метод принадлежит классу, и поскольку каждый класс базируется на Object, мы не можем иметь тот же метод как в экземпляре, так и в классе. Вы не получите эту ошибку, если измените имя метода с toString() на что-то другое, что отсутствует в суперклассе Object
.
Контекст: вызов статического метода
Ответ: Ну, это странная ситуация. Мы все видели NullPointerException
, когда мы вызываем метод у объекта, который равен NULL. Но здесь программа будет работать и выводить “Вызвано тестовое foo”.
Причина в том, что оптимизация кода компилятора Java. Когда Java-код компилируется в байт-код, он понимает, что foo() – это статический метод и должен вызываться с использованием класса. Поэтому он изменяет вызов метода obj.foo()
на Test.foo()
, и поэтому нет NullPointerException
.
I must admit that it’s a very tricky question and if you are interviewing someone, this will blow his mind off. ?
Это все для вопросов и ответов на собеседовании по основам Java. Я буду продолжать добавлять больше вопросов в список, если вы считаете, что я упустил какой-то важный, пожалуйста, дайте мне знать в комментариях.
Source:
https://www.digitalocean.com/community/tutorials/core-java-interview-questions-and-answers