Поиск по сайту:

Вопросы и ответы на собеседовании по Java SE 8 (часть 1)


В этом посте мы собираемся обсудить некоторые важные вопросы интервью с Java SE 8 с ответами. Я напишу еще один пост, чтобы обсудить оставшиеся вопросы интервью по Java SE 8.

Вопросы для собеседования по Java 8

  1. Зачем нам снова переходить на Java?
  2. Новые возможности Java SE 8?
  3. Преимущества новых функций Java SE 8?
  4. Что такое лямбда-выражение?
  5. Из каких трех частей состоит лямбда-выражение? Каков тип лямбда-выражения?
  6. Что такое функциональный интерфейс? Что такое интерфейс SAM?
  7. Возможно ли определить наш собственный функциональный интерфейс? Что такое @ФункциональныйИнтерфейс? Каковы правила определения функционального интерфейса?
  8. Является ли @FunctionalInterface аннотацией? Зачем нужны функциональные интерфейсы в Java?
  9. Когда мы перейдем к Java 8 Stream API? Зачем нам нужно использовать Java 8 Stream API в наших проектах?
  10. Объясните разницу между Collection API и Stream API?
  11. Что такое Spliterator в Java SE 8? Различия между Iterator и Spliterator в Java SE 8?
  12. Что является необязательным в Java 8? В чем польза опционального? Преимущества Java 8 опционального?
  13. Что такое определение типа? Доступен ли вывод типов в более старых версиях, таких как Java 7 и до 7, или он доступен только в Java SE 8?

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

В этом разделе мы возьмем каждый вопрос из предыдущего раздела и ответим на него с подробным описанием. Если вам нужна дополнительная информация и примеры, просмотрите предыдущие сообщения о Java SE 8, доступные в JournalDEV.

Зачем нам снова переходить на Java?

Корпорация Oracle представила множество новых концепций в Java SE 8, чтобы обеспечить следующие преимущества:

  • Эффективное использование существующих многоядерных процессоров В последнее время мы можем наблюдать кардинальные изменения в оборудовании. В настоящее время все системы используют многоядерные процессоры (2, 4, 8, 16 ядер и т. д.) для развертывания и запуска своих приложений. Нам нужны новые программные конструкции на Java, чтобы эффективно использовать эти многоядерные процессоры для разработки приложений с высокой степенью параллельности и высокой масштабируемости. — Для использования функций FP. Корпорация Oracle представила множество концепций функционального программирования (FP) как часть Java SE 8, чтобы использовать преимущества FP.

Новые возможности Java SE 8?

  • Лямбда-выражения
  • Функциональные интерфейсы
  • API потоковой передачи
  • API даты и времени
  • Методы интерфейса по умолчанию и статические методы
  • Разделитель
  • Ссылки на методы и конструкторы
  • Усовершенствования API коллекций
  • Улучшения Concurrency Utils
  • Усовершенствования платформы Fork/Join
  • Внутренняя итерация
  • Параллельные операции с массивами и параллельными коллекциями
  • Необязательно
  • Типовые аннотации и повторяющиеся аннотации
  • Отражение параметра метода
  • Кодирование и декодирование Base64
  • Усовершенствования IO и NIO2
  • движок Nashorn JavaScript
  • Усовершенствования javac
  • Изменения JVM
  • Профили Java 8 Compact: compact1,compact2,compact3
  • JDBC 4.2
  • JAXP 1.6
  • База данных Java 10.10
  • Сеть
  • Изменения в системе безопасности

Преимущества новых функций Java SE 8?

Мы можем получить следующие преимущества от новых функций Java SE 8:

  • Более лаконичный и читаемый код
  • Больше многоразового кода
  • Более тестируемый и поддерживаемый код
  • Многоконкурентный и масштабируемый код
  • Написать параллельный код
  • Запись в базу данных как операции
  • Повышенная производительность приложений
  • Более продуктивный код

Что такое лямбда-выражение?

Лямбда-выражение — это анонимная функция, которая принимает набор входных параметров и возвращает результаты. Лямбда-выражение — это блок кода без имени, с параметрами или без них, с результатами или без них. Этот блок кода выполняется по требованию.

Из каких трех частей состоит лямбда-выражение? Что такое тип лямбда-выражения?

Лямбда-выражение состоит из 3 частей:

  • Список параметров Лямбда-выражение может содержать ноль или один или несколько параметров. Это необязательно.- Оператор лямбда-стрелки \-> известен как оператор лямбда-стрелки. Он разделяет список параметров и тело.- Тело лямбда-выражения

Тип «Journal Dev» — java.lang.String. Тип «true» — логический. Точно так же, каков тип лямбда-выражения? Тип лямбда-выражения — это функциональный интерфейс. Пример: - Каков тип следующего лямбда-выражения?

   () -> System.out.println("Hello World");

Это лямбда-выражение не имеет параметров и возвращает какие-либо результаты. Таким образом, это функциональный интерфейс \java.lang.Runnable.

Что такое функциональный интерфейс? Что такое SAM-интерфейс?

Функциональный интерфейс — это интерфейс, который содержит один и только один абстрактный метод. Функциональный интерфейс также известен как интерфейс SAM, потому что он содержит только один абстрактный метод. Интерфейс SAM расшифровывается как Single Abstract Method Interface. Java SE 8 API определил множество функциональных интерфейсов.

Можно ли определить наш собственный функциональный интерфейс? Что такое @ФункциональныйИнтерфейс? Каковы правила определения функционального интерфейса?

Да, можно определить наши собственные функциональные интерфейсы. Мы используем аннотацию Java SE 8 @FunctionalInterface, чтобы пометить интерфейс как функциональный интерфейс. Нам нужно следовать этим правилам, чтобы определить функциональный интерфейс:

  • Определите интерфейс с одним и только одним абстрактным методом.
  • Мы не можем определить более одного абстрактного метода.
  • Используйте аннотацию @FunctionalInterface в определении интерфейса.
  • Мы можем определить любое количество других методов, таких как методы по умолчанию, статические методы.
  • Если мы переопределим метод класса java.lang.Object как абстрактный метод, который не считается абстрактным методом.

Является ли аннотация @FunctionalInterface обязательной для определения функционального интерфейса? Какая польза от аннотации @FunctionalInterface? Зачем нам нужны функциональные интерфейсы в Java?

Не обязательно определять функциональный интерфейс с аннотацией @FunctionalInterface. Если мы не хотим, мы можем опустить эту аннотацию. Однако, если мы используем его в определении функционального интерфейса, компилятор Java заставляет использовать один и только один абстрактный метод внутри этого интерфейса. Зачем нужны функциональные интерфейсы? Тип лямбда-выражения Java SE 8 — это функциональный интерфейс. Где бы мы ни использовали лямбда-выражения, это означает, что мы используем функциональные интерфейсы.

Когда мы перейдем к Java 8 Stream API? Зачем нам нужно использовать Java 8 Stream API в наших проектах?

Когда наш Java-проект хочет выполнить следующие операции, лучше использовать Java 8 Stream API, чтобы получить множество преимуществ:

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

Объясните разницу между Collection API и Stream API?

S.No. Collection API Stream API
1. It’s available since Java 1.2 It is introduced in Java SE 8
2. It is used to store Data (A set of Objects). It is used to compute data (Computation on a set of Objects).
3. We can use both Spliterator and Iterator to iterate elements. We can use forEach to performs an action for each element of this stream. We can’t use Spliterator or Iterator to iterate elements.
4. It is used to store unlimited number of elements. Stream API is used to process on the elements of a Collection.
5. Typically, it uses External Iteration concept to iterate Elements such as Iterator. Stream API uses internal iteration to iterate Elements, using forEach methods.
6. Collection Object is constructed Eagerly. Stream Object is constructed Lazily.
7. We add elements to Collection object only after it is computed completely. We can add elements to Stream Object without any prior computation. That means Stream objects are computed on-demand.
8. We can iterate and consume elements from a Collection Object at any number of times. We can iterate and consume elements from a Stream Object only once.

Что такое Spliterator в Java SE 8? Различия между Iterator и Spliterator в Java SE 8?

Spliterator означает Splitable Iterator. Он недавно представлен корпорацией Oracle как часть Java SE 8. Подобно Iterator и ListIterator, он также является одним из интерфейсов Iterator.

S.No. Spliterator Iterator
1. It is introduced in Java SE 8. It is available since Java 1.2.
2. Splitable Iterator Non-Splitable Iterator
3. It is used in Stream API. It is used for Collection API.
4. It uses Internal Iteration concept to iterate Streams. It uses External Iteration concept to iterate Collections.
5. We can use Spliterator to iterate Streams in Parallel and Sequential order. We can use Iterator to iterate Collections only in Sequential order.
6. We can get Spliterator by calling spliterator() method on Stream Object. We can get Iterator by calling iterator() method on Collection Object.
7. Important Method: tryAdvance() Important Methods: next(), hasNext()

Что необязательно в Java 8? В чем польза опционального? Преимущества Java 8 опционального?

Необязательный: Необязательный — это последний класс, представленный как часть Java SE 8. Он определен в пакете java.util. Он используется для представления необязательных значений, которые либо существуют, либо не существуют. Он может содержать либо одно значение, либо нулевое значение. Если он содержит значение, мы можем его получить. В противном случае мы ничего не получим. Это ограниченная коллекция, которая содержит не более одного элемента. Это альтернатива значению \null. Основным преимуществом опционального значения является:

  • Он используется, чтобы избежать проверок на null.
  • Используется, чтобы избежать \NullPointerException.

Что такое вывод типа? Доступен ли вывод типа в более старых версиях, таких как Java 7 и до 7, или он доступен только в Java SE 8?

Вывод типа означает определение типа компилятором во время компиляции. Это не новая функция в Java SE 8. Она доступна в Java 7 и до Java 7. До Java 7: Давайте рассмотрим массивы Java. Определите строку массива со значениями, как показано ниже:

String str[] = { "Java 7", "Java 8", "Java 9" };

Здесь мы присвоили несколько строковых значений с правой стороны, но не определили их тип. Компилятор Java автоматически определяет его тип и создает строку массива. Java 7: Корпорация Oracle представила новую функцию «Diamond Operator» в Java SE 7, чтобы избежать ненужного определения типа в Generics.

Map<String,List<Customer>> customerInfoByCity = new HashMap<>();

Здесь мы не определяли информацию о типе справа, а просто определяли оператор Diamond в Java SE 7. Java SE 8: Oracle Corporation значительно расширила эту концепцию вывода типов в Java SE 8. Мы используем эту концепцию для определения лямбда-выражений, функций, ссылок на методы и т. д.

ToIntBiFunction<Integer,Integer> add = (a,b) -> a + b;

Здесь компилятор Java наблюдает за определением типа, доступным слева, и определяет тип параметров лямбда-выражения a и b как целые числа. Это все, что касается вопросов для собеседования по Java 8. Я обсудил некоторые вопросы для интервью по Java SE 8 в этом посте и рассмотрю еще несколько вопросов для интервью по Java SE 8 в следующих постах. Пожалуйста, напишите мне комментарий, если вам нравится мой пост или у вас есть какие-либо вопросы/предложения.