Автор оригинала: Pankaj Kumar.
В моем предыдущем посте я обсудил некоторые важные вопросы и ответы на интервью Java SE 8. В этом посте мы обсудим еще несколько вопросов и ответов для интервью Java SE 8.
Прежде чем прочитать этот пост, пожалуйста, просмотрите мой предыдущий пост по адресу: “Вопросы для интервью Java SE 8 (Часть 1) “.
Вопросы для интервью Java SE 8
- Что такое внутренняя итерация в Java SE 8?
- Различия между Внешней итерацией и Внутренней итерацией?
- Каковы основные недостатки внешней итерации?
- Каковы основные преимущества внутренней итерации перед внешней итерацией?
- В чем основной недостаток внутренней итерации по сравнению с внешней итерацией?
- В чем основное преимущество внешней итерации перед Внутренней итерацией?
- Когда нам нужно использовать внутреннюю итерацию? Когда нам нужно использовать внешнюю итерацию?
- Различия между промежуточными операциями и терминальными операциями потокового API Java 8?
- Можно ли обеспечить реализацию методов в интерфейсах Java? Если возможно, как мы их предоставляем?
- Что такое метод по умолчанию? Зачем нам нужны методы по умолчанию в интерфейсах Java 8?
- Что такое статический метод? Зачем нам нужны статические методы в интерфейсах Java 8?
- Различия между функциональным программированием и объектно-ориентированным программированием?
- Объясните проблемы старого API даты Java? Каковы преимущества API даты и времени Java 8 по сравнению со старым API даты и API времени Joda?
- Зачем нам нужен новый API даты и времени в Java SE 8?Объясните, как API данных и времени Java SE 8 решает проблемы старого API даты Java?
- В чем различия между СТАРЫМ API даты Java Java и API даты и времени Java 8?
- Что такое множественное наследование? Как Java 8 поддерживает множественное наследование?
- В чем проблема с алмазами в интерфейсах из-за методов по умолчанию? Как Java 8 Решает эту проблему?
Java SE 8 Вопросы и ответы для интервью
Что такое внутренняя итерация в Java SE 8?
До Java 8 у нас не было концепции внутренней итерации. В Java 8 появилась новая функция, известная как “Внутренняя итерация”. До Java 8 Язык Java имел только внешнюю итерацию для повторения элементов агрегированного объекта, таких как Коллекции, массивы и т.д.
Внутренняя итерация означает “Повторение агрегированных элементов объекта один за другим внутри с помощью Java API”. Вместо того, чтобы Java-приложение выполняло итерацию извне, мы просим Java API выполнить эту работу внутри.
Различия между Внешней итерацией и Внутренней итерацией?
1.0 | Доступно и до Java 8. | Он представлен в Java SE 8 |
2.0 | Повторение агрегированных элементов объекта извне. | Внутренняя итерация агрегированных элементов объекта (фон). |
3.0 | Повторяйте элементы, используя для каждого цикла и итераторы, такие как перечисление, Итератор, список. | Повторяйте элементы с помощью Java API, например, методом “forEach”. |
4.0 | Повторение элементов только последовательно и по порядку. | Не требуется повторять элементы в последовательном порядке. |
5.0 | Он следует подходу ООП, который является императивным стилем. | Он следует подходу функционального программирования, который является декларативным стилем. |
6.0 | Он НЕ разделяет должным образом обязанности, то есть определяет как “Что должно быть сделано”, так и “Как это должно быть сделано”. | Он определяет только “То, что должно быть сделано”. Не нужно беспокоиться о том, “Как это должно быть сделано”. Java API заботится о том, “Как это сделать”. |
7.0 | Менее Читаемый Код. | Более читаемый код. |
Каковы основные недостатки внешней итерации?
Внешняя итерация имеет следующие недостатки:
- Нам нужно писать код в императивном стиле.
- Четкого разделения обязанностей не существует. Тесная связь между кодом “Что должно быть сделано” и “Как это должно быть сделано”.
- Менее Читаемый Код.
- Более подробный и шаблонный код.
- Мы должны повторять элементы только в последовательном порядке.
- Мы должны повторять элементы только в последовательном порядке.
Каковы основные преимущества внутренней итерации перед внешней итерацией?
По сравнению с внешней итерацией Внутренняя итерация имеет следующие преимущества:
- Поскольку это соответствует функциональному стилю программирования, мы можем писать Декларативный код.
- Более читаемый и лаконичный код.
- Избегает написания подробного и шаблонного кода
- Нет необходимости повторять элементы в последовательном порядке.
- Он поддерживает параллелизм и параллелизм должным образом.
- Мы можем писать параллельный код для повышения производительности приложения.
- Четкое разделение обязанностей. Слабая связь между кодом “Что должно быть сделано” и “Как это должно быть сделано”.
- Нам нужно писать код только о том, “Что нужно сделать”, а Java API заботится о том, “Как это должно быть сделано”.
В чем основной недостаток внутренней итерации по сравнению с внешней итерацией?
По сравнению с внешней итерацией, внутренняя итерация имеет один существенный недостаток:
- Во внутренней итерации, поскольку Java API заботится о внутренней итерации элементов, у нас НЕТ контроля над итерацией.
В чем основное преимущество внешней итерации перед Внутренней итерацией?
По сравнению с внутренней итерацией, Внешняя итерация имеет одно важное преимущество:
- Во внешней итерации, поскольку Java API НЕ заботится об итерационных элементах, у нас есть большой контроль над итерацией.
Когда нам нужно использовать внутреннюю итерацию? Когда нам нужно использовать внешнюю итерацию?
Нам нужно понять ситуации, в которых следует использовать либо Внутреннюю итерацию, либо Внешнюю итерацию.
- Когда нам нужно больше контроля над итерацией, мы можем использовать внешнюю итерацию.
- Когда нам не нужно больше контролировать итерацию, мы можем использовать Внутреннюю итерацию.
- Когда нам нужно разрабатывать приложения с высокой степенью параллелизма и параллельные приложения , и мы, мы должны использовать внутреннюю итерацию.
Различия между промежуточными операциями и терминальными операциями потокового API Java 8?
1.0 | Операции терминала потока оцениваются самостоятельно. Не нужна помощь в других операциях. | Промежуточные операции потока не оцениваются до тех пор, пока мы не свяжем их с операцией терминала потока. |
2.0 | Вывод Промежуточных операций не является потоком. Что-то еще, кроме Ручья. | Вывод промежуточных операций-это другой поток. |
3.0 | Терминальные операции оцениваются с энтузиазмом. | Промежуточные операции оцениваются лениво. |
4.0 | Мы НЕ можем связывать потоковые Терминальные операции. | Мы можем связать в цепочку любое количество промежуточных операций потока. |
5.0 | Мы можем использовать только одну операцию терминала потока для каждого оператора. | Мы можем использовать любое количество промежуточных операций потока для каждой инструкции. |
Можно ли обеспечить реализацию методов в интерфейсах Java? Если возможно, как мы их предоставляем?
В Java 7 или более ранних версиях невозможно обеспечить реализацию методов в интерфейсах. Java 8 и далее, это возможно.
В Java SE 8 мы можем предоставить реализации методов в интерфейсах, используя следующие две новые концепции:
- Методы по умолчанию
- Статические методы
Что такое метод по умолчанию? Зачем нам нужны методы по умолчанию в интерфейсах Java 8?
Метод по умолчанию-это метод, который реализован в интерфейсе с ключевым словом “по умолчанию”. Это новая функция, представленная в Java SE 8.
Нам нужны методы по умолчанию по следующим причинам:
- Это позволяет нам обеспечить реализацию метода в интерфейсах.
- Чтобы добавить новую функциональность в Интерфейс, не нарушая классы, реализующие этот интерфейс.
- Чтобы обеспечить элегантную Функцию Обратной совместимости.
- Для удобства расширения существующей функциональности.
- Для удобства обслуживания существующей функциональности.
Что такое статический метод? Зачем нам нужны статические методы в интерфейсах Java 8?
Статический метод-это служебный метод или вспомогательный метод, который связан с классом (или интерфейсом). Он не связан ни с каким объектом.
Нам нужны статические методы по следующим причинам:
- Мы можем сохранить вспомогательные или служебные методы, специфичные для интерфейса, в том же интерфейсе, а не в отдельном служебном классе.
- Нам не нужны отдельные служебные классы, такие как Коллекции, массивы и т.д., Чтобы сохранить служебные методы.
- Четкое разделение обязанностей. То есть нам не нужен один служебный класс, чтобы сохранить все служебные методы API сбора, такие как Коллекции и т. Д.
- Легко расширить API.
- Простота в обслуживании API.
Различия между функциональным программированием и объектно-ориентированным программированием?
Существует Состояние | Не существует состояния |
Использует изменяемые данные | Использует неизменяемые данные |
Это следует модели Императивного программирования | Он следует Декларативной модели программирования |
Модель программирования с отслеживанием состояния | Модель программирования без сохранения состояния |
Основное внимание уделяется “Как у вас дела” | Основное внимание уделяется: “Что вы делаете” |
Плохо подходит для параллельного (параллельного) программирования | Хорошо подходит для параллельного (параллельного) программирования |
НЕ подходит для обработки и анализа больших данных | Подходит для обработки и анализа больших данных |
Это нарушает концепцию инкапсуляции | Поддерживает чистую инкапсуляцию |
Методы с побочными эффектами | Функции без побочных эффектов |
Объекты являются первоклассными гражданами | Функции являются гражданами первого класса |
Основной единицей манипулирования являются Объекты(Экземпляры классов). | Основным блоком манипуляции является “Функция” |
Управление Потоком: Циклы, Условные операторы | Управление потоком: Вызовы функций, Вызовы функций с рекурсией |
Он использует концепцию “Цикла” для повторения данных сбора. Например:-Для-каждого цикла в Java | Он использует концепцию “рекурсии” для повторения данных сбора. |
Порядок исполнения является обязательным и очень важным. | Порядок исполнения имеет меньшее значение. |
Поддерживает только “Абстракцию над данными”. | Поддерживает как “Абстракцию над данными”, так и “Абстракцию над поведением”. |
Мы используем ООП, когда у нас мало операций с большим количеством вещей. Например: Вещи-это классы, а операции-методы в Java. | Мы используем FP, когда у нас мало вещей с большим количеством операций. |
ПРИМЕЧАНИЕ:- Для получения дополнительной информации о сравнениях FP, IP и ООП, пожалуйста, просмотрите мой предыдущий пост по адресу: “Сравните FP, ООП(IP) “
Объясните проблемы старого API даты Java? Каковы преимущества API даты и времени Java 8 по сравнению со старым API даты и API времени Joda?
СТАРЫЙ Java API даты Java означает API данных, доступный до Java SE 8, то есть Дата, календарь, SimpleDateFormat и т.д.
API старой даты Java имеет следующие проблемы или недостатки по сравнению с API даты и времени Java 8 и API времени Joda.
- Большая часть API устарела.
- Меньшая Читабельность.
- java.util.Дата изменчива и небезопасна для потоков.
- java.text.SimpleDateFormat не является потокобезопасным.
- Меньшая Производительность.
API даты и времени Java SE 8 имеет следующие преимущества по сравнению со старым API даты Java.
- Очень прост в использовании.
- Удобочитаемый синтаксис, который обеспечивает Большую Читабельность.
- Весь API является потокобезопасным.
- Лучшая производительность.
Зачем нам нужен новый API даты и времени в Java SE 8?Объясните, как API данных и времени Java SE 8 решает проблемы старого API даты Java?
Нам нужен API даты и времени Java 8 для разработки высокопроизводительных, Потокобезопасных и масштабируемых Java-приложений.
API даты и времени Java 8 решает все старые проблемы API даты Java, следуя принципам неизменяемости и потокобезопасности.
В чем различия между СТАРЫМ API даты Java Java и API даты и времени Java 8?
Различия между СТАРЫМ API даты Java Java и API даты и времени Java 8:
1.0 | Доступно и до Java 8. | Он представлен в Java SE 8 |
2.0 | Не Потокобезопасно. | Потокобезопасно. |
3.0 | Изменяемый API. | Неизменяемый API. |
4.0 | Меньшая Производительность. | Лучшая производительность. |
5.0 | Меньшая Читабельность. | Большая Читабельность. |
6.0 | Его не рекомендуется использовать, так как он устарел. | Его всегда рекомендуется использовать. |
7.0 | Не Поддается Расширению. | Легко расширяется. |
8.0 | Он определяет значения месяцев от 0 до 11, то есть. | Он определяет значения месяцев от 1 до 12, то есть. |
9.0 | Это старый API. | Это новый API. |
Что такое множественное наследование? Как Java 8 поддерживает множественное наследование?
Множественное наследование означает, что класс может наследовать или расширять характеристики и функции более чем от одного родительского класса.
В Java 7 или более ранних версиях множественное наследование невозможно, поскольку Java следует правилу “Класс должен расширять один и только один класс или абстрактный класс”. Однако с помощью интерфейса можно обеспечить наследование нескольких реализаций, поскольку Java следует правилу “Класс может расширять любое количество интерфейсов”.
Однако Java 8 поддерживает “Реализацию методов в интерфейсах”, вводя новые функции: методы по умолчанию в интерфейсе. Из-за этой функции Java 8 поддерживает множественное наследование с некоторыми ограничениями.
В чем проблема с алмазами в интерфейсах из-за методов по умолчанию? Как Java 8 Решает эту проблему?
Методы Java 8 по умолчанию могут создавать проблемы с алмазами, когда класс реализует несколько интерфейсов. Это происходит, когда класс расширяет несколько интерфейсов с одной и той же реализацией метода (метод по умолчанию).
Пример кода Java SE 8, чтобы показать проблему Diamond с методами интерфейса по умолчанию.
interface A { default void display() { System.out.println("A"); } } interface B extends A { default void display() { System.out.println("B"); } } interface C extends A { default void display() { System.out.println("C"); } } class D implements B, C { }
В приведенном выше фрагменте кода класс D выдает ошибку во время компиляции, поскольку “Повторяющиеся методы по умолчанию с именем display с параметрами () и () наследуются от типов C и B”. Это связано с тем, что компилятор Java запутается в том, какой метод отображения() использовать в классе D. Класс D наследует метод отображения() от обоих интерфейсов B и C. Для решения этой проблемы Java 8 предложила следующее решение.
class D implements B, C { @Override public void display() { B.super.display(); } }
Это B. super.display(); решит эту проблему с алмазами. Если вы хотите использовать метод интерфейса C по умолчанию, используйте C. super.display();
.
Это все о вопросах для интервью Java 8. Мы обсудим еще несколько вопросов для интервью Java SE 8 в моих следующих постах.
Пожалуйста, напишите мне комментарий, если вам нравится мой пост или у вас есть какие-либо вопросы/предложения.