Как профессионалу важно знать правильные модные слова, изучать правильные технологии и готовить правильные ответы на часто задаваемые вопросы собеседования по Java.
- Основные вопросы
- Q1. Объясните JDK, JRE и JVM?
- Q2. Объясните public static void main (String args [])
- Q3. Почему Java не зависит от платформы?
- Q4. Почему Java не на 100% объектно-ориентирована?
- Q5. Что такое классы-оболочки?
- Q6. Что такое конструкторы?
- Q7. Что такое одноэлементный класс и как мы можем сделать его?
- Q8. В чем разница между списком массивов и вектором?
- Q9. В чем разница между equals() и ==?
- Q10. В чем разница между кучей и стековой памятью?
- Q11. Что такое пакет? Перечислите различные преимущества пакетов.
- Q12. Почему не используются указатели?
- Q13. Что такое JIT-компилятор?
- Q14. Что такое модификаторы доступа?
- Q15. Определение класса
- Q16. Что такое объект и как он создается?
- Q17. Что такое объектно-ориентированное программирование?
- Q18. Каковы основные концепции ООП?
- Q19. В чем разница между локальной переменной и переменной экземпляра?
- Q20. Чем отличаются конструкторы от методов?
- Q21. Что такое final ключевое слово?
- Q22. В чем разница между операторами break и continue?
- Q23.Что такое бесконечный цикл? Объясните на примере.
- Q24. В чем разница между this() и super()?
- Q25. Что такое пул строк?
- Q26. Различия статических и нестатических методов
- Q27. Что такое цепочка конструкторов?
- Q28. Разница между String, StringBuilder и StringBuffer
- Q29. Что такое загрузчик классов?
- Q30. Почему строки неизменны по своей природе?
- Q31. В чем разница между массивом и списком массивов?
- Q32. Что такое карта?
- Q33. Что такое класс коллекции? Перечислите его методы и интерфейсы
- ООП
- Q1. Что такое полиморфизм?
- Q2. Что такое полиморфизм времени выполнения или диспетчеризация динамических методов?
- Q3. Что такое абстракция?
- Q4. Что вы имеете в виду под интерфейсом?
- Q5. В чем разница между абстрактными классами и интерфейсами?
- Q6. Что такое наследование?
- Q7. Какие существуют типы наследования?
- Q8. Что такое перегрузка метода и переопределение метода?
- Q9. Можете ли вы переопределить частный или статический метод?
- Q10. Что такое множественное наследование? Поддерживается ли это Java?
- Q11. Что такое инкапсуляция?
- Q12. Что такое ассоциация?
- Q13. Что вы имеете в виду под агрегированием?
- Q14. Что такое композиция?
- Q15. Что такое интерфейс маркера?
- Q16. Что такое клонирование объектов?
- Q17. Что такое конструктор копирования?
- Q18. Что такое перегрузка конструктора?
- Вопросы по сервлетам
- Q1. Что такое сервлет?
- Q2. В чем разница между методами Get и Post?
- Q3. Что такое диспетчер запросов?
- Q4. В чем разница между методом forward() и методами sendRedirect()?
- Q5. Каков жизненный цикл сервлета?
- Q6. Как файлы cookie работают в сервлетах?
- Q7. В чем разница между ServletContext и ServletConfig?
- Q8. Какие существуют методы управления сеансами в сервлетах?
- Вопросы по JDBC
- Q1. Что такое драйвер JDBC?
- Q2. Каковы шаги для подключения к базе данных?
- Q3. Что представляют собой компоненты JDBC API?
- Q4. Какова роль класса JDBC DriverManager?
- Q5. Что такое интерфейс подключения JDBC?
- Q6. Какова цель интерфейса JDBC ResultSet?
- Q7. Что такое интерфейс JDBC ResultSetMetaData?
- Q8. Что такое интерфейс JDBC DatabaseMetaData?
- Q9. Что вы подразумеваете под пакетной обработкой в JDBC?
- Q10. В чем разница между execute, executeQuery, executeUpdate?
- Q11. Что вы понимаете под заявлениями JDBC?
- Вопросы по Spring
- Q1. Что такое Spring?
- Q2. Назовите различные модули фреймворка
- Q3. Перечислите некоторые важные аннотации
- Q4. Объясните Bean в Spring и перечислите различные области применения
- Q5. Объясните роль DispatcherServlet и ContextLoaderListener
- Q6. В чем разница между внедрением конструктора и внедрением сеттера?
- Q7. Что такое autowiring? Какие бывают режимы автоподключения?
- Q8. Как обрабатывать исключения в Spring MVC Framework?
- На основе контроллера:
- Глобальный обработчик исключений:
- Реализация HandlerExceptionResolver:
- Q9. Какие важные аннотации Spring вы использовали?
- Q10. Как интегрировать Spring и Hibernate Frameworks?
- Q11. Назовите типы управления транзакциями, которые поддерживает Spring
- Вопросы про Hibernate
- Q1. Что такое Hibernate Framework?
- Q2. Каковы важные преимущества использования Hibernate Framework?
- Q3. Объясните архитектуру Hibernate
- Q4. В чем разница между методами get и load?
- 5. Каковы преимущества Hibernate перед JDBC?
- Вопросы по JSP
- Q1. Каковы методы жизненного цикла jsp?
- Q2. Что такое неявные объекты JSP?
- Q3. В чем разница между include directive и include action?
- Q4. Как отключить кеширование на кнопке возврата в браузере?
- Q5. Какие теги представлены в JSTL?
- Q6. Как отключить сессию в JSP?
- Q7. Как удалить cookie в JSP?
- Q8. Объясните метод jspDestroy()
- Q9. Чем JSP лучше, чем технология сервлетов?
- Q10. Почему нам не следует настраивать стандартные теги JSP в web.xml?
- Q11. Как вы будете использовать JSP EL для получения имени метода HTTP?
- Исключения
- Q1. В чем разница между ошибкой и исключением?
- Q2. Как вы можете обрабатывать исключения?
- Q3. В чем разница между отмеченным исключением и непроверенным исключением?
- Q4. Какую цель выполняют ключевые слова final, finally и finalize?
- Q5. В чем разница между throw и throws?
- Q6. Что такое иерархия исключений?
- Q7. Как создать собственное исключение?
- Q8. Каковы важные методы класса исключений?
- Q9. В чем разница между процессами и потоками?
- Q10. Что такое блок finally? Есть ли случай, когда окончательно не исполнят?
- Q11. Что такое синхронизация?
- Q12. Можем ли мы написать несколько блоков catch в одном блоке try?
- Q13. Каковы важные методы класса исключений?
- Q14. Что такое OutOfMemoryError?
- Q15. Что такое поток?
- Q16. Какими двумя способами можно создать поток?
- Q17. Какие существуют типы сборщиков мусора в Java?
Основные вопросы
Q1. Объясните JDK, JRE и JVM?
| JDK | JRE | JVM |
|---|---|---|
| Java Development Kit | Java Runtime Environment | Java Virtual Machine |
| Это инструмент, необходимый для компиляции, документирования и упаковки программ Java. | JRE относится к среде выполнения, в которой может выполняться байт-код Java. | Это абстрактная машина. Это спецификация, которая обеспечивает среду выполнения, в которой может выполняться байт-код. |
| Он содержит инструменты разработки JRE +. | Это реализация JVM, которая существует физически. | JVM следует за тремя обозначениями: спецификация, реализация и экземпляр среды выполнения. |
JDK против JRE против JVM
Q2. Объясните public static void main (String args [])
main() — это точка входа для любой программы. Он всегда записывается как public static void main (String [] args).
- public: Public — это модификатор доступа, который используется для указания того, кто может получить доступ к этому методу. Public означает, что этот метод будет доступен любому классу.
- static: это ключевое слово в java, которое определяет, что он основан на классах. main() в Java сделан статическим, поэтому к нему можно получить доступ без создания экземпляра класса. В случае, если main не сделан статическим, компилятор выдаст ошибку, поскольку main() вызывается JVM до того, как будут созданы какие-либо объекты, и только статические методы могут быть вызваны напрямую через класс.
- void: это возвращаемый тип метода. Void определяет метод, который не возвращает никакого значения.
- main: это имя метода, который JVM ищет в качестве отправной точки только для приложения с определенной подписью. Это метод, в котором происходит основное исполнение.
- String args []: это параметр, передаваемый в основной метод.
Q3. Почему Java не зависит от платформы?
Java называется платформо-независимой из-за ее байтовых кодов, которые могут работать в любой системе, независимо от базовой операционной системы.
Q4. Почему Java не на 100% объектно-ориентирована?
Потому что в ней используются восемь примитивных типов данных, таких как boolean, byte, char, int, float, double, long, short, которые не являются объектами.
Q5. Что такое классы-оболочки?
Классы-оболочки преобразуют примитивы в ссылочные типы (объекты). Каждому примитивному типу данных посвящен класс. Они известны как классы-оболочки, потому что они «оборачивают» примитивный тип данных в объект этого класса.
Q6. Что такое конструкторы?
Относится к блоку кода, который используется для инициализации объекта. Он должен иметь то же имя, что и класс. Кроме того, он не имеет возвращаемого типа и автоматически вызывается при создании объекта.
Есть два типа конструкторов:
- Конструктор по умолчанию: тот, который не принимает никаких входных данных. Другими словами, конструкторы по умолчанию — это конструкторы без аргументов, которые будут созданы по умолчанию, если пользователь не определил другой конструктор. Его основная цель — инициализировать переменные экземпляра значениями по умолчанию. Кроме того, он в основном используется для создания объектов.
- Параметризованный конструктор: конструктор, способный инициализировать переменные экземпляра с предоставленными значениями. Другими словами, конструкторы, принимающие аргументы, называются параметризованными конструкторами.
Q7. Что такое одноэлементный класс и как мы можем сделать его?
Класс Singleton — это класс, только один экземпляр которого может быть создан в любой момент времени в одной JVM. Класс можно сделать одноэлементным, сделав его конструктор закрытым.
Q8. В чем разница между списком массивов и вектором?
| ArrayList | Вектор |
|---|---|
| Список массивов не синхронизирован. | Вектор синхронизирован. |
| Список массивов работает быстро, так как он не синхронизирован. | Вектор медленный, так как он потокобезопасен. |
| Если элемент вставлен в список массивов, он увеличивает размер массива на 50%. | По умолчанию вектор удваивает размер своего массива. |
| Список массивов не определяет размер приращения. | Вектор определяет размер приращения. |
| Список массивов может использовать только Iterator для просмотра списка массивов. | Вектор может использовать для обхода как Enumeration, так и Iterator. |
Q9. В чем разница между equals() и ==?
Метод Equals() определен в классе Object и используется для проверки равенства двух объектов, определенных бизнес-логикой.
«==» или оператор равенства — это бинарный оператор, предоставляемый языком программирования Java и используемый для сравнения примитивов и объектов. — это метод, предоставляемый классом Object. Реализация по умолчанию использует оператор == для сравнения двух объектов. Например: метод можно переопределить как класс String. equals() используется для сравнения значений двух объектов.
Q10. В чем разница между кучей и стековой памятью?
Основное различие между памятью Heap и Stack:
| Характеристики | Stack | Heap |
|---|---|---|
| Объем памяти | Память стека используется только одним потоком выполнения. | Память кучи используется всеми частями приложения. |
| Доступ | Другие потоки не могут получить доступ к памяти стека. | Объекты, хранящиеся в куче, доступны глобально. |
| Управление памятью | Для освобождения памяти следует метод LIFO. | Управление памятью основано на генерации, связанной с каждым объектом. |
| Продолжительность жизни | Существует до конца выполнения потока. | Память в куче живет от начала до конца выполнения приложения. |
| Использование | Память стека содержит только локальные примитивы и ссылочные переменные для объектов в пространстве кучи. | Всякий раз, когда объект создается, он всегда сохраняется в пространстве кучи. |
Q11. Что такое пакет? Перечислите различные преимущества пакетов.
Пакеты — это набор связанных классов и интерфейсов, которые связаны вместе. Используя пакеты, разработчики могут легко модулировать код и оптимизировать его повторное использование. Кроме того, код внутри пакетов может быть импортирован другими классами и использован повторно. Несколько его преимуществ:
- Пакеты на Java помогают избежать конфликтов имен.
- Они обеспечивают более легкий контроль доступа к коду.
- Пакеты также могут содержать скрытые классы, которые не видны внешним классам и используются только внутри пакета..
- Создает правильную иерархическую структуру, которая упрощает поиск связанных классов.
Q12. Почему не используются указатели?
Не используются указатели, потому что они небезопасны и усложняют программу. Поскольку Java известна своей простотой кода, добавление концепции указателей будет противоречивым. Более того, поскольку JVM отвечает за неявное выделение памяти, таким образом, чтобы избежать прямого доступа пользователя к памяти, в Java не рекомендуется использовать указатели.
Q13. Что такое JIT-компилятор?
JIT означает компилятор Just-In-Time. Это программа, которая помогает преобразовывать байт-код в инструкции, которые отправляются непосредственно процессору. По умолчанию включен JIT-компилятор, который активируется при каждом вызове метода.
Затем JIT-компилятор компилирует байт-код вызванного метода в собственный машинный код, компилируя его «как раз вовремя» для выполнения. После компиляции метода JVM вызывает скомпилированный код этого метода напрямую, а не интерпретирует его. Вот почему он часто отвечает за оптимизацию производительности приложений во время выполнения.
Q14. Что такое модификаторы доступа?
Модификаторы доступа — это специальные ключевые слова, которые используются для ограничения доступа класса, конструктора, элемента данных и метода в другом классе. Java поддерживает четыре типа модификаторов доступа:
- По умолчанию.
- Частный.
- Защищенный.
- Общественный.
| Модификатор | По умолчанию | Частный | Защищено | Общественные |
|---|---|---|---|---|
| Тот же класс | ДА | ДА | ДА | ДА |
| Тот же подкласс пакета | ДА | Нет | ДА | ДА |
| Тот же пакет, не являющийся подклассом | ДА | Нет | ДА | ДА |
| Другой подкласс пакета | Нет | Нет | ДА | ДА |
| Другой пакет, не являющийся подклассом | Нет | Нет | Нет | ДА |
Q15. Определение класса
Класс — это план, который включает все ваши данные. Класс содержит поля (переменные) и методы для описания поведения объекта. Давайте посмотрим на синтаксис класса.
class Abc {
member variables // class body
methods}
Q16. Что такое объект и как он создается?
Объект — это реальный объект, у которого есть состояние и поведение. У объекта есть три характеристики:
- State.
- Behavior.
- Identity.
Объект создается с использованием ключевого слова new. Например:
ClassName obj = new ClassName();
Q17. Что такое объектно-ориентированное программирование?
Объектно-ориентированное программирование или широко известное как ООП — это модель программирования или подход, при котором программы организованы вокруг объектов, а не логики и функций. Другими словами, ООП в основном фокусируется на объектах, которыми необходимо управлять, а не на логике. Этот подход идеально подходит для программ с большими и сложными кодами, которые необходимо активно обновлять или поддерживать.
Q18. Каковы основные концепции ООП?
Объектно-ориентированное программирование или ООП — это стиль программирования, связанный с такими понятиями, как:
- Наследование: это процесс, при котором один класс приобретает свойства другого.
- Инкапсуляция: это механизм объединения данных и кода в единое целое.
- Абстракция: это методология сокрытия деталей реализации от пользователя и предоставления им функциональности.
- Полиморфизм: способность переменной, функции или объекта принимать несколько форм.
Q19. В чем разница между локальной переменной и переменной экземпляра?
Локальная переменная обычно используется внутри метода, конструктора или блока и имеет только локальную область видимости. Таким образом, эту переменную можно использовать только в рамках блока. Лучшее преимущество наличия локальной переменной заключается в том, что другие методы в классе даже не будут знать об этой переменной.
Пример
if(x > 100)
{
String test = "Edureka";
}
В то время как переменная экземпляра — это переменная, которая ограничена самим объектом. Эти переменные объявляются внутри класса, но вне метода. Каждый объект этого класса будет создавать свою собственную копию переменной при ее использовании. Таким образом, любые изменения, внесенные в переменную, не будут отражаться в других экземплярах этого класса и будут привязаны только к этому конкретному экземпляру.
class Test{
public String EmpName;
public int empAge;
}
Q20. Чем отличаются конструкторы от методов?
| Методы | Конструкторы |
|---|---|
| 1. Используется для представления поведения объекта. | 1. Используется для инициализации состояния объекта. |
| 2. Должен иметь возвращаемый тип | 2. Не иметь возвращаемого типа |
| 3. Должен быть вызван явно | 3. Вызывается неявно |
| 4. Компилятор не предоставляет метода по умолчанию. | 4. Конструктор по умолчанию предоставляется компилятором, если в классе его нет. |
| 5. Имя метода может совпадать с именем класса, а может и не совпадать. | 5. Имя конструктора всегда должно совпадать с именем класса. |
Q21. Что такое final ключевое слово?
final — это специальное ключевое слово в Java, которое используется как модификатор отсутствия доступа. Последняя переменная может использоваться в разных контекстах, например:
- Конечная переменная.Когда ключевое слово final используется с переменной, его значение нельзя изменить после назначения. В случае, если конечной переменной не было присвоено значение, тогда с помощью только конструктора класса ей можно присвоить значение.
- Последний метод.Когда метод объявлен окончательным, он не может быть переопределен наследующим классом.
- Последний класс.Когда класс объявлен в Java как final, он не может быть расширен каким-либо подклассом, но может расширять другой класс.
Q22. В чем разница между операторами break и continue?
| break | continue |
|---|---|
| 1. Может использоваться в операторах switch и loop (for, while, do while). | 1. Может использоваться только с операторами цикла. |
| 2. Это приводит к завершению работы операторов switch или loop в момент их выполнения. | 2. Это не завершает цикл, но заставляет его перейти к следующей итерации. |
| 3. Он немедленно завершает самый внутренний охватывающий цикл или переключает | 3. Продолжение внутри цикла, вложенного с переключателем, вызовет выполнение следующей итерации цикла. |
Пример перерыва:
for (int i = 0; i < 5; i++)
{
if (i == 3)
{
break;
}
System.out.println(i);
}
Пример продолжения:
for (int i = 0; i < 5; i++)
{
if(i == 2)
{
continue;
}
System.out.println(i);
}
Q23.Что такое бесконечный цикл? Объясните на примере.
Бесконечный цикл — это последовательность инструкций, которая повторяется бесконечно, когда функциональный выход не выполняется. Этот тип цикла может быть результатом ошибки программирования или также может быть преднамеренным действием, основанным на поведении приложения. Бесконечный цикл автоматически завершится после выхода из приложения.
Например:
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.
}
}
Q24. В чем разница между this() и super()?
super() и this() являются специальными ключевыми словами, которые используются для вызова конструктора.
| this() | super() |
|---|---|
| 1. this () представляет текущий экземпляр класса | 1. super () представляет текущий экземпляр родительского / базового класса |
| 2. Используется для вызова конструктора по умолчанию того же класса. | 2. Используется для вызова конструктора по умолчанию родительского / базового класса. |
| 3. Используется для доступа к методам текущего класса. | 3. Используется для доступа к методам базового класса. |
| 4. Используется для указания текущего экземпляра класса. | 4. Используется для указания экземпляра суперкласса. |
| 5. Должна быть первой строкой блока. | 5. Должна быть первой строкой блока. |
Q25. Что такое пул строк?
Пул String относится к набору строк, которые хранятся в динамической памяти. В этом случае всякий раз, когда создается новый объект, пул строк сначала проверяет, присутствует ли объект в пуле или нет. Если он присутствует, то такая же ссылка возвращается в переменную, иначе новый объект будет создан в пуле строк, и будет возвращена соответствующая ссылка.
Q26. Различия статических и нестатических методов
| Статический метод | Нестатический метод |
|---|---|
| 1. Перед названием метода необходимо использовать ключевое слово static. | 1. Нет необходимости использовать ключевое слово s tatic перед именем метода. |
| 2. Он вызывается с использованием класса (className.methodName) | 2. Его можно вызвать как любой общий метод. |
| 3. У них нет доступа к нестатическим переменным экземпляров или методам. | 3. Он может получить доступ к любому статическому методу и любой статической переменной без создания экземпляра класса. |
Q27. Что такое цепочка конструкторов?
Цепочка конструкторов — это процесс вызова одного конструктора из другого по отношению к текущему объекту. Цепочка конструкторов возможна только в устаревших версиях, когда конструктор подкласса отвечает за вызов конструктора суперкласса первым. В цепочке конструкторов может быть любое количество классов. Цепочка конструкторов может быть достигнута двумя способами:
- В том же классе, используя this().
- Из базового класса с использованием super().
Q28. Разница между String, StringBuilder и StringBuffer
| Фактор | String | StringBuilder | StringBuffer |
|---|---|---|---|
| Зона хранения | Постоянный пул строк | Площадь кучи | Площадь кучи |
| Изменчивость | Неизменный | Мутабельный | Мутабельный |
| Безопасность потоков | Да | Нет | Да |
| Производительность | Быстро | Более эффективным | Менее эффективны |
Q29. Что такое загрузчик классов?
ClassLoader — это подмножество JVM (виртуальной машины), которое отвечает за загрузку файлов классов. Всякий раз, когда выполняется программа, она сначала загружается загрузчиком классов. Java предоставляет три встроенных загрузчика классов:
- Bootstrap ClassLoader
- Extension ClassLoader
- System/Application ClassLoader
Q30. Почему строки неизменны по своей природе?
Строковые объекты неизменяемы по своей природе, что просто означает, что после создания объекта String его состояние нельзя изменить. Всякий раз, когда вы пытаетесь обновить значение этого объекта вместо обновления значений этого конкретного объекта, Java создает новый строковый объект.
Объекты String неизменяемы, поскольку они обычно кэшируются в пуле String. Поскольку строковые литералы обычно используются несколькими клиентами, действие одного клиента может повлиять на остальные. Это повышает безопасность, кэширование, синхронизацию и производительность приложения.
Q31. В чем разница между массивом и списком массивов?
| Массив | ArrayList |
|---|---|
| Не может содержать значения разных типов данных | Может содержать значения разных типов данных. |
| Размер должен быть определен при декларировании | Размер можно динамически изменять |
| Необходимо указать индекс, чтобы добавить данные | Не нужно указывать индекс |
| Массивы не параметризованы по типу | Арайлисты типа |
| Массивы могут содержать примитивные типы данных, а также объекты. | Аррайлисты могут содержать только объекты, примитивные типы данных не допускаются. |
Q32. Что такое карта?
Map — это интерфейс пакета Util, который сопоставляет уникальные ключи со значениями. Интерфейс карты не является подмножеством основного интерфейса коллекции и, таким образом, его поведение мало отличается от других типов коллекций. Ниже приведены некоторые характеристики интерфейса карты:
Q33. Что такое класс коллекции? Перечислите его методы и интерфейсы
Коллекция — это структура, которая действует как архитектура для хранения и управления группой объектов. Используя Коллекции, вы можете выполнять различные задачи, такие как поиск, сортировка, вставка, манипулирование, удаление и т. д. Среда сбора данных включает в себя следующее:
- Интерфейсы.
- Классы.
- Методы.
На изображении ниже показана полная иерархия Collection.

ООП
Q1. Что такое полиморфизм?

Полиморфизм кратко описывается как «один интерфейс, множество реализаций». Полиморфизм — это характеристика способности придавать различное значение или использование чему-либо в разных контекстах — в частности, позволять сущности, такой как переменная, функция или объект, иметь более одной формы. Есть два типа полиморфизма:
- Полиморфизм времени компиляции.
- Полиморфизм времени выполнения.
Полиморфизм времени компиляции — это перегрузка метода, тогда как полиморфизм времени выполнения выполняется с использованием наследования и интерфейса.
Q2. Что такое полиморфизм времени выполнения или диспетчеризация динамических методов?
Полиморфизм времени выполнения или диспетчеризация динамического метода — это процесс, в котором вызов переопределенного метода разрешается во время выполнения, а не во время компиляции. В этом процессе переопределенный метод вызывается через ссылочную переменную суперкласса. Давайте посмотрим на пример ниже, чтобы лучше понять это.
class Car {
void run()
{
System.out.println(ldquo;car is runningrdquo;);
}
}
class Audi extends Car {
void run()
{
System.out.prinltn(ldquo;Audi is running safely with 100kmrdquo;);
}
public static void main(String args[])
{
Car b= new Audi(); //upcasting
b.run();
}
}
Q3. Что такое абстракция?
Абстракция относится к качеству работы с идеями, а не с событиями. В основном он занимается сокрытием деталей и показом пользователю важных вещей. Таким образом, можно сказать, что абстракция — это процесс сокрытия деталей реализации от пользователя и раскрытия им только функциональных возможностей. Абстракции можно достичь двумя способами:
- Абстрактные классы (можно достичь 0-100% абстракции).
- Интерфейсы (можно достичь 100% абстракции).
Q4. Что вы имеете в виду под интерфейсом?
Интерфейс — это план класса или, можно сказать, набор абстрактных методов и статических констант. В интерфейсе каждый метод является открытым и абстрактным, но не содержит конструктора. Таким образом, интерфейс в основном представляет собой группу связанных методов с пустыми телами. Пример:
public interface Animal {
общественная пустота есть ();
общественная пустота сна ();
public void run ();
}
Q5. В чем разница между абстрактными классами и интерфейсами?
| Абстрактный класс | Интерфейсы |
|---|---|
| Абстрактный класс может предоставить полный код по умолчанию и / или только детали, которые необходимо переопределить. | Интерфейс не может предоставить никакого кода, только подпись |
| В случае абстрактного класса класс может расширять только один абстрактный класс. | Класс может реализовывать несколько интерфейсов |
| Абстрактный класс может иметь не абстрактные методы | Все методы интерфейса абстрактны |
| Абстрактный класс может иметь переменные экземпляра | Интерфейс не может иметь переменных экземпляра |
| У абстрактного класса может быть любая видимость: публичная, приватная, защищенная. | Видимость интерфейса должна быть общедоступной (или отсутствовать) |
| Если мы добавим новый метод в абстрактный класс, тогда у нас будет возможность предоставить реализацию по умолчанию, и, следовательно, весь существующий код может работать правильно. | Если мы добавим новый метод к интерфейсу, тогда мы должны отследить все реализации интерфейса и определить реализацию для нового метода. |
| Абстрактный класс может содержать конструкторы | Интерфейс не может содержать конструкторы |
| Абстрактные классы быстрые | Интерфейсы медленные, поскольку для поиска соответствующего метода в фактическом классе требуется дополнительное косвенное обращение. |
Q6. Что такое наследование?
Наследование — это концепция, при которой свойства одного класса могут быть унаследованы другим. Это помогает повторно использовать код и устанавливать отношения между разными классами. Наследование осуществляется между двумя типами классов:
- Родительский класс (Супер или Базовый класс).
- Дочерний класс (подкласс или производный класс).
Класс, который наследует свойства, известен как дочерний класс, тогда как класс, свойства которого наследуются, известен как родительский класс.
Q7. Какие существуют типы наследования?
Java поддерживает четыре типа наследования:
- Одиночное наследование: при одиночном наследовании один класс наследует свойства другого, то есть будет только один родительский и один дочерний класс.
- Многоуровневое наследование: когда класс является производным от класса, который также является производным от другого класса, то есть класса, имеющего более одного родительского класса, но на разных уровнях, такой тип наследования называется многоуровневым наследованием.
- Иерархическое наследование: когда класс имеет несколько дочерних классов (подклассов) или, другими словами, несколько дочерних классов имеют один и тот же родительский класс, тогда такой вид наследования называется иерархическим.
- Гибридное наследование. Гибридное наследование — это комбинация двух или более типов наследования.
Q8. Что такое перегрузка метода и переопределение метода?
Перегрузка метода:
- При перегрузке методов методы одного класса имеют одно и то же имя, но каждый метод должен иметь разное количество параметров или параметров, имеющих разные типы и порядок.
- Перегрузка метода — это «добавить» или «расширить» поведение метода.
- Это полиморфизм времени компиляции.
- У методов должна быть другая подпись.
- Может потребоваться или не потребоваться наследование в перегрузке метода.
Давайте посмотрим на пример ниже, чтобы лучше понять это.
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();
}
}
Q9. Можете ли вы переопределить частный или статический метод?
Вы не можете переопределить частный или статический метод. Если вы создаете аналогичный метод с тем же возвращаемым типом и теми же аргументами метода в дочернем классе, он скроет метод суперкласса; это известно как метод сокрытия. Точно так же вы не можете переопределить частный метод в подклассе, потому что он там недоступен. Что вы можете сделать, так это создать другой частный метод с тем же именем в дочернем классе. Давайте посмотрим на пример ниже, чтобы лучше понять это.
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();
}
}
Q10. Что такое множественное наследование? Поддерживается ли это Java?
Если дочерний класс наследует свойство от нескольких классов, это называется множественным наследованием. Java не позволяет расширять несколько классов.
Проблема с множественным наследованием заключается в том, что если несколько родительских классов имеют одно и то же имя метода, то во время выполнения компилятору становится сложно решить, какой метод выполнять из дочернего класса.
Следовательно, Java не поддерживает множественное наследование. Проблема обычно называется проблемой бриллианта.
Q11. Что такое инкапсуляция?
Инкапсуляция — это механизм, в котором вы связываете свои данные (переменные) и код (методы) вместе как единое целое. Здесь данные скрыты от внешнего мира и доступны только с помощью методов текущего класса. Это помогает защитить данные от любых ненужных изменений. Мы можем добиться инкапсуляции:
- Объявление переменных класса закрытыми.
- Предоставление общедоступных методов установки и получения для изменения и просмотра значений переменных.
Q12. Что такое ассоциация?
Ассоциация — это отношения, при которых у всех объектов свой жизненный цикл и нет владельца. Возьмем пример Учителя и Студента. Несколько студентов могут связываться с одним учителем, а один ученик может связываться с несколькими учителями, но между объектами нет права собственности, и оба имеют свой собственный жизненный цикл. Эти отношения могут быть один к одному, один со многими, многие с одним и многие со многими.
Q13. Что вы имеете в виду под агрегированием?
Агрегация — это специализированная форма ассоциации, в которой у всех объектов есть собственный жизненный цикл, но есть право собственности, а дочерний объект не может принадлежать другому родительскому объекту. Возьмем для примера кафедру и преподавателя. Один учитель не может принадлежать к нескольким отделам, но если мы удалим объект учитель отдела, он не разрушится.
Q14. Что такое композиция?
Композиция снова является специализированной формой агрегирования, и мы можем назвать это отношениями «смерти». Это сильный тип агрегирования. Дочерний объект не имеет своего жизненного цикла, и если родительский объект удалит, все дочерние объекты также будут удалены. Давайте снова возьмем пример отношения между домом и комнатами. Дом может содержать несколько комнат, нет независимой жизни комнаты, и любая комната не может принадлежать двум разным домам, если мы удалим дом, комната будет автоматически удалена.
Q15. Что такое интерфейс маркера?
Интерфейс маркера можно определить как интерфейс, не имеющий данных-членов и функций-членов. Проще говоря, пустой интерфейс называется интерфейсом маркера. Наиболее распространенными примерами интерфейса маркера являются Serializable, Cloneable и т. д. Интерфейс маркера может быть объявлен следующим образом.
public interface Serializable{
}
Q16. Что такое клонирование объектов?
Клонирование объекта — это процесс создания точной копии объекта. В основном это означает возможность создать объект в состоянии, аналогичном исходному объекту. Для этого есть метод clone(), использующий эту функциональность.
Этот метод создает новый экземпляр класса текущего объекта, а затем инициализирует все его поля с точно таким же содержимым соответствующих полей. Для объекта clone() должен быть реализован интерфейс маркера java.lang.Cloneable, чтобы избежать каких-либо исключений во время выполнения.
Object clone() — это защищенный метод, поэтому вам необходимо переопределить его.
Q17. Что такое конструктор копирования?
Конструктор копирования — это функция-член, которая используется для инициализации объекта с помощью другого объекта того же класса. Хотя в Java нет необходимости в конструкторе копирования, поскольку все объекты передаются по ссылке. Более того, Java даже не поддерживает автоматическую передачу по значению.
Q18. Что такое перегрузка конструктора?
Перегрузка конструктора — это метод добавления любого количества конструкторов в класс, каждый из которых имеет свой список параметров. Компилятор использует количество параметров и их типы в списке, чтобы различать перегруженные конструкторы.
class Demo
{
int i;
public Demo(int a)
{
i=k;
}
public Demo(int a, int b)
{
//body
}
}
Вопросы по сервлетам
Q1. Что такое сервлет?
- Java Servlet — это серверные технологии, расширяющие возможности веб-серверов за счет поддержки динамического ответа и сохранения данных.
- Пакеты javax.servlet и javax.servlet.http предоставляют интерфейсы и классы для написания наших собственных сервлетов.
- Все сервлеты должны реализовывать интерфейс javax.servlet.Servlet, который определяет методы жизненного цикла сервлета. При реализации универсальной службы мы можем расширить класс GenericServlet, предоставляемый API сервлетов Java. Класс HttpServlet предоставляет такие методы, как doGet() и doPost(), для обработки специфичных для HTTP сервисов.
- В большинстве случаев доступ к веб-приложениям осуществляется по протоколу HTTP, поэтому мы в основном расширяем класс HttpServlet. Иерархия API сервлетов показана на изображении ниже.
Q2. В чем разница между методами Get и Post?
| Get | Post |
|---|---|
| Ограниченное количество данных может быть отправлено, потому что данные отправляются в заголовке. | Может быть отправлен большой объем данных, потому что данные отправляются в теле. |
| Не защищен, поскольку данные отображаются в строке URL. | Защищено, поскольку данные не отображаются в строке URL. |
| Можно добавить в закладки | Невозможно добавить в закладки |
| Идемпотент | Не идемпотентный |
| Это более эффективно и используется, чем Post | Он менее эффективен и используется |
Q3. Что такое диспетчер запросов?
Интерфейс RequestDispatcher используется для перенаправления запроса на другой ресурс, который может быть HTML, JSP или другим сервлетом в том же приложении. Мы также можем использовать это, чтобы включить в ответ содержимое другого ресурса.
В этом интерфейсе определены два метода:
- void forward();
- void include().
Q4. В чем разница между методом forward() и методами sendRedirect()?
| forward() | SendRedirect() |
|---|---|
| Отправляет тот же запрос другому ресурсу. | Всегда отправляет новый запрос, потому что он использует адресную строку браузера. |
| Работает на стороне сервера. | Работает на стороне клиента. |
| Работает только на сервере. | Работает как на сервере, так и за его пределами. |
Q5. Каков жизненный цикл сервлета?
Жизненный цикл сервлета состоит из 5 этапов:

- Сервлет загружен.
- Сервлет создан.
- Сервлет инициализирован.
- Обслужить запрос.
- Сервлет уничтожен.
Q6. Как файлы cookie работают в сервлетах?
- Файлы cookie — это текстовые данные, отправляемые сервером клиенту и сохраняемые на локальном компьютере клиента.
- Servlet API обеспечивает поддержку файлов cookie через класс javax.servlet.http.Cookie, который реализует интерфейсы Serializable и Cloneable.
- Метод HttpServletRequest getCookies() предоставляется для получения массива файлов cookie из запроса, поскольку нет смысла добавлять файлы cookie в запрос, нет методов для установки или добавления файлов cookie в запрос.
- Аналогичным образом предоставляется метод HttpServletResponse addCookie(Cookie c) для прикрепления файла cookie в заголовке ответа, методы получения для cookie отсутствуют.
Q7. В чем разница между ServletContext и ServletConfig?
Разница между ServletContext и ServletConfig в JSP сервлетов заключается в табличном формате ниже.
| ServletConfig | ServletContext |
|---|---|
| Объект конфигурации сервлета представляет собой один сервлет. | Он представляет собой целое веб-приложение, работающее на конкретной JVM и общее для всех сервлетов. |
| Это как локальный параметр, связанный с конкретным сервлетом. | Это как глобальный параметр, связанный со всем приложением. |
| Это пара значений имени, определенная в разделе сервлета файла web.xml, поэтому она имеет широкую область действия. | ServletContext имеет широкую область применения, поэтому определите его вне тега сервлета в файле web.xml. |
| getServletConfig() метод используется для получения объекта конфигурации. | getServletContext() используется для получения объекта контекста. |
| Например, корзина для покупок пользователя является специфической для конкретного пользователя, поэтому здесь мы можем использовать конфигурацию сервлета. | Чтобы получить тип MIME файла или сеанса приложения, информация, связанная с сеансом, сохраняется с помощью объекта контекста сервлета. |
Q8. Какие существуют методы управления сеансами в сервлетах?
Сеанс — это состояние диалога между клиентом и сервером, которое может состоять из нескольких запросов и ответов между клиентом и сервером. Поскольку HTTP и веб-сервер не имеют состояния, единственный способ поддерживать сеанс — это передача некоторой уникальной информации о сеансе (идентификатор сеанса) между сервером и клиентом в каждом запросе и ответе.
Некоторые из распространенных способов управления сеансами в сервлетах:
- Аутентификация пользователя.
- Скрытое поле HTML.
- Cookies.
- Перезапись URL.
- API управления сеансом.

Вопросы по JDBC
Q1. Что такое драйвер JDBC?
Драйвер JDBC — это программный компонент, который позволяет Java-приложению взаимодействовать с базой данных. Существует 4 типа драйверов JDBC:
- Драйвер моста JDBC-ODBC.
- Драйвер Native-API.
- Драйвер сетевого протокола.
- Тонкий драйвер.
Q2. Каковы шаги для подключения к базе данных?
- Регистрация класса драйвера.
- Создание подключения.
- Создание выписки.
- Выполнение запросов.
- Закрытие соединения.
Q3. Что представляют собой компоненты JDBC API?
Пакет java.sql содержит интерфейсы и классы для JDBC API.
Интерфейсы:
- Connection;
- Statement;
- PreparedStatement;
- ResultSet;
- ResultSetMetaData;
- DatabaseMetaData;
- CallableStatement и т.д.
Классы:
- DriverManager;
- Blob;
- Clob;
- Types;
- SQLException и т. д.
Q4. Какова роль класса JDBC DriverManager?
DriverManager класс управляет зарегистрированными драйверами. Его можно использовать для регистрации и отмены регистрации драйверов. Он предоставляет фабричный метод, который возвращает экземпляр Connection.
Q5. Что такое интерфейс подключения JDBC?
Интерфейс подключения поддерживает сеанс с базой данных. Его можно использовать для управления транзакциями. Он предоставляет фабричные методы, которые возвращают экземпляр Statement, PreparedStatement, CallableStatement и DatabaseMetaData.

Q6. Какова цель интерфейса JDBC ResultSet?
Объект ResultSet представляет собой строку таблицы. Его можно использовать для изменения указателя курсора и получения информации из базы данных.
Q7. Что такое интерфейс JDBC ResultSetMetaData?
Интерфейс ResultSetMetaData возвращает информацию о таблице, такую как общее количество столбцов, имя столбца, тип столбца и т. д.
Q8. Что такое интерфейс JDBC DatabaseMetaData?
Интерфейс DatabaseMetaData возвращает информацию о базе данных, такую как имя пользователя, имя драйвера, версия драйвера, количество таблиц, количество просмотров и т. д.
Q9. Что вы подразумеваете под пакетной обработкой в JDBC?
Пакетная обработка помогает группировать связанные операторы SQL в пакет и выполнять их вместо выполнения одного запроса. Используя технику пакетной обработки в JDBC, вы можете выполнять несколько запросов, что повышает производительность.
Q10. В чем разница между execute, executeQuery, executeUpdate?
Выполнение инструкции(строковый запрос) используется для выполнения любого SQL-запроса и возвращает TRUE, если результатом является ResultSet, такой как выполнение запросов Select. Выходные данные — ЛОЖЬ, если нет объекта ResultSet, такого как выполняющиеся запросы Insert или Update. Мы можем использовать getResultSet(), чтобы получить ResultSet, и метод getUpdateCount(), чтобы получить счетчик обновлений.
Оператор executeQuery(строковый запрос) используется для выполнения запросов Select и возвращает ResultSet. Возвращаемый ResultSet никогда не является нулевым, даже если нет записей, соответствующих запросу. При выполнении запросов select мы должны использовать метод executeQuery, чтобы, если кто-то попытается выполнить оператор вставки / обновления, он выбросит java.sql.SQLException с сообщением «Метод executeQuery не может использоваться для обновления».
Оператор executeUpdate (строковый запрос ) используется для выполнения операторов Insert / Update / Delete (DML) или операторов DDL, которые ничего не возвращают. Результат — int и равен количеству строк для операторов языка манипулирования данными SQL (DML). Для операторов DDL на выходе будет 0.
Вам следует использовать метод execute() только в том случае, если вы не уверены в типе оператора, иначе используйте метод executeQuery или executeUpdate.
Q11. Что вы понимаете под заявлениями JDBC?
Операторы JDBC — это в основном операторы, которые используются для отправки команд SQL в базу данных и получения данных обратно из базы данных. JDBC предоставляет различные методы, такие как execute(), executeUpdate(), executeQuery и т. д., Для взаимодействия с базой данных.
JDBC поддерживает 3 типа операторов:
- Оператор: используется для общего доступа к базе данных и выполняет статический SQL-запрос во время выполнения.
- PreparedStatement: используется для предоставления входных параметров запросу во время выполнения.
- CallableStatement: используется для доступа к хранимым процедурам базы данных и помогает принимать параметры времени выполнения.
Вопросы по Spring
Q1. Что такое Spring?
Википедия определяет среду Spring как «платформу приложения и инверсию контейнера управления для платформы Java. Основные функции платформы могут использоваться любым приложением Java, но есть расширения для создания веб-приложений на основе платформы Java EE». Spring — это, по сути, легкий интегрированный фреймворк, который можно использовать для разработки корпоративных приложений на java.
Q2. Назовите различные модули фреймворка
Некоторые из важных модулей Spring Framework:
- Spring Context — для внедрения зависимостей.
- Spring AOP — для аспектно-ориентированного программирования.
- Spring DAO — для операций с базой данных с использованием шаблона DAO
- Spring JDBC — для поддержки JDBC и DataSource.
- Spring ORM — для поддержки инструментов ORM, таких как Hibernate
- Spring Web Module — для создания веб-приложений.
- Spring MVC — реализация Model-View-Controller для создания веб-приложений, веб-сервисов и т. д.

Q3. Перечислите некоторые важные аннотации
Важные аннотации:
- @Required;
- @Autowired;
- @Qualifier;
- @Resource;
- @PostConstruct;
- @PreDestroy.
Q4. Объясните Bean в Spring и перечислите различные области применения
Компоненты — это объекты, которые составляют основу приложения Spring. Они управляются контейнером Spring IoC. Другими словами, bean-компонент — это объект, который создается, собирается и управляется контейнером Spring IoC.
В bean-компонентах Spring определены пять областей действия.
- Синглтон : для каждого контейнера будет создан только один экземпляр компонента. Это область действия по умолчанию для Spring beans. При использовании этой области убедитесь, что Spring bean не имеет общих переменных экземпляра, иначе это может привести к проблемам несогласованности данных, потому что он не является потокобезопасным.
- Прототип : новый экземпляр будет создаваться каждый раз при запросе компонента.
- Запрос : это то же самое, что и у прототипа, но предназначено для использования в веб-приложениях. Для каждого HTTP-запроса будет создан новый экземпляр компонента.
- Сеанс : контейнер будет создавать новый компонент для каждого сеанса HTTP.
- Глобальный сеанс : используется для создания глобальных сеансовых компонентов для приложений с портлетами.
Q5. Объясните роль DispatcherServlet и ContextLoaderListener
DispatcherServlet в основном является фронт-контроллером в приложении Spring MVC, поскольку он загружает файл конфигурации Spring bean и инициализирует все bean-компоненты, которые были настроены. Если аннотации включены, он также сканирует пакеты, чтобы настроить любой компонент, аннотированный аннотациями @Component, @Controller, @Repository или @Service.

ContextLoaderListener, с другой стороны, является слушателем для запуска и закрытия WebApplicationContext в корне Spring. Некоторые из его важных функций включают привязку жизненного цикла Application Context к жизненному циклу ServletContext и автоматизацию создания ApplicationContext.

Q6. В чем разница между внедрением конструктора и внедрением сеттера?
| № | Внедрение конструктора | Внедрение сеттера |
| 1) | Нет частичного впрыска | Частичный впрыск |
| 2) | Не отменяет свойство установщика | Переопределяет свойство конструктора, если оба определены. |
| 3) | Создает новый экземпляр, если происходит какое-либо изменение | Не создает новый экземпляр, если вы измените значение свойства |
| 4) | Лучше для слишком большого количества объектов | Лучше для нескольких объектов. |
Q7. Что такое autowiring? Какие бывают режимы автоподключения?
Autowiring позволяет программисту автоматически вводить bean-компонент. Нам не нужно писать явную логику внедрения. Давайте посмотрим на код для внедрения bean-компонента с использованием внедрения зависимостей.
<bean id=“emp” class=“com.javatpoint.Employee” autowire=“byName” />
Ниже приведены режимы автоматического подключения:
| № | Режим | Описание |
| 1) | нет | это режим по умолчанию, это означает, что автоматическое подключение не включено. |
| 2) | по имени | Внедряет bean-компонент на основе имени свойства. Он использует метод установки. |
| 3) | byType | Внедряет компонент на основе типа свойства. Он использует метод установки. |
| 4) | конструктор | Он вводит bean-компонент с помощью конструктора |
Q8. Как обрабатывать исключения в Spring MVC Framework?
Spring MVC Framework предоставляет следующие способы помочь нам добиться надежной обработки исключений.
На основе контроллера:
Мы можем определить методы обработчика исключений в наших классах контроллеров. Все, что нам нужно, это аннотировать эти методы аннотацией @ExceptionHandler.
Глобальный обработчик исключений:
Обработка исключений — это сквозная проблема, и Spring предоставляет аннотацию @ControllerAdvice, которую мы можем использовать с любым классом для определения нашего глобального обработчика исключений.
Реализация HandlerExceptionResolver:
В случае общих исключений в большинстве случаев мы обслуживаем статические страницы. Spring Framework предоставляет интерфейс HandlerExceptionResolver, который мы можем реализовать для создания глобального обработчика исключений. Причина этого дополнительного способа определения глобального обработчика исключений заключается в том, что среда Spring также предоставляет классы реализации по умолчанию, которые мы можем определить в нашем файле конфигурации компонента Spring, чтобы получить преимущества обработки исключений инфраструктуры Spring.
Q9. Какие важные аннотации Spring вы использовали?
Вот некоторые из аннотаций Spring, которые чаще используют в своем проекте:
@Controller — для классов контроллеров в проекте Spring MVC.
@RequestMapping — для настройки отображения URI в методах обработчика контроллера. Это очень важная аннотация, поэтому вам следует ознакомиться с примерами аннотаций Spring MVC RequestMapping.
@ResponseBody — для отправки объекта в качестве ответа, обычно для отправки данных XML или JSON в качестве ответа.
@PathVariable — для сопоставления динамических значений из URI аргументам метода обработчика.
@Autowired — для автоматического подключения зависимостей в Spring beans.
@Qualifier — с аннотацией @Autowired, чтобы избежать путаницы, когда присутствует несколько экземпляров типа bean.
@Service — для классов обслуживания.
@Scope — для настройки области действия Spring bean.
@Configuration, @ComponentScan и @Bean — для конфигураций на основе java.
Аннотации AspectJ для настройки аспектов и советов, @Aspect, @Before, @After, @Around, @Pointcut и т. д.
Q10. Как интегрировать Spring и Hibernate Frameworks?
Мы можем использовать модуль Spring ORM для интеграции фреймворков Spring и Hibernate, если вы используете Hibernate 3+, где SessionFactory предоставляет текущий сеанс, тогда вам следует избегать использования классов HibernateTemplate или HibernateDaoSupport и лучше использовать шаблон DAO с внедрением зависимостей для интеграции.
Кроме того, Spring ORM обеспечивает поддержку использования декларативного управления транзакциями Spring, поэтому вам следует использовать это, а не использовать шаблонный код гибернации для управления транзакциями.
Q11. Назовите типы управления транзакциями, которые поддерживает Spring
Spring поддерживает два типа управления транзакциями. Они есть:
- Программное управление транзакциями: в этом случае транзакция управляется с помощью программирования. Он обеспечивает исключительную гибкость, но его очень сложно поддерживать.
- Декларативное управление транзакциями: в этом случае управление транзакциями отделено от бизнес-кода. Для управления транзакциями используются только аннотации или конфигурации на основе XML.
Вопросы про Hibernate
Q1. Что такое Hibernate Framework?
Объектно-реляционное сопоставление или ORM — это метод программирования для сопоставления объектов модели предметной области приложения с таблицами реляционной базы данных. Hibernate — это инструмент ORM на основе Java, который обеспечивает структуру для сопоставления объектов домена приложения с таблицами реляционной базы данных и наоборот.
Hibernate предоставляет эталонную реализацию Java Persistence API, что делает его отличным выбором в качестве инструмента ORM с преимуществами слабой связи. Мы можем использовать API сохранения Hibernate для операций CRUD. Платформа Hibernate предоставляет возможность отображать простые старые объекты Java в традиционные таблицы базы данных с использованием аннотаций JPA, а также конфигурации на основе XML.
Точно так же конфигурации гибернации являются гибкими и могут быть выполнены из файла конфигурации XML, а также программно.
Q2. Каковы важные преимущества использования Hibernate Framework?
Некоторые из важных преимуществ использования фреймворка гибернации:
- Hibernate исключает весь шаблонный код, который поставляется с JDBC, и заботится об управлении ресурсами, поэтому мы можем сосредоточиться на бизнес-логике.
- Платформа Hibernate обеспечивает поддержку как XML, так и аннотаций JPA, что делает реализацию нашего кода независимой.
- Hibernate предоставляет мощный язык запросов (HQL), похожий на SQL. Однако HQL полностью объектно-ориентирован и понимает такие концепции, как наследование, полиморфизм и ассоциация.
- Hibernate — это проект с открытым исходным кодом от Red Hat Community, используемый во всем мире. Это делает его лучшим выбором, чем другие, потому что время обучения невелико, и существует множество онлайн-документации, а помощь легко доступна на форумах.
- Hibernate легко интегрируется с другими платформами Java EE, он настолько популярен, что Spring Framework предоставляет встроенную поддержку интеграции гибернации с приложениями Spring.
- Hibernate поддерживает отложенную инициализацию с использованием прокси-объектов и выполняет фактические запросы к базе данных только тогда, когда это необходимо.
- Кэш гибернации помогает нам повысить производительность.
- Для конкретной функции поставщика базы данных подходит спящий режим, потому что мы также можем выполнять собственные запросы sql.
В целом спящий режим — лучший выбор на текущем рынке для инструмента ORM, он содержит все функции, которые вам когда-либо понадобятся в инструменте ORM.
Q3. Объясните архитектуру Hibernate

Q4. В чем разница между методами get и load?
Ниже приведены различия между методами get() и load().
| № | get() | load() |
| 1) | Возвращает null, если объект не найден. | Выдает ObjectNotFoundException, если объект не найден. |
| 2) | get() всегда попадает в базу данных. | load () не попадает в базу данных. |
| 3) | Он возвращает реальный объект, а не прокси. | Он возвращает прокси-объект. |
| 4) | Его следует использовать, если вы не уверены в существовании экземпляра. | Его следует использовать, если вы уверены, что экземпляр существует. |
5. Каковы преимущества Hibernate перед JDBC?
Некоторые из важных преимуществ Hibernate framework перед JDBC:
- Hibernate удаляет много шаблонного кода, который поставляется с JDBC API, код выглядит более чистым и читаемым.
- Hibernate поддерживает наследование, ассоциации и коллекции. Эти функции отсутствуют в JDBC API.
- Hibernate неявно обеспечивает управление транзакциями, по сути, большинство запросов не могут выполняться вне транзакции. В JDBC API нам нужно написать код для управления транзакциями с использованием фиксации и отката.
- JDBC API выдает SQLException, которое является проверенным исключением, поэтому нам нужно написать много кода блока try-catch. В большинстве случаев он избыточен в каждом вызове JDBC и используется для управления транзакциями. Hibernate обертывает исключения JDBC и генерирует непроверенное исключение JDBCException или HibernateException , поэтому нам не нужно писать код для его обработки. Встроенное управление транзакциями Hibernate исключает использование блоков try-catch.
- Hibernate Query Language (HQL) более объектно-ориентирован и близок к языку программирования Java. Для JDBC нам нужно писать собственные SQL-запросы.
- Hibernate поддерживает кэширование, которое лучше для производительности, запросы JDBC не кэшируются, поэтому производительность низкая.
- Hibernate предоставляет вариант, с помощью которого мы также можем создавать таблицы базы данных, поскольку таблицы JDBC должны существовать в базе данных.
- Конфигурация Hibernate помогает нам использовать JDBC-подобное соединение, а также JNDI DataSource для пула соединений. Это очень важная функция в корпоративном приложении, которая полностью отсутствует в JDBC API.
- Hibernate поддерживает аннотации JPA, поэтому код не зависит от реализации и легко заменяется другими инструментами ORM. Код JDBC очень тесно связан с приложением.
Вопросы по JSP
Q1. Каковы методы жизненного цикла jsp?
| Методы | Описание |
|---|---|
| public void jspInit() | Он вызывается только один раз, как и метод init сервлета. |
| public void _jspService(ServletRequest request,ServletResponse)throws ServletException,IOException | Он вызывается при каждом запросе, так же, как метод сервлета service (). |
| public void jspDestroy() | Он вызывается только один раз, так же, как метод destroy () сервлета. |
Q2. Что такое неявные объекты JSP?
По умолчанию JSP предоставляет 9 неявных объектов. Вот они:
| Объект | Тип |
|---|---|
| 1) out | JspWriter |
| 2) request | HttpServletRequest |
| 3) response | HttpServletResponse |
| 4) config | ServletConfig |
| 5) session | HttpSession |
| 6) application | ServletContext |
| 7) pageContext | PageContext |
| 8) page | Object |
| 9) exception | Throwable |
Q3. В чем разница между include directive и include action?
| include directive | include action |
|---|---|
| Включает содержимое во время перевода страницы. | Включает содержимое во время запроса. |
| Включает исходное содержимое страницы, поэтому размер страницы увеличивается во время выполнения. | Не включает исходное содержимое, а вызывает метод include () класса, предоставленного поставщиком. |
| Лучше для статических страниц. | Лучше для динамических страниц. |
Q4. Как отключить кеширование на кнопке возврата в браузере?
< % response.setHeader («Cache-Control», «no-store»); response.setHeader («Прагма», «без кеширования»); response.setHeader («Истекает», «0»); // предотвращает кеширование на прокси-сервере % >
Q5. Какие теги представлены в JSTL?
Есть 5 типов тегов JSTL.
- основные теги;
- теги sql;
- xml-теги;
- теги интернационализации;
- теги функций;
Q6. Как отключить сессию в JSP?
< % @ page session = «false» % >
Q7. Как удалить cookie в JSP?
Следующий код объясняет, как удалить 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 );
Q8. Объясните метод jspDestroy()
Метод jspDestry() вызывается из интерфейса javax.servlet.jsp.JspPage всякий раз, когда страница JSP собирается быть уничтожена. Методы уничтожения сервлетов можно легко переопределить для выполнения очистки, например, при закрытии соединения с базой данных.
Q9. Чем JSP лучше, чем технология сервлетов?
JSP — это технология на стороне сервера, упрощающая создание контента. Они ориентированы на документы, тогда как сервлеты — это программы. Страница сервера Java может содержать фрагменты программы Java, которые выполняют и создают экземпляры классов Java. Однако они происходят внутри файла шаблона HTML. Он обеспечивает основу для разработки веб-приложения.
Q10. Почему нам не следует настраивать стандартные теги JSP в web.xml?
Нам не нужно настраивать стандартные теги JSP в web.xml, потому что, когда контейнер загружает веб-приложение и находит файлы TLD, он автоматически настраивает их для использования непосредственно на страницах JSP приложения. Нам просто нужно включить его на страницу JSP с помощью директивы taglib.
Q11. Как вы будете использовать JSP EL для получения имени метода HTTP?
Используя неявный объект pageContext JSP EL, вы можете получить ссылку на объект запроса и использовать оператор точки для получения имени метода HTTP на странице JSP. Код JSP EL для этой цели будет выглядеть как $ {pageContext.request.method}.
Исключения
Q1. В чем разница между ошибкой и исключением?
Ошибка — это неисправимое состояние, возникающее во время выполнения. Например, ошибка OutOfMemory. Эти ошибки JVM невозможно исправить во время выполнения. Хотя ошибка может быть обнаружена в блоке catch, выполнение приложения будет остановлено и не подлежит исправлению.
В то время как исключения — это условия, которые возникают из-за неправильного ввода или человеческой ошибки и т. д., Например, FileNotFoundException будет выброшено, если указанный файл не существует. Или возникнет исключение NullPointerException, если вы попытаетесь использовать нулевую ссылку. В большинстве случаев возможно восстановление после исключения (возможно, предоставив пользователю обратную связь для ввода правильных значений и т. д.
Q2. Как вы можете обрабатывать исключения?
Для обработки исключений в Java используются пять ключевых слов:
- try;
- catch;
- finally;
- throw;
- throws.
Q3. В чем разница между отмеченным исключением и непроверенным исключением?
Проверено исключение:
- Классы, расширяющие класс Throwable, за исключением RuntimeException и Error, известны как проверенные исключения.
- Проверенные исключения проверяются во время компиляции.
- Пример: IOException, SQLException и т. д.
Непроверенное исключение:
- Классы, расширяющие RuntimeException, известны как непроверенные исключения.
- Непроверенные исключения не проверяются во время компиляции.
- Пример: ArithmeticException, NullPointerException и т. Д.
Q4. Какую цель выполняют ключевые слова final, finally и finalize?
Final используется для применения ограничений на класс, метод и переменную. Конечный класс не может быть унаследован, конечный метод не может быть переопределен, а конечное значение переменной не может быть изменено. Давайте посмотрим на пример ниже, чтобы лучше понять это.
class FinalVarExample {
public static void main( String args[])
{
final int a=10; // Final variable
a=50; //Error as value can't be changed
}
Finally используется для размещения важного кода, он будет выполняться независимо от того, обработано ли исключение или нет. Давайте посмотрим на пример ниже, чтобы лучше понять это.
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();
}
}
Q5. В чем разница между throw и throws?
| throw | throws |
|---|---|
| Используется для явной генерации исключения. | Используются для объявления исключения. |
| Проверенные исключения не могут быть переданы только с помощью throw. | Проверенное исключение может быть передано с помощью throws. |
| За throw следует экземпляр. | Сопровождаются классом. |
| В методе используется throw. | Используются с сигнатурой метода. |
| Вы не можете создать несколько исключений. | Вы можете объявить множественное исключение, например, public void method() выбрасывает IOException, SQLException. |
Q6. Что такое иерархия исключений?
Иерархия следующая:
Throwable — родительский класс для всех классов Exception. Есть два типа исключений: отмеченные исключения и UncheckedExceptions или RunTimeExceptions. Оба типа исключений расширяют класс Exception, тогда как ошибки далее классифицируются на ошибку виртуальной машины и ошибку утверждения.

Q7. Как создать собственное исключение?
Чтобы создать собственное исключение, расширьте класс Exception или любой из его подклассов.
- class New1Exception extends Exception {} // это создаст проверенное исключение
- class NewException extends IOException {} // это создаст исключение Checked
- class NewException extends NullPonterExcpetion {} // это создаст исключение UnChecked
Q8. Каковы важные методы класса исключений?
Exception и все его подклассы не предоставляют никаких конкретных методов, и все методы определены в базовом классе Throwable.
- String getMessage() — этот метод возвращает сообщение String of Throwable, и сообщение может быть предоставлено при создании исключения через его конструктор.
- String getLocalizedMessage() — этот метод предоставляется для того, чтобы подклассы могли переопределить его, чтобы предоставить вызывающей программе сообщение, специфичное для локали. Реализация этого метода класса Throwable просто использует метод getMessage() для возврата сообщения об исключении.
- Synchronized Throwable getCause() — этот метод возвращает причину исключения или нулевой идентификатор, причина неизвестна.
- String toString() — этот метод возвращает информацию о Throwable в формате String, возвращаемая String содержит имя класса Throwable и локализованное сообщение.
- void printStackTrace() — этот метод печатает информацию трассировки стека в стандартный поток ошибок, этот метод перегружен, и мы можем передать PrintStream или PrintWriter в качестве аргумента для записи информации трассировки стека в файл или поток.
Q9. В чем разница между процессами и потоками?
| Обработать | Нить | |
|---|---|---|
| Определение | Выполняемый экземпляр программы называется процессом. | Поток — это часть процесса. |
| Общение | Процессы должны использовать межпроцессное взаимодействие для связи с родственными процессами. | Потоки могут напрямую связываться с другими потоками своего процесса. |
| Контроль | Процессы могут осуществлять контроль только над дочерними процессами. | Потоки могут осуществлять значительный контроль над потоками одного и того же процесса. |
| Изменения | Любые изменения в родительском процессе не влияют на дочерние процессы. | Любое изменение в основном потоке может повлиять на поведение других потоков процесса. |
| Объем памяти | Запускайте в отдельных областях памяти. | Запускайте в общих областях памяти. |
| Контролируется | Процесс управляется операционной системой. | Потоки управляются программистом в программе. |
| Зависимость | Процессы независимы. | Потоки зависимые. |
Q10. Что такое блок finally? Есть ли случай, когда окончательно не исполнят?
Это блок, который всегда выполняет набор операторов. Он всегда связан с блоком try, независимо от того, возникает какое-либо исключение или нет.
Да, наконец, не будет выполнен, если программа завершится либо вызовом System.exit(), либо вызвав фатальную ошибку, вызывающую прерывание процесса.
Q11. Что такое синхронизация?
Синхронизация относится к многопоточности. Синхронизированный блок кода может выполняться только одним потоком за раз. Поскольку Java поддерживает выполнение нескольких потоков, два или более потоков могут обращаться к одним и тем же полям или объектам. Синхронизация — это процесс, который поддерживает синхронизацию всех одновременно выполняемых потоков. Синхронизация позволяет избежать ошибок согласованности памяти, вызванных несогласованным представлением разделяемой памяти.
Когда метод объявлен как синхронизированный, поток удерживает монитор для объекта этого метода. Если другой поток выполняет синхронизированный метод, поток блокируется до тех пор, пока этот поток не освободит монитор.

Q12. Можем ли мы написать несколько блоков catch в одном блоке try?
Да, мы можем иметь несколько блоков 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");
}
}
Q13. Каковы важные методы класса исключений?
Методы определены в базовом классе Throwable. Некоторые из важных методов класса исключений указаны ниже.
- String getMessage() — этот метод возвращает строку сообщения об исключении. Сообщение может быть предоставлено через его конструктор.
- public StackTraceElement [] getStackTrace() — этот метод возвращает массив, содержащий каждый элемент трассировки стека. Элемент с индексом 0 представляет верхнюю часть стека вызовов, тогда как последний элемент в массиве представляет метод в нижней части стека вызовов.
- Synchronized Throwable getCause() — этот метод возвращает причину исключения или нулевой идентификатор, представленный объектом Throwable.
- String toString() — этот метод возвращает информацию в формате String. Возвращенная строка содержит имя класса Throwable и локализованное сообщение.
- void printStackTrace() — этот метод выводит информацию трассировки стека в стандартный поток ошибок.
Q14. Что такое OutOfMemoryError?
OutOfMemoryError — это подкласс java.lang.Error, который обычно возникает, когда нашей JVM не хватает памяти.
Q15. Что такое поток?
Поток — это наименьший фрагмент запрограммированных инструкций, который может выполняться планировщиком независимо. В Java все программы будут иметь по крайней мере один поток, известный как основной поток. Этот основной поток создается JVM, когда программа начинает свое выполнение. Основной поток используется для вызова main () программы.
Q16. Какими двумя способами можно создать поток?
Могут быть созданы двумя способами:
- Реализуя интерфейс Runnable.
- Расширяя поток.
Q17. Какие существуют типы сборщиков мусора в Java?
Сборка мусора — программа, которая помогает в неявном управлении памятью. Поскольку в Java с помощью ключевого слова new вы можете динамически создавать объекты, которые после создания потребуют некоторой памяти. Когда работа выполнена и на объект больше не осталось ссылок, Java с помощью сборки мусора уничтожает объект и освобождает занимаемую им память. Предоставляется четыре типа:
- Серийный сборщик мусора.
- Параллельный сборщик мусора.
- Сборщик мусора CMS.
- Сборщик мусора G1.

Q2. Каковы шаги для подключения к базе данных?