7月9日 19:00-21:30 阿裡雲開發者社群首場“Offer 5000”直播開啟!14位團隊技術大牛線上招人,更有《阿裡雲技術面試紅寶書》助你拿下Offer!戳下圖或連結馬上投遞履歷:
1. 為什麼需要有緩存?
在整個計算機系統設計過程之中,所有的程式執行最終都需要CPU完成,但是CPU不能直接進行硬碟資料的操作,所有的CPU可以處理的資料都要加載到記憶體之中。
2. 為什麼電腦使用一段時間就慢了?
不論什麼電腦,随着存儲的内容越來越多,最終都會導緻一個問題出現,那就是變慢。磁盤進行尋址時間會加長,随着磁盤碎片的增長,整個尋址過程又會變得異常緩慢。
3. 使用者多的情況下
每一個使用者一定要建立一個session,這樣電腦上就一定要為這個session配置設定記憶體空間。如果使用者多,那麼這些線程就一定會慢慢讓整個記憶體空間占滿,而後虛拟記憶體空間也都會慢慢占滿。後續的來訪者就無法進行session的建立,也就無法進行連接配接了,這個時候是卡在了前台的記憶體上。
如果使用者現在剛好可以正常通路,這個時候的問題又會出現在磁盤上了。
4. 現實中如果發現電腦變慢可以使用固态硬碟實作作業系統的安裝
固态硬碟在整個尋址處理上要比原始的機械硬碟速度快許多,是以現在使用固态硬碟相當于減少記憶體與檔案系統中的讀取時間。
但是需要考慮一個問題,固态硬碟價格昂貴,而且固态硬碟的使用壽命不如機械硬碟。
5. 在裝置簡陋的情況下如何提速?
如果把一些常用的資料直接放在記憶體裡面,不通過磁盤讀取,這樣就避免了磁盤上的性能障礙,就形成了緩存的基本概念,從此緩存開始出現。
6. 關于緩存的思考
哪些資料需要儲存在緩存裡?
大家的熱點操作需要緩存,而且這個緩存應該是針對某一新聞操作;
不用的資料什麼時候清理掉?
所有的緩存都是儲存在記憶體裡面的,而JVM的記憶體空間的清理是需要通過GC完成的,是以在java裡考慮到這種情況,提供有四種引用範圍;
還有兩種常用算法:LRU、FIFO;
是否需要同步?
緩存中的資料是儲存在記憶體之中,是以此時與磁盤的聯系就斷了,而所有的資料都要放在磁盤上,這個時候就可能出現緩存中的資料可能是舊資料,而磁盤會進行更新,這個時候如果進行同步,那麼一定會造成額外的系統開銷,是以緩存的資料都會采用隻讀的模式,不會進行更新處理。
7. 緩存的實作
緩存的形式基本有以下幾種:
檔案緩存:将一些資料儲存在檔案裡面,需要的時候進行讀取,這樣就避免了檔案内容的動态生成;
記憶體緩存:有些内容就直接儲存在記憶體裡面了,而對于記憶體緩存有兩種常用的元件:
- OSCache:主要是用在web上,可以在JSP頁面上緩存一些對象供使用者使用;
- EhCache:廣泛地應用在一些開發架構上,例如Hibernate、shiro;
緩存資料庫上(NOSQL資料庫):Memcached、Redis。
8. 需要有一個專門的緩存機器?
如果你使用了Nginx進行負載均衡,那麼Nginx本身是具備緩存機制的;
在進行緩存的時候考慮到處理性能,此時往往會搭建一個緩存的資料庫叢集,例如:Redis叢集。
9. 緩存資料的丢失問題
如果搭建了一個Redis叢集,雖然有主從的開發結構,但是如果主伺服器down掉了,那麼應該使用從伺服器,而這個過程中有可能造成資料的丢失。
很多時候往往不會直接采用主從結構,願意使用Zookeeper進行協調一緻的處理,因為Zookeeper切換很快,是以可以保證一台主機出問題之後,其它的主機可以立刻上來使用。
如果要進行分布式的緩存開發,強烈建議使用Redis資料庫。
更多專業知識,面試技巧就在面試一點通,持續更新中……
感謝浏覽~
本内容來源于
阿裡雲大學-Java面試技巧