1. 程式人生 > >面試-基礎篇

面試-基礎篇

而是 count 線程安全問題 ash thread sleep -- table 技術分享

基本功

1,HTTP 請求的 GET 與 POST 方式的區別:Post的數據大多都在body裏面,post比get多一次header請求

2,equals 與 == 的區別:equals是邏輯等,==是對象地址

線程:

1,Arraylist 與 LinkedList 區別:arraylist底層數組(讀取效率高),linked底層鏈表(更新效率高)

2,ArrayList 與 Vector 區別:vetctor線程安全,synchronize

3,HashMap 和 Hashtable 的區別:hashtable線程安全(synchronize),key value皆不能為空

4、HashMap 和 ConcurrentHashMap 的區別:ConcurrentHashMap線程安全(1.8為synchronize,1.7及之前為segment AQS)
5、HashMap 的工作原理及代碼實現:數組+鏈表(1.8新增紅黑樹),擴容為當前容量一倍(arraylist為當前的一半)
6、ConcurrentHashMap 的工作原理及代碼實現:同hashmap,1.8為synchronize,1.7及之前為segment AQS

線程
1、創建線程的方式及實現:Thread,Runnable,Callable(FutureTask)
2、sleep() 、join()、yield()有什麽區別:sleep出讓CPU,不釋放鎖|wait出讓cpu,釋放鎖|yield出讓cpu,不釋放鎖|join,讓當前線程等待調用join的線程
3、說說 CountDownLatch 原理:AQS中,state為count
4、說說 CyclicBarrier 原理:
5、說說 Semaphore 原理:
6、說說 Exchanger 原理
7、說說 CountDownLatch 與 CyclicBarrier 區別
8、ThreadLocal 原理分析:Thread有個map屬性,key為ThreadLocal類的變量,value為範型值,每次get都是去查map
9、講講線程池的實現原理:poolSize < corePoolSize,新建線程|poolSize > corePoolSize,隊列未滿,放隊列|poolSize > corePoolSize,隊列已滿,poolSize < maximumPoolSize,新增線程|poolSize > corePoolSize,隊列已滿,poolSize = maximumPoolSize,則拒絕|線程執行完任務後,不立即退出,而是檢查隊列還有沒有任務,沒有則會退出超出corePoolSize的線程
10、線程池的幾種方式:newCachedThreadPool|newFixedThreadPool|newSingleThreadExecutor|newScheduleThreadPool|new ThreadPooledExecutor()
11、線程的生命周期

技術分享圖片

鎖機制
1、說說線程安全問題:

2、volatile 實現原理:內存屏障,禁止重排序

3、synchronize 實現原理:monitorenter,monitorexit(底層為對象頭中記錄了線程標識)

4、synchronized 與 lock 的區別:synchronized是jvm實現的,悲觀鎖,lock是jdk的AQS實現的,樂觀鎖

5、CAS 樂觀鎖:樂觀去操作,失敗則可以采用自旋重試(底層實現為MESI協議)

6、ABA 問題:N線程讀取變量為A,M線程A-->B,然後又B-->A,N線程再讀取的時候還是A,認為變量沒有變化,可以采用AtomicStampedReference來解決,思路是版本號

7、樂觀鎖的業務場景及實現方式:數據庫采用版本號來解決記錄的並發更新

面試-基礎篇