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