黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 2020年互聯(lián)網(wǎng)Java常見面試題

2020年互聯(lián)網(wǎng)Java常見面試題

更新時間:2020-03-20 09:57:38 來源:動力節(jié)點 瀏覽2906次


  談?wù)凧ava反射機制,動態(tài)代理是基于什么原理


  反射機制是Java語言提供的一種基礎(chǔ)功能,賦予程序在運行時自省(introspect,官方用語)的能力。通過反射我們可以直接操作類或者對象,比如獲取某個對象的類定義,獲取類聲明的屬性和方法,調(diào)用方法或者構(gòu)造對象,甚至可以運行時修改類定義。


  動態(tài)代理是一種方便運行時動態(tài)構(gòu)建代理、動態(tài)處理代理方法調(diào)用的機制,很多場景都是利用類似機制做到的,比如用來包裝RPC調(diào)用、面向切面的編程(AOP)。


  JDK動態(tài)代理:基于Java反射機制實現(xiàn),必須要實現(xiàn)了接口的業(yè)務(wù)類才能用這種辦法生成代理對象。新版本也開始結(jié)合ASM機制。


  cglib動態(tài)代理:基于ASM機制實現(xiàn),通過生成業(yè)務(wù)類的子類作為代理類。


  int和Integer有什么區(qū)別?談?wù)処nteger的值緩存范圍。


  int是我們常說的整形數(shù)字,是Java的8個原始數(shù)據(jù)類型(PrimitiveTypes,boolean、byte、short、char、int、foat、double、long)之一。Java語言雖然號稱一切都是對象,但原始數(shù)據(jù)類型是例外。


  Integer是int對應的包裝類,它有一個int類型的字段存儲數(shù)據(jù),并且提供了基本操作,比如數(shù)學運算、int和字符串之間轉(zhuǎn)換等。在Java5中,引入了自動裝箱和自動拆箱功能(boxing/unboxing),Java可以根據(jù)上下文,自動進行轉(zhuǎn)換,極大地簡化了相關(guān)編程。


  Integer的值默認緩存是-128到127之間。緩存上限值實際是可以根據(jù)需要調(diào)整的,JVM提供了參數(shù)設(shè)置:-XX:AutoBoxCacheMax=N。


  不管是Integer還Boolean等,都被聲明為“privatefnal”,所以,它們同樣是不可變類型!


  對比Vector、ArrayList、LinkedList有何區(qū)別?


  Vector是線程安全的動態(tài)數(shù)組,。Vector內(nèi)部是使用對象數(shù)組來保存數(shù)據(jù),可以根據(jù)需要自動增加容量,當數(shù)組已滿時,會創(chuàng)建新的數(shù)組,并拷貝原有數(shù)組數(shù)據(jù)。Vector在擴容時會提高1倍


  ArrayList是動態(tài)數(shù)組實現(xiàn),不是線程安全的,性能要好很多。與Vector近似,ArrayList也是可以根據(jù)需要調(diào)整容量,不過兩者的調(diào)整邏輯有所區(qū)別。ArrayList擴容時是增加50%。


  Vector和ArrayList作為動態(tài)數(shù)組,其內(nèi)部元素以數(shù)組形式順序存儲的,所以非常適合隨機訪問的場合。除了尾部插入和刪除元素,往往性能會相對較差,比如我們在中間位置插入一個元素,需要移動后續(xù)所有元素。


  LinkedList是Java提供的雙向鏈表,它不需要像上面兩種那樣調(diào)整容量,也不是線程安全的。LinkedList進行節(jié)點插入、刪除卻要高效得多,但是隨機訪問性能則要比動態(tài)數(shù)組慢。


  TreeSet支持自然順序訪問,但是添加、刪除、包含等操作要相對低效(log(n)時間)。


  HashSet則是利用哈希算法,理想情況下,如果哈希散列正常,可以提供常數(shù)時間的添加、刪除、包含等操作,但是它不保證有序。


  LinkedHashSet,內(nèi)部構(gòu)建了一個記錄插入順序的雙向鏈表,因此提供了按照插入順序遍歷的能力,與此同時,也保證了常數(shù)時間的添加、刪除、包含等操作,這些操作性能略低于HashSet,因為需要維護鏈表的開銷。


  在遍歷元素時,HashSet性能受自身容量影響,所以初始化時,除非有必要,不然不要將其背后的HashMap容量設(shè)置過大。而對于LinkedHashSet,由于其內(nèi)部鏈表提供的方便,遍歷性能只和元素多少有關(guān)系。


  Java提供的默認排序算法:


  對于原始數(shù)據(jù)類型,目前使用的是所謂雙軸快速排序,是一種改進的快速排序算法,早期版本是相對傳統(tǒng)的快速排序


  對于對象數(shù)據(jù)類型,目前則是使用TimSort,思想上也是一種歸并和二分插入排序結(jié)合的優(yōu)化排序算法


  對比Hashtable、HashMap、TreeMap有什么不同?


  元素特性:HashTable中的key、value都不能為null;HashMap中的key、value可以為null,很顯然只能有一個key為null的鍵值對,但是允許有多個值為null的鍵值對;TreeMap中當未實現(xiàn)Comparator接口時,key不可以為null;當實現(xiàn)Comparator接口時,若未對null情況進行判斷,則key不可以為null,反之亦然。


  順序特性:HashTable、HashMap具有無序特性。TreeMap是利用紅黑樹來實現(xiàn)的(樹中的每個節(jié)點的值,都會大于或等于它的左子樹種的所有節(jié)點的值,并且小于或等于它的右子樹中的所有節(jié)點的值),實現(xiàn)了SortMap接口,能夠?qū)Ρ4娴挠涗浉鶕?jù)鍵進行排序。所以一般需要排序的情況下是選擇TreeMap來進行,默認為升序排序方式(深度優(yōu)先搜索),可自定義實現(xiàn)Comparator接口實現(xiàn)排序方式。


  初始化與增長方式:初始化時:HashTable在不指定容量的情況下的默認容量為11,且不要求底層數(shù)組的容量一定要為2的整數(shù)次冪;HashMap默認容量為16,且要求容量一定為2的整數(shù)次冪。擴容時:Hashtable將容量變?yōu)樵瓉淼?倍加1;HashMap擴容將容量變?yōu)樵瓉淼?倍。


  HashMap基于哈希思想,實現(xiàn)對數(shù)據(jù)的讀寫。當我們將鍵值對傳遞給put()方法時,它調(diào)用鍵對象的hashCode()方法來計算hashcode,然后找到bucket位置來儲存值對象。當獲取對象時,通過鍵對象的equals()方法找到正確的鍵值對,然后返回值對象。HashMap使用鏈表來解決碰撞問題,當發(fā)生碰撞了,對象將會儲存在鏈表的下一個節(jié)點中。HashMap在每個鏈表節(jié)點中儲存鍵值對對象。當兩個不同的鍵對象的hashcode相同時,它們會儲存在同一個bucket位置的鏈表中,可通過鍵對象的equals()方法用來找到鍵值對。如果鏈表大小超過閾值(8),鏈表就會被改造為樹形結(jié)構(gòu)(紅黑樹)。


  解決哈希沖突有哪些典型方法呢?


  開放定址法:當關(guān)鍵字key的哈希地址p=H(key)出現(xiàn)沖突時,以p為基礎(chǔ),產(chǎn)生另一個哈希地址p1,如果p1仍然沖突,再以p為基礎(chǔ),產(chǎn)生另一個哈希地址p2,…,直到找出一個不沖突的哈希地址pi,將相應元素存入其中。


  再哈希法:當哈希地址Hi=RH1(key)發(fā)生沖突時,再計算Hi=RH2(key)……,直到?jīng)_突不再產(chǎn)生。這種方法不易產(chǎn)生聚集,但增加了計算時間。


  鏈地址法:這種方法的基本思想是將所有哈希地址為i的元素構(gòu)成一個稱為同義詞鏈的單鏈表,并將單鏈表的頭指針存在哈希表的第i個單元中,因而查找、插入和刪除主要在同義詞鏈中進行。鏈地址法適用于經(jīng)常進行插入和刪除的情況。


  Java提供了哪些IO方式?NIO如何實現(xiàn)多路復用?


  傳統(tǒng)的java.io包,它基于流模型實現(xiàn),提供了我們最熟知的一些IO功能,比如File抽象、輸入輸出流等。交互方式是同步、阻塞的方式。


  很多時候,人們也把java.net下面提供的部分網(wǎng)絡(luò)API,比如Socket、ServerSocket、HttpURLConnection也歸類到同步阻塞IO類庫,因為網(wǎng)絡(luò)通信同樣是IO行為。


  在Java1.4中引入了NIO框架(java.nio包),提供了Channel、Selector、Bufer等新的抽象,可以構(gòu)建多路復用的、同步非阻塞IO程序,同時提供了更接近操作系統(tǒng)底層的高性能數(shù)據(jù)操作方式。


  在Java7中,NIO有了進一步的改進,也就是NIO2,引入了異步非阻塞IO方式,也有很多人叫它AIO(AsynchronousIO)。異步IO操作基于事件和回調(diào)機制,可以簡單理解為,應用操作直接返回,而不會阻塞在那里,當后臺處理完成,操作系統(tǒng)會通知相應線程進行后續(xù)工作。


  NIO多路復用的局限性是什么呢?


  由于nio實際上是同步非阻塞io,是一個線程在同步的進行事件處理,當一組事channel處理完畢以后,去檢查有沒有又可以處理的channel。這也就是同步+非阻塞。同步,指每個準備好的channel處理是依次進行的,非阻塞,是指線程不會傻傻的等待讀。只有當channel準備好后,才會進行。那么就會有這樣一個問題,當每個channel所進行的都是耗時操作時,由于是同步操作,就會積壓很多channel任務(wù),從而完成影響。那么就需要對nio進行類似負載均衡的操作,如用線程池去進行管理讀寫,將channel分給其他的線程去執(zhí)行,這樣既充分利用了每一個線程,又不至于都堆積在一個線程中,等待執(zhí)行


2020年互聯(lián)網(wǎng)Java常見面試題


    以上就是動力節(jié)點Java培訓機構(gòu)小編介紹的“2020年互聯(lián)網(wǎng)Java常見面試題”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 69欧美xxxxx色护士视频 | 午夜精品网站 | 日韩免费片 | 狠狠色丁香久久婷婷综合_中 | 曰本一区二区三区 | 国产精品亚洲高清一区二区 | 亚洲a在线视频 | 黄色在线小视频 | 毛片免费看看 | 成人在线播放av | 日本黄色大片网站 | 国产a毛片高清视 | 日本午夜精品一本在线观看 | 天天se天天cao| 日韩中文字幕精品视频在线 | 91精品视频在线播放 | 色性视频 | 亚欧成人一区二区 | 色视频网站在线观看 | 韩国春性xxxx猛交 | 一级特色大黄美女播放网站 | 男女在线无遮挡毛片免费 | 国产精品hd | 精品视频一区二区三区在线观看 | 神马午夜嘿嘿 | 亚洲综合色视频 | 一区二区免费视频观看 | 国产一二三区在线 | 国产伦精品一区三区视频 | 老司机亚洲精品影院 | 亚洲欧美日韩第一页 | 日本资源网 | 国产伦理在线播放 | 亚洲欧美另类日本久久影院 | a黄色毛片| 宅男噜噜噜一区二区三区 | 国产精品不卡视频 | 欧洲做视频在线观看 | 欧美 韩国 精品 另类 综合 | 亚洲成a人片在线v观看 | 国产日韩高清一区二区三区 |