JavaRush /Java блог /Random /Кофе-брейк #101. 19 основных вопросов на собеседовании по...

Кофе-брейк #101. 19 основных вопросов на собеседовании по Java и краткие примеры ответов

Статья из группы Random
Источник: Hackernoon Представляем вашему вниманию несколько вопросов и ответов, которые часто встречаются на собеседованиях по Java.

1. Что такое Java Development Kit (JDK)?

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

2. Что делает Java Runtime Environment (JRE)?

JRE относится к среде выполнения (Runtime Environment), в которой выполняется байт-код Java. JRE поддерживает файлы и библиотеки для среды выполнения.

3. Что делает виртуальная машина Java (JVM)?

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

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

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

5. Java не на 100% объектно-ориентирована. Почему?

Потому что Java использует восемь примитивных типов данных, таких как boolean, byte, char, int, float, double, long, short, которые не являются объектами.

6. Что такое конструкторы в Java?

Конструктор — это блок кода, используемый для инициализации объектов. Синтаксис:

class DemoClass
{
   // constructor name is same as class name
   DemoClass()
   {
      ....
   }
}
// calls DemoClass() constructor
DemoClass obj = new DemoClass();
Пример:

public class ConstructorDemo
{
   int a; // class attribute
   // create constructor for class ConstructorDemo
   ConstructorDemo()
   {
      a = 26; // initial value for class attribute 'a'
   }
   public static void main(String[] args)
   {
      // creating object for ConstructorDemo class
      // here we're calling constructor ConstructorDemo()
      ConstructorDemo obj = new ConstructorDemo();
      System.out.println(obj.a);
   }
}
Результат:
26

7. Что делает одноэлементный класс?

В одноэлементных классах может быть только один объект (экземпляр класса) одновременно. После того, как объект создан, и мы пытаемся создать экземпляр класса singleton, новая переменная также указывает на первый созданный объект.

8. Что такое классы-обертки (wrapper classes) в Java?

Классы-обертки позволяют примитивным типам данных преобразовывать в объект и наоборот. Пример:

int a = 7; // using primitive datatype
Integer a = new Integer(7); // using wrapper class

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

В общем случае == — это оператор, а equals() — это метод. Мы используем оператор == для эталонного сравнения объектов в куче. В Java нет концепции перегрузки операторов. Несмотря на это, оператор == используется для проверки того, что адрес двух объектов совпадает или нет. То есть оператор == проверяет, указывают ли оба объекта на одно и то же место в памяти или нет. Также оператор == используется для сравнения типов объектов и примитивных типов, таких как логическое значение. В то время как метод equals() класса String сравнивает содержимое двух объектов.

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

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

11. Почему метод main() в Java всегда статичен?

Потому что вызывать статический метод объекта не требуется. Если main() должен был быть нестатическим методом, виртуальная машина Java должна сначала создать свой объект, а затем вызвать метод main(), который приведет к выделению дополнительной памяти.

12. Почему в Java строки неизменяемы?

Строки в Java неизменяемы, потому что объекты String кэшируются в пуле строковых констант (string constant pool).

13. Что такое массивы и ArrayList в Java?

Массив — это объект, который содержит фиксированное количество элементов аналогичного типа.
  1. ArrayList является частью структуры коллекции.

  2. ArrayList реализует интерфейс списка.

  3. ArrayList — это масштабируемый массив, который динамически увеличивается при добавлении элементов и уменьшается при удалении элементов.

  4. Для частой операции извлечения лучше всего подходит Java ArrayList. Потому что элементы ArrayList хранятся в последовательных ячейках памяти.

  5. ArrayList не может содержать примитивные типы данных, такие как int, double, char и long.

  6. ArrayList может содержать объекты класса String и оболочки (Double, Integer).

  7. ArrayList позволяет дублировать элементы.

  8. ArrayList сохраняет порядок вставки.

  9. ArrayList широко используется благодаря своей функциональности и гибкости. Он предназначен для хранения разнородных коллекций объектов.

  10. ArrayList может иметь любое количество нулевых значений.

14. В чем разница между HashSet и HashMap в Java?

В HashSet:
  1. Мы можем хранить объекты в HashSet. Например, HashSet: {«Hello», «World»}.

  2. Порядок вставки не сохраняется. Он основан на хэш-коде.

  3. Имеет метод add().

  4. Реализует интерфейс Set.

  5. Не допускает дублирования элементов.

  6. Допускает одиночное нулевое значение.

В HashMap:
  1. В HashMap мы можем хранить пары ключ и значение. Например, {1 -> “Hello”, 2 -> “World”}.

  2. Не поддерживает порядок вставки. Он основан на функции хеширования.

  3. Имеет метод put().

  4. Реализует интерфейс карты.

  5. Допускает повторяющиеся значения. Не допускает дублирования ключей.

  6. Допускает одиночный нулевой ключ и любое количество нулевых значений.

16. В чем разница между this и super в Java?

Ключевое слово this в Java:
  1. this — это ключевое слово, которое является ссылочной переменной, которая ссылается на текущий объект.

  2. Может использоваться для неявного вызова текущего метода класса.

  3. Ключевое слово this(), используемое для вызова конструктора текущего класса.

  4. This можно использовать для передачи в качестве аргумента при вызове метода.

Ключевое слово super в Java:
  1. Ключевое слово super — это ссылочная переменная, которая используется для ссылки на непосредственный объект родительского класса.

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

17. Что такое оператор break и continue в Java?

Если оператор break встречается в цикле, этот цикл завершится, и управление перейдет к следующему оператору того же цикла. Пример:

public class Example
{
   public static void main(String[] args) 
   {
      for(int a = 1; a <= 10; a++)
      {
         if(a == 3)
         {  
            // breaking loop  
            break;  
         }  
         System.out.println(a);  
      }
   }
}
Результат:
1 2
Оператор continue переходит к следующей итерации цикла в зависимости от определенного условия. Пример:

public class Example 
{
   public static void main(String[] args) 
   {
      for(int a = 1; a <= 10; a++)
      {
         if(a % 2 != 0)
         {
            continue;
         }
         System.out.println(a + " ");
      }
   }
}
Результат:
2 4 6 8 10

18. Что такое модификаторы доступа в Java?

Модификаторы доступа определяют предел или область действия переменной, конструктора, класса или метода. В Java есть четыре типа модификаторов доступа:
  1. Модификатор частного доступа.
  2. Модификатор защищенного доступа.
  3. Модификатор общего доступа.
  4. Модификатор доступа по умолчанию.

19. В чем разница между циклами for и for each в Java?

Цикл for:
  1. Не имеет исполняемой последовательности. В цикле for мы можем изменить счетчик по своему желанию.
  2. Появился в самом начале, в JDK 1.
  3. Нет необходимости реализовывать интерфейс.
  4. Может иметь доступ к index. Следовательно, можно заменить элемент в массиве.
  5. Счетчик может увеличиваться и уменьшаться.
Цикл for each:
  1. Выполняется последовательно. Счетчик увеличивается на единицу.
  2. Впервые появился в JDK 5.
  3. Чтобы перебирать контейнеры, используя для каждого цикла, контейнер должен реализовывать интерфейс Iterable.
  4. Невозможно заменить элемент по данному индексу, так как нет доступа к индексу массива.
  5. Может выполнять итерацию только в возрастающем порядке, не может уменьшаться.
Пример разницы между циклами for each и for:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class DifferenceBetween 
{
   public static void main(String[] args) 
   {
      List<String> players = new ArrayList<>(Arrays.asList("Virat", "Rohit", "Dhoni"));
      // iterate over List using for loop
      System.out.println("using for loop: ");
      for(int a = 0; a < players.size(); a++) 
      {
         System.out.println(players.get(a));
      }
      // iterate over List using enhanced for loop
      System.out.println("using for each loop: ");
      for(String str : players)
      {
         System.out.println(str);
      }
   }
}
Результат для циклов for и for each:
Virat Rohit Dhoni.
Комментарии (10)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Oluna Уровень 24
23 ноября 2021
Я, конечно, многое могу понять: трудности перевода они ж такие трудные :) Но хорошо было б еще и разбираться в вопросе, о котором статью публикуешь, чтоб не допускать перетаскивания ошибки/опечатки в переведенную статью. Сразу говорю - основной косяк автора статьи изначально. Но! Качественный контент же выдать - надо думать. Можно ж примечание переводчика сделать, исправить. А то получается один изначально написал статью на английском задней левой ногой, а другой перевел, не включая голову или что там на ее месте. Недолго и подумать, будто 10-летний школьник машинным переводом переводил. Хотя зря я так плохо о школьниках, они-то чаще вникают.. :)) Итак, наслаждаемся: "17. Что такое оператор break и continue в Java? Если оператор break встречается в цикле, этот цикл завершится, и управление перейдет к следующему оператору того же цикла." ДА ЛАДНО! Того же? Да break выведет выполнение программы к черту из цикла вообще и отправит гулять дальше. Идем в оригинал статьи (ссылка вверху): Ба! И правда, видимо, автор голосом заметку наговаривал и напортачил: "(If) break statement encountered in a loop, that loop will terminate and the control will shift to next statement of the same loop." С какого перепугу, ой то есть с какого JDK у нас такие вдруг новшества, что "of the same loop"? А потому что (если таки задумываться) там явно должно было быть: "... that loop will terminate and the control will shift to next statement AFTER THE loop." Переводим, стало быть, хоть слегка, на 4 уровне JavaRush (там уже были break и continue) уже вникая в суть: "Если оператор break встречается в цикле, этот цикл завершится, и управление перейдет к следующему ВЫРАЖЕНИЮ ПОСЛЕ ЦИКЛА". И да-да, statement - это таки выражение, а не оператор, к тому же.
Alexandr Уровень 36
18 ноября 2021
19, а по чему не 20 - хотя бы круглая цифра :D Месяц назад выписал себе в файл - действительно Самые Основные вопросы с ответами по Java, что бы повторять время от времени, вышло около двухсот, и то по ощущениям супер мало получилось. Те кто думают что если выучат эти 19 ответов, покроют хороший кусок вопросов на собесе, то это не так. По факту Вас даже могут не спросить эти вопросы, а спросят другие и скорее всего не только спросят, но и пример попросят начеркать или задачку решить, и таких Основных вопросов сотни.. Сотни по Java. Сотни по Spring. Сотни по Data Base, SQL, JDBC, ORM. А еще бы Git(система контроля версий), JUnit(тестирование), паттерны, основы фронтенда, алгоритмы... И все это на английском, хотя бы на уровне - "моя твоя понимать.." 😇