1652959152
В этом блоге вы найдете более 100 наиболее часто задаваемых вопросов на собеседовании по Java и Core Java, а также ответы на них, которые вы должны подготовить, чтобы пройти собеседование.
В этом блоге Java Interview Questions я собираюсь перечислить некоторые из наиболее важных вопросов и ответов по Java-программированию, которые помогут вам выделиться в процессе собеседования. Java используется примерно 10 миллионами разработчиков по всему миру для разработки приложений для 15 миллиардов устройств, поддерживающих Java. Он также используется для создания приложений для популярных технологий, таких как большие данные, для бытовых устройств, таких как мобильные телефоны и коробки DTH. И поэтому сегодня Java используется повсеместно! Вот почему сертификация Java является наиболее востребованной сертификацией в области программирования.
Давайте начнем с рассмотрения некоторых наиболее часто задаваемых вопросов на собеседовании по Java.
Мы составили список самых популярных вопросов для собеседования по Java, которые разделены на 7 разделов, а именно:
Для профессионала в области Java очень важно знать правильные модные словечки, изучать правильные технологии и готовить правильные ответы на часто задаваемые вопросы на собеседованиях по Java. Вот окончательный список лучших вопросов для собеседования по Java, которые гарантируют переход на следующий уровень.
Итак, давайте начнем с первого набора основных вопросов для собеседования по Java.
JDK | JRE | JVM |
Это расшифровывается как Java Development Kit. | Это расшифровывается как Java Runtime Environment. | Это расшифровывается как виртуальная машина Java. |
Это инструмент, необходимый для компиляции, документирования и упаковки программ Java. | JRE относится к среде выполнения, в которой может выполняться байт-код Java. | Это абстрактная машина. Это спецификация, обеспечивающая среду выполнения, в которой может выполняться байт-код Java. |
Он содержит инструменты разработки JRE +. | Это реализация JVM, которая физически существует. | JVM следует трем нотациям: спецификация, реализация и экземпляр среды выполнения . |
main() в Java — это точка входа для любой Java-программы. Он всегда записывается как public static void main(String[] args) .
Java называется независимой от платформы из-за ее байтовых кодов, которые могут работать в любой системе, независимо от базовой операционной системы.
Java не на 100% объектно-ориентирована, потому что использует восемь примитивных типов данных, таких как boolean, byte, char, int, float, double, long, short, которые не являются объектами.
Классы-оболочки преобразуют примитивы Java в ссылочные типы (объекты). Каждому примитивному типу данных соответствует свой класс. Они известны как классы-оболочки, потому что они «обертывают» примитивный тип данных в объект этого класса. Обратитесь к изображению ниже, которое отображает другой тип примитива, класс-оболочку и аргумент конструктора.
В Java конструктор относится к блоку кода, который используется для инициализации объекта. Он должен иметь то же имя, что и класс. Кроме того, он не имеет возвращаемого типа и автоматически вызывается при создании объекта.
Существует два типа конструкторов:
Класс Singleton — это класс, только один экземпляр которого может быть создан в любой момент времени в одной JVM. Класс можно сделать одноэлементным, сделав его конструктор закрытым.
ArrayList | Вектор |
---|---|
Список массивов не синхронизирован. | Вектор синхронизирован. |
Array List работает быстро, так как не синхронизируется. | Vector медленный, поскольку он потокобезопасен. |
Если элемент вставляется в список массивов, он увеличивает размер своего массива на 50%. | Вектор по умолчанию удваивает размер своего массива. |
Список массивов не определяет размер приращения. | Вектор определяет размер приращения. |
Список массивов может использовать итератор только для обхода списка массивов. | Vector может использовать как Enumeration, так и Iterator для обхода. |
Метод Equals() определен в классе Object в Java и используется для проверки равенства двух объектов, определенных бизнес-логикой.
«==» или оператор равенства в Java — это бинарный оператор, предоставляемый языком программирования Java и используемый для сравнения примитивов и объектов. public boolean equals(Object o) — это метод, предоставляемый классом Object. Реализация по умолчанию использует оператор == для сравнения двух объектов. Например: метод может быть переопределен как класс String. Метод equals() используется для сравнения значений двух объектов.
В Java ключевое слово super — это ссылочная переменная, которая ссылается на непосредственный объект родительского класса.
Когда вы создаете экземпляр подкласса, вы также создаете экземпляр родительского класса, на который ссылается суперссылочная переменная.
Использование ключевого слова Java super Keyword:
Хэшсет | Набор деревьев |
Это реализовано через хеш-таблицу. | TreeSet реализует интерфейс SortedSet, который использует деревья для хранения данных. |
Он разрешает нулевой объект. | Он не допускает нулевой объект. |
Это быстрее, чем TreeSet, особенно для операций поиска, вставки и удаления. | Для этих операций он медленнее, чем HashSet. |
Он не поддерживает элементы в упорядоченном виде. | Элементы поддерживаются в отсортированном порядке. |
Он использует метод equals() для сравнения двух объектов. | Он использует метод compareTo() для сравнения двух объектов. |
Он не допускает гетерогенный объект. | Он допускает неоднородный объект. |
Q12. В чем разница между HashMap и HashTable в Java?
HashMap | Хеш-таблица |
Он не синхронизирован. Он не может быть разделен между многими потоками без надлежащего кода синхронизации. | Он синхронизирован. Он потокобезопасен и может совместно использоваться многими потоками. |
Он допускает один нулевой ключ и несколько нулевых значений. | Он не допускает использования нулевого ключа или значения. |
— это новый класс, представленный в JDK 1.2. | Он присутствовал и в более ранних версиях Java. |
Это быстрее. | Это медленнее. |
Он проходит через итератор. | Он проходит через Enumerator и Iterator. |
Он использует отказоустойчивый итератор. | Он использует счетчик, который не дает сбоев быстро. |
Он наследует класс AbstractMap. | Он наследует класс Dictionary. |
Q13. Какова важность отражения в Java?
Reflection — это API времени выполнения для проверки и изменения поведения методов, классов и интерфейсов. Java Reflection — это мощный инструмент, который может быть действительно полезным. Java Reflection позволяет анализировать классы, интерфейсы, поля и методы во время выполнения, не зная, как они называются во время компиляции. Отражение также можно использовать для создания новых объектов, методов вызова и получения/установки значений полей. Внешние пользовательские классы можно использовать, создавая экземпляры объектов расширяемости с их полными именами. Отладчики также могут использовать отражение для проверки закрытых членов классов.
Q14. Как запретить сериализацию атрибутов класса в Java?
Атрибут NonSerialized можно использовать для предотвращения сериализации переменных-членов.
Вы также должны сделать объект, который потенциально может содержать конфиденциальные данные, несериализуемым, если это возможно. Примените атрибут NonSerialized к определенным полям, в которых хранятся конфиденциальные данные, если объект должен быть сериализован. Если вы не исключите эти поля из сериализации, хранящиеся в них данные будут видны любым программам с разрешением на сериализацию.
Q15. Можно ли вызвать конструктор класса внутри другого конструктора?
Да, мы можем вызвать конструктор класса внутри другого конструктора. Это также называется цепочкой конструкторов. Цепочка конструкторов может быть выполнена двумя способами:
Q16. Непрерывные области памяти обычно используются для хранения фактических значений в массиве, но не в ArrayList. Объяснять.
Массив обычно содержит элементы примитивных типов данных, таких как int, float и т. д. В таких случаях массив непосредственно хранит эти элементы в смежных ячейках памяти. Хотя ArrayList не содержит примитивных типов данных. ArrayList содержит ссылку на объекты в разных местах памяти, а не на сам объект. Вот почему объекты не хранятся в смежных ячейках памяти.
Q17. Чем создание строки с использованием new() отличается от литерала?
Когда мы создаем строку с помощью new(), создается новый объект. Принимая во внимание, что если мы создадим строку, используя синтаксис строкового литерала, она может вернуть уже существующий объект с тем же именем.
Q18. Зачем нужна синхронизация? Объясните с помощью соответствующего примера.
Java позволяет выполнять несколько потоков. Они могут обращаться к одной и той же переменной или объекту. Синхронизация помогает выполнять потоки один за другим.
Это важно, так как помогает выполнять все параллельные потоки при синхронизации. Это предотвращает ошибки согласованности памяти из-за доступа к общей памяти. Пример кода синхронизации:
public synchronized void increment()
{
a++;
}
Поскольку мы синхронизировали эту функцию, этот поток может использовать объект только после того, как его использовал предыдущий поток.
Q19. Объясните термин «инициализация двойной скобки» в Java?
Инициализация двойной скобки — это термин Java, который относится к комбинации двух независимых процессов. При этом используются две скобки. Первая фигурная скобка создает анонимный внутренний класс. Вторая фигурная скобка — это блок инициализации. Когда они оба используются вместе, это называется инициализацией двойной скобки. Внутренний класс имеет ссылку на окружающий внешний класс, обычно используя указатель this. Он используется для создания и инициализации в одном операторе. Обычно он используется для инициализации коллекций. Это уменьшает код, а также делает его более читаемым.
Q20. Почему говорят, что метод length() класса String не возвращает точных результатов?
Метод length() класса String не возвращает точных результатов, потому что
он просто учитывает количество символов в строке. Другими словами, кодовые точки за пределами BMP (базовой многоязычной плоскости), то есть кодовые точки, имеющие значение U+10000 или выше, будут игнорироваться.
Причина этого историческая. Одной из первоначальных целей Java было рассматривать весь текст как Unicode; тем не менее, в то время Unicode не определял кодовые точки вне BMP. Было слишком поздно изменять char к тому времени, когда Unicode указывал такие кодовые точки.
Q21. Каковы различия между кучей и памятью стека в Java?
Основное различие между памятью Heap и Stack:
Функции | Куча | куча |
---|---|---|
объем памяти | Память стека используется только одним потоком выполнения. | Куча памяти используется всеми частями приложения. |
Доступ | Память стека не может быть доступна другим потокам. | Объекты, хранящиеся в куче, доступны глобально. |
Управление памятью | Применяет метод LIFO для освобождения памяти. | Управление памятью основано на генерации, связанной с каждым объектом. |
Продолжительность жизни | Существует до конца выполнения потока. | Память кучи живет от начала до конца выполнения приложения. |
использование | Память стека содержит только локальные примитивные и ссылочные переменные для объектов в куче. | Всякий раз, когда создается объект, он всегда сохраняется в пространстве кучи. |
Пакеты в Java — это набор связанных классов и интерфейсов, объединенных вместе. Используя пакеты, разработчики могут легко разбить код на модули и оптимизировать его повторное использование. Кроме того, код внутри пакетов может быть импортирован другими классами и использован повторно. Ниже я перечислил несколько его преимуществ:
Java не использует указатели, потому что они небезопасны и усложняют программу. Поскольку Java известна своей простотой кода, добавление концепции указателей будет противоречивым. Более того, поскольку JVM отвечает за неявное выделение памяти, чтобы избежать прямого доступа пользователя к памяти, указатели в Java не рекомендуются.
JIT означает компилятор Just-In-Time в Java. Это программа, которая помогает преобразовывать байт-код Java в инструкции, которые отправляются непосредственно в процессор. По умолчанию JIT-компилятор включен в Java и активируется всякий раз, когда вызывается метод Java. Затем компилятор JIT компилирует байт-код вызванного метода в собственный машинный код, компилируя его «как раз вовремя» для выполнения. Как только метод скомпилирован, JVM вызывает скомпилированный код этого метода напрямую, а не интерпретирует его. Вот почему он часто отвечает за оптимизацию производительности Java-приложений во время выполнения.
В Java модификаторы доступа — это специальные ключевые слова, которые используются для ограничения доступа к классу, конструктору, члену данных и методу в другом классе. Java поддерживает четыре типа модификаторов доступа:
Модификатор | По умолчанию | Частный | Защищено | Общественный |
Тот же класс | ДА | ДА | ДА | ДА |
Тот же подкласс пакета | ДА | НЕТ | ДА | ДА |
Тот же пакет без подкласса | ДА | НЕТ | ДА | ДА |
Другой подкласс пакета | НЕТ | НЕТ | ДА | ДА |
Другой пакет без подкласса | НЕТ | НЕТ | НЕТ | ДА |
Класс в Java — это план, который включает в себя все ваши данные. Класс содержит поля (переменные) и методы для описания поведения объекта. Давайте посмотрим на синтаксис класса.
class Abc {
member variables // class body
methods}
Объект — это сущность реального мира, которая имеет состояние и поведение. Объект имеет три характеристики:
Объект создается с использованием ключевого слова «новое». Например:
ИмяКласса obj = новое ИмяКласса();
Объектно-ориентированное программирование или широко известное как ООП — это модель программирования или подход, при котором программы организованы вокруг объектов, а не логики и функций. Другими словами, ООП в основном фокусируется на объектах, которыми необходимо манипулировать, а не на логике. Этот подход идеален для программ с большими и сложными кодами, которые необходимо активно обновлять или поддерживать.
Объектно-ориентированное программирование или ООП — это стиль программирования, связанный с такими понятиями, как:
В Java локальная переменная обычно используется внутри метода, конструктора или блока и имеет только локальную область видимости. Таким образом, эту переменную можно использовать только в рамках блока. Лучшее преимущество наличия локальной переменной заключается в том, что другие методы в классе даже не будут знать об этой переменной.
if(x > 100)
{
String test = "Edureka";
}
Принимая во внимание, что переменная экземпляра в Java - это переменная, которая ограничена самим своим объектом. Эти переменные объявляются внутри класса , но вне метода. Каждый объект этого класса будет создавать свою собственную копию переменной при ее использовании. Таким образом, любые изменения, внесенные в переменную, не будут отражаться ни в каких других экземплярах этого класса и будут привязаны только к этому конкретному экземпляру.
class Test{
public String EmpName;
public int empAge;
}
Методы | Конструкторы |
1. Используется для представления поведения объекта | 1. Используется для инициализации состояния объекта |
2. Должен иметь возвращаемый тип | 2. Не иметь возвращаемого типа |
3. Необходимо вызывать явно | 3. Вызывается неявно |
4. Компилятор не предоставляет метод по умолчанию | 4. Конструктор по умолчанию предоставляется компилятором, если в классе его нет. |
5. Имя метода может совпадать или не совпадать с именем класса. | 5. Имя конструктора всегда должно совпадать с именем класса. |
Если вы столкнулись с какими-либо трудностями при ответе на эти вопросы интервью по Core Java, прокомментируйте свои проблемы в разделе ниже.
final — это специальное ключевое слово в Java, которое используется в качестве модификатора доступа. Конечная переменная может использоваться в различных контекстах, таких как:
Когда ключевое слово final используется с переменной, ее значение не может быть изменено после присвоения. Если конечной переменной не присвоено значение, то с помощью только конструктора класса ей можно присвоить значение.
Когда метод объявлен окончательным, он не может быть переопределен наследующим классом.
Когда класс объявлен как final в Java, он не может быть расширен каким-либо классом подкласса, но может расширять другой класс.
перемена | Продолжать |
1. Может использоваться в операторах switch и loop (for, while, do while). | 1. Может использоваться только с операторами цикла |
2. Это приводит к тому, что операторы переключения или цикла завершаются в момент их выполнения. | 2. Цикл не прерывается, но цикл переходит к следующей итерации. |
3. Он немедленно завершает самый внутренний охватывающий цикл или переключатель. | 3. Продолжение в цикле, вложенном в переключатель, приведет к выполнению следующей итерации цикла. |
Пример перерыва:
for (int i = 0; i < 5; i++)</div>
<div>
<pre>{
if (i == 3)
{
break;
}
System.out.println(i);
}
Пример продолжения:
for (int i = 0; i < 5; i++)
{
if(i == 2)
{
continue;
}
System.out.println(i);
}
Бесконечный цикл — это последовательность инструкций в Java, которая бесконечно зацикливается, когда функциональный выход не встречается. Этот тип цикла может быть результатом ошибки программирования или также может быть преднамеренным действием, основанным на поведении приложения. Бесконечный цикл завершится автоматически после выхода из приложения.
Например:
public class InfiniteForLoopDemo
{
public static void main(String[] arg) {
for(;;)
System.out.println("Welcome to Edureka!");
// To terminate this program press ctrl + c in the console.
}
}
В Java super() и this() являются специальными ключевыми словами, которые используются для вызова конструктора.
это() | супер() |
1. this() представляет текущий экземпляр класса | 1. super() представляет текущий экземпляр родительского/базового класса |
2. Используется для вызова конструктора по умолчанию того же класса. | 2. Используется для вызова конструктора по умолчанию родительского/базового класса. |
3. Используется для доступа к методам текущего класса | 3. Используется для доступа к методам базового класса |
4. Используется для указания текущего экземпляра класса | 4. Используется для указания экземпляра суперкласса |
5. Должна быть первой строкой блока | 5. Должна быть первой строкой блока |
Пул строк Java относится к набору строк, которые хранятся в куче памяти. При этом всякий раз, когда создается новый объект, пул строк сначала проверяет, присутствует ли этот объект в пуле или нет. Если он присутствует, то в переменную возвращается та же ссылка, иначе в пуле строк будет создан новый объект, и будет возвращена соответствующая ссылка.
Статический метод | Нестатический метод |
1. Ключевое слово static должно использоваться перед именем метода. | 1. Не нужно использовать ключевое слово static перед именем метода. |
2. Вызывается с помощью класса (className.methodName) | 2. Может вызываться как любой общий метод |
3. Они не могут получить доступ к каким-либо нестатическим переменным или методам экземпляра. | 3. Он может получить доступ к любому статическому методу и любой статической переменной без создания экземпляра класса. |
Инициализация двойной скобки — это термин Java, который относится к комбинации двух независимых процессов. При этом используются две скобки. Первая фигурная скобка создает анонимный внутренний класс. Вторая фигурная скобка — это блок инициализации. Когда они оба используются вместе, это называется инициализацией двойной скобки. Внутренний класс имеет ссылку на окружающий внешний класс, обычно используя указатель this. Он используется для создания и инициализации в одном операторе. Обычно он используется для инициализации коллекций. Это уменьшает код, а также делает его более читаемым.
В Java цепочка конструкторов — это процесс вызова одного конструктора из другого по отношению к текущему объекту. Цепочка конструкторов возможна только через наследие, где конструктор подкласса отвечает за вызов конструктора суперкласса в первую очередь. В цепочке конструкторов может быть любое количество классов. Цепочка конструкторов может быть достигнута двумя способами:
Q40. Разница между String, StringBuilder и StringBuffer.
Фактор | Нить | StringBuilder | Строковый буфер |
Зона хранения | Постоянный пул строк | Площадь кучи | Площадь кучи |
Изменчивость | Неизменный | Изменяемый | Изменяемый |
Безопасность потока | Да | Нет | Да |
Спектакль | Быстро | Более эффективным | Менее эффективны |
Java ClassLoader — это подмножество JVM (виртуальная машина Java), которое отвечает за загрузку файлов классов. Всякий раз, когда программа Java выполняется, она сначала загружается загрузчиком классов. Java предоставляет три встроенных загрузчика классов:
В Java строковые объекты являются неизменяемыми по своей природе, что просто означает, что после создания объекта String его состояние не может быть изменено. Всякий раз, когда вы пытаетесь обновить значение этого объекта вместо обновления значений этого конкретного объекта, Java создает новый строковый объект. Объекты Java String неизменяемы, поскольку объекты String обычно кэшируются в пуле String. Поскольку строковые литералы обычно совместно используются несколькими клиентами, действия одного клиента могут повлиять на остальные. Это повышает безопасность, кэширование, синхронизацию и производительность приложения.
Множество | ArrayList |
---|---|
Не может содержать значения разных типов данных | Может содержать значения разных типов данных. |
Размер должен быть определен на момент объявления | Размер может быть динамически изменен |
Необходимо указать индекс для добавления данных | Не нужно указывать индекс |
Массивы не параметризуются по типу | Массивы имеют тип |
Массивы могут содержать как примитивные типы данных, так и объекты. | Списки массивов могут содержать только объекты, примитивные типы данных не допускаются. |
В Java Map — это интерфейс пакета Util, который сопоставляет уникальные ключи со значениями. Интерфейс карты не является подмножеством основного интерфейса коллекции, и поэтому его поведение мало отличается от других типов коллекций. Ниже приведены некоторые характеристики интерфейса карты:
Каждый ключ может отображать не более одного значения.
В Java коллекция — это структура, которая действует как архитектура для хранения и управления группой объектов. Используя коллекции, вы можете выполнять различные задачи, такие как поиск, сортировка, вставка, манипулирование, удаление и т. д. Платформа коллекций Java включает в себя следующее:
На изображении ниже показана полная иерархия коллекции Java.
Полиморфизм кратко описывается как «один интерфейс, множество реализаций». Полиморфизм — это характеристика способности присваивать различное значение или использование чему-либо в разных контекстах, в частности, позволять сущности, такой как переменная, функция или объект, иметь более одной формы. Существует два типа полиморфизма:
Полиморфизм времени компиляции — это перегрузка методов, тогда как полиморфизм времени выполнения выполняется с использованием наследования и интерфейса.
В Java полиморфизм времени выполнения или диспетчеризация динамического метода — это процесс, в котором вызов переопределенного метода разрешается во время выполнения, а не во время компиляции. В этом процессе переопределенный метод вызывается через ссылочную переменную суперкласса. Давайте посмотрим на пример ниже, чтобы понять его лучше.
class Car {
void run()
{
System.out.println(“car is running”);
}
}
class Audi extends Car {
void run()
{
System.out.prinltn(“Audi is running safely with 100km”);
}
public static void main(String args[])
{
Car b= new Audi(); //upcasting
b.run();
}
}
Абстракция относится к качеству работы с идеями, а не с событиями. В основном это связано с тем, чтобы скрыть детали и показать пользователю важные вещи. Таким образом, можно сказать, что абстракция в Java — это процесс сокрытия деталей реализации от пользователя и раскрытия им только функциональности. Абстракция может быть достигнута двумя способами:
Интерфейс в Java — это план класса или, можно сказать, набор абстрактных методов и статических констант. В интерфейсе каждый метод является общедоступным и абстрактным, но не содержит конструктора. Таким образом, интерфейс в основном представляет собой группу связанных методов с пустыми телами. Пример:
public interface Animal {
public void eat();
public void sleep();
public void run();
}
Абстрактный класс | Интерфейсы |
---|---|
Абстрактный класс может предоставлять полный код по умолчанию и/или только детали, которые необходимо переопределить. | Интерфейс вообще не может предоставлять никакого кода, только подпись |
В случае абстрактного класса класс может расширять только один абстрактный класс. | Класс может реализовывать несколько интерфейсов |
Абстрактный класс может иметь неабстрактные методы. | Все методы интерфейса абстрактны |
Абстрактный класс может иметь переменные экземпляра | Интерфейс не может иметь переменные экземпляра |
Абстрактный класс может иметь любую видимость: публичную, приватную, защищенную. | Видимость интерфейса должна быть общедоступной (или) отсутствовать |
Если мы добавим новый метод в абстрактный класс, у нас будет возможность предоставить реализацию по умолчанию, и, следовательно, весь существующий код может работать правильно. | Если мы добавим новый метод в интерфейс, мы должны отследить все реализации интерфейса и определить реализацию для нового метода. |
Абстрактный класс может содержать конструкторы | Интерфейс не может содержать конструкторы |
Абстрактные классы работают быстро | Интерфейсы работают медленно, так как для поиска соответствующего метода в реальном классе требуется дополнительная косвенность. |
Q6. Что такое наследование в Java?
Наследование в Java — это концепция, при которой свойства одного класса могут наследоваться другим. Это помогает повторно использовать код и устанавливать отношения между разными классами. Наследование осуществляется между двумя типами классов:
Класс, который наследует свойства, называется дочерним классом, тогда как класс, свойства которого унаследованы, называется родительским классом.
Java поддерживает четыре типа наследования:
Давайте посмотрим на пример ниже, чтобы понять его лучше.
class Adder {
Static int add(int a, int b)
{
return a+b;
}
Static double add( double a, double b)
{
return a+b;
}
public static void main(String args[])
{
System.out.println(Adder.add(11,11));
System.out.println(Adder.add(12.3,12.6));
}}
Давайте посмотрим на пример ниже, чтобы понять его лучше.
class Car {
void run(){
System.out.println(“car is running”);
}
Class Audi extends Car{
void run()
{
System.out.prinltn("Audi is running safely with 100km");
}
public static void main( String args[])
{
Car b=new Audi();
b.run();
}
}
Вы не можете переопределить частный или статический метод в Java. Если вы создадите аналогичный метод с тем же типом возвращаемого значения и теми же аргументами метода в дочернем классе, он скроет метод суперкласса; это известно как скрытие метода. Точно так же вы не можете переопределить закрытый метод в подклассе, потому что он там недоступен. Что вы можете сделать, так это создать еще один частный метод с тем же именем в дочернем классе. Давайте посмотрим на пример ниже, чтобы понять его лучше.
class Base {
private static void display() {
System.out.println("Static or class method from Base");
}
public void print() {
System.out.println("Non-static or instance method from Base");
}
class Derived extends Base {
private static void display() {
System.out.println("Static or class method from Derived");
}
public void print() {
System.out.println("Non-static or instance method from Derived");
}
public class test {
public static void main(String args[])
{
Base obj= new Derived();
obj1.display();
obj1.print();
}
}
Если дочерний класс наследует свойство от нескольких классов, это называется множественным наследованием. Java не позволяет расширять несколько классов.
Проблема с множественным наследованием заключается в том, что если несколько родительских классов имеют одно и то же имя метода, то во время выполнения компилятору становится трудно решить, какой метод выполнять из дочернего класса.
Поэтому Java не поддерживает множественное наследование. Эту проблему обычно называют алмазной проблемой.
Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.
Инкапсуляция — это механизм, в котором вы связываете свои данные (переменные) и код (методы) вместе как единое целое. Здесь данные скрыты от внешнего мира и доступны только через методы текущего класса. Это помогает защитить данные от любых ненужных изменений. Мы можем добиться инкапсуляции в Java следующим образом:
Ассоциация — это отношение, в котором все объекты имеют свой жизненный цикл и не имеют владельца. Возьмем пример Учителя и Ученика. Несколько учеников могут связываться с одним учителем, а один ученик может связываться с несколькими учителями, но между объектами нет собственности, и у обоих есть собственный жизненный цикл. Эти отношения могут быть «один к одному», «один ко многим», «многие к одному» и «многие ко многим».
Агрегация — это специализированная форма ассоциации, в которой все объекты имеют собственный жизненный цикл, но существует право собственности, а дочерний объект не может принадлежать другому родительскому объекту. Возьмем пример отдела и учителя. Один учитель не может принадлежать нескольким отделам, но если мы удалим объект учителя отдела, он не будет уничтожен.
Композиция снова является специализированной формой Агрегации, и мы можем назвать это отношением «смерти». Это сильный тип агрегации. Дочерний объект не имеет своего жизненного цикла, и если родительский объект удаляется, все дочерние объекты также будут удалены. Давайте снова возьмем пример отношений между Домом и комнатами. Дом может содержать несколько комнат, нет независимой жизни комнаты, и любая комната не может принадлежать двум разным домам, если мы удалим комнату дома, она будет удалена автоматически.
Q15. Что такое маркерный интерфейс?
Интерфейс маркера может быть определен как интерфейс, не имеющий данных-членов и функций-членов. Проще говоря, пустой интерфейс называется интерфейсом маркера. Наиболее распространенными примерами интерфейса Marker в Java являются Serializable, Cloneable и т. д. Интерфейс маркера можно объявить следующим образом.
public interface Serializable{
}
Q16. Что такое клонирование объектов в Java?
Клонирование объекта в Java — это процесс создания точной копии объекта. В основном это означает возможность создания объекта с состоянием, аналогичным исходному объекту. Для этого в Java предусмотрен метод clone() , позволяющий использовать эту функциональность. Этот метод создает новый экземпляр класса текущего объекта, а затем инициализирует все его поля точно таким же содержимым соответствующих полей. Для объекта clone() должен быть реализован интерфейс маркера java.lang.Cloneable , чтобы избежать каких-либо исключений во время выполнения. Одна вещь, которую вы должны отметить, это то, что Object clone() является защищенным методом, поэтому вам необходимо переопределить его.
Конструктор копирования — это функция-член, которая используется для инициализации объекта с использованием другого объекта того же класса. Хотя в Java нет необходимости в конструкторе копирования, поскольку все объекты передаются по ссылке. Более того, Java даже не поддерживает автоматическую передачу по значению.
В Java перегрузка конструктора — это метод добавления любого количества конструкторов в класс, каждый из которых имеет свой список параметров. Компилятор использует количество параметров и их типов в списке, чтобы различать перегруженные конструкторы.
class Demo
{
int i;
public Demo(int a)
{
i=k;
}
public Demo(int a, int b)
{
//body
}
}
Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.
Получить | Сообщение |
---|---|
Ограниченный объем данных может быть отправлен, поскольку данные отправляются в заголовке. | Большой объем данных может быть отправлен, поскольку данные отправляются в теле. |
Незащищено, так как данные отображаются в адресной строке. | Защищено, поскольку данные не отображаются в адресной строке. |
Можно добавить в закладки | Нельзя добавить в закладки |
идемпотент | Неидемпотентный |
Он более эффективен и используется, чем Post | Он менее эффективен и используется |
Интерфейс RequestDispatcher используется для пересылки запроса на другой ресурс, который может быть HTML, JSP или другим сервлетом в том же приложении. Мы также можем использовать это, чтобы включить в ответ содержимое другого ресурса.
В этом интерфейсе определены два метода:
1.пусто вперед()
2. пусто включить ()
метод пересылки() | Метод ОтправитьПеренаправление() |
---|---|
forward() отправляет тот же запрос на другой ресурс. | Метод sendRedirect() всегда отправляет новый запрос, потому что он использует адресную строку браузера. |
Метод forward() работает на стороне сервера. | Метод sendRedirect() работает на стороне клиента. |
Метод forward() работает только внутри сервера. | Метод sendRedirect() работает внутри и вне сервера. |
В жизненном цикле сервлета есть 5 этапов:
Разница между ServletContext и ServletConfig в Servlets JSP заключается в приведенном ниже табличном формате.
Конфигурация сервлетов | Контекст сервлета |
---|---|
Объект конфигурации сервлета представляет один сервлет | Он представляет собой целое веб-приложение, работающее на конкретной JVM и общее для всех сервлетов. |
Это похоже на локальный параметр, связанный с конкретным сервлетом. | Это как глобальный параметр, связанный со всем приложением. |
Это пара значений имени, определенная внутри раздела сервлета файла web.xml, поэтому она имеет широкую область действия сервлета. | ServletContext имеет широкую область применения, поэтому определите его за пределами тега сервлета в файле web.xml. |
Метод getServletConfig() используется для получения объекта конфигурации. | Метод getServletContext() используется для получения объекта контекста. |
например, корзина пользователя относится к конкретному пользователю, поэтому здесь мы можем использовать конфигурацию сервлета. | Чтобы получить MIME-тип файла или сеанса приложения, информация, связанная с сеансом, сохраняется с использованием объекта контекста сервлета. |
Сеанс — это состояние диалога между клиентом и сервером, и он может состоять из нескольких запросов и ответов между клиентом и сервером. Поскольку HTTP и веб-сервер не имеют состояния, единственный способ поддерживать сеанс — это когда некоторая уникальная информация о сеансе (идентификатор сеанса) передается между сервером и клиентом в каждом запросе и ответе.
Некоторые из распространенных способов управления сеансом в сервлетах:
Драйвер JDBC — это программный компонент, который позволяет Java-приложению взаимодействовать с базой данных. Существует 4 типа драйверов JDBC:
Пакет java.sql содержит интерфейсы и классы для JDBC API.
Класс DriverManager управляет зарегистрированными драйверами. Его можно использовать для регистрации и отмены регистрации водителей. Он предоставляет фабричный метод, который возвращает экземпляр Connection.
Интерфейс Connection поддерживает сеанс с базой данных. Его можно использовать для управления транзакциями. Он предоставляет фабричные методы, которые возвращают экземпляры Statement, PreparedStatement, CallableStatement и DatabaseMetaData.
Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.
Объект ResultSet представляет строку таблицы. Его можно использовать для изменения указателя курсора и получения информации из базы данных.
Интерфейс ResultSetMetaData возвращает информацию о таблице, такую как общее количество столбцов, имя столбца, тип столбца и т. д.
Интерфейс DatabaseMetaData возвращает информацию о базе данных, такую как имя пользователя, имя драйвера, версия драйвера, количество таблиц, количество просмотров и т. д.
Пакетная обработка помогает группировать связанные операторы SQL в пакет и выполнять их вместо выполнения одного запроса. Используя метод пакетной обработки в JDBC, вы можете выполнять несколько запросов, что повышает производительность.
Оператор execute(String query) используется для выполнения любого SQL-запроса и возвращает TRUE, если результатом является ResultSet, например выполнение запросов Select. Вывод FALSE, когда нет объекта ResultSet, такого как выполнение запросов на вставку или обновление. Мы можем использовать getResultSet() для получения ResultSet и метод getUpdateCount() для получения счетчика обновлений.
Оператор executeQuery (строковый запрос) используется для выполнения запросов Select и возвращает ResultSet. Возвращаемый набор результатов никогда не бывает нулевым, даже если нет записей, соответствующих запросу. При выполнении запросов на выборку мы должны использовать метод executeQuery, чтобы, если кто-то попытается выполнить оператор вставки/обновления, он выдал java.sql.SQLException с сообщением «метод executeQuery не может использоваться для обновления».
Оператор executeUpdate(String query ) используется для выполнения операторов Insert/Update/Delete (DML) или операторов DDL, которые ничего не возвращают. Результатом является int, равный количеству строк для инструкций языка манипулирования данными SQL (DML). Для операторов DDL вывод равен 0.
Вы должны использовать метод execute() только тогда, когда вы не уверены в типе оператора, иначе используйте метод executeQuery или executeUpdate.
Операторы JDBC — это в основном операторы, которые используются для отправки команд SQL в базу данных и извлечения данных из базы данных. JDBC предоставляет различные методы, такие как execute(), executeUpdate(), executeQuery и т. д., для взаимодействия с базой данных.
JDBC поддерживает 3 типа операторов:
Википедия определяет фреймворк Spring как «фреймворк приложения и инверсию контейнера управления для платформы Java». Основные функции фреймворка могут использоваться любым Java-приложением, но существуют расширения для создания веб-приложений поверх платформы Java EE». Spring — это, по сути, легкая интегрированная среда, которую можно использовать для разработки корпоративных приложений на языке java.
Некоторые из важных модулей Spring Framework:
Важными аннотациями являются:
Компоненты — это объекты, формирующие основу приложения Spring. Они управляются контейнером Spring IoC. Другими словами, компонент — это объект, который создается, собирается и управляется контейнером Spring IoC.
В Spring bean-компонентах определено пять областей действия.
Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.
DispatcherServlet — это, по сути, передний контроллер в приложении Spring MVC, поскольку он загружает файл конфигурации bean-компонентов Spring и инициализирует все настроенные bean-компоненты. Если аннотации включены, он также сканирует пакеты для настройки любого компонента, аннотированного аннотациями @Component, @Controller, @Repository или @Service.
ContextLoaderListener, с другой стороны, является прослушивателем для запуска и закрытия WebApplicationContext в корневом каталоге Spring. Некоторые из его важных функций включают привязку жизненного цикла Application Context к жизненному циклу ServletContext и автоматизацию создания ApplicationContext.
Нет. | Внедрение конструктора | Инъекция сеттера |
1) | Без частичного впрыска | Частичный впрыск |
2) | Не переопределяет свойство setter | Переопределяет свойство конструктора, если оба определены. |
3) | Создает новый экземпляр, если происходит какое-либо изменение | Не создает новый экземпляр, если вы измените значение свойства |
4) | Лучше для слишком многих свойств | Лучше для нескольких свойств. |
Autowiring позволяет программисту автоматически вводить bean-компонент. Нам не нужно писать явную логику внедрения. Давайте посмотрим код для внедрения bean-компонента с использованием внедрения зависимостей.
Режимы автопроводки приведены ниже:
Нет. | Режим | Описание |
1) | нет | это режим по умолчанию, это означает, что автопроводка не включена. |
2) | по имени | Внедряет bean-компонент на основе имени свойства. Он использует метод установки. |
3) | по типу | Внедряет bean-компонент на основе типа свойства. Он использует метод установки. |
4) | конструктор | Он вводит bean-компонент с помощью конструктора |
Spring MVC Framework предоставляет следующие способы, которые помогут нам добиться надежной обработки исключений.
Мы можем определить методы обработчика исключений в наших классах контроллеров. Все, что нам нужно, это аннотировать эти методы аннотацией @ExceptionHandler.
Обработка исключений является сквозной проблемой, и Spring предоставляет аннотацию @ControllerAdvice, которую мы можем использовать с любым классом для определения нашего глобального обработчика исключений.
Что касается общих исключений, в большинстве случаев мы обслуживаем статические страницы. Spring Framework предоставляет интерфейс HandlerExceptionResolver, который мы можем реализовать для создания глобального обработчика исключений. Причина этого дополнительного способа определения глобального обработчика исключений заключается в том, что среда Spring также предоставляет классы реализации по умолчанию, которые мы можем определить в нашем файле конфигурации bean-компонента Spring, чтобы получить преимущества обработки исключений среды Spring.
Вот некоторые из аннотаций Spring, которые я использовал в своем проекте:
@Controller — для классов контроллеров в проекте Spring MVC.
@RequestMapping — для настройки сопоставления URI в методах обработчика контроллера. Это очень важная аннотация, поэтому вам следует просмотреть примеры аннотаций Spring MVC RequestMapping.
@ResponseBody — для отправки объекта в качестве ответа, обычно для отправки данных XML или JSON в качестве ответа.
@PathVariable — для отображения динамических значений из URI в аргументы метода обработчика.
@Autowired — для автоматического подключения зависимостей в бинах Spring.
@Qualifier — с аннотацией @Autowired, чтобы избежать путаницы при наличии нескольких экземпляров типа bean-компонента.
@Service — для классов обслуживания.
@Scope — для настройки области действия Spring bean.
@Configuration, @ComponentScan и @Bean — для конфигураций на основе Java.
Аннотации AspectJ для настройки аспектов и советов, @Aspect, @Before, @After, @Around, @Pointcut и т. д.
Мы можем использовать модуль Spring ORM для интеграции фреймворков Spring и Hibernate, если вы используете Hibernate 3+, где SessionFactory предоставляет текущий сеанс, тогда вам следует избегать использования классов HibernateTemplate или HibernateDaoSupport и лучше использовать шаблон DAO с внедрением зависимостей для интеграции.
Кроме того, Spring ORM обеспечивает поддержку использования декларативного управления транзакциями Spring, поэтому вам следует использовать это, а не использовать шаблонный код гибернации для управления транзакциями.
Spring поддерживает два типа управления транзакциями. Они есть:
Объектно-реляционное сопоставление или ORM — это метод программирования для сопоставления объектов модели домена приложения с таблицами реляционной базы данных. Hibernate — это инструмент ORM на основе Java, который обеспечивает основу для сопоставления объектов домена приложения с таблицами реляционной базы данных и наоборот.
Hibernate предоставляет эталонную реализацию Java Persistence API, что делает его отличным выбором в качестве инструмента ORM с преимуществами слабой связи. Мы можем использовать API сохраняемости Hibernate для операций CRUD. Платформа Hibernate предоставляет возможность сопоставления простых старых объектов Java с традиционными таблицами базы данных с использованием аннотаций JPA, а также конфигурации на основе XML.
Точно так же конфигурации спящего режима являются гибкими и могут быть выполнены из файла конфигурации XML, а также программно.
Некоторые из важных преимуществ использования Hibernate Framework:
В целом спящий режим — лучший выбор на текущем рынке для инструмента ORM, он содержит все функции, которые вам когда-либо понадобятся в инструменте ORM.
Hibernate имеет многоуровневую архитектуру, которая помогает пользователю работать без знания базовых API. Hibernate использует базу данных и данные конфигурации для предоставления приложению служб сохранения (и постоянных объектов). Он включает в себя множество объектов, таких как постоянный объект, фабрика сеансов, фабрика транзакций, фабрика соединений, сеанс, транзакция и т. д.
Архитектура Hibernate разделена на четыре уровня.
Различия между методами get() и load() приведены ниже.
Нет. | получить() | нагрузка() |
1) | Возвращает null, если объект не найден. | Выдает исключение ObjectNotFoundException, если объект не найден. |
2) | Метод get() всегда попадает в базу данных. | Метод load() не обращается к базе данных. |
3) | Он возвращает реальный объект, а не прокси. | Он возвращает прокси-объект. |
4) | Его следует использовать, если вы не уверены в существовании экземпляра. | Его следует использовать, если вы уверены, что экземпляр существует. |
Некоторые из важных преимуществ Hibernate framework по сравнению с JDBC:
Методы | Описание |
общественная пустота jspInit() | Он вызывается только один раз, как и метод инициализации сервлета. |
public void _jspService (запрос ServletRequest, ServletResponse) выдает ServletException, IOException | Он вызывается при каждом запросе, так же как и метод service() сервлета. |
публичная пустота jspDestroy() | Он вызывается только один раз, как и метод destroy() сервлета. |
JSP по умолчанию предоставляет 9 неявных объектов. Они следующие:
Объект | Тип |
1) вне | JspWriter |
2) просьба | HttpServletRequest |
3) ответ | HttpServletResponse |
4) конфиг | Конфигурация сервлетов |
5) сессия | HttpSession |
6) приложение | Контекст сервлета |
7) Контекст страницы | Контекст страницы |
8) страница | Объект |
9) исключение | Метательный |
включить директиву | включить действие |
Директива include включает содержимое во время перевода страницы. | Действие включения включает содержимое во время запроса. |
Директива include включает исходное содержимое страницы, поэтому размер страницы увеличивается во время выполнения. | Действие включения не включает исходное содержимое, а вызывает метод include() класса, предоставленного поставщиком. |
Это лучше для статических страниц. | Это лучше для динамических страниц. |
<%
response.setHeader(“Cache-Control”,”no-store”);
response.setHeader(“Pragma”,”no-cache”);
response.setHeader (“Expires”, “0”); //prevents caching at the proxy server
%>
Существует 5 типов тегов JSTL.
<%@ page session=“false” %>
Следующий код объясняет, как удалить Cookie в JSP:
Cookie mycook = new Cookie("name1","value1");
response.addCookie(mycook1);
Cookie killmycook = new Cookie("mycook1","value1");
killmycook . set MaxAge ( 0 );
killmycook . set Path ("/");
killmycook . addCookie ( killmycook 1 );
Метод jspDestry() вызывается из интерфейса javax.servlet.jsp.JspPage всякий раз, когда страница JSP собирается быть уничтоженной. Методы уничтожения сервлетов можно легко переопределить для выполнения очистки, например, при закрытии соединения с базой данных.
JSP — это технология на стороне сервера, упрощающая создание контента. Они ориентированы на документы, тогда как сервлеты — это программы. Страница Java-сервера может содержать фрагменты программы Java, которые выполняют и создают экземпляры классов Java. Однако они встречаются внутри файла шаблона HTML. Он обеспечивает основу для разработки веб-приложения.
Нам не нужно настраивать стандартные теги JSP в web.xml, потому что когда контейнер загружает веб-приложение и находит файлы TLD, он автоматически настраивает их для использования непосредственно на страницах JSP приложения. Нам просто нужно включить его на страницу JSP с помощью директивы taglib.
Используя неявный объект pageContext JSP EL, вы можете получить ссылку на объект запроса и использовать оператор точки для получения имени метода HTTP на странице JSP. Код JSP EL для этой цели будет выглядеть как ${pageContext.request.method}.
Ошибка — это неустранимое состояние, возникающее во время выполнения. Например, ошибка OutOfMemory. Эти ошибки JVM нельзя исправить во время выполнения. Хотя ошибка может быть обнаружена в блоке catch, выполнение приложения будет остановлено и не будет восстановлено.
В то время как исключения - это условия, которые возникают из-за неправильного ввода или человеческой ошибки и т. д. Например, FileNotFoundException будет сгенерировано, если указанный файл не существует. Или NullPointerException произойдет, если вы попытаетесь использовать нулевую ссылку. В большинстве случаев можно восстановиться после исключения (вероятно, предоставив пользователю обратную связь для ввода правильных значений и т. д.
Для обработки исключений в Java используются пять ключевых слов:
Существует два способа создания потока:
Это создает поток, создавая экземпляр нового класса, который расширяет класс Thread. Расширяющий класс должен переопределить функцию run(), которая является точкой входа потока.
Это самый простой способ создать поток, создав класс, реализующий исполняемый интерфейс. После реализации интерфейса runnable класс должен реализовать метод public void run()().
Метод run() создает параллельный поток в вашей программе. Когда run() вернется, поток завершится.
Метод run() создает параллельный поток в вашей программе. Когда run() вернется, поток завершится.
В методе run() вы должны указать код потока.
Как и любой другой метод, метод run() может вызывать другие методы, использовать другие классы и определять переменные.
Java работает как феномен «передачи по значению» или «передачи по ссылке»?
Java всегда передается по значению. Это означает, что он создает копию содержимого параметра в памяти. В Java объектные переменные всегда относятся к реальному объекту кучи памяти.
Блок finally всегда выполняется, даже если оператор return написан в конце блока try и блока catch. Он всегда выполняется, независимо от того, есть исключение или нет. Есть только несколько ситуаций, в которых блок finally не выполняется, например, сбой виртуальной машины, сбой питания, сбой программного обеспечения и т. д. Если вы не хотите выполнять блок finally, вам нужно вызвать System.exit(). явно в блоке finally.
Если исключение не перехвачено, оно выбрасывается с вершины стека и падает вниз по стеку вызовов к предыдущей процедуре. Если исключение там не перехвачено, оно возвращается к предыдущей функции и так далее, пока оно не будет перехвачено или стек вызовов не достигнет дна. Термин для этого — распространение исключений.
Жизненный цикл потока Java имеет следующие состояния:
Новый-
Когда поток создан и до того, как программа запустит поток, он находится в новом состоянии. Его также называют родившейся нитью.
Запускаемый
Когда поток запущен, он находится в состоянии Runnable. В этом состоянии поток выполняет свою задачу.
Ожидающий
Иногда поток переходит в состояние ожидания, где он остается бездействующим, потому что выполняется другой поток. Когда другой поток завершается, ожидающий поток снова переходит в состояние выполнения.
Ожидание по времени
В режиме ожидания поток переходит в состояние ожидания. Но он остается в состоянии ожидания только в течение определенного интервала времени, после которого он начинает выполняться. Он остается в ожидании либо до окончания временного интервала, либо до завершения другого потока.
Прекращено
Говорят, что поток находится в этом состоянии после завершения. Это может быть связано с тем, что поток завершил свою задачу или по любой другой причине.
Final используется для применения ограничений к классу, методу и переменной. Конечный класс не может быть унаследован, конечный метод не может быть переопределен и конечное значение переменной не может быть изменено. Давайте посмотрим на пример ниже, чтобы понять его лучше.
class FinalVarExample {
public static void main( String args[])
{
final int a=10; // Final variable
a=50; //Error as value can't be changed
}
Наконец используется для размещения важного кода, он будет выполняться независимо от того, обработано ли исключение или нет. Давайте посмотрим на пример ниже, чтобы понять его лучше.
class FinallyExample {
public static void main(String args[]){
try {
int x=100;
}
catch(Exception e) {
System.out.println(e);
}
finally {
System.out.println("finally block is executing");}
}}
}
Finalize используется для выполнения очистки непосредственно перед сборкой мусора. Давайте посмотрим на пример ниже, чтобы понять его лучше.
class FinalizeExample {
public void finalize() {
System.out.println("Finalize is called");
}
public static void main(String args[])
{
FinalizeExample f1=new FinalizeExample();
FinalizeExample f2=new FinalizeExample();
f1= NULL;
f2=NULL;
System.gc();
}
}
бросить ключевое слово | бросает ключевое слово |
Throw используется для явного создания исключения. | Броски используются для объявления исключения. |
Проверенные исключения не могут распространяться только с помощью throw. | Проверенные исключения могут распространяться с помощью бросков. |
За броском следует экземпляр. | За бросками следует класс. |
Throw используется внутри метода. | Throws используется с сигнатурой метода. |
Вы не можете генерировать несколько исключений | Вы можете объявить несколько исключений, например, public void method() выдает IOException, SQLException. |
Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.
Иерархия выглядит следующим образом:
Throwable является родительским классом для всех классов Exception. Существует два типа исключений: Checked исключения и UncheckedExceptions или RunTimeExceptions. Оба типа исключений расширяют класс исключений, тогда как ошибки далее классифицируются как ошибка виртуальной машины и ошибка утверждения.
Чтобы создать собственное исключение, расширьте класс Exception или любой из его подклассов.
Exception и все его подклассы не предоставляют никаких конкретных методов, и все методы определены в базовом классе Throwable.
Процесс | Нить | |
Определение | Выполняемый экземпляр программы называется процессом. | Поток — это подмножество процесса. |
Коммуникация | Процессы должны использовать межпроцессное взаимодействие для связи с одноуровневыми процессами. | Потоки могут напрямую взаимодействовать с другими потоками своего процесса. |
Контроль | Процессы могут осуществлять контроль только над дочерними процессами. | Потоки могут осуществлять значительный контроль над потоками одного и того же процесса. |
Изменения | Любые изменения в родительском процессе не влияют на дочерние процессы. | Любое изменение в основном потоке может повлиять на поведение других потоков процесса. |
объем памяти | Запуск в отдельных областях памяти. | Запуск в разделяемых пространствах памяти. |
Контролируется | Процесс контролируется операционной системой. | Потоки управляются программистом в программе. |
Зависимость | Процессы независимы. | Потоки зависимы. |
Блок finally — это блок, который всегда выполняет набор операторов. Он всегда связан с блоком try, независимо от того, возникло какое-либо исключение или нет.
Да, finally не будет выполняться, если программа завершится либо вызовом System.exit(), либо вызвав фатальную ошибку, которая приведет к прерыванию процесса.
Синхронизация относится к многопоточности. Синхронизированный блок кода может выполняться только одним потоком за раз. Поскольку Java поддерживает выполнение нескольких потоков, два или более потока могут обращаться к одним и тем же полям или объектам. Синхронизация — это процесс, который синхронизирует все параллельные выполняемые потоки. Синхронизация позволяет избежать ошибок согласованности памяти, вызванных несогласованным представлением общей памяти. Когда метод объявлен как синхронизированный, поток удерживает монитор для объекта этого метода. Если другой поток выполняет синхронизированный метод, поток блокируется до тех пор, пока этот поток не освободит монитор.
Да, у нас может быть несколько блоков catch в одном блоке try, но подход должен быть от конкретного к общему. Давайте разберемся с этим на программном примере.
public class Example {
public static void main(String args[]) {
try {
int a[]= new int[10];
a[10]= 10/0;
}
catch(ArithmeticException e)
{
System.out.println("Arithmetic exception in first catch block");
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("Array index out of bounds in second catch block");
}
catch(Exception e)
{
System.out.println("Any exception in third catch block");
}
}
Методы определены в базовом классе Throwable. Некоторые из важных методов класса исключений Java указаны ниже.
Synchronized Throwable getCause() — этот метод возвращает причину исключения или нулевой идентификатор, представленный объектом Throwable.
OutOfMemoryError — это подкласс java.lang.Error, который обычно возникает, когда нашей JVM не хватает памяти.
Поток — это наименьшая часть запрограммированных инструкций, которая может выполняться планировщиком независимо. В Java все программы будут иметь по крайней мере один поток, известный как основной поток. Этот основной поток создается JVM, когда программа начинает свое выполнение. Основной поток используется для вызова функции main() программы.
В Java потоки могут быть созданы двумя способами:
Сборка мусора на Java — программа, которая помогает в неявном управлении памятью. Поскольку в Java с помощью нового ключевого слова вы можете динамически создавать объекты, которые после создания будут потреблять некоторую память. Как только работа выполнена и на объект больше не осталось ссылок, Java с помощью сборки мусора уничтожает объект и освобождает занимаемую им память. Java предоставляет четыре типа сборщиков мусора:
Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java , прокомментируйте свои проблемы в разделе ниже.
Оригинальный источник статьи на https://www.edureka.co
1600135200
OpenJDk or Open Java Development Kit is a free, open-source framework of the Java Platform, Standard Edition (or Java SE). It contains the virtual machine, the Java Class Library, and the Java compiler. The difference between the Oracle OpenJDK and Oracle JDK is that OpenJDK is a source code reference point for the open-source model. Simultaneously, the Oracle JDK is a continuation or advanced model of the OpenJDK, which is not open source and requires a license to use.
In this article, we will be installing OpenJDK on Centos 8.
#tutorials #alternatives #centos #centos 8 #configuration #dnf #frameworks #java #java development kit #java ee #java environment variables #java framework #java jdk #java jre #java platform #java sdk #java se #jdk #jre #open java development kit #open source #openjdk #openjdk 11 #openjdk 8 #openjdk runtime environment
1652959152
В этом блоге вы найдете более 100 наиболее часто задаваемых вопросов на собеседовании по Java и Core Java, а также ответы на них, которые вы должны подготовить, чтобы пройти собеседование.
В этом блоге Java Interview Questions я собираюсь перечислить некоторые из наиболее важных вопросов и ответов по Java-программированию, которые помогут вам выделиться в процессе собеседования. Java используется примерно 10 миллионами разработчиков по всему миру для разработки приложений для 15 миллиардов устройств, поддерживающих Java. Он также используется для создания приложений для популярных технологий, таких как большие данные, для бытовых устройств, таких как мобильные телефоны и коробки DTH. И поэтому сегодня Java используется повсеместно! Вот почему сертификация Java является наиболее востребованной сертификацией в области программирования.
Давайте начнем с рассмотрения некоторых наиболее часто задаваемых вопросов на собеседовании по Java.
Мы составили список самых популярных вопросов для собеседования по Java, которые разделены на 7 разделов, а именно:
Для профессионала в области Java очень важно знать правильные модные словечки, изучать правильные технологии и готовить правильные ответы на часто задаваемые вопросы на собеседованиях по Java. Вот окончательный список лучших вопросов для собеседования по Java, которые гарантируют переход на следующий уровень.
Итак, давайте начнем с первого набора основных вопросов для собеседования по Java.
JDK | JRE | JVM |
Это расшифровывается как Java Development Kit. | Это расшифровывается как Java Runtime Environment. | Это расшифровывается как виртуальная машина Java. |
Это инструмент, необходимый для компиляции, документирования и упаковки программ Java. | JRE относится к среде выполнения, в которой может выполняться байт-код Java. | Это абстрактная машина. Это спецификация, обеспечивающая среду выполнения, в которой может выполняться байт-код Java. |
Он содержит инструменты разработки JRE +. | Это реализация JVM, которая физически существует. | JVM следует трем нотациям: спецификация, реализация и экземпляр среды выполнения . |
main() в Java — это точка входа для любой Java-программы. Он всегда записывается как public static void main(String[] args) .
Java называется независимой от платформы из-за ее байтовых кодов, которые могут работать в любой системе, независимо от базовой операционной системы.
Java не на 100% объектно-ориентирована, потому что использует восемь примитивных типов данных, таких как boolean, byte, char, int, float, double, long, short, которые не являются объектами.
Классы-оболочки преобразуют примитивы Java в ссылочные типы (объекты). Каждому примитивному типу данных соответствует свой класс. Они известны как классы-оболочки, потому что они «обертывают» примитивный тип данных в объект этого класса. Обратитесь к изображению ниже, которое отображает другой тип примитива, класс-оболочку и аргумент конструктора.
В Java конструктор относится к блоку кода, который используется для инициализации объекта. Он должен иметь то же имя, что и класс. Кроме того, он не имеет возвращаемого типа и автоматически вызывается при создании объекта.
Существует два типа конструкторов:
Класс Singleton — это класс, только один экземпляр которого может быть создан в любой момент времени в одной JVM. Класс можно сделать одноэлементным, сделав его конструктор закрытым.
ArrayList | Вектор |
---|---|
Список массивов не синхронизирован. | Вектор синхронизирован. |
Array List работает быстро, так как не синхронизируется. | Vector медленный, поскольку он потокобезопасен. |
Если элемент вставляется в список массивов, он увеличивает размер своего массива на 50%. | Вектор по умолчанию удваивает размер своего массива. |
Список массивов не определяет размер приращения. | Вектор определяет размер приращения. |
Список массивов может использовать итератор только для обхода списка массивов. | Vector может использовать как Enumeration, так и Iterator для обхода. |
Метод Equals() определен в классе Object в Java и используется для проверки равенства двух объектов, определенных бизнес-логикой.
«==» или оператор равенства в Java — это бинарный оператор, предоставляемый языком программирования Java и используемый для сравнения примитивов и объектов. public boolean equals(Object o) — это метод, предоставляемый классом Object. Реализация по умолчанию использует оператор == для сравнения двух объектов. Например: метод может быть переопределен как класс String. Метод equals() используется для сравнения значений двух объектов.
В Java ключевое слово super — это ссылочная переменная, которая ссылается на непосредственный объект родительского класса.
Когда вы создаете экземпляр подкласса, вы также создаете экземпляр родительского класса, на который ссылается суперссылочная переменная.
Использование ключевого слова Java super Keyword:
Хэшсет | Набор деревьев |
Это реализовано через хеш-таблицу. | TreeSet реализует интерфейс SortedSet, который использует деревья для хранения данных. |
Он разрешает нулевой объект. | Он не допускает нулевой объект. |
Это быстрее, чем TreeSet, особенно для операций поиска, вставки и удаления. | Для этих операций он медленнее, чем HashSet. |
Он не поддерживает элементы в упорядоченном виде. | Элементы поддерживаются в отсортированном порядке. |
Он использует метод equals() для сравнения двух объектов. | Он использует метод compareTo() для сравнения двух объектов. |
Он не допускает гетерогенный объект. | Он допускает неоднородный объект. |
Q12. В чем разница между HashMap и HashTable в Java?
HashMap | Хеш-таблица |
Он не синхронизирован. Он не может быть разделен между многими потоками без надлежащего кода синхронизации. | Он синхронизирован. Он потокобезопасен и может совместно использоваться многими потоками. |
Он допускает один нулевой ключ и несколько нулевых значений. | Он не допускает использования нулевого ключа или значения. |
— это новый класс, представленный в JDK 1.2. | Он присутствовал и в более ранних версиях Java. |
Это быстрее. | Это медленнее. |
Он проходит через итератор. | Он проходит через Enumerator и Iterator. |
Он использует отказоустойчивый итератор. | Он использует счетчик, который не дает сбоев быстро. |
Он наследует класс AbstractMap. | Он наследует класс Dictionary. |
Q13. Какова важность отражения в Java?
Reflection — это API времени выполнения для проверки и изменения поведения методов, классов и интерфейсов. Java Reflection — это мощный инструмент, который может быть действительно полезным. Java Reflection позволяет анализировать классы, интерфейсы, поля и методы во время выполнения, не зная, как они называются во время компиляции. Отражение также можно использовать для создания новых объектов, методов вызова и получения/установки значений полей. Внешние пользовательские классы можно использовать, создавая экземпляры объектов расширяемости с их полными именами. Отладчики также могут использовать отражение для проверки закрытых членов классов.
Q14. Как запретить сериализацию атрибутов класса в Java?
Атрибут NonSerialized можно использовать для предотвращения сериализации переменных-членов.
Вы также должны сделать объект, который потенциально может содержать конфиденциальные данные, несериализуемым, если это возможно. Примените атрибут NonSerialized к определенным полям, в которых хранятся конфиденциальные данные, если объект должен быть сериализован. Если вы не исключите эти поля из сериализации, хранящиеся в них данные будут видны любым программам с разрешением на сериализацию.
Q15. Можно ли вызвать конструктор класса внутри другого конструктора?
Да, мы можем вызвать конструктор класса внутри другого конструктора. Это также называется цепочкой конструкторов. Цепочка конструкторов может быть выполнена двумя способами:
Q16. Непрерывные области памяти обычно используются для хранения фактических значений в массиве, но не в ArrayList. Объяснять.
Массив обычно содержит элементы примитивных типов данных, таких как int, float и т. д. В таких случаях массив непосредственно хранит эти элементы в смежных ячейках памяти. Хотя ArrayList не содержит примитивных типов данных. ArrayList содержит ссылку на объекты в разных местах памяти, а не на сам объект. Вот почему объекты не хранятся в смежных ячейках памяти.
Q17. Чем создание строки с использованием new() отличается от литерала?
Когда мы создаем строку с помощью new(), создается новый объект. Принимая во внимание, что если мы создадим строку, используя синтаксис строкового литерала, она может вернуть уже существующий объект с тем же именем.
Q18. Зачем нужна синхронизация? Объясните с помощью соответствующего примера.
Java позволяет выполнять несколько потоков. Они могут обращаться к одной и той же переменной или объекту. Синхронизация помогает выполнять потоки один за другим.
Это важно, так как помогает выполнять все параллельные потоки при синхронизации. Это предотвращает ошибки согласованности памяти из-за доступа к общей памяти. Пример кода синхронизации:
public synchronized void increment()
{
a++;
}
Поскольку мы синхронизировали эту функцию, этот поток может использовать объект только после того, как его использовал предыдущий поток.
Q19. Объясните термин «инициализация двойной скобки» в Java?
Инициализация двойной скобки — это термин Java, который относится к комбинации двух независимых процессов. При этом используются две скобки. Первая фигурная скобка создает анонимный внутренний класс. Вторая фигурная скобка — это блок инициализации. Когда они оба используются вместе, это называется инициализацией двойной скобки. Внутренний класс имеет ссылку на окружающий внешний класс, обычно используя указатель this. Он используется для создания и инициализации в одном операторе. Обычно он используется для инициализации коллекций. Это уменьшает код, а также делает его более читаемым.
Q20. Почему говорят, что метод length() класса String не возвращает точных результатов?
Метод length() класса String не возвращает точных результатов, потому что
он просто учитывает количество символов в строке. Другими словами, кодовые точки за пределами BMP (базовой многоязычной плоскости), то есть кодовые точки, имеющие значение U+10000 или выше, будут игнорироваться.
Причина этого историческая. Одной из первоначальных целей Java было рассматривать весь текст как Unicode; тем не менее, в то время Unicode не определял кодовые точки вне BMP. Было слишком поздно изменять char к тому времени, когда Unicode указывал такие кодовые точки.
Q21. Каковы различия между кучей и памятью стека в Java?
Основное различие между памятью Heap и Stack:
Функции | Куча | куча |
---|---|---|
объем памяти | Память стека используется только одним потоком выполнения. | Куча памяти используется всеми частями приложения. |
Доступ | Память стека не может быть доступна другим потокам. | Объекты, хранящиеся в куче, доступны глобально. |
Управление памятью | Применяет метод LIFO для освобождения памяти. | Управление памятью основано на генерации, связанной с каждым объектом. |
Продолжительность жизни | Существует до конца выполнения потока. | Память кучи живет от начала до конца выполнения приложения. |
использование | Память стека содержит только локальные примитивные и ссылочные переменные для объектов в куче. | Всякий раз, когда создается объект, он всегда сохраняется в пространстве кучи. |
Пакеты в Java — это набор связанных классов и интерфейсов, объединенных вместе. Используя пакеты, разработчики могут легко разбить код на модули и оптимизировать его повторное использование. Кроме того, код внутри пакетов может быть импортирован другими классами и использован повторно. Ниже я перечислил несколько его преимуществ:
Java не использует указатели, потому что они небезопасны и усложняют программу. Поскольку Java известна своей простотой кода, добавление концепции указателей будет противоречивым. Более того, поскольку JVM отвечает за неявное выделение памяти, чтобы избежать прямого доступа пользователя к памяти, указатели в Java не рекомендуются.
JIT означает компилятор Just-In-Time в Java. Это программа, которая помогает преобразовывать байт-код Java в инструкции, которые отправляются непосредственно в процессор. По умолчанию JIT-компилятор включен в Java и активируется всякий раз, когда вызывается метод Java. Затем компилятор JIT компилирует байт-код вызванного метода в собственный машинный код, компилируя его «как раз вовремя» для выполнения. Как только метод скомпилирован, JVM вызывает скомпилированный код этого метода напрямую, а не интерпретирует его. Вот почему он часто отвечает за оптимизацию производительности Java-приложений во время выполнения.
В Java модификаторы доступа — это специальные ключевые слова, которые используются для ограничения доступа к классу, конструктору, члену данных и методу в другом классе. Java поддерживает четыре типа модификаторов доступа:
Модификатор | По умолчанию | Частный | Защищено | Общественный |
Тот же класс | ДА | ДА | ДА | ДА |
Тот же подкласс пакета | ДА | НЕТ | ДА | ДА |
Тот же пакет без подкласса | ДА | НЕТ | ДА | ДА |
Другой подкласс пакета | НЕТ | НЕТ | ДА | ДА |
Другой пакет без подкласса | НЕТ | НЕТ | НЕТ | ДА |
Класс в Java — это план, который включает в себя все ваши данные. Класс содержит поля (переменные) и методы для описания поведения объекта. Давайте посмотрим на синтаксис класса.
class Abc {
member variables // class body
methods}
Объект — это сущность реального мира, которая имеет состояние и поведение. Объект имеет три характеристики:
Объект создается с использованием ключевого слова «новое». Например:
ИмяКласса obj = новое ИмяКласса();
Объектно-ориентированное программирование или широко известное как ООП — это модель программирования или подход, при котором программы организованы вокруг объектов, а не логики и функций. Другими словами, ООП в основном фокусируется на объектах, которыми необходимо манипулировать, а не на логике. Этот подход идеален для программ с большими и сложными кодами, которые необходимо активно обновлять или поддерживать.
Объектно-ориентированное программирование или ООП — это стиль программирования, связанный с такими понятиями, как:
В Java локальная переменная обычно используется внутри метода, конструктора или блока и имеет только локальную область видимости. Таким образом, эту переменную можно использовать только в рамках блока. Лучшее преимущество наличия локальной переменной заключается в том, что другие методы в классе даже не будут знать об этой переменной.
if(x > 100)
{
String test = "Edureka";
}
Принимая во внимание, что переменная экземпляра в Java - это переменная, которая ограничена самим своим объектом. Эти переменные объявляются внутри класса , но вне метода. Каждый объект этого класса будет создавать свою собственную копию переменной при ее использовании. Таким образом, любые изменения, внесенные в переменную, не будут отражаться ни в каких других экземплярах этого класса и будут привязаны только к этому конкретному экземпляру.
class Test{
public String EmpName;
public int empAge;
}
Методы | Конструкторы |
1. Используется для представления поведения объекта | 1. Используется для инициализации состояния объекта |
2. Должен иметь возвращаемый тип | 2. Не иметь возвращаемого типа |
3. Необходимо вызывать явно | 3. Вызывается неявно |
4. Компилятор не предоставляет метод по умолчанию | 4. Конструктор по умолчанию предоставляется компилятором, если в классе его нет. |
5. Имя метода может совпадать или не совпадать с именем класса. | 5. Имя конструктора всегда должно совпадать с именем класса. |
Если вы столкнулись с какими-либо трудностями при ответе на эти вопросы интервью по Core Java, прокомментируйте свои проблемы в разделе ниже.
final — это специальное ключевое слово в Java, которое используется в качестве модификатора доступа. Конечная переменная может использоваться в различных контекстах, таких как:
Когда ключевое слово final используется с переменной, ее значение не может быть изменено после присвоения. Если конечной переменной не присвоено значение, то с помощью только конструктора класса ей можно присвоить значение.
Когда метод объявлен окончательным, он не может быть переопределен наследующим классом.
Когда класс объявлен как final в Java, он не может быть расширен каким-либо классом подкласса, но может расширять другой класс.
перемена | Продолжать |
1. Может использоваться в операторах switch и loop (for, while, do while). | 1. Может использоваться только с операторами цикла |
2. Это приводит к тому, что операторы переключения или цикла завершаются в момент их выполнения. | 2. Цикл не прерывается, но цикл переходит к следующей итерации. |
3. Он немедленно завершает самый внутренний охватывающий цикл или переключатель. | 3. Продолжение в цикле, вложенном в переключатель, приведет к выполнению следующей итерации цикла. |
Пример перерыва:
for (int i = 0; i < 5; i++)</div>
<div>
<pre>{
if (i == 3)
{
break;
}
System.out.println(i);
}
Пример продолжения:
for (int i = 0; i < 5; i++)
{
if(i == 2)
{
continue;
}
System.out.println(i);
}
Бесконечный цикл — это последовательность инструкций в Java, которая бесконечно зацикливается, когда функциональный выход не встречается. Этот тип цикла может быть результатом ошибки программирования или также может быть преднамеренным действием, основанным на поведении приложения. Бесконечный цикл завершится автоматически после выхода из приложения.
Например:
public class InfiniteForLoopDemo
{
public static void main(String[] arg) {
for(;;)
System.out.println("Welcome to Edureka!");
// To terminate this program press ctrl + c in the console.
}
}
В Java super() и this() являются специальными ключевыми словами, которые используются для вызова конструктора.
это() | супер() |
1. this() представляет текущий экземпляр класса | 1. super() представляет текущий экземпляр родительского/базового класса |
2. Используется для вызова конструктора по умолчанию того же класса. | 2. Используется для вызова конструктора по умолчанию родительского/базового класса. |
3. Используется для доступа к методам текущего класса | 3. Используется для доступа к методам базового класса |
4. Используется для указания текущего экземпляра класса | 4. Используется для указания экземпляра суперкласса |
5. Должна быть первой строкой блока | 5. Должна быть первой строкой блока |
Пул строк Java относится к набору строк, которые хранятся в куче памяти. При этом всякий раз, когда создается новый объект, пул строк сначала проверяет, присутствует ли этот объект в пуле или нет. Если он присутствует, то в переменную возвращается та же ссылка, иначе в пуле строк будет создан новый объект, и будет возвращена соответствующая ссылка.
Статический метод | Нестатический метод |
1. Ключевое слово static должно использоваться перед именем метода. | 1. Не нужно использовать ключевое слово static перед именем метода. |
2. Вызывается с помощью класса (className.methodName) | 2. Может вызываться как любой общий метод |
3. Они не могут получить доступ к каким-либо нестатическим переменным или методам экземпляра. | 3. Он может получить доступ к любому статическому методу и любой статической переменной без создания экземпляра класса. |
Инициализация двойной скобки — это термин Java, который относится к комбинации двух независимых процессов. При этом используются две скобки. Первая фигурная скобка создает анонимный внутренний класс. Вторая фигурная скобка — это блок инициализации. Когда они оба используются вместе, это называется инициализацией двойной скобки. Внутренний класс имеет ссылку на окружающий внешний класс, обычно используя указатель this. Он используется для создания и инициализации в одном операторе. Обычно он используется для инициализации коллекций. Это уменьшает код, а также делает его более читаемым.
В Java цепочка конструкторов — это процесс вызова одного конструктора из другого по отношению к текущему объекту. Цепочка конструкторов возможна только через наследие, где конструктор подкласса отвечает за вызов конструктора суперкласса в первую очередь. В цепочке конструкторов может быть любое количество классов. Цепочка конструкторов может быть достигнута двумя способами:
Q40. Разница между String, StringBuilder и StringBuffer.
Фактор | Нить | StringBuilder | Строковый буфер |
Зона хранения | Постоянный пул строк | Площадь кучи | Площадь кучи |
Изменчивость | Неизменный | Изменяемый | Изменяемый |
Безопасность потока | Да | Нет | Да |
Спектакль | Быстро | Более эффективным | Менее эффективны |
Java ClassLoader — это подмножество JVM (виртуальная машина Java), которое отвечает за загрузку файлов классов. Всякий раз, когда программа Java выполняется, она сначала загружается загрузчиком классов. Java предоставляет три встроенных загрузчика классов:
В Java строковые объекты являются неизменяемыми по своей природе, что просто означает, что после создания объекта String его состояние не может быть изменено. Всякий раз, когда вы пытаетесь обновить значение этого объекта вместо обновления значений этого конкретного объекта, Java создает новый строковый объект. Объекты Java String неизменяемы, поскольку объекты String обычно кэшируются в пуле String. Поскольку строковые литералы обычно совместно используются несколькими клиентами, действия одного клиента могут повлиять на остальные. Это повышает безопасность, кэширование, синхронизацию и производительность приложения.
Множество | ArrayList |
---|---|
Не может содержать значения разных типов данных | Может содержать значения разных типов данных. |
Размер должен быть определен на момент объявления | Размер может быть динамически изменен |
Необходимо указать индекс для добавления данных | Не нужно указывать индекс |
Массивы не параметризуются по типу | Массивы имеют тип |
Массивы могут содержать как примитивные типы данных, так и объекты. | Списки массивов могут содержать только объекты, примитивные типы данных не допускаются. |
В Java Map — это интерфейс пакета Util, который сопоставляет уникальные ключи со значениями. Интерфейс карты не является подмножеством основного интерфейса коллекции, и поэтому его поведение мало отличается от других типов коллекций. Ниже приведены некоторые характеристики интерфейса карты:
Каждый ключ может отображать не более одного значения.
В Java коллекция — это структура, которая действует как архитектура для хранения и управления группой объектов. Используя коллекции, вы можете выполнять различные задачи, такие как поиск, сортировка, вставка, манипулирование, удаление и т. д. Платформа коллекций Java включает в себя следующее:
На изображении ниже показана полная иерархия коллекции Java.
Полиморфизм кратко описывается как «один интерфейс, множество реализаций». Полиморфизм — это характеристика способности присваивать различное значение или использование чему-либо в разных контекстах, в частности, позволять сущности, такой как переменная, функция или объект, иметь более одной формы. Существует два типа полиморфизма:
Полиморфизм времени компиляции — это перегрузка методов, тогда как полиморфизм времени выполнения выполняется с использованием наследования и интерфейса.
В Java полиморфизм времени выполнения или диспетчеризация динамического метода — это процесс, в котором вызов переопределенного метода разрешается во время выполнения, а не во время компиляции. В этом процессе переопределенный метод вызывается через ссылочную переменную суперкласса. Давайте посмотрим на пример ниже, чтобы понять его лучше.
class Car {
void run()
{
System.out.println(“car is running”);
}
}
class Audi extends Car {
void run()
{
System.out.prinltn(“Audi is running safely with 100km”);
}
public static void main(String args[])
{
Car b= new Audi(); //upcasting
b.run();
}
}
Абстракция относится к качеству работы с идеями, а не с событиями. В основном это связано с тем, чтобы скрыть детали и показать пользователю важные вещи. Таким образом, можно сказать, что абстракция в Java — это процесс сокрытия деталей реализации от пользователя и раскрытия им только функциональности. Абстракция может быть достигнута двумя способами:
Интерфейс в Java — это план класса или, можно сказать, набор абстрактных методов и статических констант. В интерфейсе каждый метод является общедоступным и абстрактным, но не содержит конструктора. Таким образом, интерфейс в основном представляет собой группу связанных методов с пустыми телами. Пример:
public interface Animal {
public void eat();
public void sleep();
public void run();
}
Абстрактный класс | Интерфейсы |
---|---|
Абстрактный класс может предоставлять полный код по умолчанию и/или только детали, которые необходимо переопределить. | Интерфейс вообще не может предоставлять никакого кода, только подпись |
В случае абстрактного класса класс может расширять только один абстрактный класс. | Класс может реализовывать несколько интерфейсов |
Абстрактный класс может иметь неабстрактные методы. | Все методы интерфейса абстрактны |
Абстрактный класс может иметь переменные экземпляра | Интерфейс не может иметь переменные экземпляра |
Абстрактный класс может иметь любую видимость: публичную, приватную, защищенную. | Видимость интерфейса должна быть общедоступной (или) отсутствовать |
Если мы добавим новый метод в абстрактный класс, у нас будет возможность предоставить реализацию по умолчанию, и, следовательно, весь существующий код может работать правильно. | Если мы добавим новый метод в интерфейс, мы должны отследить все реализации интерфейса и определить реализацию для нового метода. |
Абстрактный класс может содержать конструкторы | Интерфейс не может содержать конструкторы |
Абстрактные классы работают быстро | Интерфейсы работают медленно, так как для поиска соответствующего метода в реальном классе требуется дополнительная косвенность. |
Q6. Что такое наследование в Java?
Наследование в Java — это концепция, при которой свойства одного класса могут наследоваться другим. Это помогает повторно использовать код и устанавливать отношения между разными классами. Наследование осуществляется между двумя типами классов:
Класс, который наследует свойства, называется дочерним классом, тогда как класс, свойства которого унаследованы, называется родительским классом.
Java поддерживает четыре типа наследования:
Давайте посмотрим на пример ниже, чтобы понять его лучше.
class Adder {
Static int add(int a, int b)
{
return a+b;
}
Static double add( double a, double b)
{
return a+b;
}
public static void main(String args[])
{
System.out.println(Adder.add(11,11));
System.out.println(Adder.add(12.3,12.6));
}}
Давайте посмотрим на пример ниже, чтобы понять его лучше.
class Car {
void run(){
System.out.println(“car is running”);
}
Class Audi extends Car{
void run()
{
System.out.prinltn("Audi is running safely with 100km");
}
public static void main( String args[])
{
Car b=new Audi();
b.run();
}
}
Вы не можете переопределить частный или статический метод в Java. Если вы создадите аналогичный метод с тем же типом возвращаемого значения и теми же аргументами метода в дочернем классе, он скроет метод суперкласса; это известно как скрытие метода. Точно так же вы не можете переопределить закрытый метод в подклассе, потому что он там недоступен. Что вы можете сделать, так это создать еще один частный метод с тем же именем в дочернем классе. Давайте посмотрим на пример ниже, чтобы понять его лучше.
class Base {
private static void display() {
System.out.println("Static or class method from Base");
}
public void print() {
System.out.println("Non-static or instance method from Base");
}
class Derived extends Base {
private static void display() {
System.out.println("Static or class method from Derived");
}
public void print() {
System.out.println("Non-static or instance method from Derived");
}
public class test {
public static void main(String args[])
{
Base obj= new Derived();
obj1.display();
obj1.print();
}
}
Если дочерний класс наследует свойство от нескольких классов, это называется множественным наследованием. Java не позволяет расширять несколько классов.
Проблема с множественным наследованием заключается в том, что если несколько родительских классов имеют одно и то же имя метода, то во время выполнения компилятору становится трудно решить, какой метод выполнять из дочернего класса.
Поэтому Java не поддерживает множественное наследование. Эту проблему обычно называют алмазной проблемой.
Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.
Инкапсуляция — это механизм, в котором вы связываете свои данные (переменные) и код (методы) вместе как единое целое. Здесь данные скрыты от внешнего мира и доступны только через методы текущего класса. Это помогает защитить данные от любых ненужных изменений. Мы можем добиться инкапсуляции в Java следующим образом:
Ассоциация — это отношение, в котором все объекты имеют свой жизненный цикл и не имеют владельца. Возьмем пример Учителя и Ученика. Несколько учеников могут связываться с одним учителем, а один ученик может связываться с несколькими учителями, но между объектами нет собственности, и у обоих есть собственный жизненный цикл. Эти отношения могут быть «один к одному», «один ко многим», «многие к одному» и «многие ко многим».
Агрегация — это специализированная форма ассоциации, в которой все объекты имеют собственный жизненный цикл, но существует право собственности, а дочерний объект не может принадлежать другому родительскому объекту. Возьмем пример отдела и учителя. Один учитель не может принадлежать нескольким отделам, но если мы удалим объект учителя отдела, он не будет уничтожен.
Композиция снова является специализированной формой Агрегации, и мы можем назвать это отношением «смерти». Это сильный тип агрегации. Дочерний объект не имеет своего жизненного цикла, и если родительский объект удаляется, все дочерние объекты также будут удалены. Давайте снова возьмем пример отношений между Домом и комнатами. Дом может содержать несколько комнат, нет независимой жизни комнаты, и любая комната не может принадлежать двум разным домам, если мы удалим комнату дома, она будет удалена автоматически.
Q15. Что такое маркерный интерфейс?
Интерфейс маркера может быть определен как интерфейс, не имеющий данных-членов и функций-членов. Проще говоря, пустой интерфейс называется интерфейсом маркера. Наиболее распространенными примерами интерфейса Marker в Java являются Serializable, Cloneable и т. д. Интерфейс маркера можно объявить следующим образом.
public interface Serializable{
}
Q16. Что такое клонирование объектов в Java?
Клонирование объекта в Java — это процесс создания точной копии объекта. В основном это означает возможность создания объекта с состоянием, аналогичным исходному объекту. Для этого в Java предусмотрен метод clone() , позволяющий использовать эту функциональность. Этот метод создает новый экземпляр класса текущего объекта, а затем инициализирует все его поля точно таким же содержимым соответствующих полей. Для объекта clone() должен быть реализован интерфейс маркера java.lang.Cloneable , чтобы избежать каких-либо исключений во время выполнения. Одна вещь, которую вы должны отметить, это то, что Object clone() является защищенным методом, поэтому вам необходимо переопределить его.
Конструктор копирования — это функция-член, которая используется для инициализации объекта с использованием другого объекта того же класса. Хотя в Java нет необходимости в конструкторе копирования, поскольку все объекты передаются по ссылке. Более того, Java даже не поддерживает автоматическую передачу по значению.
В Java перегрузка конструктора — это метод добавления любого количества конструкторов в класс, каждый из которых имеет свой список параметров. Компилятор использует количество параметров и их типов в списке, чтобы различать перегруженные конструкторы.
class Demo
{
int i;
public Demo(int a)
{
i=k;
}
public Demo(int a, int b)
{
//body
}
}
Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.
Получить | Сообщение |
---|---|
Ограниченный объем данных может быть отправлен, поскольку данные отправляются в заголовке. | Большой объем данных может быть отправлен, поскольку данные отправляются в теле. |
Незащищено, так как данные отображаются в адресной строке. | Защищено, поскольку данные не отображаются в адресной строке. |
Можно добавить в закладки | Нельзя добавить в закладки |
идемпотент | Неидемпотентный |
Он более эффективен и используется, чем Post | Он менее эффективен и используется |
Интерфейс RequestDispatcher используется для пересылки запроса на другой ресурс, который может быть HTML, JSP или другим сервлетом в том же приложении. Мы также можем использовать это, чтобы включить в ответ содержимое другого ресурса.
В этом интерфейсе определены два метода:
1.пусто вперед()
2. пусто включить ()
метод пересылки() | Метод ОтправитьПеренаправление() |
---|---|
forward() отправляет тот же запрос на другой ресурс. | Метод sendRedirect() всегда отправляет новый запрос, потому что он использует адресную строку браузера. |
Метод forward() работает на стороне сервера. | Метод sendRedirect() работает на стороне клиента. |
Метод forward() работает только внутри сервера. | Метод sendRedirect() работает внутри и вне сервера. |
В жизненном цикле сервлета есть 5 этапов:
Разница между ServletContext и ServletConfig в Servlets JSP заключается в приведенном ниже табличном формате.
Конфигурация сервлетов | Контекст сервлета |
---|---|
Объект конфигурации сервлета представляет один сервлет | Он представляет собой целое веб-приложение, работающее на конкретной JVM и общее для всех сервлетов. |
Это похоже на локальный параметр, связанный с конкретным сервлетом. | Это как глобальный параметр, связанный со всем приложением. |
Это пара значений имени, определенная внутри раздела сервлета файла web.xml, поэтому она имеет широкую область действия сервлета. | ServletContext имеет широкую область применения, поэтому определите его за пределами тега сервлета в файле web.xml. |
Метод getServletConfig() используется для получения объекта конфигурации. | Метод getServletContext() используется для получения объекта контекста. |
например, корзина пользователя относится к конкретному пользователю, поэтому здесь мы можем использовать конфигурацию сервлета. | Чтобы получить MIME-тип файла или сеанса приложения, информация, связанная с сеансом, сохраняется с использованием объекта контекста сервлета. |
Сеанс — это состояние диалога между клиентом и сервером, и он может состоять из нескольких запросов и ответов между клиентом и сервером. Поскольку HTTP и веб-сервер не имеют состояния, единственный способ поддерживать сеанс — это когда некоторая уникальная информация о сеансе (идентификатор сеанса) передается между сервером и клиентом в каждом запросе и ответе.
Некоторые из распространенных способов управления сеансом в сервлетах:
Драйвер JDBC — это программный компонент, который позволяет Java-приложению взаимодействовать с базой данных. Существует 4 типа драйверов JDBC:
Пакет java.sql содержит интерфейсы и классы для JDBC API.
Класс DriverManager управляет зарегистрированными драйверами. Его можно использовать для регистрации и отмены регистрации водителей. Он предоставляет фабричный метод, который возвращает экземпляр Connection.
Интерфейс Connection поддерживает сеанс с базой данных. Его можно использовать для управления транзакциями. Он предоставляет фабричные методы, которые возвращают экземпляры Statement, PreparedStatement, CallableStatement и DatabaseMetaData.
Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.
Объект ResultSet представляет строку таблицы. Его можно использовать для изменения указателя курсора и получения информации из базы данных.
Интерфейс ResultSetMetaData возвращает информацию о таблице, такую как общее количество столбцов, имя столбца, тип столбца и т. д.
Интерфейс DatabaseMetaData возвращает информацию о базе данных, такую как имя пользователя, имя драйвера, версия драйвера, количество таблиц, количество просмотров и т. д.
Пакетная обработка помогает группировать связанные операторы SQL в пакет и выполнять их вместо выполнения одного запроса. Используя метод пакетной обработки в JDBC, вы можете выполнять несколько запросов, что повышает производительность.
Оператор execute(String query) используется для выполнения любого SQL-запроса и возвращает TRUE, если результатом является ResultSet, например выполнение запросов Select. Вывод FALSE, когда нет объекта ResultSet, такого как выполнение запросов на вставку или обновление. Мы можем использовать getResultSet() для получения ResultSet и метод getUpdateCount() для получения счетчика обновлений.
Оператор executeQuery (строковый запрос) используется для выполнения запросов Select и возвращает ResultSet. Возвращаемый набор результатов никогда не бывает нулевым, даже если нет записей, соответствующих запросу. При выполнении запросов на выборку мы должны использовать метод executeQuery, чтобы, если кто-то попытается выполнить оператор вставки/обновления, он выдал java.sql.SQLException с сообщением «метод executeQuery не может использоваться для обновления».
Оператор executeUpdate(String query ) используется для выполнения операторов Insert/Update/Delete (DML) или операторов DDL, которые ничего не возвращают. Результатом является int, равный количеству строк для инструкций языка манипулирования данными SQL (DML). Для операторов DDL вывод равен 0.
Вы должны использовать метод execute() только тогда, когда вы не уверены в типе оператора, иначе используйте метод executeQuery или executeUpdate.
Операторы JDBC — это в основном операторы, которые используются для отправки команд SQL в базу данных и извлечения данных из базы данных. JDBC предоставляет различные методы, такие как execute(), executeUpdate(), executeQuery и т. д., для взаимодействия с базой данных.
JDBC поддерживает 3 типа операторов:
Википедия определяет фреймворк Spring как «фреймворк приложения и инверсию контейнера управления для платформы Java». Основные функции фреймворка могут использоваться любым Java-приложением, но существуют расширения для создания веб-приложений поверх платформы Java EE». Spring — это, по сути, легкая интегрированная среда, которую можно использовать для разработки корпоративных приложений на языке java.
Некоторые из важных модулей Spring Framework:
Важными аннотациями являются:
Компоненты — это объекты, формирующие основу приложения Spring. Они управляются контейнером Spring IoC. Другими словами, компонент — это объект, который создается, собирается и управляется контейнером Spring IoC.
В Spring bean-компонентах определено пять областей действия.
Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.
DispatcherServlet — это, по сути, передний контроллер в приложении Spring MVC, поскольку он загружает файл конфигурации bean-компонентов Spring и инициализирует все настроенные bean-компоненты. Если аннотации включены, он также сканирует пакеты для настройки любого компонента, аннотированного аннотациями @Component, @Controller, @Repository или @Service.
ContextLoaderListener, с другой стороны, является прослушивателем для запуска и закрытия WebApplicationContext в корневом каталоге Spring. Некоторые из его важных функций включают привязку жизненного цикла Application Context к жизненному циклу ServletContext и автоматизацию создания ApplicationContext.
Нет. | Внедрение конструктора | Инъекция сеттера |
1) | Без частичного впрыска | Частичный впрыск |
2) | Не переопределяет свойство setter | Переопределяет свойство конструктора, если оба определены. |
3) | Создает новый экземпляр, если происходит какое-либо изменение | Не создает новый экземпляр, если вы измените значение свойства |
4) | Лучше для слишком многих свойств | Лучше для нескольких свойств. |
Autowiring позволяет программисту автоматически вводить bean-компонент. Нам не нужно писать явную логику внедрения. Давайте посмотрим код для внедрения bean-компонента с использованием внедрения зависимостей.
Режимы автопроводки приведены ниже:
Нет. | Режим | Описание |
1) | нет | это режим по умолчанию, это означает, что автопроводка не включена. |
2) | по имени | Внедряет bean-компонент на основе имени свойства. Он использует метод установки. |
3) | по типу | Внедряет bean-компонент на основе типа свойства. Он использует метод установки. |
4) | конструктор | Он вводит bean-компонент с помощью конструктора |
Spring MVC Framework предоставляет следующие способы, которые помогут нам добиться надежной обработки исключений.
Мы можем определить методы обработчика исключений в наших классах контроллеров. Все, что нам нужно, это аннотировать эти методы аннотацией @ExceptionHandler.
Обработка исключений является сквозной проблемой, и Spring предоставляет аннотацию @ControllerAdvice, которую мы можем использовать с любым классом для определения нашего глобального обработчика исключений.
Что касается общих исключений, в большинстве случаев мы обслуживаем статические страницы. Spring Framework предоставляет интерфейс HandlerExceptionResolver, который мы можем реализовать для создания глобального обработчика исключений. Причина этого дополнительного способа определения глобального обработчика исключений заключается в том, что среда Spring также предоставляет классы реализации по умолчанию, которые мы можем определить в нашем файле конфигурации bean-компонента Spring, чтобы получить преимущества обработки исключений среды Spring.
Вот некоторые из аннотаций Spring, которые я использовал в своем проекте:
@Controller — для классов контроллеров в проекте Spring MVC.
@RequestMapping — для настройки сопоставления URI в методах обработчика контроллера. Это очень важная аннотация, поэтому вам следует просмотреть примеры аннотаций Spring MVC RequestMapping.
@ResponseBody — для отправки объекта в качестве ответа, обычно для отправки данных XML или JSON в качестве ответа.
@PathVariable — для отображения динамических значений из URI в аргументы метода обработчика.
@Autowired — для автоматического подключения зависимостей в бинах Spring.
@Qualifier — с аннотацией @Autowired, чтобы избежать путаницы при наличии нескольких экземпляров типа bean-компонента.
@Service — для классов обслуживания.
@Scope — для настройки области действия Spring bean.
@Configuration, @ComponentScan и @Bean — для конфигураций на основе Java.
Аннотации AspectJ для настройки аспектов и советов, @Aspect, @Before, @After, @Around, @Pointcut и т. д.
Мы можем использовать модуль Spring ORM для интеграции фреймворков Spring и Hibernate, если вы используете Hibernate 3+, где SessionFactory предоставляет текущий сеанс, тогда вам следует избегать использования классов HibernateTemplate или HibernateDaoSupport и лучше использовать шаблон DAO с внедрением зависимостей для интеграции.
Кроме того, Spring ORM обеспечивает поддержку использования декларативного управления транзакциями Spring, поэтому вам следует использовать это, а не использовать шаблонный код гибернации для управления транзакциями.
Spring поддерживает два типа управления транзакциями. Они есть:
Объектно-реляционное сопоставление или ORM — это метод программирования для сопоставления объектов модели домена приложения с таблицами реляционной базы данных. Hibernate — это инструмент ORM на основе Java, который обеспечивает основу для сопоставления объектов домена приложения с таблицами реляционной базы данных и наоборот.
Hibernate предоставляет эталонную реализацию Java Persistence API, что делает его отличным выбором в качестве инструмента ORM с преимуществами слабой связи. Мы можем использовать API сохраняемости Hibernate для операций CRUD. Платформа Hibernate предоставляет возможность сопоставления простых старых объектов Java с традиционными таблицами базы данных с использованием аннотаций JPA, а также конфигурации на основе XML.
Точно так же конфигурации спящего режима являются гибкими и могут быть выполнены из файла конфигурации XML, а также программно.
Некоторые из важных преимуществ использования Hibernate Framework:
В целом спящий режим — лучший выбор на текущем рынке для инструмента ORM, он содержит все функции, которые вам когда-либо понадобятся в инструменте ORM.
Hibernate имеет многоуровневую архитектуру, которая помогает пользователю работать без знания базовых API. Hibernate использует базу данных и данные конфигурации для предоставления приложению служб сохранения (и постоянных объектов). Он включает в себя множество объектов, таких как постоянный объект, фабрика сеансов, фабрика транзакций, фабрика соединений, сеанс, транзакция и т. д.
Архитектура Hibernate разделена на четыре уровня.
Различия между методами get() и load() приведены ниже.
Нет. | получить() | нагрузка() |
1) | Возвращает null, если объект не найден. | Выдает исключение ObjectNotFoundException, если объект не найден. |
2) | Метод get() всегда попадает в базу данных. | Метод load() не обращается к базе данных. |
3) | Он возвращает реальный объект, а не прокси. | Он возвращает прокси-объект. |
4) | Его следует использовать, если вы не уверены в существовании экземпляра. | Его следует использовать, если вы уверены, что экземпляр существует. |
Некоторые из важных преимуществ Hibernate framework по сравнению с JDBC:
Методы | Описание |
общественная пустота jspInit() | Он вызывается только один раз, как и метод инициализации сервлета. |
public void _jspService (запрос ServletRequest, ServletResponse) выдает ServletException, IOException | Он вызывается при каждом запросе, так же как и метод service() сервлета. |
публичная пустота jspDestroy() | Он вызывается только один раз, как и метод destroy() сервлета. |
JSP по умолчанию предоставляет 9 неявных объектов. Они следующие:
Объект | Тип |
1) вне | JspWriter |
2) просьба | HttpServletRequest |
3) ответ | HttpServletResponse |
4) конфиг | Конфигурация сервлетов |
5) сессия | HttpSession |
6) приложение | Контекст сервлета |
7) Контекст страницы | Контекст страницы |
8) страница | Объект |
9) исключение | Метательный |
включить директиву | включить действие |
Директива include включает содержимое во время перевода страницы. | Действие включения включает содержимое во время запроса. |
Директива include включает исходное содержимое страницы, поэтому размер страницы увеличивается во время выполнения. | Действие включения не включает исходное содержимое, а вызывает метод include() класса, предоставленного поставщиком. |
Это лучше для статических страниц. | Это лучше для динамических страниц. |
<%
response.setHeader(“Cache-Control”,”no-store”);
response.setHeader(“Pragma”,”no-cache”);
response.setHeader (“Expires”, “0”); //prevents caching at the proxy server
%>
Существует 5 типов тегов JSTL.
<%@ page session=“false” %>
Следующий код объясняет, как удалить Cookie в JSP:
Cookie mycook = new Cookie("name1","value1");
response.addCookie(mycook1);
Cookie killmycook = new Cookie("mycook1","value1");
killmycook . set MaxAge ( 0 );
killmycook . set Path ("/");
killmycook . addCookie ( killmycook 1 );
Метод jspDestry() вызывается из интерфейса javax.servlet.jsp.JspPage всякий раз, когда страница JSP собирается быть уничтоженной. Методы уничтожения сервлетов можно легко переопределить для выполнения очистки, например, при закрытии соединения с базой данных.
JSP — это технология на стороне сервера, упрощающая создание контента. Они ориентированы на документы, тогда как сервлеты — это программы. Страница Java-сервера может содержать фрагменты программы Java, которые выполняют и создают экземпляры классов Java. Однако они встречаются внутри файла шаблона HTML. Он обеспечивает основу для разработки веб-приложения.
Нам не нужно настраивать стандартные теги JSP в web.xml, потому что когда контейнер загружает веб-приложение и находит файлы TLD, он автоматически настраивает их для использования непосредственно на страницах JSP приложения. Нам просто нужно включить его на страницу JSP с помощью директивы taglib.
Используя неявный объект pageContext JSP EL, вы можете получить ссылку на объект запроса и использовать оператор точки для получения имени метода HTTP на странице JSP. Код JSP EL для этой цели будет выглядеть как ${pageContext.request.method}.
Ошибка — это неустранимое состояние, возникающее во время выполнения. Например, ошибка OutOfMemory. Эти ошибки JVM нельзя исправить во время выполнения. Хотя ошибка может быть обнаружена в блоке catch, выполнение приложения будет остановлено и не будет восстановлено.
В то время как исключения - это условия, которые возникают из-за неправильного ввода или человеческой ошибки и т. д. Например, FileNotFoundException будет сгенерировано, если указанный файл не существует. Или NullPointerException произойдет, если вы попытаетесь использовать нулевую ссылку. В большинстве случаев можно восстановиться после исключения (вероятно, предоставив пользователю обратную связь для ввода правильных значений и т. д.
Для обработки исключений в Java используются пять ключевых слов:
Существует два способа создания потока:
Это создает поток, создавая экземпляр нового класса, который расширяет класс Thread. Расширяющий класс должен переопределить функцию run(), которая является точкой входа потока.
Это самый простой способ создать поток, создав класс, реализующий исполняемый интерфейс. После реализации интерфейса runnable класс должен реализовать метод public void run()().
Метод run() создает параллельный поток в вашей программе. Когда run() вернется, поток завершится.
Метод run() создает параллельный поток в вашей программе. Когда run() вернется, поток завершится.
В методе run() вы должны указать код потока.
Как и любой другой метод, метод run() может вызывать другие методы, использовать другие классы и определять переменные.
Java работает как феномен «передачи по значению» или «передачи по ссылке»?
Java всегда передается по значению. Это означает, что он создает копию содержимого параметра в памяти. В Java объектные переменные всегда относятся к реальному объекту кучи памяти.
Блок finally всегда выполняется, даже если оператор return написан в конце блока try и блока catch. Он всегда выполняется, независимо от того, есть исключение или нет. Есть только несколько ситуаций, в которых блок finally не выполняется, например, сбой виртуальной машины, сбой питания, сбой программного обеспечения и т. д. Если вы не хотите выполнять блок finally, вам нужно вызвать System.exit(). явно в блоке finally.
Если исключение не перехвачено, оно выбрасывается с вершины стека и падает вниз по стеку вызовов к предыдущей процедуре. Если исключение там не перехвачено, оно возвращается к предыдущей функции и так далее, пока оно не будет перехвачено или стек вызовов не достигнет дна. Термин для этого — распространение исключений.
Жизненный цикл потока Java имеет следующие состояния:
Новый-
Когда поток создан и до того, как программа запустит поток, он находится в новом состоянии. Его также называют родившейся нитью.
Запускаемый
Когда поток запущен, он находится в состоянии Runnable. В этом состоянии поток выполняет свою задачу.
Ожидающий
Иногда поток переходит в состояние ожидания, где он остается бездействующим, потому что выполняется другой поток. Когда другой поток завершается, ожидающий поток снова переходит в состояние выполнения.
Ожидание по времени
В режиме ожидания поток переходит в состояние ожидания. Но он остается в состоянии ожидания только в течение определенного интервала времени, после которого он начинает выполняться. Он остается в ожидании либо до окончания временного интервала, либо до завершения другого потока.
Прекращено
Говорят, что поток находится в этом состоянии после завершения. Это может быть связано с тем, что поток завершил свою задачу или по любой другой причине.
Final используется для применения ограничений к классу, методу и переменной. Конечный класс не может быть унаследован, конечный метод не может быть переопределен и конечное значение переменной не может быть изменено. Давайте посмотрим на пример ниже, чтобы понять его лучше.
class FinalVarExample {
public static void main( String args[])
{
final int a=10; // Final variable
a=50; //Error as value can't be changed
}
Наконец используется для размещения важного кода, он будет выполняться независимо от того, обработано ли исключение или нет. Давайте посмотрим на пример ниже, чтобы понять его лучше.
class FinallyExample {
public static void main(String args[]){
try {
int x=100;
}
catch(Exception e) {
System.out.println(e);
}
finally {
System.out.println("finally block is executing");}
}}
}
Finalize используется для выполнения очистки непосредственно перед сборкой мусора. Давайте посмотрим на пример ниже, чтобы понять его лучше.
class FinalizeExample {
public void finalize() {
System.out.println("Finalize is called");
}
public static void main(String args[])
{
FinalizeExample f1=new FinalizeExample();
FinalizeExample f2=new FinalizeExample();
f1= NULL;
f2=NULL;
System.gc();
}
}
бросить ключевое слово | бросает ключевое слово |
Throw используется для явного создания исключения. | Броски используются для объявления исключения. |
Проверенные исключения не могут распространяться только с помощью throw. | Проверенные исключения могут распространяться с помощью бросков. |
За броском следует экземпляр. | За бросками следует класс. |
Throw используется внутри метода. | Throws используется с сигнатурой метода. |
Вы не можете генерировать несколько исключений | Вы можете объявить несколько исключений, например, public void method() выдает IOException, SQLException. |
Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.
Иерархия выглядит следующим образом:
Throwable является родительским классом для всех классов Exception. Существует два типа исключений: Checked исключения и UncheckedExceptions или RunTimeExceptions. Оба типа исключений расширяют класс исключений, тогда как ошибки далее классифицируются как ошибка виртуальной машины и ошибка утверждения.
Чтобы создать собственное исключение, расширьте класс Exception или любой из его подклассов.
Exception и все его подклассы не предоставляют никаких конкретных методов, и все методы определены в базовом классе Throwable.
Процесс | Нить | |
Определение | Выполняемый экземпляр программы называется процессом. | Поток — это подмножество процесса. |
Коммуникация | Процессы должны использовать межпроцессное взаимодействие для связи с одноуровневыми процессами. | Потоки могут напрямую взаимодействовать с другими потоками своего процесса. |
Контроль | Процессы могут осуществлять контроль только над дочерними процессами. | Потоки могут осуществлять значительный контроль над потоками одного и того же процесса. |
Изменения | Любые изменения в родительском процессе не влияют на дочерние процессы. | Любое изменение в основном потоке может повлиять на поведение других потоков процесса. |
объем памяти | Запуск в отдельных областях памяти. | Запуск в разделяемых пространствах памяти. |
Контролируется | Процесс контролируется операционной системой. | Потоки управляются программистом в программе. |
Зависимость | Процессы независимы. | Потоки зависимы. |
Блок finally — это блок, который всегда выполняет набор операторов. Он всегда связан с блоком try, независимо от того, возникло какое-либо исключение или нет.
Да, finally не будет выполняться, если программа завершится либо вызовом System.exit(), либо вызвав фатальную ошибку, которая приведет к прерыванию процесса.
Синхронизация относится к многопоточности. Синхронизированный блок кода может выполняться только одним потоком за раз. Поскольку Java поддерживает выполнение нескольких потоков, два или более потока могут обращаться к одним и тем же полям или объектам. Синхронизация — это процесс, который синхронизирует все параллельные выполняемые потоки. Синхронизация позволяет избежать ошибок согласованности памяти, вызванных несогласованным представлением общей памяти. Когда метод объявлен как синхронизированный, поток удерживает монитор для объекта этого метода. Если другой поток выполняет синхронизированный метод, поток блокируется до тех пор, пока этот поток не освободит монитор.
Да, у нас может быть несколько блоков catch в одном блоке try, но подход должен быть от конкретного к общему. Давайте разберемся с этим на программном примере.
public class Example {
public static void main(String args[]) {
try {
int a[]= new int[10];
a[10]= 10/0;
}
catch(ArithmeticException e)
{
System.out.println("Arithmetic exception in first catch block");
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("Array index out of bounds in second catch block");
}
catch(Exception e)
{
System.out.println("Any exception in third catch block");
}
}
Методы определены в базовом классе Throwable. Некоторые из важных методов класса исключений Java указаны ниже.
Synchronized Throwable getCause() — этот метод возвращает причину исключения или нулевой идентификатор, представленный объектом Throwable.
OutOfMemoryError — это подкласс java.lang.Error, который обычно возникает, когда нашей JVM не хватает памяти.
Поток — это наименьшая часть запрограммированных инструкций, которая может выполняться планировщиком независимо. В Java все программы будут иметь по крайней мере один поток, известный как основной поток. Этот основной поток создается JVM, когда программа начинает свое выполнение. Основной поток используется для вызова функции main() программы.
В Java потоки могут быть созданы двумя способами:
Сборка мусора на Java — программа, которая помогает в неявном управлении памятью. Поскольку в Java с помощью нового ключевого слова вы можете динамически создавать объекты, которые после создания будут потреблять некоторую память. Как только работа выполнена и на объект больше не осталось ссылок, Java с помощью сборки мусора уничтожает объект и освобождает занимаемую им память. Java предоставляет четыре типа сборщиков мусора:
Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java , прокомментируйте свои проблемы в разделе ниже.
Оригинальный источник статьи на https://www.edureka.co
1620458875
According to some surveys, such as JetBrains’s great survey, Java 8 is currently the most used version of Java, despite being a 2014 release.
What you are reading is one in a series of articles titled ‘Going beyond Java 8,’ inspired by the contents of my book, Java for Aliens. These articles will guide you step-by-step through the most important features introduced to the language, starting from version 9. The aim is to make you aware of how important it is to move forward from Java 8, explaining the enormous advantages that the latest versions of the language offer.
In this article, we will talk about the most important new feature introduced with Java 10. Officially called local variable type inference, this feature is better known as the **introduction of the word **var
. Despite the complicated name, it is actually quite a simple feature to use. However, some observations need to be made before we can see the impact that the introduction of the word var
has on other pre-existing characteristics.
#java #java 11 #java 10 #java 12 #var #java 14 #java 13 #java 15 #verbosity
1620462686
On March 16th, 2021, Java 16 was GA. With this new release, tons of new exciting features have been added. Check out the release notes to know more about these changes in detail. This article’s focus will be on Java Records, which got delivered with JEP 395. Records were first introduced in JDK 14 as a preview feature proposed by JEP 359, and with JDK 15, they remained in preview with JEP 384. However, with JDK 16, Records are no longer in preview.
I have picked Records because they are definitely the most favored feature added in Java 16, according to this Twitter poll by Java Champion Mala Gupta.
I also conducted a similar survey, but it was focused on features from Java 8 onwards. The results were not unexpected, as Java 8 is still widely used. Very unfortunate, though, as tons of new features and improvements are added to newer Java versions. But in terms of features, Java 8 was definitely a game-changer from a developer perspective.
So let’s discuss what the fuss is about Java Records.
#java #springboot #java programming #records #java tutorials #java programmer #java records #java 16
1602637135
Java is not the hardest language to start with. So, it becomes way popular among novice developers joining the ranks of Java coders every single day. If you are reading this blog post, you might be interested in learning Java.
Java is widely used across industry, and especially in the area of Enterprise software, which results in many high paying job opportunities and makes this programming language a common language for newbies. A general promotion of it within colleges and other institutions providing a formal Computer Science education also contributes to its popularity.
However, these are not the only advantages of Java — among other things, it allows you to adopt good practices and makes it way easier to learn other languages in the future. And with no doubt, you can easily learn it if you’re following the right approach. In this post, I am going to share some of them with you.
Beyond all doubt, practice is important and valuable. But, before we get to the advantages of hands-on experience, I want to draw your attention to one essential thing I often tell my students.
New programmers who are just learning and start implementing things, without being supervised, often end up adapting bad practices. To avoid that, especially when you are making your first steps in programming, I recommend looking for a person who will supervise you and teach you. A strong mentorship with someone engaged in a serious project, as well as communication within the community in the form of sharing code and asking for feedback, is worth the effort. Similarly, when you are applying for your first job, you want to be looking for a company with a strong team and a good leader who would be keen on investing into your learning.
Now, let’s return to practical experience. Learning by doing is different from learning by passively consuming the information. To make sure we can use all the newly acquired technology, we should put our skills to test and write tons of code. The benefits of hands-on experience are almost endless.
By practicing, you get a clear understanding of what programming is. Consequently, you start doing better with each new hands-on task, complete it faster, and thus become more productive.
Even if you are not working on real-world projects yet, it’s important to get used to having deadlines. They are inextricably linked to the programming process. My recommendation is to set up your own deadlines while practicing stage and follow them as closely as possible.
#java #learn java #java code #learn java in easy way #learn java course #learn java development