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 Software Developer в MaibornWolff
23 ноября 2021, 22:17
Я, конечно, многое могу понять: трудности перевода они ж такие трудные :) Но хорошо было б еще и разбираться в вопросе, о котором статью публикуешь, чтоб не допускать перетаскивания ошибки/опечатки в переведенную статью. Сразу говорю - основной косяк автора статьи изначально. Но! Качественный контент же выдать - надо думать. Можно ж примечание переводчика сделать, исправить. А то получается один изначально написал статью на английском задней левой ногой, а другой перевел, не включая голову или что там на ее месте. Недолго и подумать, будто 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 - это таки выражение, а не оператор, к тому же.
Oluna Software Developer в MaibornWolff
23 ноября 2021, 22:24
P.S. Не говоря уж о том, что некоторые вещи при переводе лучше б наоборот не трогать: "HashMap <...> Реализует интерфейс карты." Да пристрелите меня лучше, чем такой перевод давать, кровь из глаз :)) Или просто оставьте "реализует интерфейс Map". Нормально же было! Туда же "реализует интерфейс списка". List, он и в Африке, пардон, в IDE останется List :)) Особенно смешно выглядит, когда переводивший Arrays перекроил в Массивы, а с ArrayList силенок не хватило :))) Получается забавная хоботня на уровне "Что такое массивы и ArrayList в Java?" вместо "What are Arrays and ArrayList. Голосую за единообразие, уж или оба понятия переводим, или оба не трогаем, или приводим их дополнительно в скобках. Вообще много ээммм шероховатостей, но мне уже лень писать. Слишком много. P.P.S. Даешь пре-модерацию статей как минимум двумя экспертами, через pull-request!
Alexandr
Уровень 36
18 ноября 2021, 14:25
19, а по чему не 20 - хотя бы круглая цифра :D Месяц назад выписал себе в файл - действительно Самые Основные вопросы с ответами по Java, что бы повторять время от времени, вышло около двухсот, и то по ощущениям супер мало получилось. Те кто думают что если выучат эти 19 ответов, покроют хороший кусок вопросов на собесе, то это не так. По факту Вас даже могут не спросить эти вопросы, а спросят другие и скорее всего не только спросят, но и пример попросят начеркать или задачку решить, и таких Основных вопросов сотни.. Сотни по Java. Сотни по Spring. Сотни по Data Base, SQL, JDBC, ORM. А еще бы Git(система контроля версий), JUnit(тестирование), паттерны, основы фронтенда, алгоритмы... И все это на английском, хотя бы на уровне - "моя твоя понимать.." 😇
Василий Бабин Мракоборец в Дурмстранг Expert
19 ноября 2021, 06:49
Статья то перевод. И если это американцы, то они, почему-то, не особо любят круглые числа.
Gaius Plinius
Уровень 28
19 ноября 2021, 07:33
А вы не поделитесь файликом?
Justinian Judge в Mega City One Master
19 ноября 2021, 09:28
Те кто думают что если выучат эти 19 ответов
а почему ты думаешь, что кто-то так подумает?
Alexandr
Уровень 36
19 ноября 2021, 11:49
А почему бы так и не подумать, если напсано что это Основные ;)
Justinian Judge в Mega City One Master
19 ноября 2021, 13:40
Третий закон формальной логики должен не давать приходить к такому утверждению ) По контексту статьи - это перечень базовых вопросов. В начале статьи есть ссылка на оригинал, где мы видим все то же название "19 базовых и простых вопросов". Просто здесь речь идет о двух вещах, как ты думаешь, что здесь могло быть написано, написал бы ли человек, в добром здравии, что мол, эти 19 вопросов являются достаточными для собесов или нет. Просто задать вопрос, что более вероятно, да или нет. Я бы сказал что нет, так маловероятно, но возможно. Но это должно быть прямо предусмотрено в тексте, но этого мы не видим, а если присмотреться то видим трудности перевода. Я отреагировал с этой точки зрения, чтобы продемонстрировать, как еще можно читать эту статью, ведь статья это одна и та же. Но мы с тобой пришли к разным выводам. Твой вывод не хуже моего, это гипотеза, почему нет, но как минимум это опыт работы с переводными статьями. Я например, почти не читаю хабр, там есть увлекательные авторские статьи, но очень много материалов с откровенно плохим переводом, который часто искажает смысл. Хорошо, если ссылка на оригинал есть. Но это так, я просто занудством занимаюсь , сорян, не обращай внимания )
Alexandr
Уровень 36
19 ноября 2021, 15:22
Третий закон формальной логики должен не давать приходить к такому утверждению
Прости, забыл за него(подкинул мне интересного чтива).., действительно нам же еще в школе про все эти законы рассказывали(первый раз об этих законах слышу, мне же не 103 года что бы я обо всем слышал) XD
Твой вывод не хуже моего, это гипотеза, почему нет, но как минимум это опыт работы с переводными статьями.
Я просто думаю что большенство не будут открывать источник, и пытаться на английском понять программирование, когда даже на своем native языке сложно понять что да как работает, более чем уверен большенство примит перевод as is)))
Но это так, я просто занудством занимаюсь
Да ладно тебе, теперь я узнал о законах логики =)
не обращай внимания
Я не на столько не воспитан )
Justinian Judge в Mega City One Master
19 ноября 2021, 17:59
Я не на столько не воспитан )
ты то точно воспитан, эт я про себя писал 😀