Java SE 8 面试问题与答案(第二部分)

在我之前的帖子中,我已经讨论了一些重要的Java SE 8面试问题和答案,在本文中,我们将讨论一些更多Java SE 8面试问题和答案,在阅读本文之前,请浏览我之前的帖子:Java SE 8面试问题(第一部分)(/community/tutorials/javase8-interview-question-part1)

Java SE 8 面试问题

  1. 联合国 Java SE 8 的内部迭代是什么
  2. 外部迭代和内部迭代之间的差异? (_) (英语). 外部迭代有哪些主要缺点?
  3. 内部迭代相对于外部迭代有什么主要优势?
  4. 内部迭代相对于外部迭代的主要缺点是什么?
  5. 外部迭代相对于内部迭代的主要优势是什么?
  6. 我们什么时候需要使用内部迭代? 我们何时需要使用外部迭代? ( (英语). 8. Java 8 流 API 的中间操作和终端操作的区别? () (英语). 9. 是否有可能在 Java 界面中提供方法执行 ? 如果可能,我们如何提供? () )10 (英语). 什么是默认方法? 为什么我们需要Java 8 接口中的默认方法? () )11 (英语). 什么是静态方法? 为什么我们需要Java 8 接口中的静态方法? () )12 (英语). 功能性编程与面向对象编程之间的区别? () )13. 解释旧Java Date API的问题吗? Java 8 的 Date and Time API 比起 Old Date API 和 Joda Time API 有何好处? 14 (英语). 为什么我们在Java SE 8需要新的日期和时间 API? 解释一下 Java SE 8 数据与时间 API 解决了旧Java Date API的问题? () (英语). 15. Java 的 OLD Java Date API 和 Java 8 的日期和时间 API 有什么区别 ? ( )16 (英语). 什么是多重继承? Java 8 如何支持 多重继承? () )17 (英语). 由于默认方法, 接口中存在什么钻石问题 ? 如何用爪哇语 8 解决这个问题? () (英语)

Java SE 8 面试问题和答案

Java SE 8中的内部迭代是什么?

在 Java 8 之前,我们没有内部迭代概念。Java 8 引入了一种名为内部迭代的新功能。在 Java 8 之前,Java 语言只使用外部迭代来迭代集合对象的元素,如集合、数组等。

外部迭代和内部迭代的区别

S.No.External IterationInternal Iteration
1.Available before Java 8 too.It is introduced in Java SE 8
2.Iterating an Aggregated Object elements externally.Iterating an Aggregated Object elements internally (background).
3.Iterate elements by using for-each loop and Iterators like Enumeration, Iterator, ListIterator.Iterate elements by using Java API like "forEach" method.
4.Iterating elements in Sequential and In-Order only.Not required to iterate elements in Sequential order.
5.It follows OOP approach that is Imperative Style.It follows Functional Programming approach that is Declarative Style.
6.It does NOT separate responsibilities properly that is, it defines both "What is to be done" and "How it is to be done".It defines only "What is to be done". No need to worry about "How it is to be done". Java API takes care about "How to do".
7.Less Readable Code.More Readable code.

外部迭代的主要缺点是什么?

外部迭代具有以下缺点:

  • 我们需要以强制性方式编写代码.
  • 没有明确的责任分离。 密切连接要做什么要做什么代码
  • 更少可读的代码
  • 更多 Verbose 和 Boilerplate 代码
  • 我们只需要以连续顺序迭代元素
  • 它不正确地支持竞争和平行主义

内部迭代对外部迭代的主要优势是什么?

与外部迭代相比,内部迭代具有以下优点:

  • 按照功能式编程风格,我们可以编写声明代码
  • 更可读和简洁的代码
  • 避免编写 Verbose 和 Boilerplate 代码
  • 无需在序列顺序中重复元素
  • 它正确地支持竞争和并行
  • 我们可以编写并行代码以提高应用性能
  • 明确分离责任。

内部迭代对外部迭代的主要缺点是什么?

与外部迭代相比,内部迭代有一个主要的缺点:

在内部迭代中,由于Java API在内部负责迭代元素,所以我们没有对迭代的控制权。

外部迭代对内部迭代的主要优势是什么?

与内部迭代相比,外部迭代具有一个主要优势:

  • 在外部迭代中,由于Java API 不关心迭代元素,所以我们对迭代有很大的控制权。

什么时候需要使用内部迭代?什么时候需要使用外部迭代?

我们需要理解使用内部迭代或外部迭代的情况。

  • 当我们需要对迭代进行更多的控制时,我们可以使用外部迭代
  • 当我们不需要对迭代进行更多的控制时,我们可以使用内部迭代
  • 当我们需要开发高度竞争和并行应用程序时,我们应该使用内部迭代

Java 8 流 API 的中间操作和终端操作的区别?

S.No.Stream Intermediate OperationsStream Terminal Operations
1.Stream Intermediate operations are not evaluated until we chain it with Stream Terminal Operation.Stream Terminal Operations are evaluated on it's own. No need other operations help.
2.The output of Intermediate Operations is another Stream.The output of Intermediate Operations is Not a Stream. Something else other than a Stream.
3.Intermediate Operations are evaluated Lazily.Terminal Operations are evaluated Eagerly.
4.We can chain any number of Stream Intermediate Operations.We can NOT chain Stream Terminal Operations.
5.We can use any number of Stream Intermediate Operations per Statement.We can use only one Stream Terminal Operation per Statement.

是否可以在Java界面中提供方法实现?如果可能的话,我们如何提供它们?

在 Java 7 或更早版本中,在 Interfaces 中无法提供方法实现。在 Java SE 8 中,我们可以使用以下两种新概念提供方法实现:

  • 默认方法
  • 静态方法

什么是默认方法?为什么我们需要在Java 8界面中的默认方法?

默认方法是用默认关键字的界面实现的一种方法,它在Java SE 8中引入了新的功能。

  • 它允许我们在接口中提供方法的实现
  • 将新功能添加到接口中,而不会破坏执行该接口的类
  • 提供优雅的反向兼容性功能
  • 方便扩展现有功能
  • 方便维护现有功能

什么是静态方法?为什么我们需要Java 8界面中的静态方法?

静态方法是一种与类(或界面)相关的实用方法或辅助方法,它与任何对象无关。

  • 我们可以将助手或实用程序方法保留在相同的界面上,而不是在一个单独的实用程序类 *我们不需要单独的实用程序类(如集合、数组等)来保留实用程序方法 *清晰的责任分离,即我们不需要一个实用程序类来保留集合等集合API的所有实用程序类 *易于扩展API *易于维护API

功能编程和面向对象的编程有什么区别?

oOP ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 不存在 QQ 存在 QQ QQ 使用可变数据 使用可变数据 QQ QQ 它遵循声明式编程模式 QQ 它遵循强制性编程模式 QQ QQ 无国籍编程模式 QQ 状态编程模式 QQ QQ 主打曲:"你在做什么" 主打曲:"你在做什么" 主打曲:"你在做什么"##

并行(货币)方案拟订的优点 − 贫穷 − 并行(货币)方案拟订的缺点 →

→ { BigData 处理和分析的好 QQ 不对 BigData 处理和分析的好 QQ QQ 支持纯封装 QQ 它打破封装概念 QQ QQ 无边效果的函数 {} 有边效果的方法 {} }}{ 功能为一等公民 QQ 对象为一等公民 QQ QQ 初级操纵 单位为"功能" QQ 主操纵单位为对象(类) QQ QQ 流程控制:函数调用,函数调用 有可调用 QQ 流程控制:循环,有条件的语句 QQ QQ 它使用"Recursion"的概念来将"收集数据"(Collection Data)进行去除. QQ 它使用"Loop"概念来将"收集"数据(Collection Data)进行去除. 例如:- 在 Java QQ 中每个环 执行的顺序不太重要。 处决的顺序是必须的,而且非常重要。 QQ QQ 既支持"超越数据",也支持"超越行为". QQ只支持"超越数据". ________________ __________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 我们用FP,当我们没有什么东西 更多的操作。 我们使用OOP,当我们没有更多的行动 东西 例如: 事情是类,操作是方法 在爪哇。 |

注意:- 有关 FP、IP 和 OOP 比较的更多信息,请参阅我之前的帖子:[比较 FP, OOP(IP)]( / 社区 / 教程 / 功能 - 强制性 - 面向对象 - 编程 - 比较)

解釋舊 Java Date API 的問題? Java 8 的日期和時間 API 與舊 Java Date API 和 Joda Time API 相比有哪些優勢?

Java 的 OLD Java Date API 是指在 Java SE 8 之前可用的 Date API,即 Date、Calendar、SimpleDateFormat 等。

  • 大多数 API 都已过时
  • 可读性较低
  • java.util.Date 是可变,而不是 Thread-Safe
  • java.text.SimpleDateFormat 不是 Thread-Safe
  • 性能较低

Java SE 8 的日期和时间 API 有以下优点 与 Java 的 OLD Date API 相比。

  • 使用非常简单
  • 具有更高的可读性的人类语法
  • 所有 API 都是 Thread-Safe
  • 更好的性能

为什么我们需要新的日期和时间API在Java SE 8?解释Java SE 8数据和时间API如何解决旧Java日期API的问题?

我们需要 Java 8 的日期和时间 API 来开发高性能、线程安全和高度可扩展的 Java 应用程序. Java 8 的日期和时间 API 通过遵循不可变性和线程安全原则来解决 Java 的所有旧日期 API 问题。

Java OLD Java Date API 和 Java 8 日期和时间 API 的区别是什么?

Java OLD Java Date API 和 Java 8 日期和时间 API 的区别:**

S.No.Java's OLD Java Date APIJava 8's Date and Time API
1.Available before Java 8 too.It is introduced in Java SE 8
2.Not Thread Safe.Thread Safe.
3.Mutable API.Immutable API.
4.Less Performance.Better Performance.
5.Less Readability.More Readability.
6.It's not recommended to use as its deprecated.It's always recommended to use.
7.Not Extendable.Easy to Extend.
8.It defines months values from 0 to 11, that is January = 0.It defines months values from 1 to 12, that is January = 1.
9.It's an old API.It's a new API.

什么是多重继承?Java 8如何支持多重继承?

多重继承意味着一个类可以继承或扩展来自多个母类的特征和特征。在Java 7或更早的版本中,多重继承是不可能的,因为Java遵循一类应该扩展一类或只扩展一类或抽象类规则。然而,使用界面提供多重实施继承是可能的,因为Java遵循一类可以扩展任何数量的界面规则。

由于默认方法导致界面中的钻石问题是什么? Java 8 如何解决这个问题?

Java 8 default methods can introduce a diamond problem when a class implements multiple interfaces. It occurs when a Class extends more than one interfaces with the same method implementations (Default method). diamond problem interface default methods Sample Java SE 8 Code to show the Diamond Problem with interface default methods.

 1interface A {
 2    default void display() {
 3    	System.out.println("A");
 4    }
 5}
 6
 7interface B extends A {
 8    default void display() {
 9    	System.out.println("B");
10    }
11}
12
13interface C extends A {
14    default void display() {
15    	System.out.println("C");
16    }
17}
18
19class D implements B, C {
20}

在上面的代码片段中,D类给出了编译时间错误,即以参数( )和( )命名显示的重复默认方法是从C和B类继承的

1class D implements B, C {
2
3    @Override
4    public void display() {
5    	B.super.display();
6    }
7    
8}

这个 **B.super.display();**将解决这个钻石问题. 如果你想使用C界面默认方法,然后使用 C.super.display();. 这是关于Java 8访谈问题。

Published At
Categories with 技术
comments powered by Disqus