В этой статье мы обсудим различные типы вопросов интервью в интервью Java, которые позволяют работодателям тестировать Java-кандидаты и общие объектно-ориентированные возможности программирования. Следующие главы разделены на две предыдущие и следующие статьи. В первой статье будут обсуждаться объектно-ориентированные программирование и его характеристики, общие вопросы о Java и ее функциях, классах сбора Java, коллекционеров мусора, а вторая статья в основном обсуждает обработку исключений, Java Applets, Swing, JDBC, удаленные вызовы методов (RMI), сервты и JSP.
начинать!
Оглавление
Объектно-ориентированное программирование (ООП)
Обычные проблемы Java
Java Threads
Java Collection Class
Сборщик мусора
Объектно-ориентированное программирование (ООП)
Java-это язык компьютерного программирования, который поддерживает одновременную, основанную на классе и объектно-ориентированные. Преимущества объектно-ориентированной разработки программного обеспечения перечислены ниже:
Объектно-ориентированное программирование имеет много важных особенностей, таких как: инкапсуляция, наследование, полиморфизм и абстракция. В следующих главах мы проанализируем эти характеристики один за другим.
Упаковка
Инкапсуляция предоставляет объекты способность скрывать внутренние функции и поведение. Объект предоставляет некоторые методы, к которым можно получить доступ к другим объектам, чтобы изменить данные внутри него. В Java есть 3 модификатора: государственные, частные и защищенные. Каждый модификатор дает различные права доступа к другим объектам, расположенным в одном пакете или в разных пакетах.
Вот некоторые из преимуществ использования инкапсуляции:
Обратитесь к этому документу для получения более подробной информации и примеров о инкапсуляции.
Полиморфный
Полиморфизм - это способность языков программирования демонстрировать одни и те же интерфейсы для разных основных типов данных. Операции на полиморфном типе могут быть применены к другим типам значений.
наследовать
Наследование предоставляет объекты возможность получать поля и методы из базовых классов. Наследство обеспечивает повторно используемые строки кода, а также может добавить новые функции к существующим классам без их изменения.
абстрактный
Абстракция - это шаг отделения идей от конкретных экземпляров, поэтому создайте классы на основе их функциональности, а не на деталях реализации. Java поддерживает создание абстрактных классов, которые разоблачают только интерфейсы, но не включают в себя реализации методов. Основная цель этого абстрактного метода - отделить поведение класса от деталей реализации.
Разница между абстракцией и инкапсуляцией
Абстракция и инкапсуляция являются дополнительными понятиями. С одной стороны, Abstract фокусируется на поведении объектов. С другой стороны, инкапсуляция фокусируется на деталях поведения объекта. Как правило, инкапсуляция достигается путем скрытия информации о внутреннем состоянии объекта. Следовательно, инкапсуляция может рассматриваться как стратегия для обеспечения абстракции.
Обычные проблемы Java
1. Что такое виртуальная машина Java? Почему Java называется «независимым от платформы языка программирования»?
Виртуальная машина Java - это процесс виртуальной машины, который может выполнить байт -код Java. Исходный файл Java составлен в файл ByteCode, который может быть выполнен виртуальной машиной Java.
Java предназначена для того, чтобы позволить приложениям работать на любой платформе, не требуя, чтобы программисты переписывали или перекомпилировали каждую платформу отдельно. Виртуальные машины Java делают это возможным, потому что он знает длину инструкции и другие функции базовой аппаратной платформы.
2. В чем разница между JDK и JRE?
Среда выполнения Java (JRE) - это виртуальная машина Java, которая выполнит программы Java. Он также включает в себя плагины браузера, необходимые для выполнения апплетов. Инструментарий Java Development (JDK) - это полный пакет разработки программного обеспечения Java, который включает JRE, компилятор и другие инструменты (такие как Javadoc, Java Debugger), который позволяет разработчикам разрабатывать, компилировать и выполнять приложения Java.
3. Что означает «статическое» ключевое слово? Могу ли я переопределить частный или статический метод в Java?
Ключевое слово «статическое» указывает на то, что к элементной переменной или методу члена можно получить доступ без переменной экземпляра класса, к которому она принадлежит.
Статический метод в Java не может быть перезаписан, поскольку перезапись метода основан на динамическом связывании времени выполнения, в то время как статический метод является статическим связыванием во время компиляции. Статический метод не связан с каким -либо экземпляром класса, поэтому он не применяется концептуально.
4. Можно ли получить доступ к нестатическим переменным в статической среде?
Статическая переменная принадлежит классу в Java, а ее значение во всех случаях одинакова. Когда класс загружен виртуальной машиной Java, статическая переменная будет инициализирована. Если ваш код пытается получить доступ к нестатическим переменным без экземпляров, компилятор сообщит об ошибке, поскольку эти переменные еще не были созданы и не были связаны с какими-либо экземплярами.
5. Какие типы данных поддерживаются Java? Что такое автоматическая разборка?
Основные типы данных, поддерживаемые Java Language:
Автоматическое бокс - это преобразование, сделанное компилятором Java между основным типом данных и соответствующим типом обертки объекта. Например: преобразовать int в целое число, двойной в двойной и т. Д. В противном случае это автоматическое распаковка.
6. Что означают переоценка метода и перегрузка метода в Java?
Перегрузка метода в Java происходит, когда два или более метода имеют одинаковые имена методов, но разные параметры в одном классе. Напротив, переопределение метода означает, что подкласс переопределяет метод родительского класса. Переопределения метода должны иметь одинаковое имя метода, список параметров и тип возврата. Перепроворитель не может ограничивать доступ к методам, которые он охватывает.
7. Что такое конструктор на Java? Что такое перегрузка конструктора? Что такое конструктор копирования?
Когда создается новый объект, конструктор называется. У каждого класса есть конструктор. Когда программист не обеспечивает конструктор для класса, компилятор Java создаст конструктор по умолчанию для класса.
Перегрузка конструктора и перегрузка методов в Java очень похожи. Несколько конструкторов могут быть созданы для класса. Каждый конструктор должен иметь свой собственный уникальный список параметров.
Java не поддерживает конструкторы копирования, как в C ++. Эта разница в том, что если вы не напишете конструктор самостоятельно, Java не создаст конструктор копии по умолчанию.
8. Поддерживает ли Java множественное наследство?
Не поддерживается, Java не поддерживает множественное наследство. Каждый класс может наследовать только один класс, но может реализовать несколько интерфейсов.
9. В чем разница между интерфейсом и абстрактным классом?
Java предоставляет и поддерживает создание абстрактных классов и интерфейсов. Их реализации имеют сходство, а различия:
Вы также можете ссылаться на разницу между абстрактными классами и интерфейсами в JDK8
10. Каковы прохождение стоимости и прохождение ссылки?
Объект передается значением, что означает, что копия объекта передается. Следовательно, даже если копия объекта изменяется, значение исходного объекта не будет затронуто.
Объект передается с помощью ссылки, что означает, что это не фактический объект, но справочник объекта. Следовательно, внешние изменения в указанном объекте будут отражены во всех объектах.
Java Threads
11. В чем разница между процессом и потоком?
Процесс - это выполняющее приложение, а поток - это последовательность выполнения в процессе. Процесс может иметь несколько потоков. Потоки также называются легкими процессами.
12. Сколько существует разных способов создания потоков? Какой вам нравится? Почему?
Есть три способа создания потоков:
Реализация запускаемого интерфейса является более популярной, потому что он не требует наследства класса потоков. Когда другие объекты были унаследованы в дизайне приложения, это требует множественного наследования (в то время как Java не поддерживает множественное наследство), он может реализовать только интерфейсы. В то же время, пулы потоков также очень эффективны и просты в реализации и использовании.
13. Краткое объяснение нескольких доступных состояний потоков.
Во время исполнения потоки могут быть в следующих состояниях:
14. В чем разница между методом синхронизации и блоком кода синхронизации?
На языке Java у каждого объекта есть блокировка. Потоки могут использовать ключевое слово синхронизированного для получения блокировки на объектах. Синхронизированное ключевое слово может быть применено на уровне метода (крупнозернистый блокировка) или на уровне блока кода (мелкозернистый блокировка).
15. Как синхронизировать потоки в мониторе? На каком уровне синхронизации следует делать программа?
Мониторы и замки используются вместе в виртуальных машинах Java. Монитор контролирует синхронный кодовый блок, гарантируя, что только один поток выполняет блок синхронного кода за раз. Каждый монитор связан со ссылкой на объект. Потоки не позволяют выполнять код синхронизации перед получением блокировки.
16. Что такое тупик?
Когда оба процесса ждут, пока другая сторона завершит выполнение, прежде чем продолжить выполнение, возникает тупик. Результатом является то, что оба процесса попали в бесконечное ожидание.
17. Как гарантировать, что n потоков могут получить доступ к N Resources, не вызывая тупики?
При использовании многопоточного чтения очень простой способ избежать тупиков - указать порядок, в котором приобретаются блокировки, и заставить поток приобрести блокировки в указанном порядке. Поэтому, если все потоки блокируются и отпускают блокировки в одном и том же порядке, не будет тупика.
Java Collection Class
18. Каковы основные интерфейсы фреймворка класса Java Collection?
Классы коллекции Java предоставляют хорошо разработанный набор интерфейсов и классов, которые поддерживают операции на наборе объектов. Самыми основными интерфейсами в классах коллекции Java являются:
19. Почему класс сбора не реализует клонируемые и сериализуемые интерфейсы?
Интерфейс класса коллекции определяет набор объектов, называемых элементами. Каждый конкретный класс реализации интерфейса класса коллекции может выбрать для сохранения и сортировки элементов по -своему. Некоторые классы сбора позволяют дублировать ключи, а другие - нет.
20. Что такое итератор?
Интерфейс итератора предоставляет много способов итерации по элементам сбора. Каждый класс сбора содержит итеративные методы, которые могут вернуть экземпляр итератора. Итератор может удалить элементы базовой коллекции во время итерации.
Семантика и значения клонирования или сериализации связаны с конкретными реализациями. Следовательно, конкретная реализация класса сбора должна определять, как быть клонированным или сериализованным.
21. В чем разница между итератором и списков?
Разница указана ниже:
22. В чем разница между быстрым сбоем (сбой) и безопасным сбоем (сбой)?
Отказ безопасности итератора основан на создании копий базовой коллекции, поэтому на него не влияют модификации в коллекции источников. Все классы сбора в рамках пакета Java.Util быстро не сработают, в то время как все классы в пакете java.util.concurrent стержат безопасно. Быстрый итератор выбросит исключение CondurentModificationException, в то время как итератор с безопасным проживанием никогда не вызовет такое исключение.
23. Каков принцип работы HashMap в Java?
Hashmap в Java хранят элементы в форме пар ключей. HashMap требует хеш -функции, которая использует методы HashCode () и Equals () для добавления и извлечения элементов в/из коллекции. Когда метод put () называется, HashMap рассчитывает значение хэш -значения ключа, а затем сохраняет пары значений ключа в соответствующем индексе в наборе. Если ключ уже существует, значение будет обновлено до нового значения. Некоторые важные особенности HashMap - его емкость, коэффициент нагрузки и пороговое изменение размера.
24. Где отражается важность HashCode () и Equals () методов?
Hashmap в Java использует методы HashCode () и equals () для определения индекса пар клавишных значений. Эти два метода также будут использоваться при получении значений на основе ключей. Если эти два метода не реализованы правильно, два разных клавиша могут иметь одинаковое значение хэша и, следовательно, могут считаться равным набором. Более того, эти два метода также используются для обнаружения дублирующих элементов. Следовательно, реализация этих двух методов имеет решающее значение для точности и правильности HashMap.
25. В чем разница между Hashmap и Hashtable?
26. В чем разница между массивом (массивом) и списком (Arraylist)? Когда мне следует использовать массив вместо ArrayList?
В следующем перечислены различия между массивом и ArrayList:
27. В чем разница между Arraylist и LinkedList?
Как ArrayList, так и LinkedList реализуют интерфейсы списка, и они имеют следующие различия:
ArrayList-это интерфейс данных на основе индекса, а его базовый уровень-это массив. Это обеспечивает случайный доступ к элементам со сложностью O (1). Соответственно, LinkedList сохраняет свои данные в форме списка элементов, каждый элемент связан с его предыдущими и следующими элементами. В этом случае временная сложность поиска элемента - O (n).
По сравнению с ArrayList вставка, добавление и удаление LinkedList более быстрее, потому что, когда элементы добавляются в любую позицию в сборе, нет необходимости пересказывать размер или обновить индекс, как массив.
LinkedList занимает больше памяти, чем ArrayList, потому что LinkedList сохраняет две ссылки для каждого узла, один из которых указывает на предыдущий элемент и один указывает на следующий элемент.
Вы также можете обратиться к Arraylist против LinkedList.
28. Что делают сопоставимые и компараторные интерфейсы? Перечислите их различия.
Java обеспечивает сопоставимый интерфейс, который содержит только один метод сравнения (). Этот метод может сортировать два объекта. В частности, он возвращает отрицательное число, 0 и положительное число, чтобы указать, что входной объект меньше, равен и больше, чем уже существующий объект.
Java предоставляет интерфейс компаратора, который включает в себя два метода: compare () и equals (). Метод compare () используется для сортировки двух входных параметров, возврата отрицательного числа, 0, а положительное число указывает, что первый параметр меньше, чем, равен и больше, чем второй параметр. Метод equals () требует объекта в качестве параметра, который используется для определения того, является ли входной параметр равным компаратору. Этот метод возвращает true только тогда, когда входной параметр также является компаратором, а входной параметр, а текущий результат сортировки сортировки компаратора одинакова.
29. Что такое java -приоритетная очередь?
Приоритет - это неограниченная очередь, основанная на приоритетной куче, и ее элементы сортируются в естественном порядке. При создании мы можем предоставить ему компаратор, ответственный за сортировку элементов. Приоритет quiequeue не допускает нулевых значений, потому что они не имеют естественного порядка, или у них нет связанных компараторов. Наконец, PriorityQueue не является резьбой, а временная сложность входящего и декеуэя-O (log (n)).
30. Вы понимаете большой символ O (Big-O обозначения)? Можете ли вы привести примеры различных структур данных?
Большой символ О описывает, насколько хороша масштаб или производительность алгоритма в худшем сценарии, когда элементы в структуре данных увеличиваются.
Большие O -символы также могут быть использованы для описания других поведений, таких как потребление памяти. Поскольку классы сбора на самом деле являются структурой данных, мы обычно используем большие символы O, чтобы выбрать лучшую реализацию в зависимости от времени, памяти и производительности. Большие символы O могут дать хорошее объяснение производительности больших объемов данных.
31. Как обменять, использовать ли неупорядоченный массив или упорядоченный массив?
Самым большим преимуществом упорядоченного массива является то, что временная сложность поиска составляет O (log n), а неупорядоченный массив - O (n). Недостатком упорядоченных массивов является то, что временная сложность операции вставки составляет O (n), потому что элементы с большими значениями необходимо перемещать назад, чтобы освободить место для нового элемента. Напротив, сложность времени вставки неупорядоченного массива является постоянной O (1).
32. Каковы лучшие практики для фреймворков класса Java Collection?
Правильный выбор типа коллекции, который будет использоваться в соответствии с потребностями приложения, очень важен для производительности. Например: если размер элемента фиксирован и может быть известен заранее, мы должны использовать массив вместо ArrayList.
Некоторые классы сбора позволяют определять начальную емкость. Поэтому, если мы сможем оценить количество хранимых элементов, мы можем установить начальную емкость, чтобы избежать пересчитывания значения хэша или их расширения.
Для безопасности типа, читаемости и надежности всегда используются дженерики. В то же время, использование Generics также может избежать ClassCastException во время выполнения.
Использование неизменного класса, предоставленного JDK в качестве ключа к карте, может избежать реализации методов HashCode () и equals () для наших собственных классов.
Интерфейсы лучше, чем реализация при программировании.
Когда базовая коллекция на самом деле пуста, верните набор или массив с длиной 0, и не возвращайте NULL.
33. Каковы различия между интерфейсом перечисления и интерфейсом итератора?
Перечисление в два раза быстрее, чем итератор, одновременно потребляя меньше памяти. Тем не менее, итератор намного безопаснее, чем перечисление, потому что другие потоки не могут модифицировать объекты в коллекции, проходящих итератор. В то же время итератор позволяет вызывающему вынуждению удалять элементы в базовой коллекции, что невозможно для перечисления.
34. В чем разница между хэшсом и деревьями?
Hashset реализован хэш -таблицей, поэтому его элементы неупорядылись. Временная сложность add (), rement () и содержит () методы o (1).
С другой стороны, Treesset реализован структурой в форме дерева, а элементы внутри него заказаны. Следовательно, временная сложность add (), удаления () и содержит () методы o (logn).
Коллекционеры мусора
35. Какова цель сбора мусора в Java? Когда будет собрана мусор?
Цель сбора мусора состоит в том, чтобы определить и отказаться от объектов, которые приложение больше не использует для освобождения и повторного использования ресурсов.
36. Что будут делать System.gc () и Runtime.gc ()?
Эти два метода используются для того, чтобы побудить JVM для выполнения сборки мусора. Тем не менее, начиная сразу или задержка сбора мусора зависит от JVM.
37. Когда называется метод Finalize ()? Какова цель деструкторов?
Прежде чем освободить память, занятую объектом, сборщик мусора вызывает метод объекта infintize (). Обычно рекомендуется выпускать ресурсы, удерживаемые объектами в этом методе.
38. Если ссылка на объект установлена на NULL, немедленно ли сборщик мусора будет немедленно отпустить память, занятую объектом?
Нет, этот объект будет пригодным для переработки в следующем цикле сбора мусора.
39. Как выглядит структура кучи Java? Что такое пространство пермама в куче?
Куча JVM - это область данных времени выполнения, и все экземпляры и массивы классов выделяются памятью на куче. Это создано, когда JVM начинается. Память кучи, занятая объектом, собирается автоматической системой управления памятью, то есть коллекционером мусора.
Хиповая память состоит из объектов, которые выживают и умирают. Выжившие объекты доступны для приложения и не будут собирать мусор. Мертвый объект - это объект, который не доступен для приложения и не был переработан коллекционером мусора. Они будут занимать пространство памяти кучи, пока коллектор мусора не восстановит эти объекты.
40. В чем разница между серийным коллекционером и коллекционером пропускной способности?
Коллекционеры пропускной способности используют параллельные версии следующего поколения коллекционеров мусора, которые используются для приложений со средним и крупномасштабным данных. Серийные коллекционеры достаточно для большинства небольших приложений (нужно около 100 м памяти на современных процессорах).
41. На Java, когда объекты могут быть собраны мусором?
Когда объект становится недоступным для приложения, в настоящее время используя этот объект, объект может быть переработан.
42. Произойдет ли сбор мусора в постоянном поколении JVM?
Сбор мусора не будет происходить в постоянном поколении. Если постоянное поколение заполнено или превышает критическое значение, оно запустит полную коллекцию мусора (полный GC). Если вы тщательно проверьте выходную информацию коллектора мусора, вы обнаружите, что постоянное поколение также переработано. Вот почему правильный размер постоянного поколения очень важен, чтобы избежать полного GC. Пожалуйста, обратитесь к Java 8: От постоянного поколения до зоны метаданных
(Примечание переводчика: постоянное поколение было удалено в Java 8, и была добавлена новая местная область памяти, называемую области метаданных)
Выше приведено сборник информации о вопросах на интервью Java. Мы будем продолжать добавлять соответствующую информацию в будущем. Спасибо за вашу поддержку на этом сайте!