Java8面试题
轉(zhuǎn)載自? ?Java8面試題
問(wèn)題一:
Java8支持函數(shù)編程是什么意思?
在Java 8之前,所有東西都是面向?qū)ο蟮?。除了原語(yǔ)之外,java中的 所有內(nèi)容都作為對(duì)象存在。對(duì)方法/函數(shù)的所有調(diào)用都是使用對(duì)象或類引用進(jìn)行的。
方法/功能本身并不是獨(dú)立存在的。
使用Java 8,引入了函數(shù)式編程。所以我們可以使用匿名函數(shù)。Java是一種一流的面向?qū)ο笳Z(yǔ)言。除了原始數(shù)據(jù)類型之外,Java中的所有內(nèi)容都是一個(gè)對(duì)象。即使是一個(gè)數(shù)組也是一個(gè)對(duì)象。每個(gè)類都創(chuàng)建對(duì)象的實(shí)例。沒(méi)有辦法只定義一個(gè)獨(dú)立于Java的函數(shù)/方法。無(wú)法將方法作為參數(shù)傳遞或返回該實(shí)例的方法體。
?
問(wèn)題二:
什么是Java8中的MetaSpace?它與PermGen Space有何不同?
使用JDK8時(shí),permGen空間已被刪除。那么現(xiàn)在將元數(shù)據(jù)信息存儲(chǔ)在哪里?此元數(shù)據(jù)現(xiàn)在存儲(chǔ)在本機(jī)內(nèi)存中,稱為“MetaSpace”。該內(nèi)存不是連續(xù)的Java堆內(nèi)存。它允許通過(guò)垃圾收集,自動(dòng)調(diào)整,元數(shù)據(jù)并發(fā)解除分配來(lái)改進(jìn)PermGen空間。
?
?
問(wèn)題三:
什么是Lambda表達(dá)式?
Lambda Expression可以定義為允許用戶將方法作為參數(shù)傳遞的匿名函數(shù)。這有助于刪除大量的樣板代碼。Lambda函數(shù)沒(méi)有訪問(wèn)修飾符(私有,公共或受保護(hù)),沒(méi)有返回類型聲明和沒(méi)有名稱。
Lambda表達(dá)式允許用戶將“函數(shù)”傳遞給代碼。所以,與以前需要一整套的接口/抽象類想必,我們可以更容易地編寫代碼。例如,假設(shè)我們的代碼具有一些復(fù)雜的循環(huán)/條件邏輯或工作流程。使用lambda表達(dá)式,在那些有難度的地方,可以得到很好的解決。
?
問(wèn)題四:
lambda表達(dá)式的優(yōu)點(diǎn)是什么?
Lambda函數(shù)的優(yōu)點(diǎn):
-
直到Java 8列表和集合通常由客戶端代碼從集合中獲取迭代器來(lái)處理,然后使用它迭代其元素并依次處理每個(gè)元素。如果要并行處理不同的元素,那么客戶代碼而不是集合的責(zé)任就是組織它。 通過(guò)Java 8,可以更輕松地在多個(gè)線程上分發(fā)集合的處理。 集合現(xiàn)在可以在內(nèi)部組織自己的迭代,將并行化的責(zé)任從客戶端代碼轉(zhuǎn)移到庫(kù)代碼中。
-
更少的代碼行。如上所述,用戶必須僅以聲明方式聲明要執(zhí)行的操作。 n > System.out.println(“Hello World”+ n); 所以用戶必須鍵入減少的代碼量。
-
使用Java 8 Lambda表達(dá)式可以實(shí)現(xiàn)更高的效率。通過(guò)使用具有多核的CPU,用戶可以通過(guò)使用lambda并行處理集合來(lái)利用多核CPU。
?
問(wèn)題五:
解釋Java 8內(nèi)部與外部迭代?
外部迭代器 -此迭代器也稱為活動(dòng)迭代器或顯式迭代器。對(duì)于這種類型的迭代器,元素迭代的控制是由程序員來(lái)完成的。這意味著將由程序員來(lái)定義何時(shí)以及如何調(diào)用下一個(gè)迭代元素。
內(nèi)部迭代器 -此迭代器也稱為被動(dòng)迭代器,隱式迭代器或回調(diào)迭代器。對(duì)于這種類型的迭代器,對(duì)迭代器元素的控制權(quán)在于迭代器本身。程序員只告訴迭代器“對(duì)集合的元素執(zhí)行什么操作”。因此,程序員只需要聲明將要做什么,而不用管理和控制單個(gè)元素的迭代是如何發(fā)生的。
?
問(wèn)題六:
解釋Java 8-中間操作與終端操作?
流操作可以分為兩部分:
中間操作 -返回另一個(gè)Stream的中間操作,允許操作以查詢的形式連接。?
終端操作 -產(chǎn)生非流,結(jié)果如原始值,集合或根本沒(méi)有值。
?
?
問(wèn)題七:
什么是函數(shù)接口?
@FunctionalInterface是在Java 8中添加的新接口。 它表示該接口將用作功能接口。
package?com.javainuse;@FunctionalInterface public?interface?Greetings?{public?void?sayHello(String?name); }此注釋是可選的。即使沒(méi)有用@FunctionalInterface注釋,接口仍然可以用作功能接口。 我們編寫lambda函數(shù)的接口應(yīng)該只有一個(gè)方法。如果為一個(gè)接口注解的方法指定了多個(gè)方法,我們會(huì)得到一個(gè)編譯器異常無(wú)效的'@FunctionalInterface'注釋。
?
問(wèn)題八:
Java 8中的可選項(xiàng)是什么?
Java 8引入了一個(gè)新的容器類java.util.Optional?。如果該值可用,它將包裝一個(gè)值。如果該值不可用,則應(yīng)返回空的可選項(xiàng)。因此它代表空值,缺失值。這個(gè)類有各種實(shí)用方法,如isPresent(),它可以幫助用戶避免使用空值檢查。由于不直接返回值,而是返回包裝器對(duì)象,所以用戶可以避免空指針異常。
總結(jié)
- 上一篇: Spring 事务原理和使用
- 下一篇: 想进入谷歌吗?先来看看这些面试题吧