更新時間:2020-07-24 15:27:13 來源:動力節(jié)點 瀏覽2821次
1.Arrays.sort實現(xiàn)原理和Collection實現(xiàn)原理
答:Arrays.sort():快排
Collections.sort():MergeSort,后來變成了TimSort
2.foreach和while的區(qū)別(編譯之后)
答:foreach針對確定次數(shù);while不確定次數(shù)
3.線程池的種類,區(qū)別和使用場景
答:newCachedThreadPool創(chuàng)建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。
newFixedThreadPool創(chuàng)建一個定長線程池,可控制線程最大并發(fā)數(shù),超出的線程會在隊列中等待。
newScheduledThreadPool創(chuàng)建一個定長線程池,支持定時及周期性任務(wù)執(zhí)行。
newSingleThreadExecutor創(chuàng)建一個單線程化的線程池,它只會用唯一的工作線程來執(zhí)行任務(wù),保證所有任務(wù)按照指定順序(FIFO,LIFO,優(yōu)先級)執(zhí)行。
4.分析線程池的實現(xiàn)原理和線程的調(diào)度過程
答:多線程技術(shù)主要解決處理器單元內(nèi)多個線程執(zhí)行的問題,它可以顯著減少處理器單元的閑置時間,增加處理器單元的吞吐能力。
假設(shè)一個服務(wù)器完成一項任務(wù)所需時間為:T1創(chuàng)建線程時間,T2在線程中執(zhí)行任務(wù)的時間,T3銷毀線程時間。
如果:T1+T3遠大于T2,則可以采用線程池,以提高服務(wù)器性能。
一個線程池包括以下四個基本組成部分:
A、線程池管理器(ThreadPool):用于創(chuàng)建并管理線程池,包括創(chuàng)建線程池,銷毀線程池,添加新任務(wù);
B、工作線程(PoolWorker):線程池中線程,在沒有任務(wù)時處于等待狀態(tài),可以循環(huán)的執(zhí)行任務(wù);
C、任務(wù)接口(Task):每個任務(wù)必須實現(xiàn)的接口,以供工作線程調(diào)度任務(wù)的執(zhí)行,它主要規(guī)定了任務(wù)的入口,任務(wù)執(zhí)行完后的收尾工作,任務(wù)的執(zhí)行狀態(tài)等;
D、任務(wù)隊列(taskQueue):用于存放沒有處理的任務(wù)。提供一種緩沖機制。
線程池技術(shù)正是關(guān)注如何縮短或調(diào)整T1,T3時間的技術(shù),從而提高服務(wù)器程序性能的。它把T1,T3分別安排在服務(wù)器程序的啟動和結(jié)束的時間段或者一些空閑的時間段,這樣在服務(wù)器程序處理客戶請求時,不會有T1,T3的開銷了。
線程池不僅調(diào)整T1,T3產(chǎn)生的時間段,而且它還顯著減少了創(chuàng)建線程的數(shù)目,重用線程池中的線程。
按照優(yōu)先級調(diào)度線程。
5.線程池如何調(diào)優(yōu)
答:使用線程池的核心問題在于應(yīng)該使用多少線程。利特爾法則、拆分線程池
6.線程池的最大線程數(shù)目根據(jù)什么確定
答:corePoolSize:tasks*tasktime個線程數(shù)
queueCapacity:corePoolSize/tasktime)*responsetime
maxPoolSize:(每秒任務(wù)-queueCapacity)*(每秒單個線程處理任務(wù)數(shù)量)
7.動態(tài)代理的幾種方式
答:代理模式的作用是:為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個客戶不想或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。
動態(tài)代理:在程序運行時,運用反射機制動態(tài)創(chuàng)建而成。每一個動態(tài)代理類都必須要實現(xiàn)InvocationHandler這個接口。
jdk動態(tài)代理:jdk動態(tài)代理是由Java內(nèi)部的反射機制來實現(xiàn)的,應(yīng)用前提,必須是目標類基于統(tǒng)一的接口
cglib動態(tài)代理:動態(tài)代理框架,借助asm來實現(xiàn)的
8.HashMap的并發(fā)問題
答:HashMap是非線程安全的,可能造成死循環(huán)。
9.了解LinkedHashMap的應(yīng)用嗎
答:LinkedHashMap是HashMap的一個子類,它保留插入的順序,輸入順序和輸出順序相同。底層使用hash表和雙向鏈表來存儲。Eg。LRU緩存
以上就是動力節(jié)點java培訓(xùn)機構(gòu)的小編針對“2020年Java后臺面試題總結(jié)”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
初級 202925
初級 203221
初級 202629
初級 203743