面試題總結——JAVA高階工程師(三)

NO IMAGE

三、面試題基礎總結

1、 JVM結構原理、GC工作機制詳解

答:具體參照:JVM結構、GC工作機制詳解     ,說到GC,記住兩點:1、GC是負責回收所有無任何引用物件的記憶體空間。 注意:垃圾回收回收的是無任何引用的物件佔據的記憶體空間而不是物件本身,2、GC回收機制的兩種演算法,a、引用計數法
 b、可達性分析演算法(  這裡的可達性,大家可以看基礎2 Java物件的什麼週期),至於更詳細的GC演算法介紹,大家可以參考:Java GC機制演算法

2、Java物件的生命週期

答:建立階段 、 應用階段 、不可見階段 、不可達階段 、收集階段 、終結階段、 物件空間重新分配階段等等,具體參照:Java 物件的生命週期

3、Map或者HashMap的儲存原理

答:HashMap是由陣列 連結串列的一個結構組成,具體參照:HashMap的實現原理

4、當資料表中A、B欄位做了組合索引,那麼單獨使用A或單獨使用B會有索引效果嗎?(使用like查詢如何有索引效果)

答:看A、B兩欄位做組合索引的時候,誰在前面,誰在後面,如果A在前,那麼單獨使用A會有索引效果,單獨使用B則沒有,反之亦然。同理,使用like模糊查詢時,如果只是使用前面%,那麼有索引效果,如果使用雙%號匹配,那麼則無索引效果


5、資料庫儲存日期格式時,如何考慮時區轉換問題?

答:使用TimeStamp ,  原因參照:Java程式設計中遇到的時區轉換問題

6、Java Object類中有哪些方法?

答:Object有哪些方法

7、HTTP協議,GET和POST 的區別

答:淺談HTTP中GET和POST的區別

四、執行緒、設計模式、快取方面

1、SimpleDataFormat是非執行緒安全的,如何更好的使用而避免風險呢

答:關於SimpleDateFormat安全的時間格式化執行緒安全問題

2、如何看待設計模式,並簡單說說你對觀察者模式的理解

答:1、設計模式有神馬用     2、觀察者模式類圖及實現

3、叢集環境中,session如何實現共享

答:1、Java叢集之session共享    2、session多伺服器共享方案,還有一種方案就是使用一個固定的伺服器專門保持session,其他伺服器共享


4、分散式、叢集環境中,快取如何重新整理,如何保持同步?

答:A、快取如何重新整理? 1、定時重新整理  2、主動重新整理覆蓋   ,每個快取框架都有自帶的重新整理機制,或者說快取失效機制,就拿Redis和 Ehcache舉例, 他們都有自帶的過期機制,另外主動重新整理覆蓋時,只需獲取對應的key進行資料的覆蓋即可

B、快取如何保持同步?  這個redis有自帶的叢集同步機制,即複製功能,具體參考:基於Redis分散式快取實現      ,Ehcache也有分散式快取同步的配置,只需要配置不同伺服器地址即可,參照:Ehcache分散式快取同步

5、一條sql執行過長的時間,你如何優化,從哪些方面?

答:1、檢視sql是否涉及多表的聯表或者子查詢,如果有,看是否能進行業務拆分,相關欄位冗餘或者合併成臨時表(業務和演算法的優化)
2、涉及連結串列的查詢,是否能進行分表查詢,單表查詢之後的結果進行欄位整合
3、如果以上兩種都不能操作,非要連結串列查詢,那麼考慮對相對應的查詢條件做索引。加快查詢速度
4、針對數量大的表進行歷史表分離(如交易流水錶)
5、資料庫主從分離,讀寫分離,降低讀寫針對同一表同時的壓力,至於主從同步,mysql有自帶的binlog實現 主從同步

6、explain分析sql語句,檢視執行計劃,分析索引是否用上,分析掃描行數等等

7、檢視mysql執行日誌,看看是否有其他方面的問題

個人理解:從根本上來說,查詢慢是佔用mysql記憶體比較多,那麼可以從這方面去酌手考慮

五、設計方案相關

面試還會問到一些關於設計方案相關的問題,比如

1、你的介面服務資料被人截包了,你如何防止資料惡意提交?

答:我們可以在介面傳輸引數裡面設定一個業務編號,這個編號用來區分是否重複提交。這樣即使資料被抓包了,對方也無法區分每個欄位你的含義,這時,這個業務編號的作用就來了

2、假設伺服器經常宕機,你從哪些方面去排查問題?

答:這個就留個各位看官補充了,可評論回覆