Сначала посмотрите, а потом лайкните, дайте себе время подумать, поиск в WeChat [Тихий король 2】Подпишитесь на этого талантливого программиста.
эта статьяGitHub github.com/itwangerОн был включен, а также есть вопросы для интервью, организованные ведущими производителями, а также моя серия статей.Второй брат, привет, три месяца ищу работу, но пока не нашел, очень волнуюсь, что делать? У вас есть какие-нибудь вопросы для собеседования по Java?
Это частное письмо, присланное мне читателем Тянь Тяном. Прочитав его, я чувствую к нему глубокую привязанность. Недавняя ситуация действительно не оптимистична и не вызвана личными причинами. Затем, поскольку нужны вопросы для интервью, второму брату придется подготовить волну.
На этот раз я потратил неделю на подготовку 31 основного вопроса для интервью по Java, надеясь помочь Тянь Тиану и другим читателям и друзьям в подобных ситуациях.
(Планирую потратить еще неделю на обновление второй волны, там тоже 31 трек, так что следите за обновлениями)
01. Назовите важные функции, обновленные в версии Java 14.
Java 14 была выпущена 17 марта 2020 г., и важными особенностями обновления являются:
- выражение переключения
- расширенное выражение instanceof, функция предварительного просмотра
- Текстовый блок, второе превью
- Записи, функция предварительного просмотра
Я только что написал очень ароматную статью об опыте распаковки Java 14. Если она нужна читателям и друзьям, вы можете щелкнуть ссылку ниже, чтобы взглянуть.
Java 14 из коробки, так вкусно пахнет
02. Назовите важные функции, обновленные в версии Java 13.
Java 13 была выпущена 17 сентября 2019 года, и важные особенности обновления:
- Текстовый блок, функция предварительного просмотра
- выражение переключения, функция предварительного просмотра
- Повторная реализация сокета Java
-
FileSystems.newFileSystem()
метод - Поддержка Юникода 12.1
- Улучшения масштабируемого сборщика мусора с малой задержкой для возврата неиспользуемой памяти.
03. Назовите важные функции, обновленные в версии Java 12.
Java 12 была выпущена 19 марта 2019 года, и важные особенности обновления:
- обновление JVM
-
File.mismatch()
метод - компактный числовой формат
- Класс String добавляет несколько новых методов, таких как
indent()
04. Назовите важные функции, обновленные в версии Java 11.
Java 11 — вторая коммерческая версия после Java 8. Если вы загружаете Oracle JDK, вам нужно заплатить, если вы хотите продолжать использовать бесплатную версию, вам нужно скачать Open JDK.
В Oracle JDK есть некоторые коммерческие функции с закрытым исходным кодом, которых нет в Open JDK.
Важными особенностями обновления Java 11 являются:
- можно использовать напрямую
java
команда для запуска программы Java, а исходный код будет скомпилирован и запущен неявно. - Класс String добавляет несколько новых методов, таких как
isBlank()
,lines()
,strip()
и т.п. - Класс Files добавляет два новых метода чтения и записи.
readString()
а такжеwriteString()
. - Вы можете использовать var как тип переменной в лямбда-выражении.
05. Назовите важные функции, обновленные в версии Java 10.
Важными особенностями обновления Java 10 являются:
- Вывод типа локальной переменной, например,
var list = new ArrayList();
, вы можете использовать var в качестве типа переменной, компилятор Java знает, что список имеет тип ArrayList строк. - Усилить
java.util.Locale
. - Предоставляется набор корневых центров сертификации (ЦС) по умолчанию.
06. Назовите важные функции, обновленные в версии Java 9.
Важными особенностями обновления Java 9 являются:
- модульная система
- Фабричные методы для неизменяемых List, Set, Map
- Интерфейсы могут иметь приватные методы
- Улучшения сборщика мусора
07. Назовите важные функции, обновленные в версии Java 8.
Выпущенная в марте 2014 года, Java 8, возможно, является самым важным обновлением версии после Java 6 и очень любима разработчиками.
- функциональное программирование иЛямбда-выражения
- Стрим поток
- Java Date Time API
- интерфейсСтандартные и статические методы могут использоваться в
Я настоятельно рекомендую перейти по ссылке выше, чтобы прочитать следующее, чтобы правильно понять эти концепции.
08. Пожалуйста, назовите некоторые важные концепции объектно-ориентированного программирования на Java.
- Аннотация
- упаковка
- полиморфизм
- наследовать
09. Что означает заявленная Java независимость от платформы?
Распространенными операционными системами являются Windows, Linux, OS-X, поэтому независимость от платформы означает, что мы можем запускать программы Java с одним и тем же исходным кодом в любой операционной системе, например, мы можем писать программы Java в Windows, а затем запускать их в Linux.
10. Что такое JVM?
JVM (виртуальная машина Java) широко известна как виртуальная машина Java. Она называется виртуальной машиной, потому что на самом деле не существует. Он предоставляет среду выполнения, в которой может выполняться байт-код Java.
JVM обеспечивает следующие операции:
- загрузить байт-код
- Проверить байт-код
- выполнить байт-код
- Обеспечьте среду выполнения
JVM определяет следующее:
- зона хранения
- формат файла класса
- зарегистрировать банк
- куча сбора мусора
- Отчет о фатальных ошибках и т. д.
Давайте попробуем понять внутреннюю структуру JVM, которая включает в себя загрузчик классов, области данных времени выполнения и механизм выполнения.
1) Загрузчик классов
Загрузчик классов — это подсистема JVM, которая загружает файлы классов. Всякий раз, когда мы запускаем программу Java, она сначала загружается загрузчиком классов. В Java есть три встроенных загрузчика классов:
Запустите загрузчик классов (Bootstrap Class-Loader), загрузите
jre/lib
Файлы jar в пакете, такие как общий rt.jar (включая все файлы классов в стандартной библиотеке Java, такие какjava.lang
класс под пакетом,java.net
класс под пакетом,java.util
класс под пакетом,java.io
класс под пакетом,java.sql
классы в пакете).Extension или Ext Class-Loader, загрузка
jre/lib/ext
jar под пакетом.Application или App Clas-Loader загружает классы Java в соответствии с путем к классам программы.
Как правило, Java-программистам не нужно напрямую взаимодействовать с загрузчиками того же типа. Поведение JVM по умолчанию достаточно для большинства ситуаций. Однако, если вы столкнулись с ситуацией, когда вам нужно взаимодействовать с загрузчиком классов, и вы мало знаете о механизме загрузчика классов, вам придется потратить много времени на отладку
ClassNotFoundException
а такжеNoClassDefFoundError
и другие исключения.
Для любого класса его уникальность в JVM должна определяться его загрузчиком классов и самим классом. То есть, если загрузчики двух классов разные, даже если два класса происходят из одного и того же файла байт-кода, два класса не должны быть равными (например, объекты класса двух классов не равны.equals
).
Это немного головокружение, приходите и приходите, и понять это через простой фрагмент кода.
public class Test {
public static void main(String[] args) {
ClassLoader loader = Test.class.getClassLoader();
while (loader != null) {
System.out.println(loader.toString());
loader = loader.getParent();
}
}
}
Каждый класс Java поддерживает ссылку на загрузчик классов, который его определяет, через类名.class.getClassLoader()
Эту ссылку можно получить, затем черезloader.getParent()
Можно получить загрузчик высшего класса загрузчика классов.
Вывод приведенного выше кода выглядит следующим образом:
sun.misc.Launcher$AppClassLoader@18b4aac2
sun.misc.Launcher$ExtClassLoader@4617c264
Первая строка выводит загрузчик классов для Test, загрузчик классов приложения, которыйsun.misc.Launcher$AppClassLoader
экземпляр класса; вторая строка вывода — это загрузчик класса расширения, которыйsun.misc.Launcher$ExtClassLoader
экземпляр класса. Как насчет загрузчика классов запуска?
Само собой разумеется, что загрузчик верхнего класса загрузчика класса расширения является загрузчиком запускаемого класса, но в моей версии JDK загрузчик класса расширенияgetParent()
вернутьnull
. Так что выхода нет.
2) Область рабочих данных
Область данных времени выполнения, в свою очередь, содержит следующее содержимое.
Регистр ПК, также известный как регистр счетчика программ, представляет собой небольшое пространство памяти, и его функцию можно рассматривать как сигнальный индикатор байт-кода, выполняемого текущим потоком.
Стек JVM (стек виртуальной машины Java), как и регистр ПК, стек JVM также является потокозависимым. Каждый поток JVM имеет свой собственный стек JVM, который создается одновременно с потоком, и его жизненный цикл такой же, как и у потока.
Стек собственных методов (Native Method Stack), JVM может использовать традиционный стек для поддержки выполнения собственных методов (методов, написанных на языках, отличных от Java [язык C]).Этот стек является стеком собственных методов.
Куча в JVM куча представляет собой область памяти времени выполнения, которая может совместно использоваться различными потоками, а также является областью для всех экземпляров классов и объектов данных для выделения памяти.
Область методов (Method area), в JVM информация о загруженном типе хранится в области методов. Включая информацию о типе (информация о типе) и список методов (таблицы методов). Область методов совместно используется всеми потоками, поэтому методы доступа к информации в области методов должны быть потокобезопасными.
Пул констант времени выполнения (пул констант времени выполнения), пул констант времени выполнения — это представление пула констант каждого класса или интерфейса во время выполнения.Он включает в себя известные компилятору числовые литералы и методы, которые можно получить только после синтаксического анализа во время выполнения или ссылки в поле. Короче говоря, при ссылке на метод или переменную JVM использует область констант времени выполнения, чтобы найти фактический адрес метода или переменной в памяти.
3) Исполнительный движок
Исполнительный механизм содержит:
Интерпретатор: читает поток байт-кода и выполняет инструкции. Поскольку он интерпретирует и выполняет инструкции одну за другой, он может интерпретировать байт-код очень быстро, но выполнять его будет медленнее.
Компилятор Just-In-Time (JIT): JIT-компиляторы используются для компенсации недостатков интерпретаторов и повышения производительности. Механизм выполнения сначала выполняется в соответствии с методом интерпретации и выполнения, а затем, когда это необходимо, компилятор точно в срок компилирует весь байт-код в машинный код. Тогда исполняющему движку не нужно объяснять метод выполнения, его можно выполнить напрямую через нативный код. Выполнение нативного кода намного быстрее, чем его интерпретация по отдельности. Скомпилированный код может выполняться очень быстро, потому что собственный код хранится в кеше.
11. В чем разница между JDK и JVM?
JDK — это аббревиатура от Java Development Kit, которая представляет собой программную среду, предоставляемую разработчикам Java, включая JRE и набор инструментов разработки. Доступен в следующих версиях:
- Standard Edition (это то, что используют большинство разработчиков)
- Корпоративная версия
- миниатюрная версия
JDK содержит частную JVM и некоторые другие ресурсы, такие как компилятор (команда javac), интерпретатор (команда java) и т. д., чтобы помочь программистам Java завершить работу по разработке.
12. В чем разница между JVM и JRE?
Среда выполнения Java (JRE) — это реализация JVM. JRE состоит из двоичных файлов JVM и Java, а также других классов, которые могут выполнять любую программу. JRE не содержит никаких средств разработки, таких как компилятор Java, отладчик и т. д.
13. Какой класс является надклассом всех классов?
java.lang.Object
является надклассом всех классов Java, нам не нужно наследовать от него, потому что он наследуется неявно.
14. Почему Java не поддерживает множественное наследование?
Если два класса расширяют родительский класс с помощью определенного метода, этот метод будет переопределен обоими подклассами. Затем, если вы решите наследовать от обоих подклассов, то при вызове этого переопределенного метода компилятор не сможет определить, метод какого подкласса вы вызываете. Это также известная проблема алмаза, см. рисунок ниже.
Класс наследует как ClassA, так и ClassB.Когда объект ClassC вызывает перегруженный метод в ClassA и ClassB, он не знает, вызывать ли метод ClassA или метод ClassB.
15. Почему Java не является чисто объектно-ориентированным языком программирования?
Причина, по которой Java нельзя назвать чисто объектно-ориентированным языком программирования, заключается в том, что Java поддерживает базовые типы данных, такие как int, short, long, double и т. д. Хотя у них есть собственные типы-оболочки, их нельзя считать объектами.
16. В чем разница между путем и путем к классам?
Путь — это переменная среды, используемая операционной системой для поиска исполняемых файлов.Эти переменные пути определены на моем компьютере, например, в Java и Maven.
classpath предназначен для Java и используется для указания пути к файлу байт-кода, загружаемому виртуальной машиной Java.
17. Каково значение метода main() в Java?
Каждой программе нужна запись, а для Java-программ запись является основным методом.
public static void main(String[] args) {}
Ключевое слово public — это еще один модификатор доступа, который может объявлять классы в дополнение к методам и переменным (видимым для всех классов).
main()
Методы должны быть объявлены общедоступными.Ключевое слово static указывает, что переменная или метод является статической переменной или статическим методом, доступ к которым можно получить непосредственно через класс без создания экземпляра объекта.
Ключевое слово void используется для указания того, что метод не имеет возвращаемого значения.
Кроме того, основным ключевым словом является имя метода, и виртуальная машина Java будет искать этот идентификатор при выполнении программы;main()
Имя параметра метода, его тип — массив String, то есть при использовании java-команды для выполнения программы можно датьmain()
Метод передает массив строк в качестве параметра.
java HelloWorld 沉默王二 沉默王三
Команда javac используется для компиляции программы, команда java используется для выполнения программы, HelloWorld — это имя класса этой программы, Silent King II и Silent King III — строковые массивы, разделенные пробелами, а затем вы можете использоватьmain()
через методargs[0]
а такжеargs[1]
Получить переданное значение параметра.
public class HelloWorld {
public static void main(String[] args) {
if ("沉默王二".equals(args[0])) {
}
if ("沉默王三".equals(args[1])) {
}
}
}
main()
Единого способа написания методов нет, есть несколько других вариантов, хотя они могут и не быть общими, их легко понять.
Во-вторых, поставьте квадратные скобки[]
Перейти к args вместо String :
public static void main(String []args) { }
В-третьих, поставить квадратные скобки[]
справа от аргументов:
public static void main(String args[]) { }
В-четвертых, вы также можете изменить форму массива на форму переменного параметра:
public static void main(String...args) { }
пятое, вmain()
Добавьте еще один модификатор в методstrictfp
, чтобы подчеркнуть совместимость при работе с числами с плавающей запятой:
public strictfp static void main(String[] args) { }
также доступен вmain()
Добавьте конечное ключевое слово или синхронизированное ключевое слово в метод.
В-шестых, вы также можете добавить ключевое слово final в параметр args:
public static void main(final String[] args) { }
Седьмой, самый сложный, добавьте все ключевые слова, которые можно добавить:
final static synchronized strictfp void main(final String[] args) { }
Конечно, не нужно намеренно ставитьmain()
Методы написаны в формах, упомянутых выше, и вы можете использовать формы по умолчанию, предоставляемые IDE.
18. В чем разница между Override и Overload в Java?
Давайте сначала посмотрим на переписанный код.
class LaoWang{
public void write() {
System.out.println("老王写了一本《基督山伯爵》");
}
}
public class XiaoWang extends LaoWang {
@Override
public void write() {
System.out.println("小王写了一本《茶花女》");
}
}
Два переопределенных метода имеют одинаковое имя и одинаковое количество параметров метода, однако один метод находится в родительском классе, а другой — в подклассе. Как будто родительский класс LaoWang имелwrite()
Метод (без параметров), тело метода — написать книгу «Граф Монте-Кристо»; подкласс XiaoWang переписывает родительский классwrite()
Метод (без параметров), но суть метода в написании книги "Травиата".
написать тестовый код.
public class OverridingTest {
public static void main(String[] args) {
LaoWang wang = new XiaoWang();
wang.write();
}
}
Угадайте, каков результат?
小王写了一本《茶花女》
В приведенном выше коде мы объявляем переменную wang типа LaoWang. Во время компиляции компилятор проверяет, содержит ли класс LaoWangwrite()
метод, обнаружил, что класс LaoWang имеет, поэтому компиляция прошла. Во время работы создается новый объект XiaoWang и назначается wang.В это время виртуальная машина Java знает, что wang ссылается на объект XiaoWang, поэтому она вызывает подкласс XiaoWang.write()
метод вместо родительского класса LaoWangwrite()
метод, так что вывод "Сяо Ван написал книгу "Травиата".
Давайте посмотрим на другой фрагмент перегруженного кода.
class LaoWang{
public void read() {
System.out.println("老王读了一本《Web全栈开发进阶之路》");
}
public void read(String bookname) {
System.out.println("老王读了一本《" + bookname + "》");
}
}
Имена двух перегруженных методов одинаковы, но количество параметров метода разное, наследование не задействовано, два метода находятся в одном классе. Это похоже на то, что класс LaoWang имеет два метода, именаread()
, но у одного есть параметр (название книги), а у другого нет (может только читать и писать мертвую книгу).
написать тестовый код.
public class OverloadingTest {
public static void main(String[] args) {
LaoWang wang = new LaoWang();
wang.read();
wang.read("金瓶梅");
}
}
Результат - никаких догадок. Переменная wang имеет тип LaoWang,wang.read()
Вызывается без аргументовread()
метод, поэтому первый вывод «Фараон прочитал книгу «Дорога к продвинутой веб-разработке с полным стеком»;wang.read("金瓶")
Вызов параметризованread(bookname)
методом, поэтому вывод «Фараон прочитал «Золотую бутылку»». Во время компиляции компилятор знает, что эти дваread()
методы отличаются, потому что их сигнатуры методов (= имя метода + параметры метода) различны.
Кратко резюмируя:
1) Компилятор не может решить, какой переопределенный метод вызывать, потому что о нем нельзя судить только по типу переменной, и можно решить только во время выполнения; но компилятор может четко знать, какой переопределенный метод вызывать, т.к. определяется, а количество параметров определяет, какой метод вызывать.
2) Полиморфизм - это переопределение, а не перегрузка.
Если в классе есть несколько методов с одинаковым именем, но с разными параметрами, это называется перегрузкой метода.
Когда есть метод в родительском классе и другой метод с той же сигнатурой (то же имя метода, те же параметры и те же модификаторы), что и в подклассе, это называется переопределением метода. Подклассы могут добавлять подкласс при переопределении метода суперкласса
@Override
аннотация.
19. Можно ли перегрузить метод main()?
Да, класс может иметь несколько методов с именем «main»:
public class MainTest {
public static void main(String[] args) {
System.out.println("main(String[] args)");
}
public static void main(String[] args,String arg) {
System.out.println("(String[] args,String arg");
}
}
Но когда класс запущен, он найдет только одну запись, а именноpublic static void main(String[] args)
.
20. Есть ли в исходном файле Java несколько общедоступных классов?
В исходном файле Java не может быть более одного общедоступного класса.
21. Что такое пакет Java?
В Java мы используем пакеты для группировки связанных классов, интерфейсов и подпакетов. Преимущества этого:
- Упростите поиск связанных типов
- Избегайте конфликтов имен, например, com.itwangger.Hello отличается от com.itwangsan.Hello.
- Видимость класса ограничена пакетом и контролем доступа
Вы можете использовать ключевое слово package для определения имени пакета.Следует отметить, что эта строка кода должна находиться в первой строке класса. Настоятельно рекомендуется объявлять классы в пакете, а не по умолчанию, иначе будут потеряны преимущества структуры пакета.
Именование пакетов должно соответствовать следующим правилам:
- должны быть все строчные буквы
- Может содержать несколько слов, например, используйте связь "." между словами
java.lang
- Название определяется по названию компании или организации в обратном порядке, например доменное имя моего личного блога
www.itwanger.com
, поэтому имя пакета, которое я создал,com.itwanger.xxxx
.
Каждый пакет или подпакет имеет собственную структуру каталогов на диске, если файлы Javacom.itwanger.xxxx
package, то структура каталогов, в которой находится файл, должна бытьcom->itwanger->xxxx
.
по умолчанию,java.lang
Пакеты импортируются по умолчанию, и нам не нужно явно импортировать какие-либо классы в этом пакете.
package com.cmower.bb;
public class PackageTest {
public static void main(String[] args) {
Boolean.toString(true);
}
}
Булев класс принадлежитjava.lang
package, при его использовании не требуется явный импорт.
22. Что такое модификатор доступа?
Модификаторы доступа очень важны для Java, и в настоящее время существует четыре типа: общедоступные, частные, защищенные и по умолчанию (по умолчанию).
Класс может использовать толькоpublic
илиdefault
Модифицированные общедоступные измененные классы, которые вы видели раньше, теперь позвольте мне определить класс с модификатором разрешений по умолчанию, чтобы вы могли им наслаждаться.
class Dog {
}
Ха-ха, на самом деле нечего ценить. Значение по умолчанию означает, что к классу могут обращаться другие классы в том же пакете; общедоступный означает, что к классу могут обращаться все классы в пакете.
Если вы настаиваете на украшении класса приватными и защищенными, компилятор разозлится и не согласится.
Private можно использовать для изменения конструкторов, полей и методов класса, доступ к ним может получить только текущий класс. Protected также можно использовать для изменения конструкторов классов, полей и методов, но он имеет более широкую область применения и может быть доступен классами в том же пакете или подклассами текущего класса.
Вы можете сравнить различия между четырьмя модификаторами разрешений на следующем рисунке:
- В том же классе, независимо от того, какой модификатор разрешений, к нему можно получить доступ;
- Под этим же пакетом закрытая модификация недоступна;
- Подклассы могут получить доступ к открытым и защищенным оформленным;
- Публичный модификатор обращен к миру, ха-ха, доступен отовсюду.
23. Какое последнее ключевое слово?
Когда ключевое слово final изменяет класс, это означает, что класс не может быть унаследован. Например, класс String является окончательным и не может быть унаследован.
Когда ключевое слово final украшает метод, это означает, что подклассы не могут его переопределить.
Когда ключевое слово final изменяет переменную, это означает, что переменной можно присвоить значение только один раз, хотя состояние переменной может быть изменено.
Для получения более подробной информации о финале вы можете обратиться к другой статье, которую я написал ранее:
Я пойду, ты еще не знаешь, как использовать финальное ключевое слово
24. Что такое статическое ключевое слово?
Ключевое слово static можно использовать для оформления переменной класса, чтобы сделать ее глобальной, т. е. все объекты будут использовать одну и ту же переменную.
Ключевое слово static может использоваться для изменения метода.Метод называется статическим методом, который может обращаться только к статическим переменным класса и может вызывать только статический метод класса.
Для получения более подробной информации о статике вы можете обратиться к другой статье, которую я написал ранее:
Интервьюер: Брат, расскажи о ключевом слове static в Java.
25. В чем разница между finally и finalize?
finally обычно используется с блоком try-catch, даже если блок try-catch выдает исключение, код в блоке finally выполняется для освобождения ресурсов, созданных в блоке try.
finalize()
— это специальный метод класса Object, который вызывается сборщиком мусора при сборке мусора. Этот метод можно переопределить, чтобы освободить системные ресурсы.
26. Можно ли объявить класс статическим?
Внешний класс не может быть объявлен статическим, но внутренний класс может быть объявлен статическим, называемым статическим внутренним классом.
27. Что такое статический импорт?
Если необходимо использовать статические переменные или статические методы других классов в классе, обычно нам нужно сначала импортировать класс, а затем вызывать его в виде «имя класса.переменная/метод».
import java.lang.Math;
double test = Math.PI * 5;
Вы также можете импортировать его статически, поэтому вам больше не нужно использовать имя класса.
import static java.lang.Math.PI;
double test = PI * 5;
Однако статический импорт может привести к путанице (имена переменных или методов могут конфликтовать), поэтому лучше избегать статического импорта.
28. Что такое попытка с ресурсами?
try-with-resources — оператор автоматического управления ресурсами, представленный в Java 7. До этого нам приходилось вручную закрывать ресурсы с помощью try-catch-finally.Когда мы забываем закрыть ресурсы, легко вызвать утечку памяти.
Для получения более подробной информации о попытке использования ресурсов вы можете обратиться к другой статье, которую я написал ранее:
Я иду, вы все еще используете try-catch-finally
29. Что такое мульти-улов?
Еще одна область улучшений в Java 7 — это multi-catch, который может перехватывать несколько исключений в одном перехвате, который короче и чище, когда блок try выдает несколько похожих исключений.
catch(IOException | SQLException ex){
logger.error(ex);
throw new MyException(ex.getMessage());
}
При наличии нескольких исключений их можно разделить вертикальной чертой «|».
30. Что такое статический блок?
Статический блок — это блок кода, который выполняется, когда класс загружается в память Java ClassLoader. Обычно используется для инициализации статических переменных класса или для создания статических ресурсов.
31. Что такое интерфейс?
Интерфейсы являются основной концепцией языка программирования Java и широко используются не только в исходном коде JDK, но также в шаблонах проектирования, средах и инструментах Java. Интерфейсы предоставляют способ реализации абстракций в Java для определения соглашений о поведении для подклассов.
Для получения более подробной информации об интерфейсе вы можете обратиться к другой статье, которую я написал ранее:
Вероятно, самая популярная статья об интерфейсе Java.
Благодарность
Честно говоря, эти 31 основной вопрос для собеседования по Java все еще очень распространены в процессе собеседования, и их стоит рассмотреть. Ключ в том, что есть следующая волна, та самая 31, вам не терпится ее увидеть?
Что ж, мои дорогие друзья, я вижу, что это место, безусловно, лучший программист, второй брат должен дать вам большой палец вверх!
Я Тихий Король Эр, программист с красивой внешностью, но полагающийся на талант.Подпишитесь, чтобы повысить эффективность обучения, не забудьте три последовательных ах, лайкните, любимый, оставьте сообщение, я не выбираю, Олли дает его.
Примечание. Если в статье есть какие-либо проблемы, пожалуйста, исправьте их.
Многие читатели сочувствовали мне и говорили: «Разве утомительно быть более оригинальным, как второй поросенок-брат?»Тихий король 2"Первый раз читаю, отвечаю"резюме"Больше шаблонов резюме, которые я тщательно подготовил для вас, эта статьяGitHub github.com/itwangerОн был записан, добро пожаловать в звезду.