1.spring的生命周期
Spring作為當前Java最流行、最強大的輕量級容器框架,了解熟悉spring的生命周期非常有必要;
首先容器啟動后,對bean進行初始化
按照bean的定義,注入屬性
檢測該對象是否實現(xiàn)了xxxAware接口,并將相關(guān)的xxxAware實例注入給bean,如BeanNameAware等
以上步驟,bean對象已正確構(gòu)造,通過實現(xiàn)BeanPostProcessor接口,可以再進行一些自定義方法處理。如:postProcessBeforeInitialzation。
BeanPostProcessor的前置處理完成后,可以實現(xiàn)postConstruct,afterPropertiesSet,init-method等方法,增加我們自定義的邏輯,
通過實現(xiàn)BeanPostProcessor接口,進行postProcessAfterInitialzation后置處理
接著Bean準備好被使用啦。
容器關(guān)閉后,如果Bean實現(xiàn)了DisposableBean接口,則會回調(diào)該接口的destroy()方法
通過給destroy-method指定函數(shù),就可以在bean銷毀前執(zhí)行指定的邏
2.TCP三次握手,四次揮手
tcp的三次握手四次揮手是每個程序員都應(yīng)該熟悉的。
三次握手:
第一次握手(SYN=1,seq=x),發(fā)送完畢后,客戶端進入SYN_SEND狀態(tài)
第二次握手(SYN=1,ACK=1,seq=y,ACKnum=x+1),發(fā)送完畢后,服務(wù)器端進入SYN_RCVD狀態(tài)。
第三次握手(ACK=1,ACKnum=y+1),發(fā)送完畢后,客戶端進入ESTABLISHED狀態(tài),當服務(wù)器端接收到這個包時,也進入ESTABLISHED狀態(tài),TCP握手,即可以開始數(shù)據(jù)傳輸。
四次揮手:
第一次揮手(FIN=1,seq=a),發(fā)送完畢后,客戶端進入FIN_WAIT_1狀態(tài)
第二次揮手(ACK=1,ACKnum=a+1),發(fā)送完畢后,服務(wù)器端進入CLOSE_WAIT狀態(tài),客戶端接收到這個確認包之后,進入FIN_WAIT_2狀態(tài)
第三次揮手(FIN=1,seq=b),發(fā)送完畢后,服務(wù)器端進入LAST_ACK狀態(tài),等待來自客戶端的最后一個ACK。
第四次揮手(ACK=1,ACKnum=b+1),客戶端接收到來自服務(wù)器端的關(guān)閉請求,發(fā)送一個確認包,并進入TIME_WAIT狀態(tài),等待了某個固定時間(兩個最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,沒有收到服務(wù)器端的ACK,認為服務(wù)器端已經(jīng)正常關(guān)閉連接,于是自己也關(guān)閉連接,進入CLOSED狀態(tài)。服務(wù)器端接收到這個確認包之后,關(guān)閉連接,進入CLOSED狀態(tài)。
3.線程池執(zhí)行流程圖
Java線程池:一種線程使用模式。線程過多會帶來調(diào)度開銷,進而影響緩存局部性和整體性能。而線程池維護著多個線程,等待著監(jiān)督管理者分配可并發(fā)執(zhí)行的任務(wù),這避免了在處理短時間任務(wù)時創(chuàng)建與銷毀線程的代價。線程池執(zhí)行流程是每個開發(fā)必備的。
執(zhí)行流程
提交一個任務(wù),線程池里存活的核心線程數(shù)小于線程數(shù)corePoolSize時,線程池會創(chuàng)建一個核心線程去處理提交的任務(wù)。
如果線程池核心線程數(shù)已滿,即線程數(shù)已經(jīng)等于corePoolSize,一個新提交的任務(wù),會被放進任務(wù)隊列workQueue排隊等待執(zhí)行。
當線程池里面存活的線程數(shù)已經(jīng)等于corePoolSize了,并且任務(wù)隊列workQueue也滿,判斷線程數(shù)是否達到maximumPoolSize,即最大線程數(shù)是否已滿,如果沒到達,創(chuàng)建一個非核心線程執(zhí)行提交的任務(wù)。
如果當前的線程數(shù)達到了maximumPoolSize,還有新的任務(wù)過來的話,直接采用拒絕策略處理。
JDK提供了四種拒絕策略處理類
AbortPolicy(拋出一個異常,默認的)
DiscardPolicy(直接丟棄任務(wù))
DiscardOldestPolicy(丟棄隊列里最老的任務(wù),將當前這個任務(wù)繼續(xù)提交給線程池)
CallerRunsPolicy(交給線程池調(diào)用所在的線程進行處理
以上就是深圳達內(nèi)教育java培訓機構(gòu)的小編針對“Java主流技術(shù),Java軟件開發(fā)必學項”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。