Кофе-брейк #145. 90 часто задаваемых вопросов и ответов на собеседовании по Java

Статья из группы Random
Источник: Usemynotes В этой публикации собран перечень вопросов, которые часто встречаются на собеседованиях с Java-разработчиками начального и среднего уровня. Кофе-брейк #145. 90 часто задаваемых вопросов и ответов на собеседовании по Java - 1

1. Что делает Java независимым от платформы языком?

Java называется независимым от платформы языком, потому что байтовый код, сгенерированный JDK (Java Development Kit), может выполняться JVM (Java Virtual Machine) на любой платформе, независимо от операционной системы.

2. Почему Java не является полностью объектно-ориентированным языком?

Java не является полностью объектно-ориентированным языком, поскольку использует восемь примитивных типов данных, которые не являются объектами: boolean, byte, char, int, float, double, long и short.

3. Почему метод main() в Java сделан статическим?

Метод main() объявлен статическим, чтобы его можно было напрямую вызывать из JVM без создания объекта или экземпляра класса, в котором он объявлен.

4. Что такое классы-оболочки в Java?

В Java каждый примитивный тип данных, такой как int, float, имеет соответствующий ему класс, известный как класс-оболочка (wrapper classes). Их также называют обертками, потому что они обертывают или преобразуют примитивный тип данных в объекты.

5. Что такое конструктор в Java?

Конструкторы в Java — это специальные методы, которые автоматически вызываются при создании объекта или экземпляра. Имена конструктора и класса должны совпадать.

6. В чем различия между массивами и ArrayList в Java?

Массивы (Arrays) ArrayList
Это статическая структура данных, что означает, что ее размер фиксирован и не может быть изменен. Это массив переменной длины или динамического размера в структуре коллекции, что означает, что его размер может быть изменен в соответствии с требованиями.
Они могут хранить как объекты, так и примитивные типы. Он может хранить или содержать только объекты, но не примитивные типы.
Мы можем получить доступ к элементу, указав его индекс в квадратных скобках [ ]. Мы можем получить доступ к элементу, указав его порядковый номер внутри метода get().

7. Почему в Java не используются указатели?

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

8. Какие существуют виды модификаторов доступа в Java?

В Java модификаторы доступа — это ключевые слова, используемые для указания доступа к классу и методам вне класса или в другом классе. В Java четыре различных типа модификаторов доступа:
  • Default
  • Public
  • Private
  • Protected

9. Что такое JIT в Java?

JIT — это аббревиатура для компилятора Just-In-Time в Java. Во время выполнения он преобразовывает байт-код в собственный машинный код. JIT-компилятор помогает повысить производительность программ Java.

10. Что такое ключевое слово final в Java?

Ключевое слово final в Java используется для представления констант. Его можно использовать с переменными, классами и методами.
  • Если ключевое слово final используется с переменными, вы не можете изменить его значение.
  • Если ключевое слово final используется с методами, вы не можете переопределить этот метод.
  • Если вы объявляете класс final, то этот класс не может быть расширен или унаследован подклассом.

11. Каковы основные концепции ООП или объектно-ориентированного программирования на Java?

В объектно-ориентированном программировании или ООП в Java используются 4 основных концепции:
  • Инкапсуляция.
  • Абстракция.
  • Наследование.
  • Полиморфизм.

12. Что такое одноэлементный класс в Java и как сделать класс одноэлементным?

В Java одноэлементный класс — это класс, имеющий только один экземпляр или объект. Создав закрытый конструктор, мы можем сделать класс одноэлементным.

13. В чем разница между локальными переменными и переменными экземпляра в Java?

Локальная переменная определяется внутри блока или метода. Область действия локальной переменной находится исключительно внутри блока. Переменная экземпляра класса — это переменная, которая определена внутри класса, но вне метода. Доступ к ней осуществляется путем создания объекта класса и прекращается при удалении объекта.

14. Что такое ООП или объектно-ориентированное программирование?

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

15. Что делает строки Java неизменяемыми?

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

16. Опишите различия между интерфейсом и абстрактными классами Java

Интерфейс Абстрактный класс
Может иметь только абстрактные методы. Допускает как абстрактные, так и неабстрактные методы.
Подкласс реализует интерфейс с помощью ключевого слова Implements. Подкласс или производный класс наследует абстракцию, используя ключевые слова для расширения реализации (extends).
Интерфейс может иметь только общедоступные статические методы без реализации. Он может обладать методами без реализации или с реализацией.
Все методы интерфейса должны быть реализованы классом, который его реализует. Класс, наследуемый от абстрактного класса, не обязан реализовывать все методы своего суперкласса.

17. Что вы подразумеваете под полиморфизмом и каковы его виды?

Полиморфизм в Java — это способность объекта принимать более одной формы. Его также можно определить как отдельную задачу или действие, которое можно выполнить разными способами. Полиморфизм делится на два типа:
  1. Полиморфизм времени компиляции.
  2. Полиморфизм времени выполнения.

18. Как в Java достигается полиморфизм во время компиляции и во время выполнения?

В Java полиморфизм времени компиляции достигается за счет перегрузки методов, а полиморфизм времени выполнения достигается за счет переопределения методов.

19. Что вы подразумеваете под абстракцией и как она достигается в Java?

Абстракция — это действие по представлению важной информации без отображения внутренних деталей или деталей реализации. В Java она достигается за счет использования абстрактных классов и интерфейсов.

20. Что такое интерфейсы в Java?

Интерфейс в Java представляет собой набор абстрактных методов только с объявлением функций, но без реализации. Мы не можем создавать объекты или экземпляры интерфейса. Интерфейс не может иметь конструкторов. Класс может реализовать несколько интерфейсов, используя ключевое слово Implements в Java.

21. Какие типы наследования существуют в Java?

В Java мы используем ключевые слова extends для наследования атрибутов и методов суперкласса или базового класса. Существует пять типов наследования:
  1. Единое наследование (Single Inheritance).
  2. Многоуровневое наследование (Multilevel Inheritance).
  3. Иерархическое наследование (Hierarchical Inheritance).
  4. Множественное наследование через интерфейс (Multiple Inheritance through Interface).
  5. Гибридное наследование (Hybrid Inheritance).

22. Почему Java не поддерживает множественное наследование?

Java не поддерживает множественное наследование, чтобы предотвратить двусмысленность. Например, предположим, что есть два суперкласса A и B, и подкласс C, который наследует как A, так и B. В обоих классах A и B присутствует метод show(). Если мы вызовем метод show(), создав объект класса C, то компилятор выдает ошибку, так как неясно, какой класс метода show() должен выполняться.

23. В чем разница между перегрузкой и переопределением методов?

Перегрузка метода Переопределение метода
Полиморфизм времени компиляции. Полиморфизм времени выполнения.
Два или более метода в одном классе с одинаковым именем функции или метода, но разными сигнатурами. Два или более метода, имеющих одно и то же имя функции или метода и сигнатуру в разных классах.

24. Можно ли переопределить статический или частный метод в Java?

Частный метод недоступен вне класса, поэтому он не будет переопределен подклассом. Следовательно, его нельзя переопределить. Точно так же статический метод не может быть переопределен, потому что если мы создадим статические методы с одним и тем же именем метода и сигнатурой как в базовом, так и в производном классе, производный класс скроет методы в базовом классе. Это известно как сокрытие метода.

25. Что такое перегрузка конструктора в Java?

В Java конструктор считается перегруженным, если класс имеет более одного конструктора, но с другим списком параметров.

26. Можем ли мы определить класс Abstract, даже если у него нет абстрактных методов?

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

27. Какая польза от статических переменных и методов?

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

28. Сколько различных типов конструкторов существует в Java?

В Java есть 2 типа конструкторов:
  1. Конструктор по умолчанию — не принимает никаких параметров.
  2. Параметризованный конструктор — принимает как минимум один параметр.

29. Использует ли Java конструктор копирования?

Нет, в Java нет конструктора копирования, такого как в C++.

30. Укажите различия между конструктором и методами в Java

Конструктор Метод
Обязательно, чтобы имя конструктора и имя класса совпадали. Имя метода может совпадать или не совпадать с именем класса.
Он не может иметь возвращаемый тип. Требуется иметь возвращаемый тип.
Конструкторы не могут быть статическими. Метод может быть или не быть статическим.
Он вызывается или вызывается автоматически при создании объекта или экземпляра класса. Он вызывается или применяется с использованием имени объекта вместе с точкой (.).
Он используется для инициализации состояния объекта. Он используется для определения поведения объекта.

31. Можно ли выполнить программу без использования метода main()?

Нет, программа не может быть выполнена без метода main() в Java, потому что выполнение программы начинается с метода main().

32. Что означает ключевое слово this в Java?

Ключевое слово this в Java является ссылочной переменной, используемой для ссылки на текущий объект, вызывающий метод или переменную.

33. Можно ли использовать ключевое слово this в Java для ссылки на статические члены?

Да, поскольку это ссылочная переменная для текущего объекта, мы можем использовать ключевое слово this для ссылки на статические члены.

34. Можем ли мы сделать метод main() в Java приватным, а не общедоступным?

Мы можем сделать метод main() закрытым, но тогда мы получим ошибку времени выполнения и, следовательно, программа не будет выполняться.

35. Что означает ключевое слово super в Java?

В Java ключевое слово super — это ссылочная переменная, которая используется для ссылки на объект непосредственного родительского класса.

36. Укажите различия между вектором и массивом.

Вектор Массив
Это массив с динамическим размером. Это структура данных фиксированного размера.
Вектор синхронизирован. Массив не синхронизирован.
Он более медленный по сравнению с массивом. Он более быстрый по сравнению с вектором.
Он может только содержать или хранить объекты Java. Он используется для хранения как примитивных типов, так и объектов Java.
Мы можем использовать метод size(), чтобы узнать длину вектора. Мы можем использовать свойство length, чтобы узнать длину массива.

37. Что такое многопоточность в Java?

Многопоточность — это процесс одновременного выполнения нескольких задач в рамках одной программы. Это делается для достижения максимальной загрузки процессора.

38. Какие существуют способы реализации многопоточности в Java?

Многопоточность в Java может быть реализована двумя способами:
  1. Путем реализации интерфейса Runnable в java.lang.Runnable.
  2. Путем расширения класса Thread в java.lang.Thread.

39. Укажите несколько различий между ключевыми словами super и this в Java.

Super This
Используется для ссылки на объекты родительского класса. Используется для ссылки на текущий объект класса.
Используется для доступа к методам родительского или базового класса. Используется для доступа к методу текущего класса.
Вызывает конструктор по умолчанию базового класса. Вызывает конструктор по умолчанию текущего класса.

40. Каковы различия между подклассом и внутренним классом?

Подкласс Внутренний класс
Это класс, который наследует свойства и методы базового или родительского класса. Это класс, вложенный в другой класс.
Он может получить доступ ко всем общедоступным и защищенным членам суперкласса или базового класса. Он имеет доступ ко всем членам внешнего класса.

41. ​​Что такое загрузчик классов в Java?

Загрузчик классов Java — это компонент среды выполнения Java или JRE, который используется для загрузки классов Java в виртуальную машину Java (JVM) во время выполнения.

42. Необходимо ли, чтобы за блоком Try следовала обработка исключений Java в блоке Catch?

Да, использовать блок catch обязательно, потому что любое исключение, созданное блоком try, должно быть перехвачено в блоке catch.

43. Назовите типы исключений в Java

Исключения в Java бывают двух типов:
  1. Непроверенное исключение
  2. Проверенное исключение

44. Какие существуют состояния потоков (thread)?

Существует 4 состояния потока в Java:
  1. Новый поток.
  2. Запускаемый (Runnable).
  3. Незапускаемый (Non-Runnable).
  4. Мертвый или прекращенный (Dead или Terminated).

45. Что такое исключение NullPointerException?

Когда пользователь пытается получить доступ или изменить значения нулевого объекта, возникает исключение NullPointerException.

46. Какие типы ключевых слов используются в обработке исключений Java?

  1. try

  2. catch

  3. finally

  4. throw

  5. throws

47. Можно ли перегружать метод main() в Java?

Да, метод main() может быть перегружен, но JVM или виртуальная машина Java вызывает только исходный метод main().

48. Можно ли переопределить метод main() в Java?

Нет, потому что метод main() является статическим методом, а статические методы нельзя переопределить.

49. В чем различия между equals() и == ?

В Java equals() — это метод, используемый для сравнения значений двух объектов или переменных, тогда как == — это оператор сравнения, используемый для сравнения адресов или расположения в памяти еще двух объектов или переменных.

50. Может ли конструктор класса вернуть любое значение?

Нет, у конструктора нет возвращаемого типа, поэтому он не может возвращать любое значение.

51. Дайте определение агрегации

Агрегация — это форма ассоциации, которая определяется как отношение “имеет” (has-a) между двумя классами. Это сделано для повторного использования кода. Это односторонняя или однонаправленная связь между двумя классами.

52. Что такое ассоциация?

Ассоциация определяет отношения между двумя классами с помощью объектов. Отношение или ассоциация могут быть “один к одному”, “один ко многим”, “многие ко многим” и “многие к одному”. Агрегация и композиция — это две формы ассоциации.

53. Что такое композиция?

Композиция — это форма ассоциации, в которой два класса зависят друг от друга.

54. В чем различие между динамической и статической привязкой?

При динамической привязке решение о привязке метода к объекту принимается во время выполнения. Позднее связывание (Late binding) — это другое название динамического связывания. При статической привязке решение о привязке метода к объекту принимается во время компиляции. Статическое связывание — это еще одно название раннего связывания.

55. Укажите разницу между инкапсуляцией и абстракцией

При инкапсуляции данные и методы упаковываются или связываются в единый блок, известный как класс. В абстракции отображается только важная информация и скрываются внутренние детали или детали реализации.

56. Что такое абстрактный класс в Java?

Абстрактный класс — это класс, экземпляр которого нельзя создать, но мы можем создать ссылочную переменную. Класс объявляется абстрактным с помощью ключевого слова abstract. Он включает в себя как абстрактные, так и неабстрактные методы.

57. Можем ли мы использовать в методе оба ключевых слова: final и abstract?

Нет, мы не можем использовать методы final и static вместе с abstract, потому что абстрактный метод должен быть переопределен подклассом, а метод final не может быть переопределен.

58. Можем ли мы объявить метод как final в интерфейсе?

Нет, мы не можем объявить метод как final, потому что все методы в интерфейсе абстрактны, поэтому он должен быть реализован подклассом, а метод final не может быть переопределен.

59. Назовите базовый класс всех классов исключений Java

Базовым классом для всех исключений является java.lang.Throwable.

60. Можно ли создать несколько блоков catch в одном блоке try?

Да, мы можем создать несколько блоков catch для одного блока try.

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

  1. Переменная пути (Path variable).
  2. Переменная пути к классам (Classpath variable).

62. Можно ли использовать деструктор в Java?

Нет, мы не можем использовать деструкторы в Java.

63. Что вы подразумеваете под анонимным классом?

Анонимный внутренний класс в Java не имеет имени и создает только один объект.

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

Метод Run().

65. В чем разница между break и continue в Java?

Break Continue
Используется для прекращения или завершения цикла, если выполняется определенное условие. Используется для пропуска выполнения цикла для текущей итерации на основе некоторого условия.
Его можно использовать внутри цикла и переключателя. Используется только внутри цикла.

66. Что такое пулы строк (string pools) в Java?

Пул строк в Java — это набор строк, хранящихся в куче памяти.

67. В чем разница между ключевыми словами throw и throws в Java?

Throw Throws
Используется для явного создания исключения. Используется для объявления исключения, которое может быть вызвано методом во время выполнения.
Используется внутри тела метода. Используя ключевые слова throws, мы можем объявить несколько исключений.
После throw следует экземпляр класса Exception. За ним следует имя класса Exception, которое должно быть сгенерировано.

68. Можно ли вызвать конструктор внутри другого конструктора того же класса?

Да, мы можем вызвать конструктор того же класса внутри другого конструктора, используя this() в качестве первой строки.

69. Можно ли сравнивать String Buffer и класс String в Java?

Нет, мы не можем сравнивать объекты String Buffer и String. Потому что мы получим ошибку.

70. В какой последовательности происходит вызов конструкторов при наследовании?

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

71. Можем ли мы назвать конструктор иначе, чем имя класса?

Нет, конструктор и имя класса должны совпадать.

72. Что такое пакеты Java?

Пакет — это набор сгруппированных классов и интерфейсов.

73. В чем различие между классами String и StringBuffer?

String StringBuffer
Класс String неизменяем. Класс StringBuffer является изменяемым.
Более медленный, чем StringBuffer. Более быстрый, чем String.
Он использует больше памяти при объединении многих строк. Он использует меньше памяти при объединении многих строк.

74. Можно ли в Java перегрузить статические методы?

Да, мы можем перегружать статические методы в Java, передавая различные сигнатуры функций.

75. Какой компонент памяти, стек или куча, очищается в процессе сборки мусора?

Куча.

76. Какой из following string классов следует использовать, когда необходимо часто обновлять данные?

Класс StringBuffer следует использовать в случае частых обновлений, поскольку он изменчив и, следовательно, пул строк не будет перегружен.

77. Что произойдет, если ключевое слово static не использовать с методом main() в Java?

Ошибки компиляции не будет, но во время выполнения мы получим ошибку NoSuchMethodError.

78. Будет ли выполняться блок finally, если оператор return помещен в конец блоков try и catch?

Да, блок finally всегда будет выполняться независимо от того, есть ли исключение.

79. Можно ли иметь много общедоступных классов в исходном файле Java?

Нет, у нас может быть только один общедоступный класс в исходном файле Java.

80. Может ли интерфейс расширять другой интерфейс?

Да, один интерфейс может расширять другой интерфейс с помощью ключевого слова extends в Java.

81. Назовите различные типы загрузчиков классов в Java

  1. Bootstrap ClassLoader

  2. Extensions ClassLoader

  3. System ClassLoader

82. Чем занимается тернарный оператор в Java?

Тернарный оператор используется в качестве замены оператора if-else в Java. Это единственный условный оператор, который содержит три операнда.

83. Чем занимается сборка мусора в Java?

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

84. Как используется конструктор по умолчанию в Java?

В Java конструктор по умолчанию (default constructor) используется для инициализации членов данных или переменных-членов объекта с их значениями по умолчанию. Он автоматически создается компилятором, когда в программе нет других конструкторов.

85. В чем разница между path и classpath в Java

  1. Путь к классам (classpath) определяет расположение файлов байт-кода, то есть файлов .class.
  2. Путь (path) определяет расположение файлов .exe.

86. Какие есть типы данных в Java?

В Java существует 8 типов данных:
  1. short

  2. byte

  3. char

  4. int

  5. float

  6. double

  7. long

  8. boolean

87. Каковы четыре концепции ООП в Java?

  1. Инкапсуляция.
  2. Абстракция.
  3. Полиморфизм.
  4. Наследование.

88. Можем ли мы присвоить ключевому слову this нулевое значение в Java?

Нет.

89. Что вы подразумеваете под статическим блоком в Java?

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

90. Что такое исключение? Какой пакет содержит все определения классов исключений в Java?

Исключения (Exceptions) — это нештатные ситуации, возникающие во время выполнения программы. Они могут произойти в результате неправильного ввода пользователем или неправильной логики кодера. Пакет java.lang.Exception содержит все определения классов исключений в Java.
Комментарии (10)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Chillentino Уровень 37, Оренбург, Россия
22 июля 2022
Интерфейс может иметь не только абстрактрые методы, но и default и static, начиная с java 8. Информация устаревшая, похоже.
Anonymouss Уровень 7, Гомель, Belarus
21 июля 2022
крутая подборка вопросов и ответов!!! спасибо! это то, что очень нужно вначале чтоб быть увереннее на собесах!
Alexandr Уровень 27
21 июля 2022

90 часто задаваемых вопросов и ответов на собеседовании по Java
Что то мотивация падает, блин, вакансий очень мало на trainee и junior без опыта работы, насколько я слышал и раньше было тяжело устроится, а теперь вообще стремно, нужны ли новички в it? - вот это вопрос...