Статьи

150 Java Интервью Вопросы и ответы — окончательный список (PDF Download)

Вопросы об интервью Java

Наша коллекция вопросов и ответов об интервью на Java посвящена различным типам вопросов, которые можно использовать во время интервью на Java, чтобы работодатель мог проверить свои навыки в Java и объектно-ориентированном программировании в целом.

В следующих разделах мы обсудим вопросы Java-интервью об объектно-ориентированном программировании и его характеристиках, общие вопросы, касающиеся Java и его функциональных возможностей, коллекций в Java, сборщиков мусора, обработки исключений, Java-апплетов, Swing, JDBC, удаленного вызова методов (RMI). Сервлеты и JSP.

Поехали…!

А. Объектно-ориентированное программирование (ООП)

1. Что такое Java?

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

  • Модульная разработка кода, что приводит к простоте обслуживания и модификации.
  • Возможность повторного использования кода.
  • Повышена надежность и гибкость кода.
  • Улучшенное понимание кода.

2. Каковы концепции ООП?

Объектно-ориентированное программирование (ООП) включает в себя:

  • абстракция
  • Инкапсуляция
  • Полиморфизм
  • наследование
  • Предопределенные типы должны быть объектами
  • Пользовательские типы должны быть объектами
  • Операции должны выполняться путем отправки сообщений объектам

3. Упомянуть некоторые особенности Java

Вот некоторые из особенностей, которые играют важную роль в популярности Java:

  • Объектно-ориентированный
  • Независимая платформа
  • Высокая производительность
  • Многопоточный
  • портативный
  • Безопасный

Пример кода для Helloworld в Java показан ниже:

Привет мир

1
2
3
4
5
6
7
8
public class Helloworld{
     
public static void main(String args[])
    System.out.println("Hello World"); 
     
}

4. Является ли Java на 100% объектно-ориентированным?

Не 100%. Java не удовлетворяет всем условиям ООП (предопределенные типы должны быть объектами), потому что она использует восемь примитивных типов данных (Boolean, byte, char, int, float, double, long, short), которые не являются объектами.

5. Что такое абстракция?

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

Абстрактный класс Person представлен ниже. У него есть абстрактный метод getName.

Человек абстрактного класса

1
2
3
4
public abstract class Person 
    public abstract String getName();
}

Класс Employee расширяет абстрактный класс Person. Метод getName возвращает атрибут имени сотрудника.

Класс сотрудника

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Employee extends Person  
    private String name;
     
    public Employee(String name)
    {
      this.name = name;
    }
    public String getName()
    {
       return this.name;
    }
    public static void main (String args[]) 
    
        Employee employee = new Employee("John Wilson");
         
        System.out.println("Employee's Name "+ employee.getName());
         
        Person person = new Employee("Thomas Smith");
         
        System.out.println("Employee-Person's Name "+ person.getName());
         
         
    
}

6. Что такое инкапсуляция?

Инкапсуляция предоставляет объектам возможность скрывать свои внутренние характеристики и поведение. Каждый объект предоставляет ряд методов, к которым могут обращаться другие объекты и изменять свои внутренние данные. В Java есть три модификатора доступа: открытый, закрытый и защищенный. Каждый модификатор налагает разные права доступа на другие классы, либо в том же, либо во внешних пакетах. Некоторые из преимуществ использования инкапсуляции перечислены ниже:

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

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

Пример класса Student, который имеет атрибуты Id и Name, показан в качестве примера для инкапсуляции.

Студенческий класс

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class Student{ 
 private int id; 
 private String name; 
   
 public void setId(int id)
 {
   this.id = id;
 }
  
 public void setName(String name)
 {
   this.name = name;
 }
  
 public int getId()
 {
   return this.id;
 }
  
 public String getName()
 {
   return this.name;
 }
   
public static void main(String args[])
  Student student=new Student(); 
  student.setId(1034);
  student.setName("David Smith");
 
  System.out.println("Student id "+ student.getId());
  System.out.println("Student name "+ student.getName());
     
 

7. В чем различия между абстракцией и инкапсуляцией?

Абстракция и инкапсуляция являются дополнительными понятиями. С одной стороны, абстракция фокусируется на поведении объекта. С другой стороны, инкапсуляция фокусируется на реализации поведения объекта. Инкапсуляция обычно достигается путем сокрытия информации о внутреннем состоянии объекта и, таким образом, может рассматриваться как стратегия, используемая для обеспечения абстракции.

8. Что такое полиморфизм?

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

Вы можете увидеть пример ниже, где интерфейс Vehicle имеет метод увеличенияVelocity. Грузовик, поезд и самолет реализуют интерфейс транспортного средства, и метод увеличивает скорость до соответствующей скорости, связанной с типом транспортного средства.

Вопросы Интервью Java - Полиморфизм
Полиморфизм

9. Какие бывают виды полиморфизма?

В Java существует два типа полиморфизма:

  • Полиморфизм времени компиляции (статическое связывание). Перегрузка метода
  • Полиморфизм времени исполнения (динамическое связывание) — переопределение метода

Мы можем выполнить полиморфизм перегрузкой метода и переопределением метода.

Время компиляции время выполнения
Методы класса имеют одно и то же имя. Каждый метод имеет разное количество параметров. Может иметь параметры с разными типами и порядком. у подкласса есть метод с именем как у метода суперкласса. Он имеет количество параметров, тип параметров и тип возвращаемого значения для метода суперкласса.
Перегрузка метода заключается в добавлении к поведению метода. Это может распространяться на поведение метода. Переопределение метода заключается в изменении поведения метода.
Перегруженные методы не будут иметь одинаковую подпись. Переопределенные методы будут иметь точно такую ​​же сигнатуру.
Наследование не нужно в этом случае. Наследование необходимо.

Пример кода для перегрузки метода вычитания класса Calculator показан ниже:

Калькулятор Класс

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
public class Calculator {
 
public int subtract(int a, int b)
{
   return a-b;
}
public double subtract( double a, double b)
{
 return a-b;
}
 
public static void main(String args[])
{
  Calculator calculator = new Calculator();
  System.out.println("Difference of 150 and 12 is " +calculator.subtract(150,12));
  System.out.println("Difference of 15.5 and 15.4 is " +calculator.subtract(15.50,15.40));
}}

Переопределение метода показано ниже в классе Shape. Shape имеет метод getArea.

Класс формы

1
2
3
4
public class Shape
  public void getArea(){System.out.println("Shape Area");} 
}

Класс Rectangle переопределяет метод getArea, и реализация метода специфична для Rectangle. Аннотация переопределения используется для указания компилятору, что метод переопределен. Читаемость кода улучшена с помощью аннотации.

Класс прямоугольника

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Rectangle extends Shape{
   
  @Override
  public void getArea()
  {
    System.out.println("Rectangle Area");
   
  
   
   
 
  public static void main(String args[])
  
    Shape shape = new Shape();
     
    shape.getArea();
     
    Rectangle rectangle = new Rectangle(); 
     
    rectangle.getArea(); 
  
}

10. Что такое наследование?

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

Пример класса Mammal показан ниже, у которого есть конструктор.

Класс млекопитающих

1
2
3
4
5
6
7
8
public class Mammal{ 
 
 public Mammal()
 {
   System.out.println("Mammal created");
 }
  
}

Класс Man расширяет Mammal, у которого есть конструктор по умолчанию. Пример кода показан ниже.

Мужской класс

1
2
3
4
5
6
7
public class Man extends Mammal{
 
 public Man()
 
   System.out.println("Man is created"); 
 
}

Наследование проверяется путем создания экземпляра Man с использованием конструктора по умолчанию. Пример кода показан для демонстрации наследования.

TestInheritance Class

1
2
3
4
5
6
7
public class TestInheritance{
 
public static void main(String args[])
   Man man = new Man(); 
 
}

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

Композиция точно такая же, как Агрегация, за исключением того, что время жизни «части» контролируется «целым». Этот контроль может быть прямым или переходным. То есть «целое» может взять на себя прямую ответственность за создание или уничтожение «части», или оно может принять уже созданную часть, а затем передать ее какому-то другому целому, которое берет на себя ответственность за нее.

Пример класса автомобиля показан ниже для демонстрации состава шин, дверей, окон и рулевого управления.

Класс автомобиля

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Car
  private Tire[] tires;
   
  private Door[] doors;
   
  private Steering steering;
   
  private Window[] windows;
}
 
class Tire
{
     
}
   
class Door
{
     
}
 
class Steering
{
     
}
 
class Window
{
     
}

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

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

13. Что такое агрегация?

Агрегация — это типичное отношение «целое / часть». Это то же самое, что и ассоциация, за исключением того, что экземпляры не могут иметь отношения циклического агрегирования.

Пример класса Person показан ниже, чтобы продемонстрировать связь агрегации с адресом.

Персональный класс

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
public class Person
  private Address address;
 
}
 
class Address
{
  private String city;
   
  private String state;
   
  private String country;
   
  private String line1;
   
  private String line2;
 
}

Б. Общие вопросы о Java

14. Что такое JVM?

Виртуальная машина Java (JVM) — это виртуальная машина процесса, которая может выполнять байт-код Java. Каждый исходный файл Java компилируется в файл байт-кода, который выполняется JVM.

15. Почему Java называется независимым от платформы языком программирования?

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

16. В чем разница между JDK и JRE?

Java Runtime Environment (JRE) — это, по сути, виртуальная машина Java (JVM), на которой исполняются ваши Java-программы. Он также включает в себя плагины браузера для запуска апплета. Java Development Kit (JDK) — это полнофункциональный комплект разработки программного обеспечения для Java, включающий в себя JRE, компиляторы и инструменты (такие как JavaDoc и Java Debugger ), для того чтобы пользователь мог разрабатывать, компилировать и выполнять приложения Java.

JDK JRE
JDK расшифровывается как Java Development Kit. JRE означает «среда выполнения Java».
JDK — это инструмент для компиляции, документирования и упаковки программного обеспечения Java. JRE — это среда выполнения. JavaByte-код выполняется в среде.
У JDK есть JRE и инструменты разработки. JRE — это реализация JVM

17. Что означает статическое ключевое слово?

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

Пример статического метода, который показан ниже:

Статический метод

1
2
3
4
5
static void printGreeting() 
    {
     
     
    }

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

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

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

Статическая переменная в Java принадлежит ее классу, и ее значение остается одинаковым для всех ее экземпляров. Статическая переменная инициализируется, когда класс загружается JVM. Если ваш код пытается получить доступ к нестатической переменной без какого-либо экземпляра, компилятор будет жаловаться, потому что эти переменные еще не созданы и они не связаны ни с одним экземпляром.

20. Какие типы данных поддерживаются Java?

Восемь примитивных типов данных, поддерживаемых языком программирования Java:

  • байт
  • короткая
  • ИНТ
  • долго
  • поплавок
  • двойной
  • логический
  • голец

21. Что такое автобокс и распаковка?

Автобокс — это автоматическое преобразование, выполняемое компилятором Java между примитивными типами и их соответствующими классами обертки объектов. Например, компилятор преобразует целое число в целое , двойное в двойное и т. Д. Если преобразование идет другим путем, эта операция называется распаковкой.

22. Что такое переопределение и перегрузка функций в Java?

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

23. Что такое конструктор?

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

Конструктор по умолчанию в Java показан в следующем примере:

Конструктор по умолчанию

1
2
3
4
public Man()
  System.out.println("Man is created"); 
}

Конструктор, который принимает параметр, показан в примере ниже:

Конструктор

1
2
3
4
5
6
private String name;
     
    public Employee(String name)
    {
      this.name = name;
    }

24. Что такое перегрузка конструктора?

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

25. Что такое Copy-Constructor?

Наконец, Java поддерживает конструкторы копирования, такие как C ++, но разница заключается в том, что Java не создает конструктор копирования по умолчанию, если вы не пишете свой собственный.

Конструктор копирования для класса Employee показан ниже:

Копировать конструктор

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
public class Employee extends Person  
    private String name;
     
    public Employee(String name)
    {
      this.name = name;
    }
     
    public Employee(Employee emp)
    {
      this.name = emp.name;
    }
     
}

26. Поддерживает ли Java множественное наследование?

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

Вопросы об интервью Java - множественное наследование
Множественное наследование

27. В чем разница между интерфейсом и абстрактным классом?

Java обеспечивает и поддерживает создание как абстрактных классов, так и интерфейсов. Обе реализации имеют некоторые общие характеристики, но отличаются следующими характеристиками:

  • Все методы в интерфейсе неявно абстрактны. С другой стороны, абстрактный класс может содержать как абстрактные, так и неабстрактные методы.
  • Класс может реализовывать несколько интерфейсов, но может расширять только один абстрактный класс.
  • Чтобы класс реализовал интерфейс, он должен реализовать все свои объявленные методы. Однако класс может не реализовывать все объявленные методы абстрактного класса. Хотя в этом случае подкласс также должен быть объявлен как абстрактный.
  • Абстрактные классы могут реализовывать интерфейсы, даже не обеспечивая реализацию методов интерфейса.
  • Переменные, объявленные в интерфейсе Java, по умолчанию являются окончательными. Абстрактный класс может содержать неконечные переменные.
  • Члены интерфейса Java являются общедоступными по умолчанию. Член абстрактного класса может быть приватным, защищенным или общедоступным.
  • Интерфейс абсолютно абстрактный и не может быть создан. Абстрактный класс также не может быть создан, но может быть вызван, если он содержит метод main.

Также проверьте класс Abstract и различия интерфейса для JDK 8 .

Интерфейс Абстрактный класс
Интерфейс имеет сигнатуры методов. У него нет никакой реализации. Абстрактный класс имеет абстрактные методы и детали, которые должны быть переопределены.
Класс может реализовывать несколько интерфейсов В этом случае класс может расширять только один абстрактный класс
Интерфейс имеет все абстрактные методы. Не абстрактные методы могут быть там в абстрактном классе.
Свойства экземпляра не могут быть там в интерфейсе. Свойства экземпляра могут быть там в абстрактном классе.
Интерфейс является публично видимым или невидимым. Абстрактный класс может быть публичным, приватным и защищенным.
Любое изменение в интерфейсе повлияет на классы, реализующие интерфейс. Добавление метода к абстрактному классу и его реализация не требуют изменений в коде для производных классов.
Интерфейс не может иметь конструкторов Абстрактный класс может иметь конструкторы
Интерфейсы медленны с точки зрения производительности Абстрактные классы быстры в выполнении методов в производных классах.

28. Что такое передача по ссылке и передача по значению?

Когда объект передается по значению, это означает, что копия объекта передается. Таким образом, даже если в этот объект вносятся изменения, это не влияет на исходное значение. Когда объект передается по ссылке, это означает, что фактический объект не передается, а передается ссылка на объект. Таким образом, любые изменения, сделанные внешним методом, также отражаются во всех местах.

Пример кода представлен ниже, который показывает передачу по значению.

Передать по значению

01
02
03
04
05
06
07
08
09
10
11
12
13
14
public class ComputingEngine
{
    public static void main(String[] args)
    {
        int x = 15;
        ComputingEngine engine = new ComputingEngine();
        engine.modify(x);
        System.out.println("The value of x after passing by value "+x);
    }
    public  void modify(int x)
    {
        x = 12;
    }
}

Ниже приведен пример передачи по ссылке в коде.

Передать по ссылке

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class ComputingEngine
{
    public static void main(String[] args)
    {
         
        ComputingEngine engine = new ComputingEngine();
         
        
        Computation computation = new Computation(65);
        engine.changeComputedValue(computation);
         
        System.out.println("The value of x after passing by reference "+ computation.x);
         
    }
     
   
     
    public void changeComputedValue(Computation computation)
    {
        computation = new Computation();
        computation.x = 40;
    }
}
 
 
class Computation
{
    int x;
    Computation(int i) { x = i; }
    Computation()      { x = 1; }
}

29. Какова цель изменчивой переменной?

Изменчивые значения переменных могут быть изменены различными потоками. У них никогда не будет возможности заблокировать и удержать замок. Синхронизация будет происходить всякий раз, когда к переменным обращаются. Использование volatile может быть быстрее блокировки, но в некоторых ситуациях оно не будет работать. Диапазон ситуаций, в которых работает volatile, был расширен в Java 5; в частности, двойная проверка блокировки теперь работает правильно.

Пример кода для изменчивой переменной показан ниже:

Изменчивая переменная

1
2
3
4
5
public class DistributedObject {
 
    public volatile int count = 0;
 
}

30. Какова цель временной переменной?

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

Пример класса, который имеет временную переменную, показан ниже:

Транзиторная переменная

1
2
3
4
5
6
7
8
public class Paper implements Serializable
{
    private int id;
    private String title;
    private String author;
    private transient int version = 1;
     
}

31. Что такое локальная переменная и переменная экземпляра?

Локальная переменная Переменная экземпляра
Локальная переменная объявляется внутри метода или конструктора. Это может быть объявлено в блоке Переменная экземпляра объявлена ​​внутри класса.
Локальная переменная должна быть инициализирована перед использованием. Код не скомпилируется. Инициализация переменной экземпляра не требуется. Если не инициализировано, используется значение по умолчанию.

32. Какие существуют различные модификаторы доступа в Java?

Существует четыре типа модификаторов доступа:

  • Общедоступный — доступен из любого места приложения
  • Защищено — доступно в пакете и подклассах в любом пакете
  • Пакет Private (по умолчанию) — доступен строго внутри пакета
  • Частный — доступен только в том же классе, где он объявлен

33. Разница между статическим и динамическим связыванием

Статическое связывание Динамическое связывание
Определение процедуры связано со статическим связыванием Примером динамического связывания является активация процедуры
Объявление имени для переменной делается для статической привязки переменной. Привязка имени может быть динамической привязкой.
Сфера действия декларации является статически связанной. Время жизни привязки динамически связано.

Пример кода для статического связывания показан ниже:

Статическое связывание

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
public class Shape
  public void getArea()
   {
     System.out.println("Shape Area");
    
 
 
public static void main(String args[])
  
    Shape shape = new Shape();
     
    shape.getArea();
  }
}

Пример кода для динамического связывания показан ниже:

Динамическое связывание

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
public class Rectangle extends Shape{
   
   
  public void getArea()
  {
    System.out.println("Rectangle Area");
   
  
   
   
   
  public static void main(String args[])
  
   
    Shape shape = new Rectangle(); 
     
    shape.getArea(); 
  
}

34. Что такое классы-обертки?

Класс-оболочка преобразует Java-примитивы в объекты. Таким образом, примитивный класс-обертка — это класс-обертка, который инкапсулирует, скрывает или упаковывает типы данных из восьми примитивных типов данных, чтобы их можно было использовать для создания экземпляров объектов с методами в другом классе или в других классах. Примитивные классы-обертки находятся в Java API.

35. Что такое синглтон-класс и как мы можем создать класс синглтон?

В одноместном классе мы:

  • убедитесь, что существует только один экземпляр класса singleton
  • обеспечить глобальный доступ к этому экземпляру

Для создания одноэлементного класса мы:

  • объявить все конструкторы класса как частные
  • предоставить статический метод, который возвращает ссылку на экземпляр

Пример кода ниже показывает дважды проверенную реализацию класса Singleton.

Синглтон Класс

01
02
03
04
05
06
07
08
09
10
11
12
13
14
public class DoubleCheckedSingleton {
    private static volatile DoubleCheckedSingleton instance;
    public static DoubleCheckedSingleton getInstance() {
        if (instance == null) {
            synchronized (DoubleCheckedSingleton .class) {
                if (instance == null) {
                    instance = new DoubleCheckedSingleton();
                }
            }
        }
        return instance;
    }
  
}

C.Java темы

36. В чем разница между процессами и потоками?

Процесс — это выполнение программы, а поток — это отдельная последовательность выполнения в процессе. Процесс может содержать несколько потоков. Поток иногда называют облегченным процессом.

Процессы Потоки
Процесс связан с выполнением программы. Процесс состоит из нескольких шагов.
Процессы взаимодействуют друг с другом, используя межпроцессное взаимодействие. Потоки процесса могут общаться друг с другом.
Процессы имеют контроль над дочерними процессами. Потоки процесса могут иметь контроль над другими потоками.
Любая модификация в родительском процессе не изменяет дочерние процессы Любая модификация в главном потоке может повлиять на поведение других потоков процесса.
Процессы выполняются в отдельных пространствах памяти. Потоки выполняются в общих пространствах памяти.
Операционная система контролирует процесс. Разработчик программного обеспечения имеет контроль над использованием потоков.
Процессы не зависят друг от друга. Потоки зависят друг от друга.

37. Объясните разные способы создания темы. Какой из них вы бы предпочли и почему?

Для создания потока можно использовать три способа:

  • Класс может расширять класс Thread .
  • Класс может реализовывать интерфейс Runnable .
  • Приложение может использовать платформу Executor для создания пула потоков.

Предпочтительным является интерфейс Runnable, так как он не требует, чтобы объект наследовал класс Thread. Если ваш дизайн приложения требует множественного наследования, вам могут помочь только интерфейсы. Кроме того, пул потоков очень эффективен и может быть легко реализован и использован.

38. Объясните доступные состояния потоков на высоком уровне.

Во время выполнения поток может находиться в одном из следующих состояний :

  • НОВИНКА : поток готов к работе, но не обязательно начинает работать немедленно.
  • RUNNABLE : виртуальная машина Java (JVM) активно выполняет код потока.
  • BLOCKED : поток находится в заблокированном состоянии во время ожидания блокировки монитора.
  • WAITING : поток ожидает, пока другой поток выполнит определенное действие.
  • TIMED_WAITING : Поток ожидает, пока другой поток выполнит определенное действие, до указанного времени ожидания.
  • TERMINATED : поток завершил выполнение.

39. В чем разница между методом и блоком, которые синхронизируются?

В Java-программировании каждый объект имеет блокировку. Поток может получить блокировку для объекта с помощью ключевого слова synchronized. Ключевое слово synchronized может быть применено на уровне метода (крупнозернистая блокировка) или на уровне блока кода (мелкозернистая блокировка).

40. Как происходит синхронизация потоков внутри монитора?

JVM использует блокировки вместе с мониторами. Монитор — это в основном опекун, который следит за последовательностью синхронизированного кода и гарантирует, что только один поток одновременно выполняет синхронизированный фрагмент кода. Каждый монитор связан со ссылкой на объект. Потоку не разрешается выполнять код, пока он не получит блокировку.

41. Что такое тупик?

Условие, которое возникает, когда два процесса ждут завершения друг друга , прежде чем продолжить. В результате оба процесса ждут бесконечно.

42. Как вы гарантируете, что N потоков могут получить доступ к N ресурсам без взаимоблокировки?

Очень простой способ избежать тупика при использовании N потоков — наложить порядок на блокировки и заставить каждый поток следовать этому порядку. Таким образом, если все потоки блокируют и разблокируют мьютексы в одном и том же порядке, не может возникнуть взаимоблокировок.

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

Подождите Спать
Позвони на текущий поток синхронизируется на объекте блокировки при вызове объекта. Вызов потока происходит в текущем выполняющемся потоке.
синхронизированный Synchronized используется для доступа к одному и тому же объекту из нескольких потоков. Синхронизированный используется для перехода в спящий поток из нескольких потоков.
Удерживать замок снять блокировку для других объектов, чтобы иметь возможность выполнить держите блокировку как минимум t раз, если указан тайм-аут или кто-то прерывает.
Состояние пробуждения до вызова notify (), notifyAll () из объекта пока не истечет хотя бы время или вызовите прерывание ().
использование для синхронизации времени для многопоточной синхронизации

Коллекции D.Java

44. Каковы основные интерфейсы Java Collections Framework?

Java Collections Framework предоставляет хорошо спроектированный набор интерфейсов и классов, которые поддерживают операции с коллекциями объектов. Основными интерфейсами, которые находятся в Java Collections Framework, являются:

  • Коллекция , которая представляет группу объектов, известных как ее элементы.
  • Набор , который является коллекцией, которая не может содержать повторяющиеся элементы.
  • Список , который представляет собой упорядоченную коллекцию и может содержать повторяющиеся элементы.
  • Карта , которая является объектом, который сопоставляет ключи со значениями и не может содержать дубликаты ключей.
Вопросы Интервью Java - Иерархия Коллекции
Коллекция Иерархия

45. Почему Collection не расширяет интерфейсы Cloneable и Serializable?

Интерфейс Collection определяет группы объектов, известных как элементы. Каждая конкретная реализация Коллекции может выбрать свой собственный способ поддержания и упорядочения своих элементов. Некоторые коллекции допускают дублирование ключей, а некоторые другие — нет. Семантика и последствия клонирования или сериализации вступают в игру при работе с реальными реализациями. Таким образом, конкретные реализации коллекций должны решить, как их можно клонировать или сериализовать.

46. ​​Что такое итератор?

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

47. Какие различия существуют между Iterator и ListIterator?

Различия этих элементов перечислены ниже:

  • Итератор может использоваться для обхода коллекций Set и List , в то время как ListIterator может использоваться для итерации только по спискам.
  • Итератор может проходить по коллекции только в прямом направлении, а ListIterator может проходить по списку в обоих направлениях.
  • ListIterator реализует интерфейс Iterator и содержит дополнительные функции, такие как добавление элемента, замена элемента, получение позиции индекса для предыдущих и следующих элементов и т. Д.

48. В чем разница между отказоустойчивым и отказоустойчивым?

Отказоустойчивое свойство Итератора работает с клоном базовой коллекции и, следовательно, на него не влияют никакие изменения в коллекции. Все классы коллекции в пакете java.util отказоустойчивы, а классы коллекции в java.util.concurrent являются отказоустойчивыми. Отказоустойчивые итераторы генерируют исключение ConcurrentModificationException , в то время как отказоустойчивый итератор никогда не генерирует такое исключение.

49. Как работает HashMap в Java?

HashMap в Java хранит пары ключ-значение . HashMap требует хеш-функцию и использует методы hashCode и equals, чтобы помещать и извлекать элементы в коллекцию и из нее соответственно. Когда вызывается метод put, HashMap вычисляет хэш-значение ключа и сохраняет пару в соответствующем индексе внутри коллекции. Если ключ существует, его значение обновляется новым значением. Некоторые важные характеристики HashMap — это его емкость, коэффициент загрузки и изменение порога.

50. Какое значение имеют методы hashCode () и equals ()?

В Java HashMap использует hashCode и методы equals для определения индекса пары ключ-значение и для обнаружения дубликатов. Более конкретно, метод hashCode используется для определения, где будет храниться указанный ключ. Поскольку разные ключи могут создавать одно и то же значение хеш-функции, используется метод equals, чтобы определить, существует ли указанный ключ в коллекции или нет. Поэтому реализация обоих методов имеет решающее значение для точности и эффективности HashMap.

51. В чем разница между HashMap и Hashtable?

Оба класса HashMap и Hashtable реализуют интерфейс Map и, таким образом, имеют очень похожие характеристики. Тем не менее, они отличаются следующими функциями:

  • HashMap допускает существование нулевых ключей и значений, в то время как Hashtable не допускает ни нулевых ключей, ни нулевых значений.
  • Hashtable синхронизируется, а HashMap — нет. Таким образом, HashMap предпочтителен в однопоточных средах, в то время как Hashtable подходит для многопоточных сред.
  • HashMap предоставляет свой набор ключей, и Java-приложение может перебирать их. Таким образом, HashMap является отказоустойчивым. С другой стороны, Hashtable предоставляет Перечисление своих ключей.
  • Класс Hashtable считается устаревшим классом.

52. В чем разница между Array и ArrayList? Когда вы будете использовать Array over ArrayList?

Классы Array и ArrayList отличаются следующими функциями:

  • Массивы могут содержать примитивы или объекты, в то время как ArrayList может содержать только объекты.
  • Массивы имеют фиксированный размер, в то время как ArrayList является динамическим.
  • ArrayList предоставляет больше методов и функций, таких как addAll , removeAll , итератор и т. Д.
  • Для получения списка примитивных типов данных коллекции используют автобокс для сокращения усилий по написанию кода. Однако этот подход замедляет их при работе с примитивными типами данных фиксированного размера.
массив ArrayList
Массив не должен иметь значений разных типов данных Список массивов может иметь значения разных типов данных.
Размер массива определяется на момент объявления Размер ArrayList может быть динамически изменен
Вы должны указать индекс, чтобы добавить данные в массив Вам не нужно указывать индекс в ArrayList
Массивы не параметризованы Arraylists могут быть типа paramaterized.
Массивы могут иметь примитивные типы данных, а также объекты Массивы могут иметь только объекты, примитивные типы данных не допускаются.

53. В чем разница между ArrayList и LinkedList?

Оба класса ArrayList и LinkedList реализуют интерфейс List, но они отличаются следующими функциями:

  • ArrayList — это структура данных на основе индекса, поддерживаемая массивом. Он обеспечивает произвольный доступ к своим элементам с производительностью, равной O (1). С другой стороны, LinkedList хранит свои данные в виде списка элементов, и каждый элемент связан с его предыдущим и следующим элементом. В этом случае операция поиска элемента имеет время выполнения, равное O (n).
  • Операции вставки, добавления и удаления элемента выполняются в LinkedList быстрее, чем в ArrayList, поскольку нет необходимости изменять размер массива или обновлять индекс, когда элемент добавляется в произвольную позицию внутри коллекции.
  • LinkedList использует больше памяти, чем ArrayList, потому что каждый узел в LinkedList хранит две ссылки, одну для своего предыдущего элемента и одну для своего следующего элемента.

Проверьте также нашу статью ArrayList против LinkedList .

54. В чем разница между Comparable и Comparator?

  • Java предоставляет интерфейс Comparable , который содержит только один метод, называемый CompareTo . Этот метод сравнивает два объекта, чтобы навести порядок между ними. В частности, он возвращает отрицательное целое число, ноль или положительное целое число, чтобы указать, что входной объект меньше, равен или больше существующего объекта.
  • Java предоставляет интерфейс Comparator , который содержит два метода, называемых сравнивать и равно . Первый метод сравнивает два входных аргумента и устанавливает порядок между ними. Он возвращает отрицательное целое число, ноль или положительное целое число, чтобы указать, что первый аргумент меньше, равен или больше второго. Второй метод требует объект в качестве параметра и имеет целью решить, равен ли входной объект компаратору. Метод возвращает true, только если указанный объект также является компаратором, и он налагает тот же порядок, что и компаратор.

55. Что такое Java Priority Queue?

PriorityQueue — это неограниченная очередь, основанная на куче приоритетов, и ее элементы упорядочены в их естественном порядке. Во время его создания мы можем предоставить Comparator, который отвечает за упорядочение элементов PriorityQueue. PriorityQueue не допускает нулевых значений , тех объектов, которые не обеспечивают естественного упорядочения, или тех объектов, с которыми не связан никакой компаратор. Наконец, Java PriorityQueue не является поточно-ориентированным и требует времени O (log (n)) для операций постановки в очередь и удаления из очереди.

56. Что вы знаете о нотации big-O и можете ли вы привести несколько примеров относительно различных структур данных?

Нотация Big-O просто описывает, насколько хорошо алгоритм масштабируется или работает в худшем случае при увеличении количества элементов в структуре данных. Нотация Big-O также может использоваться для описания другого поведения, такого как потребление памяти. Поскольку классы коллекций на самом деле являются структурами данных, мы обычно используем нотацию Big-O, чтобы выбрать лучшую реализацию для использования, основываясь на времени, памяти и производительности. Нотация Big-O может дать хорошее представление о производительности для больших объемов данных.

57. Каков компромисс между использованием неупорядоченного массива и упорядоченного массива?

Основным преимуществом упорядоченного массива является то, что время поиска имеет временную сложность O (log n) по сравнению с неупорядоченным массивом, который равен O (n). Недостаток упорядоченного массива состоит в том, что операция вставки имеет временную сложность O (n), потому что элементы с более высокими значениями должны быть перемещены, чтобы освободить место для нового элемента. Вместо этого операция вставки для неупорядоченного массива занимает постоянное время O (1).

58. Каковы некоторые из лучших практик, связанных с платформой Java Collection?

  • Выбор правильного типа коллекции для использования, основанный на потребностях приложения, очень важен для его производительности. Например, если размер элементов фиксирован и известен априори, мы будем использовать Array вместо ArrayList .
  • Некоторые классы коллекции позволяют нам указать их начальную емкость. Таким образом, если у нас есть оценка количества элементов, которые будут сохранены, мы можем использовать ее, чтобы избежать перефразирования или изменения размера.
  • Всегда используйте Generics для безопасности типов, читабельности и надежности. Кроме того, используя Generics, вы избегаете ClassCastException во время выполнения.
  • Используйте неизменяемые классы, предоставляемые Java Development Kit (JDK), в качестве ключа на карте, чтобы избежать реализации методов hashCode и equals для нашего пользовательского класса.
  • Программа с точки зрения интерфейса не реализация.
  • Возвратите коллекции или массивы нулевой длины, в отличие от возврата нулевого значения, если базовая коллекция фактически пуста.

59. В чем разница между интерфейсами перечисления и итератора?

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

60. В чем разница между HashSet и TreeSet?

HashSet реализована с использованием хэш — таблицу , и , таким образом, его элементы не упорядочены. Методы добавления, удаления и содержат HashSet имеют постоянную сложность по времени O (1). С другой стороны, TreeSet реализован с использованием древовидной структуры. Элементы в TreeSet сортируются, и, следовательно, методы add, remove и содержат методы имеют временную сложность O (logn).

E. Сборщик мусора

61. Какова цель сбора мусора в Java и когда он используется?

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

62. Что делают методы System.gc () и Runtime.gc ()?

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

Пример класса ReferenceObject показан ниже для демонстрации использования методов System.gc и Runtime.gc.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
public class ReferenceObject
 public void finalize()
 {
    System.out.println("object is garbage collected");
     
 }
 
 public static void main(String args[]){ 
  ReferenceObject refObj1=new ReferenceObject(); 
  ReferenceObject refObj2=new ReferenceObject(); 
  refObj1=null
  refObj2=null
  System.gc();
 
  Runtime.gc();
 
}

63. Когда вызывается finalize ()? Какова цель завершения?

Метод finalize вызывается сборщиком мусора непосредственно перед освобождением памяти объекта. Обычно рекомендуется освобождать ресурсы, удерживаемые объектом внутри метода finalize.

Метод Finalize в классе ReferenceObject показан ниже в качестве примера.

Завершить метод

1
2
3
4
5
6
7
8
public class ReferenceObject
 public void finalize()
 {
    System.out.println("object is garbage collected");
     
 }
 }

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

Нет, объект будет доступен для сборки мусора в следующем цикле сборщика мусора.

65. Что такое структура Java Heap?

В JVM имеется куча , представляющая собой область данных времени выполнения, из которой выделяется память для всех экземпляров и массивов классов. Он создается при запуске JVM. Память кучи для объектов восстанавливается автоматической системой управления памятью, которая называется сборщиком мусора. Память кучи состоит из живых и мертвых объектов. Живые объекты доступны приложению и не будут предметом сбора мусора. Мертвые объекты — это те, которые никогда не будут доступны приложению, но еще не собраны сборщиком мусора. Такие объекты занимают пространство динамической памяти до тех пор, пока они не будут собраны сборщиком мусора.

66. В чем разница между последовательным и пропускным сборщиком мусора?

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

67. Когда Объект получает право на сборку мусора в Java?

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

68. Сборка мусора происходит в пространстве постоянной генерации в JVM?

Сборка мусора происходит в пространстве PermGen, и если пространство PermGen заполнено или пересекает пороговое значение, оно может инициировать полную сборку мусора. Если вы внимательно посмотрите на вывод сборщика мусора, вы обнаружите, что пространство PermGen также является сборщиком мусора. Это причина, почему правильный размер пространства PermGen важен, чтобы избежать частых полных сборок мусора. Также проверьте нашу статью Java 8: PermGen для Metaspace .

F. Исключительная обработка

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

Проверено исключение Непроверенное исключение
известный как исключения времени компиляции известный как исключения во время выполнения
распространяется с использованием ключевого слова throws автоматически распространяется
может создать пользовательское исключение, расширяя класс java.lang.Exception может создать пользовательское исключение, расширив исключение времени выполнения

70. В чем разница между исключением и ошибкой в ​​Java?

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

71. В чем разница между бросками и бросками?

Ключевое слово throw используется для явного вызова исключения в программе. Напротив, предложение throws используется для указания тех исключений, которые не обрабатываются методом. Каждый метод должен явно указывать, какие исключения не обрабатываются, поэтому вызывающие его лица могут защититься от возможных исключений. Наконец, несколько исключений разделяются запятой.

бросать Броски
Бросок используется для явного исключения. Чтобы объявить исключение, используется throws.
Используя только throw, проверенные исключения не могут быть распространены. Используя throws, Checked исключение может распространяться.
Бросок всегда используется с экземпляром. Броски всегда используются с классом.
Бросок используется внутри метода. Броски используются всегда с сигнатурой метода.
Вы не должны бросать несколько исключений Вы можете объявить несколько исключений.

72. Какова важность блока finally в обработке исключений?

Блок finally всегда будет выполняться независимо от того, было ли выброшено исключение. Даже в случае, когда оператор catch отсутствует и генерируется исключение, блок finally все равно будет выполнен. Последнее, что следует упомянуть, это то, что блок finally используется для освобождения ресурсов, таких как буферы ввода-вывода, соединения с базой данных и т. Д.

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

Наконец-то блок

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
public class DivideByZeroException
     public static void main(String []args){ 
        try
            int a = 1;  
            System.out.println(a/0); 
        }
        catch(Exception exception)
        {
          System.out.println("exception is thrown");
        }
        finally 
        
            System.out.println("after the exception is handled"); 
        
     
}

73. Что будет с объектом Exception после обработки исключения?

Объект Exception будет собирать мусор в следующей сборке мусора.

74. Какую цель выполняют ключевые слова final, final и finalize?

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

Джава Апплеты

75. Что такое апплет?

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

76. Объясните жизненный цикл апплета.

Апплет может иметь следующие состояния:

  • Init: апплет инициализируется каждый раз при загрузке.
  • Начало: начать выполнение апплета.
  • Стоп: остановить выполнение апплета.
  • Уничтожить: выполнить окончательную очистку перед выгрузкой апплета.
Вопросы об интервью Java - жизненный цикл апплета
Жизненный цикл апплета

77. Что происходит при загрузке апплета?

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

78. В чем разница между апплетом и приложением Java?

Апплеты выполняются в браузере с поддержкой Java, но Java-приложение — это отдельная Java-программа, которая может выполняться вне браузера. Однако оба они требуют наличия виртуальной машины Java (JVM). Кроме того, для запуска приложения Java-приложению требуется метод main с определенной сигнатурой. Java-апплетам не нужен такой метод, чтобы начать их выполнение. Наконец, Java-апплеты обычно используют ограничительную политику безопасности, в то время как Java-приложения обычно используют более мягкие политики безопасности.

79. Какие ограничения наложены на апплеты Java?

Главным образом из соображений безопасности на Java-апплеты накладываются следующие ограничения:

  • Апплет не может загружать библиотеки или определять собственные методы.
  • Апплет не может обычно читать или записывать файлы на узле выполнения.
  • Апплет не может прочитать определенные системные свойства.
  • Апплет не может устанавливать сетевые подключения кроме хоста, с которого он пришел.
  • Апплет не может запустить любую программу на хосте, который его выполняет.

80. Что такое ненадежные апплеты?

Ненадежные апплеты — это те апплеты Java, которые не могут получить доступ или выполнить локальные системные файлы. По умолчанию все загруженные апплеты считаются ненадежными.

81. В чем разница между апплетами, загружаемыми через Интернет, и апплетами, загружаемыми через файловую систему?

Что касается случая, когда апплет загружается через Интернет, апплет загружается загрузчиком классов апплета и подчиняется ограничениям, установленным менеджером безопасности апплета. Что касается случая, когда апплет загружается с локального диска клиента, апплет загружается загрузчиком файловой системы. Апплетам, загруженным через файловую систему, разрешается читать файлы, записывать файлы и загружать библиотеки на клиенте. Кроме того, апплетам, загруженным через файловую систему, разрешается выполнять процессы, и, наконец, апплетам, загружаемым через файловую систему, не передаются через верификатор байт-кода.

82. Что такое загрузчик класса апплета и что он предоставляет?

Когда апплет загружается через Интернет, апплет загружается загрузчиком классов апплета. Загрузчик классов обеспечивает иерархию пространства имен Java. Кроме того, загрузчик классов гарантирует, что существует уникальное пространство имен для классов, которые поступают из локальной файловой системы, и что уникальное пространство имен существует для каждого сетевого источника. Когда браузер загружает апплет по сети, классы этого апплета помещаются в личное пространство имен, связанное с источником апплета. Затем эти классы, загруженные загрузчиком классов, проходят через верификатор. Верификатор проверяет, что файл класса соответствует спецификации языка Java. Помимо прочего, верификатор гарантирует, что нет переполнения или переполнения стека и что параметры всех инструкций байт-кода являются правильными.

83. Что такое диспетчер безопасности апплета и что он предоставляет?

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

H.Swing

84. В чем разница между выбором и списком?

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

85. Что такое менеджер макетов?

Менеджер по расположению используется для организации компонентов в контейнере.

86. В чем разница между полосой прокрутки и панелью JScrollPane?

Scrollbar является компонентом , но не контейнер . ScrollPane представляет собой контейнер. ScrollPane обрабатывает свои собственные события и выполняет собственную прокрутку.

87. Какие методы Swing являются поточно-ориентированными?

Существует только три поточно-безопасных метода: перекрасить, повторно проверить и сделать недействительным.

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

В Canvas , Каркасные , панельные классы и апплеты поддерживают картину.

89. Что такое отсечение?

Отсечение определяется как процесс ограничения операций рисования ограниченной областью или формой.

90. В чем разница между MenuItem и CheckboxMenuItem?

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

91. Как организованы элементы BorderLayout?

Элементы BorderLayout организованы на границах (север, юг, восток и запад) и в центре контейнера.

92. Как организованы элементы GridBagLayout?

Элементы GridBagLayout организованы в соответствии с сеткой. Элементы имеют разные размеры и могут занимать более одного ряда или столбца сетки. Таким образом, строки и столбцы могут иметь разные размеры.

93. В чем разница между окном и рамой?

Класс Frame расширяет класс Window и определяет главное окно приложения, которое может иметь строку меню.

94. Какова связь между вырезкой и перекраской?

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

95. Какова связь между интерфейсом прослушивателя событий и классом адаптера событий?

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

96. Как компонент GUI может обрабатывать свои собственные события?

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

97. Какое преимущество имеют менеджеры компоновки Java по сравнению с традиционными оконными системами?

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

98. Каков шаблон проектирования, который Java использует для всех компонентов Swing?

Шаблон проектирования, используемый Java для всех компонентов Swing, является шаблоном Model View Controller (MVC).

Вопросы об интервью Java - MVC
MVC

I.JDBC

99. Что такое JDBC?

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

100. Что такое компоненты JDBC API?

Пакет java.sql содержит:

Интерфейсы :

  • Водитель
  • соединение
  • утверждение
  • Подготовленное заявление
  • CallableStatement
  • ResultSet

Классы :

  • DriverManager
  • SQLException

101. Объясните роль водителя в JDBC.

Драйвер JDBC предоставляет специфичные для поставщика реализации абстрактных классов, предоставляемых API JDBC. Каждый драйвер должен предоставлять реализации для следующих интерфейсов пакета java.sql: Connection , Statement , PreparedStatement , CallableStatement , ResultSet и Driver .

102. Что такое интерфейс JDBC Connection?

Интерфейс соединения поддерживает сеанс с базой данных. Операторы SQL выполняются, а результаты возвращаются в контексте соединения. База данных объекта Connection может предоставить информацию, описывающую его таблицы, поддерживаемую грамматику SQL, хранимые процедуры, возможности этого подключения и т. Д. Эта информация получается с помощью метода getMetaData.

103. Что означает пул соединений?

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

104. Какова роль класса JDBC DriverManager?

DriverManager предоставляет пользователю базовый сервис для управления набором драйверов JDBC. Он поддерживает связь с доступными драйверами и устанавливает соединение с базой данных с соответствующим драйвером.

105. Для чего нужен метод Class.forName?

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

Пример ClassLoader Class показан ниже, чтобы продемонстрировать использование метода Class.forName ().

Class.forName

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
public class ClassLoader
{
 
   public static void main(String[] args) {
 
      try
      {
         Class cls = Class.forName("BasicClass");
          
         .....
          
         System.out.println("Class = " + cls.getName());
          
      }
          
     catch(ClassNotFoundException exception)
      {
         System.out.println(exception.toString());
      }
       
}

106. В чем преимущество PreparedStatement над Statement?

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

107. Какая польза от CallableStatement?

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

108. Что вы подразумеваете под пакетной обработкой в ​​JDBC?

Пакетная обработка группирует связанные операторы SQL и выполняет несколько запросов, когда размер пакета достигает желаемого порога. Это делает производительность быстрее.

Вызов метода J.Remote (RMI)

109. Что такое RMI?

Java Remote Method Invocation (Java RMI) — это Java API, который выполняет объектно-ориентированный эквивалент удаленных вызовов процедур (RPC) с поддержкой прямой передачи сериализованных классов Java и распределенной сборки мусора. Удаленный вызов метода (RMI) также можно рассматривать как процесс активации метода на удаленно работающем объекте. RMI предлагает прозрачность местоположения, потому что пользователь чувствует, что метод выполняется на локально запущенном объекте. Проверьте некоторые советы RMI здесь .

110. Каков основной принцип архитектуры RMI?

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

Вопросы Интервью Java - Архитектура RMI
Архитектура RMI

111. Каковы уровни архитектуры RMI?

Архитектура RMI состоит из следующих уровней:

  • Уровень заглушки и скелета. Этот слой находится непосредственно под взглядом разработчика. Этот уровень отвечает за перехват вызовов, сделанных клиентом, для интерфейса и перенаправление этих вызовов удаленной службе RMI.
  • Уровень удаленных ссылок. Второй уровень архитектуры RMI связан с интерпретацией ссылок, сделанных клиентом на удаленные объекты сервера. Этот уровень интерпретирует и управляет ссылками, сделанными клиентами на объекты удаленной службы. Соединение является одноранговым (одноадресным).
  • Транспортный уровень: этот уровень отвечает за соединение двух JVM, участвующих в сервисе. Этот уровень основан на соединениях TCP / IP между компьютерами в сети. Он обеспечивает базовое подключение, а также некоторые стратегии проникновения брандмауэра.

112. Какова роль удаленного интерфейса в RMI?

Удаленный интерфейс служит для идентификации интерфейсов, методы которых могут вызываться из нелокальной виртуальной машины. Любой объект, который является удаленным объектом, должен прямо или косвенно реализовать этот интерфейс. Класс, который реализует удаленный интерфейс, должен объявлять внедряемые удаленные интерфейсы, определять конструктор для каждого удаленного объекта и предоставлять реализацию для каждого удаленного метода во всех удаленных интерфейсах.

113. Какова роль класса java.rmi.Naming?

Класс java.rmi.Naming предоставляет методы для хранения и получения ссылок на удаленные объекты в реестре удаленных объектов. Каждый метод класса Naming принимает в качестве одного из аргументов имя, представляющее собой строку в формате URL.

114. Что подразумевается под связыванием в RMI?

Привязка — это процесс связывания или регистрации имени для удаленного объекта, который может быть использован позднее для поиска этого удаленного объекта. Удаленный объект может быть связан с именем с помощью методов bind или rebind класса Naming.

115. В чем разница между использованием методов bind () и rebind () класса Naming?

Метод bind bind отвечает за привязку указанного имени к удаленному объекту, а метод rebind отвечает за привязку указанного имени к новому удаленному объекту. Если для этого имени существует привязка, она заменяется.

116. Какие шаги необходимо предпринять, чтобы сделать программу RMI?

Для правильной работы программы RMI необходимо выполнить следующие шаги:

  • Компиляция всех исходных файлов.
  • Генерация заглушек с использованием rmic.
  • Начать rmiregistry.
  • Запустите RMIServer.
  • Запустите клиентскую программу.
Вопросы Интервью Java - Поток RMI
RMI Flow

117. Какова роль заглушки в RMI?

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

  • Он инициирует соединение с удаленной JVM, содержащей удаленный объект.
  • Маршал параметры для удаленной JVM.
  • Он ожидает результата вызова и выполнения метода.
  • Он отменяет маршализацию возвращаемого значения или исключения, если метод не был успешно выполнен.
  • Возвращает значение вызывающей стороне.

118. Что такое DGC и как он работает?

DGC выступает за распределенную сборку мусора. Удаленный вызов метода (RMI) использует DGC для автоматической сборки мусора. Поскольку RMI включает ссылки на удаленные объекты через JVM, сборка мусора может быть довольно сложной. DGC использует алгоритм подсчета ссылок для автоматического управления памятью для удаленных объектов.

119. Какова цель использования RMISecurityManager в RMI?

RMISecurityManager предоставляет менеджер безопасности, который может использоваться приложениями RMI, которые используют загруженный код. Загрузчик классов RMI не будет загружать какие-либо классы из удаленных мест, если диспетчер безопасности не был установлен.

120. Объясните маршаллинг и демаршаллинг.

Когда приложение хочет передать свои объекты памяти через сеть другому хосту или сохранить его в хранилище, представление в памяти должно быть преобразовано в подходящий формат. Этот процесс называется маршаллингом, а операция возврата называется демаршаллингом.

121. Объяснить сериализацию и десериализацию.

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

K.Servlets

122. Что такое сервлет?

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

123. Объясните архитектуру сервлета.

Основной абстракцией, которая должна быть реализована всеми сервлетами, является интерфейс javax.servlet.Servlet. Каждый сервлет должен реализовывать это прямо или косвенно, либо путем расширения javax.servlet.GenericServlet или javax.servlet.http.HTTPServlet. Наконец, каждый сервлет может обслуживать несколько запросов параллельно, используя многопоточность.

Сервлет Архитектура

124. В чем разница между апплетом и сервлетом?

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

125. В чем разница между GenericServlet и HttpServlet?

GenericServlet — это обобщенный и независимый от протокола сервлет, который реализует интерфейсы Servlet и ServletConfig. Те сервлеты, которые расширяют класс GenericServlet, должны переопределять метод службы. Наконец, для разработки HTTP-сервлета для использования в Интернете, который обслуживает запросы с использованием протокола HTTP, ваш сервлет должен вместо этого расширить HttpServlet. Проверьте примеры сервлетов здесь .

126. Объясните жизненный цикл сервлета.

По запросу каждого клиента Servlet Engine загружает сервлеты и вызывает его методы init для инициализации сервлета. Затем объект Servlet обрабатывает все последующие запросы, поступающие от этого клиента, вызывая метод service для каждого запроса отдельно. Наконец, сервлет удаляется путем вызова метода уничтожения сервера.

Жизненный цикл сервлета

127. В чем разница между doGet () и doPost ()?

doGET: метод GET добавляет пары имя-значение в URL запроса. Таким образом, существует ограничение на количество символов и, следовательно, на количество значений, которые могут использоваться в запросе клиента. Кроме того, значения запроса становятся видимыми, и поэтому конфиденциальная информация не должна передаваться таким образом. doPOST: метод POST преодолевает ограничение, налагаемое запросом GET, путем отправки значений запроса внутри его тела. Кроме того, нет ограничений на количество значений для отправки. Наконец, конфиденциальная информация, передаваемая через запрос POST, не видна внешнему клиенту.

Код ниже показывает класс BasicServlet, который имеет методы doGet и doPost для реализации.

Методы получения и отправки

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
public class BasicServlet extends HttpServlet
{
  
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
      {
       
      }
       
    public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
      {
       
      }     
       
}

128. Что подразумевается под веб-приложением?

Веб-приложение — это динамическое расширение веб-сервера или сервера приложений. Существует два типа веб-приложений: презентационные и сервис-ориентированные. Ориентированное на представление веб-приложение генерирует интерактивные веб-страницы, которые содержат различные типы языка разметки и динамический контент в ответ на запросы. С другой стороны, сервис-ориентированное веб-приложение реализует конечную точку веб-сервиса. В общем, веб-приложение можно рассматривать как набор сервлетов, установленных в определенном подмножестве пространства имен URL-адреса сервера.

129. Что такое включение на стороне сервера (SSI)?

Включения на стороне сервера (SSI) — это простой интерпретируемый язык сценариев на стороне сервера, используемый почти исключительно для Интернета и включающий тег сервлета. Наиболее частое использование SSI — это включение содержимого одного или нескольких файлов в веб-страницу на веб-сервере. Когда браузер обращается к веб-странице, веб-сервер заменяет тег сервлета на этой веб-странице на гипертекст, сгенерированный соответствующим сервлетом.

130. Что такое цепочка сервлетов?

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

131. Как вы узнаете, какая клиентская машина отправляет запрос вашему сервлету?

Класс ServletRequest имеет функции для определения IP-адреса или имени хоста клиентского компьютера. getRemoteAddr () получает IP-адрес клиентского компьютера, а getRemoteHost () получает имя хоста клиентского компьютера. Смотрите пример здесь .

132. Какова структура ответа HTTP?

HTTP-ответ состоит из трех частей:

  • Код состояния: описывает статус ответа. С его помощью можно проверить, был ли запрос успешно выполнен. В случае сбоя запроса код состояния можно использовать для выяснения причины сбоя. Если ваш сервлет не возвращает код состояния, по умолчанию возвращается код успешного завершения HttpServletResponse.SC_OK.
  • Заголовки HTTP: они содержат больше информации об ответе. Например, заголовки могут указывать дату / время, после которого ответ считается устаревшим, или форму кодирования, используемую для безопасной передачи объекта пользователю. Посмотрите, как получить заголовки в Servlet здесь .
  • Тело: содержит содержание ответа. Тело может содержать HTML-код, изображение и т. Д. Тело состоит из байтов данных, передаваемых в сообщении транзакции HTTP, сразу после заголовков.

133. Что такое печенье?

Cookie — это немного информации, которую веб-сервер отправляет в браузер. Браузер сохраняет куки для каждого веб-сервера в локальном файле. В будущем запросе браузер вместе с запросом отправляет все сохраненные файлы cookie для этого конкретного веб-сервера.

134. В чем разница между сессией и cookie?

Различия между сессией и cookie следующие:

  • Сеанс должен работать независимо от настроек в клиентском браузере. Клиент, возможно, решил отключить куки. Однако сеансы все еще работают, так как клиент не имеет возможности отключить их на стороне сервера.
  • Сеанс и файлы cookie также различаются по количеству информации, которую можно хранить. Сеанс HTTP может хранить любой объект Java, в то время как cookie может хранить только объекты String.

135. Какой протокол будет использоваться браузером и сервлетом для связи?

Браузер связывается с сервлетом по протоколу HTTP.

136. Что такое HTTP-туннелирование?

Туннелирование HTTP — это метод, с помощью которого сообщения, выполняемые с использованием различных сетевых протоколов, инкапсулируются с использованием протоколов HTTP или HTTPS. Протокол HTTP, таким образом, действует как обертка для канала, который используется сетевым протоколом для связи. Маскирование других протокольных запросов как HTTP-запросов — HTTP Tunneling.

137. В чем разница между методами sendRedirect и forward?

Метод sendRedirect создает новый запрос, а метод forward просто перенаправляет запрос к новой цели. Предыдущие объекты области запроса не доступны после перенаправления, потому что это приводит к новому запросу. С другой стороны, объекты области предыдущего запроса доступны после пересылки. В конце концов, как правило, метод sendRedirect считается более медленным по сравнению с методом forward.

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

138. Что такое кодирование URL и декодирование URL?

Процедура кодирования URL-адреса отвечает за замену всех пробелов и каждого другого дополнительного специального символа URL-адреса на соответствующее шестнадцатеричное представление. В соответствии с этим, декодирование URL — это совершенно противоположная процедура.

139. Что такое диспетчер запросов?

Servlet Request Dispatcher — это интерфейс, реализация которого определяет, что объект может отправлять запросы любому ресурсу (например, HTML, Image, JSP, Servlet и т. Д.) На сервере. Еще одним преимуществом этого интерфейса является то, что он используется в двух случаях:

  • Чтобы включить ответ одного сервлета в другой (т. Е. Клиент получает ответ обоих сервлетов)
  • Чтобы переслать запрос клиента другому сервлету для удовлетворения запроса (т. Е. Клиент вызывает сервлет, но ответ серверу дает другой сервлет)

L.JSP

140. Что такое страница JSP?

Страница сервера Java ( JSP ) — это текстовый документ, который содержит два типа текста: статические данные и элементы JSP. Статические данные могут быть выражены в любом текстовом формате, таком как HTML или XML. JSP — это технология, которая смешивает статический контент с динамически генерируемым контентом. Смотрите пример JSP здесь .

141. Как обрабатываются запросы JSP?

По прибытии запроса JSP браузер сначала запрашивает страницу с расширением .jsp. Затем веб-сервер считывает запрос и, используя JSP-компилятор, веб-сервер преобразует страницу JSP в класс сервлета. Обратите внимание, что файл JSP компилируется только по первому запросу страницы или если файл JSP изменился. Сгенерированный класс сервлета вызывается для обработки запроса браузера. Как только выполнение запроса закончено, сервлет отправляет ответ клиенту. Посмотрите, как получить параметры запроса в JSP .

142. Каковы преимущества JSP?

Преимущества использования технологии JSP показаны ниже:

  • Страницы JSP динамически компилируются в сервлеты, поэтому разработчики могут легко вносить обновления в код презентации.
  • Страницы JSP могут быть предварительно скомпилированы.
  • Страницы JSP могут быть легко объединены в статические шаблоны, включая фрагменты HTML или XML, с кодом, который генерирует динамический контент.
  • Разработчики могут предлагать настраиваемые библиотеки тегов JSP, к которым авторы страниц обращаются с использованием XML-подобного синтаксиса.
  • Разработчики могут вносить изменения в логику на уровне компонентов, не редактируя отдельные страницы, использующие логику приложения.

143. Что такое директивы?

Директивы — это инструкции, которые обрабатываются механизмом JSP, когда страница компилируется в сервлет. Директивы используются для установки инструкций на уровне страницы, вставки данных из внешних файлов и определения пользовательских библиотек тегов.

144. Какие существуют разные типы директив в JSP?

Директивы определены между <% @ и%>. Различные типы директив показаны ниже:

  • Директива include: используется для включения файла и объединяет содержимое файла с текущей страницей.
  • Директива страницы: используется для определения определенных атрибутов на странице JSP, таких как страница ошибок и буфер.
  • Taglib: используется для объявления библиотеки пользовательских тегов, которая используется на странице.

145. Что такое действия JSP?

Действия JSP используют конструкции в синтаксисе XML для управления поведением механизма сервлета. Они выполняются, когда запрашивается страница JSP. Их можно динамически вставлять в файл, повторно использовать компоненты JavaBeans, перенаправлять пользователя на другую страницу или генерировать HTML для плагина Java. Некоторые из доступных действий перечислены ниже:

  • jsp: include включает файл, когда запрашивается страница JSP.
  • jsp: useBean находит или создает экземпляр JavaBean.
  • jsp: setProperty устанавливает свойство JavaBean.
  • jsp: getProperty получает свойство JavaBean.
  • jsp: forward пересылает запросчик на новую страницу.
  • jsp: плагин генерирует специфичный для браузера код.

146. Что такое сценарии?

В технологии Java Server Pages (JSP) скриптлет представляет собой фрагмент Java-кода, встроенного в страницу JSP. Скриплет — это все внутри тегов. Между этими тегами пользователь может добавить любой допустимый скриптлет.

147. Что такое декларации?

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

Пример кода добавлен ниже, чтобы показать объявления JSP.

Объявления

1
2
3
<%! int j = 0; %>
<%! int d, e, f; %>
<%! Shape a = new Shape(); %>

148. Что такое выражения?

Выражение JSP используется для вставки значения выражения языка сценариев, преобразованного в строку, в поток данных, возвращаемый клиенту веб-сервером. Выражения определяются между тегами <% = и%>.

JSP Expresssion

1
2
3
4
5
6
7
<html>
   <head><title>My Blog</title></head>
    
   <body>
      <p>Today's Date is: <%= (new java.util.Date()).toLocaleString()%></p>
   </body>
</html>

149. Что подразумевается под неявными объектами и чем они являются?

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

  • заявление
  • страница
  • запрос
  • ответ
  • сессия
  • исключение
  • из
  • конфиг
  • PageContext

Пример тегов JSP для отключения сеанса показан ниже:

Отключение сеанса

1
<%@ page session=“false” %> 

150. Какие теги представлены в JSTL?

Существует 5 типов тегов JSTL:

Core:

  • Переменная поддержка
  • Управление потоком
  • Управление URL
  • Разнообразный

XML:

  • ядро
  • Управление потоком
  • преобразование

Интернационализация:

  • место действия
  • Форматирование сообщения
  • Форматирование чисел и даты

База данных:

  • SQL

Функции:

  • Длина коллекции
  • Струнные манипуляции

Хотите узнать больше вопросов по Java?

Ты еще с нами? Вау, это была огромная статья о различных типах Java Interview Questions. Если вам понравилось, подпишитесь на нашу новостную рассылку, чтобы получать еженедельные обновления и бесплатные обзоры! Кроме того, ознакомьтесь с нашими курсами для повышения квалификации!

Итак, какие еще вопросы по собеседованию на Java есть? Дайте нам знать в комментариях, и мы включим их в статью! Удачного кодирования!

Вопросы об интервью Java были в последний раз обновлены 7 августа 2019