轉載自:http://blog.csdn.net/moneyshi/article/details/53086927
三、面試題基礎總結
1、 JVM結構原理、GC工作機制詳解
答:具體參照:JVM結構、GC工作機制詳解 ,說到GC,記住兩點:1、GC是負責回收所有無任何引用對象的內存空間。 注意:垃圾回收回收的是無任何引用的對象占據的內存空間而不是對象本身,2、GC回收機制的兩種算法,a、引用計數法 b、可達性分析算法( 這里的可達性,大家可以看基礎2 Java對象的什么周期),至於更詳細的GC算法介紹,大家可以參考:Java GC機制算法
2、Java對象的生命周期
答:創建階段 、 應用階段 、不可見階段 、不可達階段 、收集階段 、終結階段、 對象空間重新分配階段等等,具體參照:Java 對象的生命周期
3、Map或者HashMap或者concurrentHashMap的存儲原理
答:HashMap是由數組+鏈表的一個結構組成,具體參照:HashMap的實現原理
HashMap和ConcurrentHashMap的源碼分析
4、當數據表中A、B字段做了組合索引,那么單獨使用A或單獨使用B會有索引效果嗎?(使用like查詢如何有索引效果)
答:看A、B兩字段做組合索引的時候,誰在前面,誰在后面,如果A在前,那么單獨使用A會有索引效果,單獨使用B則沒有,反之亦然。同理,使用like模糊查詢時,如果只是使用前面%,那么有索引效果,如果使用雙%號匹配,那么則無索引效果
5、數據庫存儲日期格式時,如何考慮時區轉換問題?
答:使用TimeStamp , 原因參照:Java編程中遇到的時區轉換問題
6、Java Object類中有哪些方法?
7、HTTP協議,GET和POST 的區別
四、線程、設計模式、緩存方面
1、SimpleDataFormat是非線程安全的,如何更好的使用而避免風險呢
答:關於SimpleDateFormat安全的時間格式化線程安全問題
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、假設服務器經常宕機,你從哪些方面去排查問題?
答:這個就留個各位看官補充了,可評論回復