在我之前的帖子中,我已经讨论了一些重要的Java SE 8面试问题和答案,在本文中,我们将讨论一些更多Java SE 8面试问题和答案,在阅读本文之前,请浏览我之前的帖子:Java SE 8面试问题(第一部分)(/community/tutorials/javase8-interview-question-part1)
。
Java SE 8 面试问题
- 联合国 Java SE 8 的内部迭代是什么
- 外部迭代和内部迭代之间的差异? (_) (英语). 外部迭代有哪些主要缺点?
- 内部迭代相对于外部迭代有什么主要优势?
- 内部迭代相对于外部迭代的主要缺点是什么?
- 外部迭代相对于内部迭代的主要优势是什么?
- 我们什么时候需要使用内部迭代? 我们何时需要使用外部迭代? ( (英语). 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 Iteration | Internal 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 Operations | Stream 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 API | Java 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). 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访谈问题。