Java面試中的通用面試問題在相當長的時間內在Java 5周圍越來越普遍,許多應用程序都轉移到Java 5上,并且幾乎所有新的Java開發都發生在Tiger(Java 5的代號)上。 泛型和Java 5功能(例如Enum)的重要性,Collection實用程序在Java面試中越來越受歡迎。 如果您不熟悉有界和無界的通配符 , 泛型如何在內部工作 ,類型擦除以及是否熟悉用Java編寫參數化的泛型類和方法,那么泛型采訪問題會變得非常棘手。 準備進行仿制藥面試的最佳方法是,針對仿制藥的各種功能嘗試最佳的簡單程序。 無論如何,在這篇Java訪談文章中,我們將看到一些流行的訪談問題,以及有關Java中泛型的答案。
1. Java中的泛型是什么? 使用泛型有什么優勢?
這是在任何Java訪談中都針對泛型提出的首批訪談問題之一,主要是初學者和中級。 那些來自Java 5之前的背景的人知道,將對象存儲在Collection中然后在使用它之前將其轉換回正確的Type是多么不便。 泛型阻止了這些。 它提供了編譯時的類型安全性,并確保僅在集合中插入正確的Type,并在運行時避免ClassCastException。
2.泛型如何在Java中工作? 什么是類型擦除?
這是泛型中較好的面試問題之一。 泛型使用Type Erase實現,編譯器在編譯時擦除所有與類型相關的信息,并且在運行時不提供與類型相關的信息。 例如List <String>在運行時僅由List表示。 這樣做是為了確保與Java 5之前開發的庫具有二進制兼容性。您在運行時無權訪問Type參數,并且編譯器在運行時將泛型轉換為Raw類型 。 根據您的回答,您可以根據該通用面試問題得到很多后續問題,例如, 為什么使用類型擦除來實現泛型或提供一些無效的泛型代碼而導致編譯器錯誤。 閱讀我的文章泛型如何在Java中工作以獲取更多詳細信息
3.泛型中有界和無界通配符是什么?
這是泛型上另一個非常流行的Java面試問題 。 有界通配符是對Type施加約束的通配符。 有兩種有界通配符<? 擴展T>,通過確保類型必須是T和<?的子類來施加上限。 超級T>,其中通過確保類型必須施加的下限必須是T的超類。此泛型類型必須在邊界內用Type實例化,否則將導致編譯錯誤。 另一方面,<?>表示和無界類型,因為<?>可以用任何類型替換。 有關我在Generics中有界和無界通配符之間的差異之處,請參見我的更多信息。
4. List <有 什么區別 ? 擴展T> 和 List <? 超級T> ?
這與以前的仿制藥面試問題有關,有一段時間而不是詢問什么是有界和無界通配符,訪調員會提出此問題以評估您對仿制藥的理解。 兩個List聲明都是有界通配符的示例,List <? 擴展T>將接受任何類型為擴展T的列表,而列表<? super T>將接受任何類型為T的超類的List。例如List <? 擴展Number>可以接受List <Integer>或List <Float>。 在上面的鏈接中查看更多信息。
5.如何編寫一個接受泛型參數并返回泛型的泛型方法?

public V put(K key, V value) {return cache.put(key, value);
}
6.如何使用泛型用Java寫參數化類?
這是以前的Java泛型采訪問題的擴展。 而不是要求編寫泛型方法,Interviewer可能會要求使用泛型編寫類型安全的類 。 再次,關鍵是要使用原始類型而不是使用原始類型,而必須始終使用JDK中使用的標準占位符。
7.編寫程序以使用泛型實現LRU緩存。
這是喜歡Java編碼的任何人的練習。 一個提示是,可以使用LinkedHashMap實現固定大小的LRU緩存,當緩存已滿時,需要刪除最舊的條目。 LinkedHashMap提供了一個稱為removeEldestEntry()的方法,該方法由put()和putAll()調用,可用于指示刪除最舊的條目。 只要您具有書面的工作版本以及單元測試,就可以自由提出自己的實現。
8.是否可以將 List <String> 傳遞給接受List <Object>的方法
Java中的這個通用面試問題可能會使任何對Generics不太熟悉的人感到困惑,因為乍一看,它看起來像String是對象,因此可以在需要List <Object>的地方使用List <String>,但這不是事實。 這將導致編譯錯誤。 如果您更進一步,這確實是有道理的,因為List <Object>可以存儲任何東西,包括String,Integer等,但是List <String>只能存儲String。
List<Object> objectList;
List<String> stringList;objectList = stringList; //compilation error incompatible types
9.我們可以在數組中使用泛型嗎?
如果您知道Array不支持Generics的事實,這可能是Java中最簡單的泛型訪談問題,這就是為什么Joshua bloach建議使用List而不是Array的原因,因為List可以提供比Array更可靠的編譯時類型安全性 。
10.如何抑制Java中未經檢查的警告?
如果使用合并原始類型和泛型類型,則Java 5的Javac編譯器會生成未經檢查的警告,例如
List<String> rawList = new ArrayList()Note: Hello.java uses unchecked or unsafe operations.;
可以通過使用@SuppressWarnings(“ unchecked”)注釋來取消顯示。
這些是Java中常見的泛型面試問題和答案 。 這些通用面試問題都不是強硬的,而是基于通用的基礎知識。 任何對泛型有相當了解的Java程序員都必須熟悉Java中的這些泛型問題。 如果您在任何面試中都提出了其他很好的通用問題,或者您正在尋找Java中任何通用面試問題的答案,那么請在評論部分中發布。
參考:我們的JCG合作伙伴 Javin Paul在Javarevisited博客上針對程序員和開發人員的Java泛型的10個訪談問題 。
翻譯自: https://www.javacodegeeks.com/2012/07/java-generics-interview-questions.html