更新時(shí)間:2019-08-02 09:31:16 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2995次
Java架構(gòu)師實(shí)戰(zhàn)核心知識(shí)整理,由于每篇的細(xì)節(jié)內(nèi)容實(shí)在太多啦,所以只把部分知識(shí)點(diǎn)截圖出來(lái)粗略的介紹,每個(gè)小節(jié)點(diǎn)里面都有各種細(xì)化講解內(nèi)容!
JVM
JVM是可運(yùn)行Java代碼的假想計(jì)算機(jī),包括一套字節(jié)碼指令集、一組寄存器、一個(gè)棧、一個(gè)垃圾回收,堆和一個(gè)存儲(chǔ)方法域。JVM是運(yùn)行在操作系統(tǒng)之上的,它與硬件沒(méi)有直接的交互。
運(yùn)行過(guò)程:
我們都知道Java源文件,通過(guò)編譯器,能夠生產(chǎn)相應(yīng)的.Class文件,也就是字節(jié)碼文件,而字節(jié)碼文件又通過(guò)Java虛擬機(jī)中的解釋器,編譯成特定機(jī)器上的機(jī)器碼。
也就是如下:
①Java源文件—->編譯器—->字節(jié)碼文件
②字節(jié)碼文件—->JVM—->機(jī)器碼
每一種平臺(tái)的解釋器是不同的,但是實(shí)現(xiàn)的虛擬機(jī)是相同的,這也就是Java為什么能夠跨平臺(tái)的原因了,當(dāng)一個(gè)程序從開(kāi)始運(yùn)行,這時(shí)虛擬機(jī)就開(kāi)始實(shí)例化了,多個(gè)程序啟動(dòng)就會(huì)存在多個(gè)虛擬機(jī)實(shí)例。程序退出或者關(guān)閉,則虛擬機(jī)實(shí)例消亡,多個(gè)虛擬機(jī)實(shí)例之間數(shù)據(jù)不能共享。
Java集合
接口繼承關(guān)系和實(shí)現(xiàn)
集合類存放于Java.util包中,主要有3種:set(集)、list(列表包含Queue)和map(映射)。
1.Collection:Collection是集合List、Set、Queue的最基本的接口。
2.Iterator:迭代器,可以通過(guò)迭代器遍歷集合中的數(shù)據(jù)
3.Map:是映射表的基礎(chǔ)接口
Java多線程并發(fā)
Java并發(fā)知識(shí)庫(kù)
Java線程實(shí)現(xiàn)/創(chuàng)建方式
繼承Thread類
Thread類本質(zhì)上是實(shí)現(xiàn)了Runnable接口的一個(gè)實(shí)例,代表一個(gè)線程的實(shí)例。啟動(dòng)線程的唯一方法就是通過(guò)Thread類的start()實(shí)例方法。start()方法是一個(gè)native方法,它將啟動(dòng)一個(gè)新線程,并執(zhí)行run()方法。
實(shí)現(xiàn)Runnable接口
如果自己的類已經(jīng)extends另一個(gè)類,就無(wú)法直接extendsThread,此時(shí),可以實(shí)現(xiàn)一個(gè)Runnable接口。
publicclassMyThreadextendsOtherClassimplementsRunnable{
publicvoidrun(){
System.out.println("MyThread.run()");
}
}13/04/2018Page55of283
//啟動(dòng)MyThread,需要首先實(shí)例化一個(gè)Thread,并傳入自己的MyThread實(shí)例:
MyThreadmyThread=newMyThread();
Threadthread=newThread(myThread);
thread.start();
//事實(shí)上,當(dāng)傳入一個(gè)Runnabletarget參數(shù)給Thread后,Thread的run()方法就會(huì)調(diào)用
target.run()
publicvoidrun(){
if(target!=null){
target.run();
}
}
Java基礎(chǔ)
如果某個(gè)方法不能按照正常的途徑完成任務(wù),就可以通過(guò)另一種路徑退出方法。在這種情況下會(huì)拋出一個(gè)封裝了錯(cuò)誤信息的對(duì)象。此時(shí),這個(gè)方法會(huì)立刻退出同時(shí)不返回任何值。另外,調(diào)用這個(gè)方法的其他代碼也無(wú)法繼續(xù)執(zhí)行,異常處理機(jī)制會(huì)將代碼執(zhí)行交給異常處理器。
Spring原理
它是一個(gè)全面的、企業(yè)應(yīng)用開(kāi)發(fā)一站式的解決方案,貫穿表現(xiàn)層、業(yè)務(wù)層、持久層。但是Spring仍然可以和其他的框架無(wú)縫整合。
6.1.1.Spring特點(diǎn)
6.1.1.1.輕量級(jí)
6.1.1.2.控制反轉(zhuǎn)
6.1.1.3.面向切面
6.1.1.4.容器
6.1.1.5.框架集合
微服務(wù)
客戶端注冊(cè)(zookeeper)
客戶端注冊(cè)是服務(wù)自身要負(fù)責(zé)注冊(cè)與注銷的工作。當(dāng)服務(wù)啟動(dòng)后向注冊(cè)中心注冊(cè)自身,當(dāng)服務(wù)下線時(shí)注銷自己。期間還需要和注冊(cè)中心保持心跳。心跳不一定要客戶端來(lái)做,也可以由注冊(cè)中心
負(fù)責(zé)(這個(gè)過(guò)程叫探活)。這種方式的缺點(diǎn)是注冊(cè)工作與服務(wù)耦合在一起,不同語(yǔ)言都要實(shí)現(xiàn)一套注冊(cè)邏輯。
Netty與RPC
Netty原理
Netty是一個(gè)高性能、異步事件驅(qū)動(dòng)的NIO框架,基于JAVANIO提供的API實(shí)現(xiàn)。它提供了對(duì)TCP、UDP和文件傳輸?shù)闹С郑鳛橐粋€(gè)異步NIO框架,Netty的所有IO操作都是異步非阻塞的,通過(guò)Future-Listener機(jī)制,用戶可以方便的主動(dòng)獲取或者通過(guò)通知機(jī)制獲得IO操作結(jié)果。
Netty高性能
在IO編程過(guò)程中,當(dāng)需要同時(shí)處理多個(gè)客戶端接入請(qǐng)求時(shí),可以利用多線程或者IO多路復(fù)用技術(shù)進(jìn)行處理。IO多路復(fù)用技術(shù)通過(guò)把多個(gè)IO的阻塞復(fù)用到同一個(gè)select的阻塞上,從而使得系統(tǒng)在單線程的情況下可以同時(shí)處理多個(gè)客戶端請(qǐng)求。與傳統(tǒng)的多線程/多進(jìn)程模型比,I/O多路復(fù)用的最大優(yōu)勢(shì)是系統(tǒng)開(kāi)銷小,系統(tǒng)不需要?jiǎng)?chuàng)建新的額外進(jìn)程或者線程,也不需要維護(hù)這些進(jìn)程和線程的運(yùn)行,降低了系統(tǒng)的維護(hù)工作量,節(jié)省了系統(tǒng)資源。
與Socket類和ServerSocket類相對(duì)應(yīng),NIO也提供了SocketChannel和ServerSocketChannel兩種不同的套接字通道實(shí)現(xiàn)。
多路復(fù)用通訊方式
Netty架構(gòu)按照Reactor模式設(shè)計(jì)和實(shí)現(xiàn),它的服務(wù)端通信序列圖如下:
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743