久久精品国产一区二区电影,久久精品国产亚洲av瑜伽,精品无人区一码卡二卡三,久草热8精品视频在线观看 ,久久99精品久久久久麻豆

錘子簡歷品牌推廣師
出場率較高的Java面試題及答案分享
作者:君仔小編 2022/06/23 12:10:05
閱讀 146
馬上又要到招聘旺季了,小簡在這里給大家整理了一些互聯(lián)網(wǎng)公司面試都喜歡問的一些問題或者一些出場率很高的Java面試題,希望能夠幫到在校招或者社招路上的你。

1.Collections.sort排序內(nèi)部原理

在Java 6中Arrays.sort()和Collections.sort()使用的是MergeSort,而在Java 7中,內(nèi)部實現(xiàn)換成了TimSort,其對對象間比較的實現(xiàn)要求更加嚴格

2.hashMap原理,java8做的改變

從結構實現(xiàn)來講,HashMap是數(shù)組+鏈表+紅黑樹(JDK1.8增加了紅黑樹部分)實現(xiàn)的。

HashMap最多只允許一條記錄的鍵為null,允許多條記錄的值為null。

HashMap非線程安全。

ConcurrentHashMap線程安全。

解決碰撞:當出現(xiàn)沖突時,運用拉鏈法,將關鍵詞為同義詞的結點鏈接在一個單鏈表中,散列表長m,則定義一個由m個頭指針組成的指針數(shù)組T,地址為i的結點插入以T(i)為頭指針的單鏈表中。

Java8中,沖突的元素超過限制(8),用紅黑樹替換鏈表。

3.String 和 StringBuilder 的區(qū)別

1)可變與不可變:String不可變,每一次執(zhí)行“+”都會新生成一個新對象,所以頻繁改變字符串的情況中不用String,以節(jié)省內(nèi)存。

2)是否多線程安全:StringBuilder并沒有對方法進行加同步鎖,所以是非線程安全的。

StringBuffer和String均線程安全。

4.Vector 與 Array 的區(qū)別

1)ArrayList在內(nèi)存不夠時默認是擴展50% + 1個,Vector是默認擴展1倍。

2)Vector屬于線程安全級別的,但是大多數(shù)情況下不使用Vector,因為線程安全需要更大的系統(tǒng)開銷。

5.HashMap 與 Hashtable 的區(qū)別

1) 歷史原因: Hashtable繼承Dictonary類, HashMap繼承自abstractMap

2) HashMap允許空的鍵值對, 但最多只有一個空對象,而HashTable不允許。

3) HashTable同步,而HashMap非同步,效率上比HashTable要高

6.ConncurrentHashMap和hashtable比較(兩個線程并發(fā)訪問map中同一條鏈,一個線程在尾部刪除,一個線程在前面遍歷查找,問為什么前面的線程還能正確的查找到后面被另一個線程刪除的節(jié)點)

ConcurrentHashMap融合了hashtable和hashmap二者的優(yōu)勢。

hashtable是做了同步的,即線程安全,hashmap未考慮同步。

所以hashmap在單線程情況下效率較高。

hashtable在的多線程情況下,同步操作能保證程序執(zhí)行的正確性。

但是hashtable是阻塞的,每次同步執(zhí)行的時候都要鎖住整個結構,ConcurrentHashMap正是為了解決這個問題而誕生的,

ConcurrentHashMap允許多個修改操作并發(fā)進行,其關鍵在于使用了鎖分離技術(一個Array保存多個Object,使用這些對象的鎖作為分離鎖,get/put時隨機使用任意一個)。

它使用了多個鎖來控制對hash表的不同部分進行的修改。

在JDK 1.6中,有HashEntry結構存在,每次插入將新添加節(jié)點作為鏈的頭節(jié)點(同HashMap實現(xiàn)),而且每次刪除一個節(jié)點時,會將刪除節(jié)點之前的所有節(jié)點拷貝一份組成一個新的鏈,而將當前節(jié)點的上一個節(jié)點的next指向當前節(jié)點的下一個節(jié)點,從而在刪除以后有兩條鏈存 在,因而可以保證即使在同一條鏈中,有一個線程在刪除,而另一個線程在遍歷,它們都能工作良好,因為遍歷的線程能繼續(xù)使用原有的鏈。

Java8中,采用volatile HashEntry保存數(shù)據(jù),table元素作為鎖;

從table數(shù)組+單向鏈表加上了紅黑樹。

紅黑樹是一種特別的二叉查找樹,特性為:1.節(jié)點為紅或者黑 2.根節(jié)點為黑 3.葉節(jié)點為黑 4.一節(jié)點為紅,則葉節(jié)點為黑 5.一節(jié)點到其子孫節(jié)點所有路徑上的黑節(jié)點數(shù)目相同。

7.ArrayList與 LinkedList 的區(qū)別?

最明顯的區(qū)別是:

ArrrayList 底層的數(shù)據(jù)結構是數(shù)組,支持隨機訪問,而 LinkedList 的底層數(shù)據(jù)結構書鏈表,不支持隨機訪問。

使用下標訪問一個元素,ArrayList 的

時間復雜度是 O(1),而 LinkedList 是 O(n)。

LinkedList是雙向鏈表

8.Java 中,Comparator 與Comparable 有什么不同?

Comparable 接口用于定義對象的自然順序,是排序接口,而 comparator 通常用于定義用戶定制的順序,是比較接口。

我們?nèi)绻枰刂颇硞€類的次序,而該類本身不支持排序(即沒有實現(xiàn)Comparable接口),那么我們就可以建立一個“該類的比較器”來進行排序。

Comparable 總是只有一個,但是可以有多個 comparator 來定義對象的順序。

9.抽象類是什么?它與接口有什么區(qū)別?你為什么要使用過抽象類?

抽象類是指不允許被實例化的類;

一個類只能使用一次繼承關系。

但是,一個類卻可以實現(xiàn)多個interface。

abstract class和interface所反映出的設計理念不同。

其實abstract class表示的是"is-a"關系,interface表示的是"like-a"關系實現(xiàn)抽象類和接口的類必須實現(xiàn)其中的所有方法。

抽象類中可以有非抽象方法。

接口中則不能有實現(xiàn)方法。

但在Java8中允許接口中有靜態(tài)默認的方法。

接口中定義的變量默認是public static final 型,且必須給其初值,所以實現(xiàn)類中不能重新定義,也不能改變其值。

抽象類中的變量默認是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。

子類中實現(xiàn)父類中的抽象方法時,可見性可以大于等于父類中的;

而接口實現(xiàn)類中的接口 方法的可見性只能與接口中相同(public)。

用抽象類是為了重用。

減少編碼量,降低耦合性。

10.描述 Java 中的重載和重寫?

重載和重寫都允許你用相同的名稱來實現(xiàn)不同的功能,但是重載是編譯時活動,而重寫是運行時活動。

你可以在同一個類中重載方法,但是只能在子類中重寫方法。

重寫必須要有繼承

重寫:1、在子類中可以根據(jù)需要對從基類中繼承來的方法進行重寫。

2、重寫的方法和被重寫的方法必須具有相同方法名稱、參數(shù)列表和返回類型。

3、重寫方法不能使用比被重寫的方法更嚴格的訪問權限。

重載的時候,方法名要一樣,但是參數(shù)類型和個數(shù)不一樣,返回值類型可以相同也可以不相同。

無法以返回型別作為重載函數(shù)的區(qū)分標準。

11.Collection與Collections的區(qū)別是什么?

Collection是Java集合框架中的基本接口;

Collections是Java集合框架提供的一個工具類,其中包含了大量用于操作或返回集合的靜態(tài)方法。

12.Java中多態(tài)的實現(xiàn)原理

所謂多態(tài),指的就是父類引用指向子類對象,調(diào)用方法時會調(diào)用子類的實現(xiàn)而不是父類的實現(xiàn)。

多態(tài)的實現(xiàn)的關鍵在于“動態(tài)綁定”。

13.object中定義了哪些方法?

clone(), equals(), hashCode(), toString(), notify(), notifyAll(),

wait(), finalize(), getClass()

14.Java泛型和類型擦除?

泛型即參數(shù)化類型,在創(chuàng)建集合時,指定集合元素的類型,此集合只能傳入該類型的參數(shù)。

類型擦除:java編譯器生成的字節(jié)碼不包含泛型信息,所以在編譯時擦除:1.泛型用最頂級父類替換;

2.移除。

15.說出 5 個 JDK 1.8 引入的新特性?

Java 8 在 Java 歷史上是一個開創(chuàng)新的版本,下面 JDK 8 中 5 個主要的特性:

Lambda 表達式;

允許像對象一樣傳遞匿名函數(shù) Stream API,充分利用現(xiàn)代多核 CPU,可以寫出很簡潔的代碼 ;

Date 與 Time API,最終,有一個穩(wěn)定、簡單的日期和

時間庫可供你使用 擴展方法,現(xiàn)在,接口中可以有靜態(tài)、默認方法;

重復注解,現(xiàn)在你可以將相同的注解在同一類型上使用多次。

16.java中public,private,protected以及默認關鍵字的訪問范圍:

Protected可在包內(nèi)及包外子類訪問,default只能同一包內(nèi)訪問,prvate只能同一類

17. 常用數(shù)據(jù)結構:

集合,線性結構(數(shù)組,隊列,鏈表和棧),樹形結構,圖狀結構

18.Java 中的 TreeMap 是采用什么樹實現(xiàn)的?(答案)

Java 中的 TreeMap 是使用紅黑樹實現(xiàn)的。

19. 匿名內(nèi)部類是什么?如何訪問在其外面定義的變量?

匿名內(nèi)部類也就是沒有名字的內(nèi)部類,匿名內(nèi)部類只能使用一次,它通常用來簡化代碼編寫。

匿名內(nèi)部類只能訪問外部類的Final變量. Java 8更加智能:如果局部變量被匿名內(nèi)部類訪問,那么該局部變量相當于自動使用了final修飾。

20. 如何創(chuàng)建單例模式?說了雙重檢查,他說不是線程安全的。

如何高效的創(chuàng)建一個線程安全的單例?

一種是通過枚舉,一種是通過靜態(tài)內(nèi)部類。

21.poll() 方法和 remove() 方法的區(qū)別?

poll() 和

remove() 都是從隊列中取出一個元素,但是 poll() 在獲取元素失敗的時候會返回空,但是 remove() 失敗的時候會拋出異常。

22.寫一段代碼在遍歷 ArrayList 時移除一個元素

使用迭代器。

Iterator itr = list.iterator();

while(itr.hasNext()) {if(…) { itr.remove();

} }

—END—

內(nèi)容來源說明:本文章來自網(wǎng)絡收集,如侵犯了你的權益,請聯(lián)系QQ:2772182309進行刪除。
智能在線簡歷編輯器
錘子簡歷在線簡歷制作,一鍵導出,快速生成 專屬你的優(yōu)秀求職簡歷,敲定高薪 Offer~
立即創(chuàng)建簡歷

【使用錘子簡歷小程序制作簡歷】

范文模板 更多>