java面試題(111-120)

111.哈夫曼編碼

??????? 簡易的理解就是,假如我有A,B,C,D,E五個字符,出現(xiàn)的頻率(即權(quán)值)分別為5,4,3,2,1,那么我們第一步先取兩個最小權(quán)值作為左右子樹構(gòu)造一個新樹,即取1,2構(gòu)成新樹,其結(jié)點為1+2=3,如圖:

??????? 虛線為新生成的結(jié)點,第二步再把新生成的權(quán)值為3的結(jié)點放到剩下的集合中,所以集合變成{5,4,3,3},再根據(jù)第二步,取最小的兩個權(quán)值構(gòu)成新樹,如圖:

??????? 再依次建立哈夫曼樹,如下圖:

??????? 其中各個權(quán)值替換對應(yīng)的字符即為下圖:

??????? 所以各字符對應(yīng)的編碼為:A->11,B->10,C->00,D->011,E->010

112.說說Runnable與Callable

Callable接口:public interface Callable{ V call() throws Exception;}

Runnable接口:public interface Runnable { public abstract void run();}

相同點:

??????? 1.兩者都是接口;(廢話)

??????? 2.兩者都可用來編寫多線程程序;

??????? 3.兩者都需要調(diào)用Thread.start()啟動線程;

不同點:

??????? 1.兩者最大的不同點是:實現(xiàn)Callable接口的任務(wù)線程能返回執(zhí)行結(jié)果;而實現(xiàn)Runnable接口的任務(wù)線程不能返回結(jié)果;

??????? 2.Callable接口的call()方法允許拋出異常;而Runnable接口的run()方法的異常只能在內(nèi)部消化,不能繼續(xù)上拋;

注意點:?Callable接口支持返回執(zhí)行結(jié)果,此時需要調(diào)用FutureTask.get()方法實現(xiàn),此方法會阻塞主線程直到獲取‘將來’結(jié)果;當(dāng)不調(diào)用此方法時,主線程不會阻塞

Callable工作的Demo:

Runnable工作的Demo:

113.java線程池

https://www.cnblogs.com/aspirant/p/6920418.html

114.synchronized與Lock的區(qū)別

兩者區(qū)別:

1.首先synchronized是java內(nèi)置關(guān)鍵字,在jvm層面,Lock是個java類;

2.synchronized無法判斷是否獲取鎖的狀態(tài),Lock可以判斷是否獲取到鎖;

3.synchronized會自動釋放鎖(a 線程執(zhí)行完同步代碼會釋放鎖 ;b 線程執(zhí)行過程中發(fā)生異常會釋放鎖),Lock需在finally中手工釋放鎖(unlock()方法釋放鎖),否則容易造成線程死鎖;

4.用synchronized關(guān)鍵字的兩個線程1和線程2,如果當(dāng)前線程1獲得鎖,線程2線程等待。如果線程1阻塞,線程2則會一直等待下去,而Lock鎖就不一定會等待下去,如果嘗試獲取不到鎖,線程可以不用一直等待就結(jié)束了;

5.synchronized的鎖可重入、不可中斷、非公平,而Lock鎖可重入、可判斷、可公平(兩者皆可)

6.Lock鎖適合大量同步的代碼的同步問題,synchronized鎖適合代碼少量的同步問題。

115.synchronized鎖升級過程

https://www.cnblogs.com/kubidemanong/p/9520071.html

https://blog.csdn.net/mmoren/article/details/79185862#commentBox

116.hashmap 在JDK1.7 和1.8為什么數(shù)組下標(biāo)拉鏈時候是一個頭插入,一個尾叉?

?https://blog.csdn.net/qq_36520235/article/details/82417949

117.線程池shumdown 時候還有線程跑的話發(fā)生了什么

??????? 對shutdown方法的調(diào)用,可以防止新任務(wù)的被提交給這個Executor,當(dāng)前線程將繼續(xù)運行在shutdown()被調(diào)用之前提交的所有任務(wù)。這個程序?qū)⒃贓xecutor中的所有任務(wù)完成中之后盡快退出。

線程池文章:

http://www.itdecent.cn/p/210eab345423

118.B樹B+樹的區(qū)別?

http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html

119.淺談AVL樹,紅黑樹,B樹,B+樹原理及應(yīng)用

https://blog.csdn.net/whoamiyang/article/details/51926985

https://blog.csdn.net/guoziqing506/article/details/64122287

120.如何理解valatile保證內(nèi)存有序性

http://www.360doc.com/content/18/0311/23/14567867_736238973.shtml

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 不足的地方請大家多多指正,如有其它沒有想到的常問面試題請大家多多評論,一起成長,感謝!~ String可以被繼承嗎...
    啟示錄是真的閱讀 3,067評論 3 3
  • 由于時間倉促,有些地方未寫完,后面會繼續(xù)補充.如有不妥之處,歡迎及時與我溝通. 如果你也是在學(xué)習(xí)java,給你們推...
    分不清java閱讀 2,871評論 0 15
  • Java SE 基礎(chǔ): 封裝、繼承、多態(tài) 封裝: 概念:就是把對象的屬性和操作(或服務(wù))結(jié)合為一個獨立的整體,并盡...
    Jayden_Cao閱讀 2,234評論 0 8
  • 相關(guān)概念 面向?qū)ο蟮娜齻€特征 封裝,繼承,多態(tài).這個應(yīng)該是人人皆知.有時候也會加上抽象. 多態(tài)的好處 允許不同類對...
    東經(jīng)315度閱讀 2,191評論 0 8
  • 姓名:王琦 公司:南京浩樂科技有限公司 【日精進第159天】 一、【學(xué)~勤學(xué)】 ①日常課誦 《大學(xué)開篇》《六項精進...
    王琦精進打卡閱讀 157評論 0 0

友情鏈接更多精彩內(nèi)容