滴滴面試題答案思路

1.mysql   mysql

1.1.介紹下介紹下innodb的索引類型、數據結構spring

普通索引,惟一索引,主鍵索引:也就是聚簇索引,全文索引(FULLTEXT),彙集索引,非彙集索引等。sql

數據結構B+樹:數組

B+樹特色安全

1.矮胖型,多路複用樹,樹的高度最大爲3。數據結構

2.全部數據都是存儲在葉子節點上,非葉子節點存儲索引(範圍存儲)。jvm

3.查詢IO次數少,查詢效率高。 主鍵查詢,只須要一次IO.模塊化

參考:http://www.javashuo.com/article/p-mfjtcakx-do.html性能

1.2.爲何這麼設計(爲何不用B樹).net

B樹 量大的時候高度太大,並且容易左旋和右旋。搜索性能不行。

2.JVM   

2.1.介紹jvm模型   

 

2.2.介紹垃圾回收   

2.3.gc的觸發條件是什麼   

2.4.說一個你對gc調優的經歷

3.JDK   

3.1.介紹HashMap(結構、原理、爲何鏈表調整爲樹的閾值是8 — ps:這個我也不知道)  

線程不安全,底層使用數組加鏈表實現,鏈表是爲了解決hash衝突。

key->計算hashCode->位移->計算出下標,若是2個key計算出來的下標同樣,第二key放進去的時候,遍歷這個數組對應的鏈表,那麼就使用key的equals方法去比較,若是eqals相同,就覆蓋,反之就放在鏈表的頭部。

在jdk1.8的時候了,鏈表長度超過8的時候,會自動轉變爲紅黑樹數據結果。由於紅黑樹查詢效率高。若是不轉繼續使用鏈表,那麼查詢效率較低。

3.2.ConcurrentHashMap(原理、與HashMap區別) 

線程安全,使用的是分段鎖,put的時候只對對應的 hash桶上鎖,未上鎖以外的數據讀寫不影響。在jdk1.8以後,原來的這個synchronized這個鎖,改成synchronized+cas(比較並替換)實現,相似無鎖化串行設計,加鎖粒度更細,效率更高。

3.3.lock 與 synchronize(實現原理、兩者區別、synchronize的鎖升級)

Lock是一個接口,而synchronized是關鍵字。
synchronized會自動釋放鎖,而Lock必須手動釋放鎖。
Lock可讓等待鎖的線程響應中斷,而synchronized不會,線程會一直等待下去。
經過Lock能夠知道線程有沒有拿到鎖,而synchronized不能。
Lock能提升多個線程讀操做的效率。
synchronized能鎖住類、方法和代碼塊,而Lock是塊範圍內的

4.Spring   

4.1.爲何選擇用spring(ps:我以爲問的挺水)   

系統整合,系統結構,模塊化,切面化,簡化開發。

4.2.說下AOP(原理:jdk動態代理、cglib),舉個應用AOP的例子   

AOP底層使用jdk動態代理和cglib實現,

在方法先後記錄日誌,可使用AOP,跟業務無關。

4.3.SpringBoot(爲何用,原理)

相關文章
相關標籤/搜索