本篇大綱內(nèi)容
13.1.架構(gòu)&框架
問(wèn)題一: 架構(gòu)&框架是什么森枪?
- 引入框架&架構(gòu),主要是為了實(shí)現(xiàn)
模塊化
伟墙。 - 然后再做一個(gè)相應(yīng)的
分層
钾恢。 - 目的就是為了
解耦
手素。 - 最終達(dá)到
降低代碼重合度
的效果
13.2.圖片緩存框架
問(wèn)題一: 怎樣設(shè)計(jì)一個(gè)圖片緩存框架?
圖片緩存框架設(shè)計(jì)圖解
- 首先我們這個(gè)圖片管理緩存框架需要有一個(gè)管理者
Manager
用于管理或者說(shuō)協(xié)調(diào)調(diào)度這個(gè)框架內(nèi)部的各個(gè)模塊赘那。 - 接下來(lái)需要有個(gè)關(guān)于內(nèi)存緩存的模塊刑桑,然后有一個(gè)關(guān)于磁盤(pán)緩存的模塊,如果圖片需要網(wǎng)絡(luò)獲取募舟,還需要一個(gè)網(wǎng)絡(luò)獲取圖片的模塊祠斧。
- 如果圖片是經(jīng)過(guò)壓縮的,我們就需要配一個(gè)圖片解碼的管理者
Code Manager
拱礁,用于調(diào)度圖片解碼模塊
和圖片壓縮/解壓縮模塊
琢锋。
問(wèn)題二: 一般常用的圖片庫(kù),圖片通過(guò)什么方式進(jìn)行讀寫(xiě)呢灶,過(guò)程是怎么樣的吴超?
-
以圖片 URL 的單向 Hash 值作為 Key。
圖片在框架中的讀取流程
問(wèn)題三: 內(nèi)存的設(shè)計(jì)上需要考慮哪些問(wèn)題鸯乃?
- 存儲(chǔ)的 Size(不能無(wú)限大鲸阻,容易造成內(nèi)存壓力過(guò)大)
- 淘汰策略(因?yàn)橛?Size 的限制跋涣,所以在超過(guò)限制了,就要有對(duì)應(yīng)的淘汰策略)
存儲(chǔ)的 Size 在數(shù)據(jù)結(jié)構(gòu)上的設(shè)計(jì)(重要)
淘汰策略一:利用隊(duì)列的先進(jìn)先出方式進(jìn)行淘汰
淘汰策略一:通過(guò) LRU 算法進(jìn)行淘汰鸟悴,定時(shí)檢測(cè)不推薦陈辱,耗時(shí)費(fèi)力
問(wèn)題四: 磁盤(pán)設(shè)計(jì)要考慮哪些問(wèn)題?
問(wèn)題思路指引细诸,相比于內(nèi)存沛贪,磁盤(pán)的存儲(chǔ)很大,但是讀取效率比較低震贵±常基于這個(gè)我們可以嘗試尋找答案。
- 存儲(chǔ)方式的選擇
- 大小限制(如 100MB)
- 淘汰策略(如某一圖片存儲(chǔ)時(shí)間距今已超過(guò)7 天)
問(wèn)題五:網(wǎng)絡(luò)設(shè)計(jì)要考慮哪些問(wèn)題猩系?
- 圖片請(qǐng)求最大并發(fā)量(比如最大并發(fā)量 10)
- 請(qǐng)求超時(shí)策略(再次請(qǐng)求媚送,失敗兩次就不請(qǐng)求)
- 請(qǐng)求優(yōu)先級(jí)(有些重要的圖片,優(yōu)先請(qǐng)求寇甸,失敗多次重試)
問(wèn)題六:對(duì)于不同格式的圖片季希,解碼采用什么方式來(lái)做?
- 應(yīng)用策略模式對(duì)不同圖片格式進(jìn)行解碼幽纷。
問(wèn)題七:什么是策略模式?
- 策略模式定義了一組算法博敬,將它們逐個(gè)封裝起來(lái)友浸,并使得它們可以相互替換。策略可以讓算法獨(dú)立于使用它們的客戶而變化偏窝。
問(wèn)題八:在哪個(gè)階段做圖片解碼處理收恢?
- 磁盤(pán)讀取后(從而保證存到內(nèi)存中的是已經(jīng)解碼的,讓主線程讀取后直接使用祭往,減輕主線程的負(fù)擔(dān))
- 網(wǎng)絡(luò)請(qǐng)求返回后
13.3.閱讀時(shí)長(zhǎng)統(tǒng)計(jì)
問(wèn)題一: 怎樣設(shè)計(jì)一個(gè)閱讀時(shí)長(zhǎng)統(tǒng)計(jì)框架伦意?
時(shí)長(zhǎng)統(tǒng)計(jì)框架的總體設(shè)計(jì)
- 頁(yè)面式記錄器,一般
push
的時(shí)候?yàn)殚_(kāi)始時(shí)間硼补,pop
的時(shí)候?yàn)榻Y(jié)束時(shí)間驮肉。 - 流式記錄器,比如微博這樣 feed 流的頁(yè)面已骇,對(duì)其進(jìn)行停留時(shí)長(zhǎng)統(tǒng)計(jì)离钝。
- 自定義式記錄器,記錄一些自定義褪储,比如說(shuō)橫幅停留時(shí)間等等卵渴,可以增強(qiáng)框架的擴(kuò)展性。
- 記錄管理者負(fù)責(zé)管理 記錄緩存 磁盤(pán)存儲(chǔ) 上傳器鲤竹。
- 記錄緩存是緩存記錄器所記錄的信息到內(nèi)存浪读。
- 磁盤(pán)存儲(chǔ)是反正內(nèi)存中的緩存丟失。
- 上傳器是為了將記錄的數(shù)據(jù)上傳到服務(wù)器。
問(wèn)題二: 為何要有不同類(lèi)型的記錄器碘橘,你的考慮是什么互订?
- 基于不同分類(lèi)場(chǎng)景提供的關(guān)于記錄的封裝、適配蛹屿。
問(wèn)題三:記錄的數(shù)據(jù)會(huì)由于某種原因丟失屁奏,你是怎么樣處理的?
問(wèn)題解答思路:?jiǎn)栠@個(gè)問(wèn)題要考慮到错负,數(shù)據(jù)在內(nèi)存中偶爾出現(xiàn)丟失坟瓢,這是必定會(huì)出現(xiàn)的問(wèn)題,并不是問(wèn)你怎么讓它一條都不丟失犹撒,而是怎么做到盡量少丟失折联。
- 定時(shí)寫(xiě)磁盤(pán)
- 限定內(nèi)存緩存條數(shù)(如10 條),超過(guò)該條數(shù)识颊,就寫(xiě)入磁盤(pán)诚镰。
- 定時(shí)上傳到服務(wù)器
問(wèn)題四:關(guān)于延時(shí)上傳的具體場(chǎng)景有哪些?
問(wèn)題解答思路:關(guān)于延時(shí)上傳的對(duì)立面就是立即上傳祥款,可想而知如果我每次產(chǎn)生一條記錄清笨,立刻上傳到服務(wù)器,這個(gè)無(wú)疑是降低了客戶端的性能以及十分消耗用戶的流量刃跛。
- 前后臺(tái)切換的時(shí)候上傳
- 從無(wú)網(wǎng)到有網(wǎng)上傳
- 通用的輕量接口捎帶一些數(shù)據(jù)
問(wèn)題五:上傳時(shí)機(jī)怎么把控的抠艾?
- 立刻上傳
- 延時(shí)上傳
- 定時(shí)上傳