Java後臺開發面試題總結

1>如何定位線上服務OOM問題 java

2>JVM的GC ROOTS存在於那些地方mysql

3>mysql innodb怎樣作查詢優化算法

4>java cas的概念sql

 

Java服務OOM,比較常見的緣由是網絡

⭐️ 有多是內存分配確實太小,而正常業務使用了大量內存 好比jmp -heap命令能夠查看新生帶,老年代內存大小的狀況。看看內存自己是否分配太小。性能

⭐️ 某一個對象被頻繁申請,卻沒有釋放,內存不斷泄漏,致使內存耗盡 ,好比jmap -histo:live 對象顯示存活對象的信息,並按照所佔內存大小的排序。由於包含了實例數、所佔         內存大小、類名,因此很直觀。優化

⭐️ 某一個資源被頻繁申請,系統資源耗盡,例如:不斷建立線程,不斷髮起網絡鏈接線程

 

2>JVM的GC ROOTS存在於那些地方、日誌

 問到這個問題應該是前面一步步引導過來的,若是沒有,在直接回答這個問題以前,最好簡要描述一下JVM的內存結構和根搜索算法(GC ROOTS Tracing)作可達性分析。對象

⭐️  虛擬機棧(棧楨中的本地變量表)中的引用的對象

⭐️  方法區中的類靜態屬性引用的對象

⭐️  方法區中的常量引用的對象

⭐️  本地方法棧中JNI的引用的對象

       Gc管理的主要的區域是java堆,通常狀況只針對堆進行垃圾回收。方法區,棧,和本地方法區不被Gc所管理,於是選擇這些區域做爲GC  ROOTS ,被GC  ROOTS引用的不會 

      被垃圾回收。

 

mysql innodb怎樣作查詢優化

⭐️  innodb_buffer_pool_size 此參數的做用是緩衝數據和索引,對性能能夠產生線性的提升,最大可設置爲內存大小的百分之七八十的樣子

⭐️  打開慢查詢日誌,增長參數:log-queries-not-using-indexes,方便把系統中沒有走索引的sql語句全抓出來優化

⭐️  經過explain作查詢分析,看看有沒有用索引,訪問的行數rows

⭐️  關閉skip_name_resolve,減小逆向DNS解析的消耗

另外還有一些實際寫代碼過程當中深刻骨髓的,好比數據動靜分離提升query_cache的命中率啦,減小字段冗餘,減小查詢次數啦,複雜查詢分解啦,分頁優化啦啥的。

 

4>java cas的概念

cas:compare and swap,比較並交換 

java的concurrent包中藉助cas實現了區別於synchronized同步鎖的一種樂觀鎖。

CAS利用CPU的CAS指令,同時借用JNDI來完成java的非阻塞算法,其餘的原子操做都是利用相似的特性完成的。java的concurrent包相對於使用synchronized性能提高也主要依賴它。

相關文章
相關標籤/搜索