怎麼掌握安卓中高階開發面試知識點?快取重點都在這!
前言
之前早就說要整理一個集合方便大家,還好沒有拖到2020年
BATJ、位元組跳動面試專題,演算法專題,高階技術專題,混合開發專題,java面試專題,Android,Java小知識,到效能最佳化.執行緒.View.OpenCV.NDK等已經上傳到了的我的GitHub
好了今天就跟著我來,告訴你快取重點,一起熟練掌握安卓中高階開發面試知識點!
我們都知道,幾乎所有的專案都做了快取,但是快取做的怎麼樣,其實只有每個人自己知道。
快取做的好,沒有網路也能流暢的使用;再多的資料請求都不會出現卡頓延遲等待很久的情況。
程式中除了圖片快取(三級快取),還有資訊快取。當使用者無法聯網時,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次訪問時間距當前時間最大的資料。如下:
- LFU - 最不經常使用(訪問次數)替換掉訪問次數最少的。這一策略意圖保留最常用的、最流行的物件,替換掉很少使用的那些。
LFU
的每個資料塊都有一個引用計數,所有資料塊按照引用計數排序,具有相同引用計數的資料塊則按照時間排序。如下:
- SIZE(快取大小)替換size最大的物件。這一策略透過淘汰一個大物件而不是多個小物件來提高命中率。不過,可能有些進入快取的小物件永遠不會再被訪問。SIZE策略沒有提供淘汰這類物件的機制,會導致“快取汙染”(大量偶發性的資料訪問讓記憶體中存放大量冷資料,也即是快取汙染)。
引申幾個問題,面試常被問到的問題:
1、http的快取是怎麼做的 ?
2、用的什麼?(這個問題和執行緒會同問,一般問一個。)
答案請自行百度。我就不說了。因為我看過http的原始碼,看過他的快取和執行緒。是自定義的。大家做一個瞭解就行。
這個問題被問到的頻率不高。而高頻問的一般是這種問題:有一個網路請求,有很多資料(比如一年,兩年,每天的資料都要請求出來),然後拿到資料後做處理,然後recycleview(或listview)展示出來。像這種請求由於資料很多, 會有一段時間的等待,導致頁面UI資料延遲的情況的解決方案。大家心裡要做一個準備。
最後
安卓中高階開發面試知識點掌握並不容易,所以我們要多看多學
看完這個知識點還想掌握更多的小夥伴,可以看我整理好的 中高階面試專題,分享給大家
如果大家還有更多內容也可以發出來,我們一起學習,共同進步!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2672839/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 安卓中高階開發面試知識點之——快取安卓面試快取
- 昨日PHP中高階面試重點回顧PHP面試
- 記錄疫情下PHP中高階面試重點PHP面試
- 面試需要掌握的知識點面試
- Redis面試三大知識點:快取雪崩、快取穿透、快取更新這些你瞭解多少?Redis面試快取穿透
- 關於Promise知識點都在這裡Promise
- Fragment 相關知識點都在這裡了Fragment
- Hibernate【快取】知識要點快取
- 關於MySQL的知識點與面試常見問題都在這裡MySql面試
- java面試需要掌握知識點|掘金技術徵文Java面試
- [ Java面試題 ]Java 開發崗面試知識點解析Java面試題
- 面試知識點面試
- 95%的技術面試必考的JVM知識點都在這,另附加分思路!面試JVM
- 4.9k Star 安卓面試知識點,請收下!安卓面試
- JavaScript中回撥函式知識點,都在這了!JavaScript函式
- Mybatis【逆向工程,快取,代理】知識要點MyBatis快取
- 高階 Java 面試通關知識點整理Java面試
- 面試開發常用的 JavaScript 知識點總結面試JavaScript
- Linux命令有哪些知識點需要掌握?面試題Linux面試題
- L02 Web 開發實戰筆記(重點知識點)Web筆記
- 這些喜聞樂見的Java面試知識點,你都掌握了嗎?Java面試
- HTTP知識點(前端需掌握)HTTP前端
- SDWebImage面試常問點知識點Web面試
- JAVA高階面試必過知識點彙總Java面試
- 所有和Java中代理有關的知識點都在這了。Java
- java 重寫知識點Java
- Nacos必知必會:這些知識點你一定要掌握!
- java知識點-高階Java
- 整理:iOS開發知識點iOS
- 中高階前端開發高頻面試題前端面試題
- TypeScript 引數簡化實戰(進階知識點conditional types,中高階必會)TypeScript
- 前端必須掌握的知識點前端
- JVM面試知識點梳理JVM面試
- jQuery面試知識點整理jQuery面試
- android 面試知識點Android面試
- [前端經典面試篇] 中高階面試知識點 中大廠必問 (更新至四月第六版)前端面試
- Android 開發需要掌握的技術知識點全面總結Android
- Hibernate一級快取(session)與二級快取(sessionFactory)的知識點。快取Session