Java泛型面試問題

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.如何編寫一個接受泛型參數并返回泛型的泛型方法?

編寫通用方法并不困難,而不是使用原始類型,您需要使用通用類型,例如T,E或K,V,它們是Type,Element和Key,Value的占位符。 查看Java Collection框架以獲取泛型方法的示例。 最簡單的通用方法如下所示:
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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371879.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371879.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371879.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

隱層元素閃一下_太陽一直依靠什么元素在燃燒,地球上的重元素又是怎么來的?...

本文基于回答網友一個這樣的問題&#xff1a;太陽目前氫核聚變是氦碳氧穩定燃燒地球上的鐵鎳重元素哪里來的&#xff1f;可以說&#xff0c;這是一個毫無邏輯亂七八糟的問題&#xff0c;但既然邀請回答&#xff0c;就從中挑出幾個稍顯合理的問題說明一下。太陽核心每時每刻都在…

基于Token的WEB后臺認證機制

基于Token的WEB后臺認證機制 幾種常用的認證機制 HTTP Basic Auth HTTP Basic Auth簡單點說明就是每次請求API時都提供用戶的username和password&#xff0c;簡言之&#xff0c;Basic Auth是配合RESTful API 使用的最簡單的認證方式&#xff0c;只需提供用戶名密碼即可&#xf…

JSF基于事件的溝通:過時的方法

用JSF編寫的Web應用程序由相互交互的bean組成。 在開發Web應用程序時&#xff0c;bean之間的通信是主要的設計模式之一。 有時&#xff0c;一個bean需要向其他bean發送事件&#xff0c;以通知它們某些更改或其他任何更改。 我們通常可以將托管bean或Spring bean注入另一個bean的…

mysql調優 基礎

MySQL調優可以從幾個方面來做&#xff1a;1. 架構層&#xff1a;做從庫&#xff0c;實現讀寫分離&#xff1b;2.系統層次&#xff1a;增加內存&#xff1b;給磁盤做raid0或者raid5以增加磁盤的讀寫速度&#xff1b;可以重新掛載磁盤&#xff0c;并加上noatime參數&#xff0c;這…

saltstack

第一&#xff1a;安裝前準備&#xff1a; 聲明我用的是ubuntu 16.04的系統 1.修改主機名&#xff0c;并保證兩臺機器可以互相ping同主機名 ip1 master_hostname ip2 slave_hostname 第二&#xff1a;安裝 服務器安裝 yum install salt-master -y客戶端安裝 yum install salt…

ios 百度地圖指定區域_獲取百度地圖可視區域范圍的數據

有個業務場景&#xff0c;需要根據獲取到的地圖區域顯示&#xff0c;根據相應的經緯度反查 左側區域的會議室。思路&#xff1a;1.得到百度地圖可視區域--可視區域的中心點2.可視區域的四個角的其中兩個(東北角西南角)http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_refer…

使用WS-Trust / STS采樣器擴展JMeter

JMeter沒有對WS-Security或WS-Trust的任何內置支持&#xff0c;這使我為JMeter開發了此STS Sampler –可以在負載測試STS時使任何人的生活變得更好。 首先&#xff0c;您需要擁有Apache JMeter發行版。 我正在使用v2.7。 然后&#xff0c;您可以從此處下載sts.sampler.zip –解…

分享一個使用閉包對一個對象繼承方式

function Person(name,age){this.name name;this.age age; }//定義一個new函數 繼承了對Person的繼承 function New(obj){return function(){var o {"__proto__":obj.proto};obj.apply(o,arguments);}return obj; }var n new New(Person)("對象繼承了person…

vue怎么改logo_vue全家桶項目構建教程

前言vue是現階段很流行的前端框架&#xff0c;很多人通過vue官方文檔的學習&#xff0c;對vue的使用都有了一定的了解&#xff0c;但再在項目工程化處理的時候&#xff0c;卻發現不知道改怎么更好的管理自己的項目&#xff0c;如何去引入一些框架以及vue全家桶其他框架的使用&a…

EclipseLink MOXy作為JAXB提供者

EclipseLink MOXy是JAXB提供程序&#xff0c;并且是內置在JDK中的默認JAXB提供程序的引人注目的替代品。 首先是一個簡單的測試&#xff0c;將Java對象編組為XML&#xff1a; 這是模型&#xff1a; XmlRootElement(nameMemberDetailsRequest, namespacehttp://bk.org/members…

monkeyrunner多點觸摸

思路是&#xff1a;在屏幕上某個位置按著不放&#xff1a;device.touch(x,y,md.DOWN) 然后再做一個滑動的操作&#xff1a;device.drap((x1,y1),(x2,y2),0.2,10) 然后再松開按鍵&#xff1a;device.touch(x,y,md.UP) #codeing:utf-8 from com.android.monkeyrunner import Monk…

雅虎前端優化的35條軍規

閱讀目錄 內容部分css部分js部分javascript, css 圖片 cookie移動端 服務器摘要&#xff1a;無論是在工作中&#xff0c;還是在面試中&#xff0c;web前端性能的優化都是很重要的&#xff0c;那么我們進行優化需要從哪些方面入手呢&#xff1f;可以遵循雅虎的前端優化34條軍規&…

stm32 內部sram大小_在SRAM、FLASH中調試代碼的配置方法(附詳細步驟)

聊天界面發送嵌入式大雜燴獲取1TB大雜燴資料包STM32的FLASH擦寫次數有限(大概為1萬次)&#xff0c;所以為了延長FLASH的使用時間&#xff0c;我們平時調試時可以選擇在SRAM中進行硬件調試。除此之外&#xff0c;SRAM 存儲器的寫入速度比在內部 FLASH 中要快得多&#xff0c;所以…

Spring Profile模式示例

最近&#xff0c;我們介紹了Spring Profiles的概念。 此概念是針對不同部署環境的輕松配置區分符。 直接的用例&#xff08;已提出&#xff09;是對相關類進行注釋&#xff0c;以便Spring根據活動的配置文件加載適當的類。 但是&#xff0c;這種方法可能并不總是適用于常見的…

Android 樣式 (style) 和主題(theme)

轉載&#xff1a;https://gold.xitu.io/post/58441c48c59e0d0056a30bc2 樣式和主題 樣式是指為 View 或窗口指定外觀和格式的屬性集合。樣式可以指定高度、填充、字體顏色、字號、背景色等許多屬性。 樣式是在與指定布局的 XML 不同的 XML 資源中進行定義。 Android 中的樣式與…

自定義控件_VIewPager顯示多個Item

一直以來想搞明白這個不完全的VIewPager是怎么做到的&#xff0c;有幸看到這片篇文章 有二種實現方法 1.設置的屬性 1.clipChildren屬性 2.setPageMargin 3.更新Item外界面 2.重寫getPageWidth public class MultiplePagerAdapter extends PagerAdapter { private List<I…

華為怎么改輸入法皮膚_微信和QQ個性鍵盤皮膚

hello大家好&#xff0c;今天是2019年1月1號&#xff0c;祝大家新年快樂今天是新年的第一天&#xff0c;所以說給大家介紹一個好玩的&#xff0c;微信和QQ都能設置的個性的鍵盤皮膚&#xff0c;看下圖&#xff0c;這樣的個性的鍵盤主題怎么設置呢&#xff1f;其實很簡單&#x…

EasyMock教程–入門

在本文中&#xff0c;我將向您展示EasyMock是什么&#xff0c;以及如何使用它來測試Java應用程序。 為此&#xff0c;我將創建一個簡單的Portfolio應用程序&#xff0c;并使用JUnit&#xff06;EasyMock庫對其進行測試。 在開始之前&#xff0c;讓我們首先了解使用EasyMock的需…

synchronized內置鎖

synchronized內置鎖&#xff0c;如果發生阻塞&#xff0c;無法被中斷&#xff0c;除非關閉jvm.因此不能從死鎖中恢復。轉載于:https://www.cnblogs.com/paulbai/p/6163250.html

如何加快Json 序列化?有哪些方法?

1、使用阿里的fastjson 2、可以通過去除不必要屬性加快序列化。如person對象&#xff0c;有id&#xff0c;name&#xff0c;address&#xff0c;我json需要用戶姓名&#xff0c;此時序列化的時候就只序列化name&#xff0c;id和address不序列化。轉載于:https://www.cnblogs.co…