面試-基礎篇

基本功數據庫

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

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

線程:數據結構

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

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

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

四、HashMap 和 ConcurrentHashMap 的區別:ConcurrentHashMap線程安全(1.8爲synchronize,1.7及以前爲segment AQS)
五、HashMap 的工做原理及代碼實現:數組+鏈表(1.8新增紅黑樹),擴容爲當前容量一倍(arraylist爲當前的一半)
六、ConcurrentHashMap 的工做原理及代碼實現:同hashmap,1.8爲synchronize,1.7及以前爲segment AQSspa

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

 

鎖機制
一、說說線程安全問題:對象

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

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

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

五、CAS 樂觀鎖:樂觀去操做,失敗則能夠採用自旋重試(底層實現爲MESI協議)

六、ABA 問題:N線程讀取變量爲A,M線程A-->B,而後又B-->A,N線程再讀取的時候仍是A,認爲變量沒有變化,能夠採用AtomicStampedReference來解決,思路是版本號

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

JVM

jvm基礎知識

一、JVM 由哪些部分組成?:類加載器,執行引擎,內存區,本地方法調用

二、Java 虛擬機是如何斷定兩個 Java 類是相同的?:類全路徑名+類加載器的namespace

三、類加載器是如何加載 class 文件的?加載-->鏈接(驗證-->準備-->解析)-->初始化-->使用-->卸載 

四、類加載?:獲取類的字節碼-->類的靜態數據結構轉化爲運行時數據區數據結構-->在堆區生成Class對象,訪問入口

jvm內存管理

一、jvm內存劃分:方法區(運行時常量池,加載的類信息,常量,靜態變量,jit後的代碼),堆區(新生代(eden,s1,s2),老年代),虛擬機棧(局部變量表+操做數棧+動態連接+返回地址),本地方法棧,程序計數器

二、對象內存分配規則:優先在eden分配,無足夠空間出發minor GC|大對象直接進入老年代|年輕代長期存活對象進入老年代|空間分配擔保

三、Java內存模型:變量都存在主內存,每一個線程有本身的工做內存|工做內存包含主內存變量副分,線程操做的是工做內存|線程間變量值傳遞經過主內存進行

四、線程通訊:共享內存變量|wait,notify

五、

相關文章
相關標籤/搜索