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