91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么掌握安卓中高級開發面試知識點?緩存重點都在這!

發布時間:2020-08-10 15:48:42 來源:ITPUB博客 閱讀:136 作者:yilian 欄目:移動開發
前言

之前早就說要整理一個集合方便大家,還好沒有拖到2020年
BATJ、字節跳動面試專題,算法專題,高端技術專題,混合開發專題,java面試專題,Android,Java小知識,到性能優化.線程.View.OpenCV.NDK等已經上傳到了的我的GitHub

大家點擊我的GitHub地址: https://github.com/Meng997998/AndroidJX點下star一起學習

好了今天就跟著我來,告訴你緩存重點,一起熟練掌握安卓中高級開發面試知識點!

我們都知道,幾乎所有的項目都做了緩存,但是緩存做的怎么樣,其實只有每個人自己知道。
緩存做的好,沒有網絡也能流暢的使用;再多的數據請求都不會出現卡頓延遲等待很久的情況。

程序中除了圖片緩存(三級緩存),還有信息緩存。當用戶無法聯網時,app會默認顯示緩存的數據。

前言緩存方式

SQLite

下載完數據文件后,把文件的相關信息如url,路經,下載時間,過期時間等存放到數據庫,把url作為唯一的標識。下次下載的時候根據url先從數據庫中查詢,如果查詢到當前時間并未過期,就根據路徑讀取本地文件,從而實現緩存的效果。

文件緩存使用File.lastModified()方法得到文件的最后修改時間,與當前時間判斷是否過期,從而實現緩存效果。數據格式為JSON。

緩存方式兩點說明

1、不同類型的文件的緩存時間不一樣。籠統的說,不變文件的緩存時間是永久,變化文件的緩存時間是最大忍受不變時間。說白點,圖片文件內容是不變的,一般存在SD卡上直到被清理,我們是可以永遠讀取緩存的。配置文件內容是可能更新的,需要設置一個可接受的緩存時間。

2、不同環境下的緩存時間標準不一樣。無網絡環境下,我們只能讀取緩存文件,為了應用有東西顯示,沒有什么過期之說了。

WiFi

網絡環境下,緩存時間可以設置短一點,一是網速較快,而是流量不要錢。

3G

流量環境下,緩存時間可以設置長一點,節省流量,而且用戶體驗也更好。

緩存時間

app中多個頁面的緩存時間是不一樣的,對實時性要求高的頁面緩存時間較短。而http消息頭中包含有緩存時間,android端無需自己記錄/規定緩存時間,讀取即可。

http協議對緩存的支持

Expires & Cache-Control

Expires響應首部給出了響應失效的絕對時間,這樣客戶端就可以緩存一份副本,在這個時間到期之前,

不用去詢問服務器它是否有效了。http1.0引入。 例:Expires: Thu, 03 Oct 1997 17:15:00 GMT

Cache-Control首部用于傳輸對象的緩存信息。http1.1引入。它的值是一個緩存指令,給出了與某個對象可緩存性有關的特有指令。這個首部可以出現在請求或者響應頭中。例如:Cache-Control: no-cache

CacheControl

有兩個字段表達響應的過期時間:max-age和max-stale

前者表示:max-age秒內,網頁再有請求,你不要來我服務端,直接取你本地緩存的結果好了

后者表示:max-stale秒內的請求,你可以使用本地緩存的,但還是要來我服務端問問,到底行不行,當然,這里要帶上Last Modified等信息 ,如果服務端返回了304,那說明你本地緩存繼續用吧,我不給你響應體200的話,自然就帶上了響應體。

Expires和Cache-Control作用一致,都是指當前資源的有效期,控制是直接從緩存獲取數據還是重新發送請求到服務器取數據。

緩存算法

1、 LRU - 最近最少使用(最后訪問時間)替換掉最近被請求最少的文檔。這一傳統策略在實際中應用最廣。在CPU緩存淘汰和虛擬內存系統中效果較好。

2、 LRU-K

LRU-K

中的K代表最近使用的次數,也可以認為是LRU-1。LRU-K的主要目的是為了解決LRU算法“緩存污染”的問題,其核心思想是將“最近使用過1次”的判斷標準擴展為“最近使用過K次”。相比LRU,LRU-K需要多維護一個隊列,用于記錄所有緩存數據被訪問的歷史。只有當數據的訪問次數達到K次的時候,才將數據放入緩存。當需要淘汰數據時,LRU-K會淘汰第K次訪問時間距當前時間最大的數據。如下:

怎么掌握安卓中高級開發面試知識點?緩存重點都在這!
  1. LFU - 最不經常使用(訪問次數)替換掉訪問次數最少的。這一策略意圖保留最常用的、最流行的對象,替換掉很少使用的那些。

LFU

的每個數據塊都有一個引用計數,所有數據塊按照引用計數排序,具有相同引用計數的數據塊則按照時間排序。如下:

怎么掌握安卓中高級開發面試知識點?緩存重點都在這!
  1. SIZE(緩存大小)替換size最大的對象。這一策略通過淘汰一個大對象而不是多個小對象來提高命中率。不過,可能有些進入緩存的小對象永遠不會再被訪問。SIZE策略沒有提供淘汰這類對象的機制,會導致“緩存污染”(大量偶發性的數據訪問讓內存中存放大量冷數據,也即是緩存污染)。

引申幾個問題,面試常被問到的問題:

1、http的緩存是怎么做的 ?
2、用的什么?(這個問題和線程會同問,一般問一個。)

答案請自行百度。我就不說了。因為我看過http的源碼,看過他的緩存和線程。是自定義的。大家做一個了解就行。

這個問題被問到的頻率不高。而高頻問的一般是這種問題:有一個網絡請求,有很多數據(比如一年,兩年,每天的數據都要請求出來),然后拿到數據后做處理,然后recycleview(或listview)展示出來。像這種請求由于數據很多, 會有一段時間的等待,導致頁面UI數據延遲的情況的解決方案。大家心里要做一個準備。

最后

安卓中高級開發面試知識點掌握并不容易,所以我們要多看多學

看完這個知識點還想掌握更多的小伙伴,可以看我整理好的  中高級面試專題,分享給大家

如果大家還有更多內容也可以發出來,我們一起學習,共同進步!

怎么掌握安卓中高級開發面試知識點?緩存重點都在這!
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄯善县| 九寨沟县| 岱山县| 永川市| 邹城市| 肇东市| 西昌市| 宜良县| 遵义县| 云南省| 江永县| 乐安县| 玉山县| 辽中县| 呼图壁县| 西安市| 景洪市| 宁乡县| 淮滨县| 桓台县| 化德县| 理塘县| 平邑县| 三原县| 扎赉特旗| 彝良县| 大港区| 黄梅县| 同心县| 阿城市| 雷波县| 察雅县| 拉萨市| 昭平县| 泸水县| 元谋县| 东乌| 酉阳| 安国市| 浑源县| 恭城|