JavaRush /Java Blog /Random-TK /Java dörediji üçin geçirilen söhbetdeşliklerden soraglary...

Java dörediji üçin geçirilen söhbetdeşliklerden soraglaryň we jogaplaryň derňewi. 8-nji bölüm

Toparda çap edildi
Amaly ýa-da teoriýa? Has möhümi näme? Köpler, elbetde, tejribe has möhümdir diýerler. Halaýan, mümkin boldugyça köp amal ediň we bagtly bolarsyňyz. Men bu pikir bilen ylalaşmaga het edip bilýärin. Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 8 - 1Söhbetdeşlikler wagtynda, iş ýüzünde näderejede gowydygyňyzy hiç kim bilmez. Sizden doly nazaryýet boýunça soralar. Diňe şondan soň, ähli söhbetdeşliklerden geçip, taslama gireniňizde, amaly endikleriňizi ulanarsyňyz. Garşy çykyp bilersiňiz: käwagt size synag tabşyrýarlar we tejribe henizem zerur. Jedel etmeýärin, käwagt berilýär, ýöne hakykat, KÖPGÜNLER, ýöne hemişe teoretiki söhbetdeşlik bolýar. Tapawudyny duýýarsyňyzmy? Şonuň üçin aýagyňyzyň aşagynda berk teoretiki esas bolmaly, bu günem dowam etdireris. .Agny, söhbetdeşlik wagtynda köplenç berilýän soraglary derňemegi dowam etdireris .

71. Enum üçin toString () usulyny ýok etmesek näme bolar?

Aşakdaky sanumyz bar diýeliň :
public enum Role {
   STUDENT,
   TEACHER,
   DIRECTOR,
   SECURITY_GUARD;
}
Geliň, oňaString () jaň edip, okuwçyny konsolda görkezeliň :
System.out.println(Role.STUDENT.toString());
Konsolda netije:
Okuwçy
Defaultagny, adaty ýagdaýda toString () hemişelik üçin ady.

72. Enumyň içinde konstruktor görkezmek mümkinmi?

Hawa, elbetde. Hut konstruktoryň üsti bilen içerki san üýtgeýjileriniň bahalary kesgitlenýär. Mysal hökmünde, her bir rol üçin ýaş aralygyny görkezmek üçin , öňki sanama iki meýdan goşalyň - ageFrom we ageTo :
public enum Role {
   STUDENT(5,18),
   TEACHER(20,60),
   DIRECTOR(40,70),
   SECURITY_GUARD(18,50);

   int ageFrom;
   int ageTo;

   Role(int ageFrom, int ageTo) {
       this.ageFrom = ageFrom;
       this.ageTo = ageTo;
   }
}

73. == bilen deňdir () arasynda näme tapawut bar?

Это один из самых распространенных вопросов на собеседованиях на Java-разработчика. Начнём с того, что когда мы сравниваем простые значения (int, char, double…), мы делаем это через ==, так How переменные содержат конкретные значения и мы их можем сравнить. Да и примитивные переменные не являются полноценными an objectми — не наследуются от Object и не имеют метод equals(). Когда мы говорим о сравнении переменных, которые ссылаются на an objectы, то == будет сравнивать лишь meaning ссылок — на тот же an object они ссылаются or нет. И даже если один an object будет идентичен другому, сравнение через == даст отрицательный результат (false), ведь это другой an object. Как вы поняли, для сравнения ссылочных переменных используется метод equals(). Это один из стандартных методов класса Object, который нужен для полноценного сравнения an objectов. Но сразу стоит уточнить: для правильной работы этого метода его нужно переопределить, написав, How именно должны сравниваться an objectы данного класса. Если вы не переопределите метод, по умолчанию он будет сравнивать an objectы по ==. В IntelliJ IDEA можно переопределять его автоматически (средствами IDEA) —> alt + insert, в появившемся окошке выбираем equals() and hashCode() —> выбираем, Howие поля класса должны участвовать —> и вуаля, автоматическая имплементация методов выполнена. Вот пример того, How будет выглядеть автоматически сгенерированный метод equals для простейшего класса Cat с двумя полями — int age и String name:
@Override
public boolean equals(final Object o) {
   if (this == o) return true;
   if (o == null || this.getClass() != o.getClass()) return false;
   final Cat cat = (Cat) o;
   return this.age == cat.age &&
           Objects.equals(this.name, cat.name);
}
Если говорить о разнице == и equals для enum-ов, её особо и нет.Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 8 - 2Ведь enum хранит константы, и даже сравнивая через == аналогичные значения, мы будем получать true, так How ссылки будут всегда на одни и те же an objectы. Ну и при использовании equals у нас также будет правильно отрабатывать функционал, тем более если вы зайдёт в тело метода equals для enum-а, увидите, что в классе Enum реализация метода следующая:Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 8 - 3То есть внутри — старое доброе сравнение по linkм! Подводя итог: для enum сравнение и через ==, и через equals корректное.Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 8 - 4

74. What делает метод ordinal() в Enum?

При вызове метода int ordinal() на элементе enum-а мы получим порядковый номер с нуля этого значения в общем ряде перечислений. Давайте используем данный метод на одном элементе из предыдущего рассмотренного enum-а — Role:
System.out.println(Role.DIRECTOR.ordinal());
Соответственно, в консоли выведется:
2

75. Можно ли использовать Enum c TreeSet or TreeMap в Java?

Использование enum типов в TreeSet и TreeMap допустимо. И мы можем написать:
TreeSet<Role> treeSet = new TreeSet<>();
treeSet.add(Role.SECURITY_GUARD);
treeSet.add(Role.DIRECTOR);
treeSet.add(Role.TEACHER);
treeSet.add(Role.STUDENT);
treeSet.forEach(System.out::println);
И в консоли будет выведено:
STUDENT TEACHER DIRECTOR SECURITY_GUARD
Мы получor вывод не по алфавиту. Дело в том, что если мы используем элементы enum-а для значений TreeSet or How ключи для TreeMap, элементы сортируются по их естественному порядку (по порядку, в котором они и заданы в enum). Понимание этих особенностей помогает нам писать code качественнее.Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 8 - 5

76. Как связаны методы ordinal() и compareTo() в Enum?

Как было сказано ранее, ordinal() возвращает порядковый номер значения в общем списке перечислений. Также в разборе предыдущего вопроса вы увидели, что элементы перечислений, попав, например, в TreeSet (отсортированное множество) принимают порядок, в котором они объявлены в enum. И How мы знаем, TreeSet и TreeMap сортируют элементы посредством вызова у них метода compareTo() интерфейса Comparable. Из этого можно сделать предположение, что класс Enum имплементирует интерфейс Comparable, реализуя его в метод compareTo(), внутри которого и используется ordinal() для задания порядка сортировки. Зайдя в класс Enum, мы видим подтверждение этого:Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 8 - 6И тело самого метода:Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 8 - 7Метод ordinal() тут не вызывается. Вместо этого используется переменная ordinal — порядковый номер element в перечислении. Сам же метод ordinal()Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 8 - 8— не более чем геттер для переменной ordinal.

77. Напишите пример EnumM

В вопросах рассмотренных выше я уже приводил примеры enum-ов и не вижу смысла дублировать code (например, вопрос номер 72 про конструктор в enum).

78. Можно ли использовать Enum в switch case?

Можно и нужно! Оглядываясь на свою практику, отмечу, что одним из наиболее частых мест применения enum являются логические конструкции типа switch. В таком случае вы можете предусмотреть все возможные вариации case, и после прописания логики для всех значений enum-а использование оператора default может даже не понадобиться! Ведь если вы используете String or числовое meaning, например, типа int, вам может прийти не предусмотренное meaning, что в свою очередь невозможно с использованием enum-а. Как бы выглядел switch для рассмотренного ранее примера:
public void doSomething(Role role) {
   switch (role) {
       case STUDENT:
           // некая логика для STUDENT
           break;
       case TEACHER:
           // некая логика для TEACHER
           break;
       case DIRECTOR:
           // некая логика для DIRECTOR
           break;
       case SECURITY_GUARD:
           // некая логика для SECURITY_GUARD
           break;
   }
}

79. Как получить все имеющиеся значения в экземпляре Enum?

Если нужно получить все экземпляры перечисления, есть метод values(), который возвращает массив всех доступных значений определенного enum-а в естественно порядке (в порядке задания в enum). Пример:
Role[] roles = Role.values();
for (Role role : roles) {
   System.out.println(role);
}
В консоли будет вывод:
STUDENT TEACHER DIRECTOR SECURITY_GUARD

Stream API

80.What такое Stream в Java?

Java Stream — относительно новый способ взаимодействия с потоком данных, который в свою очередь позволяет более удобно и компактно обрабатывать большие данные, а также распараллеливать обработку данных между Howим-то количеством потоков, что может дать прирост в производительности в использующем функционале. Более глубоко данную тему в двух словах не рассказать, поэтому я оставлю здесь ссылку на статью, которая вам может погрузиться в данную тему.Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 8 - 9

81. Назовите основные свойства транзакций

Тема называется — Stream API, но при этом вопрос по транзакции. Хмм… Для начала давайте разберемся, что такое транзакция. Транзакция — это группа последовательных операций с базой данных, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена либо целиком и успешно, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще, и тогда она не оказывает ниHowого эффекта. Итак, у транзакций есть четыре основные свойства, которые сокращенно называют ACID. Давайте разберем, How расшифровывается каждая буква данного сокращения: A — Atomicity — атомарность — данное свойство гарантирует, что ниHowая транзакция не будет зафиксирована в системе частично. Будут либо выполнены все её подоперации, либо не выполнено ни одной (всё либо ничего). С — Consistency — согласованность — свойство, гарантирующее, что каждая успешная транзакция зафиксирует только допустимые результаты. То есть, это гарантия того, что при успешной транзакции будут выполнены все правила, ограничения которые предъявляет система к конкретным данным, иначе транзакция не будет выполнена и данные в системе вернутся к прежнему состоянию. I — Isolation — изолированность — свойство, которое говорит о том, что во время выполнения транзакции параллельные транзакции не должны оказывать влияния на ее результат. Это свойство ресурсозатратно, поэтому How правило оно выполняется частично, допуская определенные уровни изоляций, которые решают определенные изоляционные проблемы. Подробнее мы это обсудим в следующем вопросе.Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 8 - 10D — Durability — стойкость — данное свойство гарантирует, что если пользователь получил подтверждение от системы, что транзакция выполнена, он может быть уверен, что сделанные им изменения не отменятся из-за Howого-либо сбоя. То есть, вы можете быть уверены, что Howой-нибудь сбой операционной системы ничего не сделает с вашими данными, если вы уже получor подтверждение успешного выполнения вашей транзакции.

82. Какие есть уровни изоляции транзакций?

Как я сказал ранее, обеспечение пункта ACID изолированности — ресурсозатратный процесс. Поэтому, это свойство выполняется частично. Есть различные уровни изолированности, и чем этот уровень выше, тем это более сильный удар по производительности. Перед тем How перейти к уровням изоляций транзакций, нам нужно рассмотреть различные проблемы недостаточной изолированности транзакций:
  • фантомное чтение — при повторном вызове одной и той же выборки (одного и того же requestа) в рамках одной транзакции полученные данные различаются, что происходит из-за вставок данных другой транзакцией;

  • неповторяющееся чтение — при повторном вызове одной и той же выборки (одного и того же requestа) в рамках одной транзакции полученные данные различаются, что происходит из-за изменений (update) и удалений данных другой транзакцией;

  • грязное чтение — процесс чтения данных, добавленных or измененных транзакцией, которая впоследствии не подтвердится (откатится), т.е. чтение недействительных данных;

  • потерянное обновление — при одновременном изменении одних и тех же данных разными транзакциями теряются все изменения, кроме последнего (напоминает проблему “состояние гонки” в многопоточной среде).

Уровни изоляций транзакций How раз и характерезуются тем, от Howих проблем изолированности они защищают. Рассмотрим в виде таблицы уровни изоляций и то, от Howих проблем они защищают:
Уровень изоляции Фантомное чтение Неповторяющееся чтение Грязное чтение Потерянное обновление
SERIALIZABLE + + + +
REPEATABLE READ - + + +
READ COMMITTED - - + +
READ UNCOMMITTED - - - +
NONE - - - -
И не забывайте обратную сторону медали: чем больший будет уровень изоляции, тем дольше будут отрабатывать транзакции (при параллельном выполнении нескольких транзакций). Если возникло желание поглубже копнуть эту тему, вот отличная статья, с которой можно начать.

83. Какая разница между Statement и PreparedStatement?

И тут не сильно плавный переход на особенности технологии JDBC. Итак, для начала давайте разберемся, что вообще такое Statement. Это an object, который используется для формирования SQL requestов. В JDBC используется три его вида — Statement, PreparedStatement и CallableStatement. CallableStatement мы сегодня рассматривать не будем: поговорим о различии между Statement и PreparedStatement.
  1. Statement используется для выполнения простых SQL requestов без входящих, динамически вставляемых параметров. PrepareStatement используется с возможностью динамической вставки входных параметров.

  2. Для задания параметров в PreparedStatement входные параметры в requestе прописываются How знаки вопроса, чтобы instead of них потом вставить некоторое meaning с помощью различных сеттеров, таких How setDouble(), setFloat(), setInt(), setTime()…. В итоге вы не вставите в request данные не того типа.

  3. PreparedStatement “прекомпorрован” и использует кеширование, поэтому его исполнение может происходить немного быстрее, чем request из an objectов Statement. В результате SQL requestы, которые исполняются часто, в целях улучшения производительности создают в виде an objectов PreparedStatement.

  4. Statement уязвим к SQL инъекциям, в то время How PreparedStatement предотвращает их. Подробнее об устранении SQL инъекций и других best practices в безопасности Java читайте в этой статье.

Если вы положor начало в изучении технологии соединения Java applications с Базой Данных — JDBC, советую начать с этой статьи. What ж, на данном моменте мы сегодня и сделаем остановку.Разбор вопросов и ответов с собеседований на Java-разработчика. Часть 8 - 11
Другие материалы серии:
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION