溫故知新_JAVA

1. 抽象類與接口的區(qū)別

? ? 抽象類的本質(zhì)還是一個類,所以類的基本功能它都擁有,除了不能實例化但卻可以有構(gòu)造方法(普通類當(dāng)構(gòu)造函數(shù)是pritave的時候也是不能實例化的),抽象類可以有抽象方法,交給子類去實現(xiàn);接口中默認(rèn)所有都是public的,普通方法是不能有方法體的,可以有default的默認(rèn)方法且default方法是可以被覆蓋的,static的方法必須有方法體不能被覆蓋,且實現(xiàn)了這個接口的類不能直接調(diào)用靜態(tài)方法需要通過 接口.方法()的方式調(diào)用,接口可以有字段(是static、final的)

2. 策略模式與模板模式區(qū)別?

? ? 從解決問題的角度分析,策略模式是為了應(yīng)對多種情況而設(shè)計的,模版模式是為了解決共性問題設(shè)計的;且模版模式更加針對的是一個流程,比如對合同的加工處理。

3. 裝飾者模式與代理模式區(qū)別?

? ? 裝飾者本質(zhì)是對一個方法對裝飾、加強,而代理模式更多是針對類來說對,舉個例子:鋼鐵俠就是一個裝飾者模式,大家都知道脫了這個皮就是沒那么強大了;代理模式就像演員的替身,外人是不知道他們有什么不同的。

4. tcp/udp 區(qū)別?

? ? tcp是一個面向連接/可靠的傳輸層協(xié)議,udp同樣也是傳輸層協(xié)議,但udp是無連接不可靠的;Tcp通過校驗和,序號標(biāo)識,重傳控制,滑動窗口、確認(rèn)應(yīng)答實現(xiàn)可靠傳輸;如丟包時的重發(fā)控制,還可以對次序亂掉的分包進(jìn)行順序控制。(重傳控制會由于網(wǎng)絡(luò)原因降低傳輸速率);tcp是點對點的傳輸方式,而udp可以一對一,一對多,多對多傳輸,同時udp的由于少了許多保證可靠的機制傳輸速率自然要快許多,有很好的實時性。TCP對系統(tǒng)資源要求較多,UDP對系統(tǒng)資源要求較少。

5. tcp/ip 三次握手、四次握手?

? ? 連接建立:

? ? - 客戶端->服務(wù)端:SYN seq=x

? ? - 服務(wù)端->客戶端:SYN seq=y ACK=x+1

? ? - 客戶端->服務(wù)端:ACK=y+1

? ? 傳輸數(shù)據(jù):

? ? - 客戶端->服務(wù)端:SYN seq=x+1 ACK=y+1

? ? - 服務(wù)端->客戶端:ACK=x+2?


? ? 連接斷開:

? ? - 客戶端->服務(wù)端:FIN seq=x+2 ACK=y+2

? ? - 服務(wù)端->客戶端:ACK=x+3

? ? - 服務(wù)端->客戶端:FIN seq=y+1

? ? - 客戶端->服務(wù)端:ACK=y+2


? ? 為什么要這么做呢?舉個很形象的例子:


```

三次握手:

“喂,你聽得到嗎?”

“我聽得到呀,你誰???”

“我老王啊,今天你出去不?balabala……”

兩次握手:

“喂,你聽得到嗎?”

“我聽得到呀,你誰啊”

“喂喂,你聽得到嗎?”

“草,我聽得到呀?。。?!你TM誰啊”

“你TM能不能聽到我講話啊??!喂!”

“……”

四次握手:

“喂,你聽得到嗎?”

“我聽得到呀,你聽得到我嗎?”

“我能聽到你,你能聽到我嗎?”

“……不想跟傻逼說話”

```


6. 四層網(wǎng)絡(luò)協(xié)議?

? ? 應(yīng)用層(Http,F(xiàn)TP,Telnet)、傳輸層(TCP、UDP)、網(wǎng)絡(luò)層(IP、OSPF開放最短路徑優(yōu)先協(xié)議)、物理層?

? ? 7層模型中(ssl、tls和rpc屬于會話層)

7. 數(shù)據(jù)庫范式?

? ? - 第一范式:表中字段的屬性不可再分(字段要求力度最細(xì))

? ? - 第二范式:依賴第一范式,另外包含兩部分內(nèi)容,一是表必須有一個主鍵;二是沒有包含在主鍵中的列必須完全依賴于主鍵,而不能只依賴于主鍵的一部分。

? ? - 第三范式:依賴第二范式,另外非主鍵列必須直接依賴于主鍵,不能存在傳遞依賴。即不能存在:非主鍵列 A 依賴于非主鍵列 B,非主鍵列 B 依賴于主鍵的情況。


8. 冒泡/選擇/插入/快排/歸并

? ? - 冒泡排序:數(shù)組中相鄰兩個數(shù)字進(jìn)行對比(for in for)

? ? - 選擇排序:輪詢找出數(shù)組中最小的放到前面(for in for)

? ? - 插入排序:后一個數(shù)字與前一個數(shù)字比較誰小誰在前

? ? - 快速排序:找一個基準(zhǔn)值,小于基準(zhǔn)值的在左側(cè),大于基準(zhǔn)值的在右側(cè),然后左右兩邊循環(huán)上面的操作

? ? - 歸并排序:將數(shù)組/2分割到最小單位1~2個數(shù)組元素,然后判斷大小分別放入新的數(shù)組中組成新的數(shù)組,然后循環(huán)合并。


9. 二叉樹遍歷

? ? - 深度優(yōu)先:先序遍歷、中序遍歷、后序遍歷;利用棧數(shù)據(jù)結(jié)構(gòu),先左后右完成遍歷;

? ? - 廣度優(yōu)先:利用堆數(shù)據(jù)結(jié)構(gòu),自上而下完成遍歷


```

? ? public void funcA(Node node){

? ? ? ? // 先序

? ? ? ? //System.out.println(node.val);

? ? ? ? if (node.left!=null){

? ? ? ? ? ? funcA(node.left);

? ? ? ? }

? ? ? ? // 中序

? ? ? ? //System.out.println(node.val);

? ? ? ? if (node.right!=null){

? ? ? ? ? ? funcA(node.right);

? ? ? ? }

? ? ? ? // 后序

? ? ? ? //System.out.println(node.val);

? ? }

```


10. 紅黑樹/b-tree/b+tree? ?

? ? - 紅黑樹:非黑即紅,根節(jié)點一定為黑,葉子節(jié)點為黑,紅節(jié)點的子節(jié)點都是黑的,每條路徑都包含相同黑節(jié)點

? ? - B樹:非葉子節(jié)點的子節(jié)點至少2個即m個,根節(jié)點的子節(jié)點[2,m]個,根節(jié)點以外非葉子節(jié)點的子節(jié)點是[m/2,m],每個節(jié)點的關(guān)鍵字r=[m/2-1,m-1],r>2;非葉子節(jié)點關(guān)鍵字?jǐn)?shù)=非葉子節(jié)點的子節(jié)點數(shù)-1;所有字節(jié)點位于同一層

? ? - B+樹:在B樹的基礎(chǔ)上加以改進(jìn),非葉子節(jié)點的指針數(shù)與關(guān)鍵字?jǐn)?shù)一致,所有葉子節(jié)點增加一個鏈指針,所有關(guān)鍵字都在葉子節(jié)點出現(xiàn)


10. 內(nèi)部類與靜態(tài)內(nèi)部類的區(qū)別(局部內(nèi)部類/匿名內(nèi)部類)?

? ? 參考普通字段和靜態(tài)字段的區(qū)別,普通的內(nèi)部類需要在外部類實例化以后才可訪問,而靜態(tài)類不需要實例化就可以訪問;普通內(nèi)部類不能有靜態(tài)字段,而靜態(tài)類可以有非靜態(tài)字段;內(nèi)部類實例化后通過內(nèi)部指針訪問外部類的對象,而靜態(tài)類不能訪問外部類非靜態(tài)的字段或方法;局部類是方法內(nèi)創(chuàng)建的類,作用域僅限于這個方法內(nèi);匿名內(nèi)部類必須繼承一個父類或?qū)崿F(xiàn)一個接口,且不能為抽象類,因為匿名內(nèi)部類沒有類名故不能定義構(gòu)造函數(shù).?

11. https 請求過程

? ? ![image](http://7xs4tc.com1.z0.glb.clouddn.com/httpsCreat.png)

12. 類加載

? ? new 一個類,這個類首先要判斷是否已經(jīng)加載過,這個過程通過雙親委派模型判斷,如果沒有加載過,則要先進(jìn)行類的加載,加載過程是讀取class文件的字節(jié)碼,然后對字節(jié)碼進(jìn)行驗證,驗證字節(jié)碼的格式,以及這個類的權(quán)限,準(zhǔn)備階段初始化常量與靜態(tài)變量,解析階段將符號引用轉(zhuǎn)為直接引用,然后初始化執(zhí)行賦值,構(gòu)造方法。

13. gc?

? ? - 如何判斷對象是否可回收通過:訪問計數(shù)器、可達(dá)性分析;

? ? - 回收算法:標(biāo)記-清楚,復(fù)制,標(biāo)記-整理

? ? - 回收方式:分代回收(Young(Eden,from,to),Old,MetaSpace)

? ? - Serail/SerialOld 串行回收

? ? - Parallel New + CMS 高響應(yīng)

? ? - Parallel Scanvage + Paral OLd 高吞吐


14. 字節(jié)碼?

? ? 魔數(shù)、次要版本號、主要版本號、訪問標(biāo)識、常量、this_class、super_class、interface、方法、屬性

15. HashMap/HashTable/TreeMap/ConcurrentHashMap

? ? HashMap\ConcurrentHashMap是基于數(shù)組、鏈表、紅黑樹的數(shù)據(jù)結(jié)構(gòu),不同的是HashMap是非線程安全的,擴容2倍的原因是因為效率問題,我們希望put進(jìn)來的數(shù)據(jù)能構(gòu)均勻分布,最直接的想法就是%,但位運算要比%快的多,所以h&(length-1)是等價的,為什么鏈表長度達(dá)到8時才升級為紅黑樹?鏈表查詢效率是4,而紅黑樹是3,當(dāng)然6的時候也可以升級為樹,不過鏈表轉(zhuǎn)化為樹的過程的開銷甚至要比查詢的開銷大的多。

? ? HashTable 是線程安全的但key與value都不能為null,數(shù)據(jù)結(jié)構(gòu)是數(shù)組+鏈表;TreeMap更直接就是一個紅黑樹結(jié)構(gòu)。?

差異 | HashMap | HashTable | TreeMap|ConcurrentHashMap

---|---|---|---|---

數(shù)據(jù)結(jié)構(gòu)|數(shù)組、鏈表、紅黑樹|數(shù)組、鏈表|紅黑樹|數(shù)組、鏈表、紅黑樹

擴容| 2倍,高低位拆分鏈表 | 2倍,重新hash拆分鏈表 | 無|2倍,高低位拆分鏈表

put|允許key、value為null|不允許key、value為null|除根節(jié)點外key不能為null|不許key、null為null

size|直接讀取size|直接讀取count|counterCells+baseCount(put完畢后addCount是并發(fā)操作)|直接讀取size

16. ArrayList/LinkedList?

? ? Array是基于數(shù)組的,查詢快,Linked是基于鏈表的,插入刪除快?

17. List/Set?

? ? list允許重復(fù)/set不與許重復(fù)?

![image](http://images2015.cnblogs.com/blog/1010726/201706/1010726-20170621004756882-1379253225.gif)

19. Spring Ioc/Aop 實現(xiàn)原理

? ? ioc通俗說為控制反轉(zhuǎn),在Spring中我們通常用來來注入屬性,ioc實現(xiàn)的大致原理:收集Bean的信息,注冊Bean的信息,實例化Bean并放入Map容器中。aop是在生成bean的beanPostProcessirAfter中處理的,本質(zhì)是用動態(tài)代理,包裝了這個類,根據(jù)pointCut的描述添加執(zhí)行鏈。

20. Spring 事務(wù)實現(xiàn)原理?

? ? Spring的事務(wù)是依賴數(shù)據(jù)庫的,本質(zhì)就是通過代理模式幫我們做了commit(),rollback();?

Spring事務(wù)的傳播方式:?

- 支持當(dāng)前事務(wù),如果沒有弄個新的,然后用這個新的。

- 支持當(dāng)前事務(wù),如果當(dāng)前已有新的,掛起,再弄個新的

- 支持當(dāng)前事務(wù),如果當(dāng)前沒有,則不開啟事務(wù)。

- 支持當(dāng)前事務(wù),如果當(dāng)前沒有,則報異常。

21. 線程池參數(shù)含義/原理

? ? 核心線程/最大線程/持續(xù)時間/時間單位/阻塞隊列/拒絕異常處理器

? ? excute 實際上是把這個runable對象包裝為worker對象,通過worker對象中的thread調(diào)用start()方法,執(zhí)行這個runable,最終執(zhí)行的是runWorker方法,里面有個getTask的方法,線程開啟后就會不停的重里面拿阻塞隊列的任務(wù)去執(zhí)行,如果等待時間達(dá)到預(yù)期設(shè)定時間還沒有任務(wù)可執(zhí)行,則這個線程執(zhí)行完畢。

?著作權(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)容

  • 包含的重點內(nèi)容:JAVA基礎(chǔ)JVM 知識開源框架知識操作系統(tǒng)多線程TCP 與 HTTP架構(gòu)設(shè)計與分布式算法數(shù)據(jù)庫知...
    消失er閱讀 4,549評論 1 10
  • 一、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,442評論 0 16
  • 樹的概述 樹是一種非常常用的數(shù)據(jù)結(jié)構(gòu),樹與前面介紹的線性表,棧,隊列等線性結(jié)構(gòu)不同,樹是一種非線性結(jié)構(gòu) 1.樹的定...
    Jack921閱讀 4,758評論 1 31
  • 孩子馬上就要上幼兒園了,我的媽媽擔(dān)心焦慮癥越發(fā)嚴(yán)重,我四處向朋友們打聽,你們家孩子上幼兒園哭不哭啊,尿褲子...
    拉菲圓圈閱讀 270評論 0 0
  • 社會中所謂的公平,所謂的自由,所謂競爭……一切皆有其所謂的不公平、非自由或非競爭。 轉(zhuǎn)眼已是用年為單位來計算時間了...
    瑾洛閱讀 321評論 0 0

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