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

Вот список наиболее часто задаваемых вопросов на собеседовании по Java 8.

1) Какие новые функции появились в Java 8?

В Java 8 было добавлено множество новых функций. Вот список важных функций:

2) Каковы основные преимущества использования Java 8?

  • Более компактный код
  • Меньше кода плиты котла
  • Более читаемый и повторно используемый код
  • Более тестируемый код
  • Параллельные операции

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

Лямбда-выражение - это анонимная функция, которая имеет набор параметров, лямбда-выражение (- ›) и тело функции. Вы можете вызвать его для работы без имени.

Структура лямбда-выражений

Давайте посмотрим на простой пример выполнения потока:

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

4) Можете ли вы объяснить синтаксис лямбда-выражения?

Итак, мы можем разделить структуру лямбда-выражения на три части:

1. Список аргументов или параметры

Лямбда-выражение может иметь ноль или более аргументов.

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

вы не можете объявить тип одного аргумента и не объявить тип для других аргументов.

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

2. Токен массива (- ›)

3. Тело

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

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

Функциональные интерфейсы - это те интерфейсы, которые могут иметь только один абстрактный метод. Он может иметь статический метод, методы по умолчанию или может переопределять методы класса Object.

В Java уже присутствует множество функциональных интерфейсов, таких как Comparable, Runnable.

Поскольку у нас есть только один метод в Runnable, он считается функциональным интерфейсом.

Подробнее о функциональном интерфейсе можно прочитать.

6) Как связаны лямбда-выражение и функциональные интерфейсы?

Лямбда-выражения могут применяться только к абстрактному методу функционального интерфейса.
Например

Runnable имеет только один абстрактный метод, называемый run, поэтому его можно использовать, как показано ниже:

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

7) Можете ли вы создать свой собственный функциональный интерфейс?

Да, вы можете создать свой собственный функциональный интерфейс. Java может неявно идентифицировать функциональный интерфейс, но вы также можете аннотировать его с помощью @FunctionalInterface.
Пример:
Создайте интерфейс с именем «Printable”, как показано ниже.

Создайте основной класс с именем «FunctionalIntefaceMain”.

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

Как видите, поскольку Printable имеет только один абстрактный метод, называемый print (), мы смогли вызвать его с помощью лямбда-выражения.

8) Что такое ссылка на метод в java 8?

Ссылка на метод используется для ссылки на метод функционального интерфейса. Это не что иное, как компактный способ лямбда-выражения. Вы можете просто заменить лямбда-выражение ссылкой на метод.
Синтаксис:
class :: methodname

9) Что необязательно? Зачем и как это можно использовать?

В Java 8 появился новый класс, называемый Optional. Этот класс в основном введен, чтобы избежать исключения NullPointerException в Java.
Необязательный класс инкапсулирует необязательное значение, которое либо присутствует, либо нет.
Это оболочка вокруг объекта, которую можно использовать, чтобы избежать исключений NullPointerException.
Возьмем простой пример

Вы написали ниже функцию для получения первого неповторяющегося символа в строке.

Вы вызываете вышеуказанный метод, как показано ниже.

Видите ли вы проблему, нет неповторяющегося символа для getNonRepeatedCharacter («SASAS»), поэтому он вернет null, и мы вызываем c.toString, поэтому он, очевидно, выдаст исключение NullPointerException.
Вы можете использовать Optional, чтобы избежать this NullPointerException.
Давайте изменим метод, чтобы он возвращал необязательный объект, а не String.

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

Если в Optional нет значения, он просто напечатает «В строке не найдено неповторяющихся символов».

10) Каковы методы по умолчанию?

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

11) В чем разница между предикатом и функцией?

Оба являются функциональными интерфейсами.
Predicate ‹T› - это функция с одним аргументом, которая либо возвращает true, либо false. Его можно использовать в качестве цели назначения для лямбда-выражения или ссылки на метод.

Функция ‹T, R› также является функцией с одним аргументом, но возвращает объект. Здесь T обозначает тип ввода в функцию, а R обозначает тип результата.

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

12) Известно ли вам об API даты и времени, представленном в Java 8? Какие проблемы со старым API даты и времени?

Проблемы со старым API Date и TIme:

Безопасность потоков. Возможно, вы уже знаете, что java.util. date является изменяемым и не ориентированным на многопоточность. Даже java.text.SimpleDateFormat также не является потокобезопасным. Новые API даты и времени Java 8 ориентированы на многопотоковое исполнение.

Производительность. Новые API-интерфейсы Java 8 по производительности лучше старых API-интерфейсов Java.

Более читабельный. Старые API, такие как Calendar и Date, плохо спроектированы и трудны для понимания. API даты и времени Java 8 просты для понимания и соответствуют стандартам ISO.

13) Можете ли вы предоставить некоторые API Java 8 Date и TIme?

LocalDate, LocalTime и LocalDateTime - это классы Core API для Java 8. Как следует из названия, эти классы являются локальными по отношению к контексту наблюдатель. Он обозначает текущую дату и время в контексте Observer.

14) Как вы получите текущую дату и время, используя Java 8 Date and Time API?

Вы можете просто использовать метод now для LocalDate, чтобы получить сегодняшнюю дату.

Это даст вам результат в следующем формате:

Вы можете использовать метод now LocalTime, чтобы получить текущее время.

Это даст вам результат в следующем формате:

15) Есть ли у нас PermGen в Java 8? Вы знаете о MetaSpace?

До Java 7 JVM использовала область PermGen для хранения классов. Он был удален в Java 8 и заменен на MetaSpace.
Основное преимущество MetaSpace перед permgen:
PermGen был зафиксирован в плане максимального размера и не может расти динамически, но Metaspace может расти динамически и не иметь никакого размера ограничение.

Первоначально опубликовано на https://java2blog.com 10 сентября 2017 г.