⑨ 設(shè)計(jì)模式相關(guān)面試題

⑨ 設(shè)計(jì)模式相關(guān)面試題

一.編程中的六大設(shè)計(jì)原則?

1.單一職責(zé)原則

通俗地講就是一個(gè)類只做一件事

  • CALayer:動(dòng)畫和視圖的顯示。
  • UIView:只負(fù)責(zé)事件傳遞、事件響應(yīng)。
2.開閉原則

對(duì)修改關(guān)閉,對(duì)擴(kuò)展開放。
要考慮到后續(xù)的擴(kuò)展性,而不是在原有的基礎(chǔ)上來回修改

3.接口隔離原則

使用多個(gè)專門的協(xié)議、而不是一個(gè)龐大臃腫的協(xié)議

  • UITableviewDelegate
  • UITableViewDataSource
4.依賴倒置原則

抽象不應(yīng)該依賴于具體實(shí)現(xiàn)、具體實(shí)現(xiàn)可以依賴于抽象。
調(diào)用接口感覺不到內(nèi)部是如何操作的

5.里氏替換原則

父類可以被子類無縫替換,且原有的功能不受任何影響

例如 KVO

6.迪米特法則

一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其他對(duì)象盡可能少的了解,實(shí)現(xiàn)高聚合、低耦合

推薦文章

面向?qū)ο笤O(shè)計(jì)的六大設(shè)計(jì)原則(附 Demo 及 UML 類圖)- J_Knight_

二.如何設(shè)計(jì)一個(gè)圖片緩存框架?

可以模仿 SDWebImage 來實(shí)現(xiàn)。

構(gòu)成
  • Manager
  • 內(nèi)存緩存
  • 磁盤緩存
  • 網(wǎng)絡(luò)下載
  • Code Manager
    • 圖片解碼
    • 圖片解壓縮

圖片的存儲(chǔ)是以圖片的單向 hash 值為 Key

內(nèi)存設(shè)計(jì)需要考慮的問題
存儲(chǔ)的 Size

因?yàn)閮?nèi)存的空間有限,我們針對(duì)不同尺寸的圖片,給出不同的方案

  • 10K 以下的50個(gè)
  • 100Kb 以下的20個(gè)
  • 1000kb 以上的10個(gè)
淘汰的策略

內(nèi)存的淘汰策略 采取 LRU(最近最少使用算法)

觸發(fā)淘汰策略的時(shí)機(jī)有三種
  • 1.定期檢查(不建議,耗性能)
  • 2.提高檢查觸發(fā)頻率(一定要注意開銷)
    • 1.前后臺(tái)切換的時(shí)候
    • 2.每次讀寫的時(shí)候
磁盤設(shè)計(jì)需要考慮的問題
  • 存儲(chǔ)方式

  • 大小限制(有固定的大?。?/p>

  • 移除策略(可以設(shè)置為7天或者15天)

網(wǎng)絡(luò)設(shè)計(jì)需要考慮的問題
  • 圖片請(qǐng)求的最大并發(fā)量

  • 請(qǐng)求超時(shí)策略

  • 請(qǐng)求優(yōu)先級(jí)

圖片解碼

應(yīng)用 策略模式,針對(duì) jpg、png、gif 等不同的圖片格式進(jìn)行解碼

圖片解碼的時(shí)機(jī)
  • 在 子線程 圖片剛下載完時(shí)
  • 在 子線程 剛從磁盤讀取完時(shí)

避免在主線程解壓縮、解碼,避免卡頓

三.如何設(shè)計(jì)一個(gè)時(shí)長(zhǎng)統(tǒng)計(jì)框架?

記錄器
  • 頁面式記錄器
  • 流式記錄器
  • 自定義式
記錄管理者
  • 內(nèi)存記錄緩存
  • 磁盤存儲(chǔ)
  • 上傳器
如何降低數(shù)據(jù)的丟失率?
  • 定期寫入磁盤
  • 每當(dāng)達(dá)到某個(gè)值的時(shí)候,就寫入磁盤
記錄上傳的時(shí)機(jī)
  • 前后臺(tái)切換的時(shí)候可以上傳
  • 從無網(wǎng)到有網(wǎng)切換的時(shí)候可以上傳
上傳時(shí)機(jī)的選擇
  • 立即上傳
  • 定時(shí)上傳
  • 延時(shí)上傳

四.如何實(shí)現(xiàn) App 換膚(夜間模式)?

擴(kuò)利用 DKNightVersion 完成。

同時(shí)可以參考一下這篇文章。

五.iOS有哪些常見的設(shè)計(jì)模式?

  1. 代理模式
    應(yīng)用場(chǎng)景:當(dāng)一個(gè)類的某些功能需要由別的類來實(shí)現(xiàn),但是又不確定具體會(huì)是哪個(gè)類實(shí)現(xiàn)。
    優(yōu)勢(shì):解耦合
    敏捷原則:開放-封閉原則

  2. 觀察者模式
    應(yīng)用場(chǎng)景:一般為model層對(duì)controller和view進(jìn)行的通知方式,不關(guān)心誰去接收,只負(fù)責(zé)發(fā)布信息。
    優(yōu)勢(shì):解耦合
    敏捷原則:接口隔離原則,開放-封閉原則

  3. MVC模式
    應(yīng)用場(chǎng)景:是一種非常古老的設(shè)計(jì)模式,通過數(shù)據(jù)模型,控制器邏輯,視圖展示將應(yīng)用程序進(jìn)行邏輯劃分。
    優(yōu)勢(shì):使系統(tǒng),層次清晰,職責(zé)分明,易于維護(hù)
    敏捷原則:對(duì)擴(kuò)展開放-對(duì)修改封閉

  4. 單例模式
    應(yīng)用場(chǎng)景:確保程序運(yùn)行期某個(gè)類,只有一份實(shí)例,用于進(jìn)行資源共享控制。
    優(yōu)勢(shì):使用簡(jiǎn)單,延時(shí)求值,易于跨模塊
    敏捷原則:?jiǎn)我宦氊?zé)原則

  5. 策略模式
    應(yīng)用場(chǎng)景:定義算法族,封裝起來,使他們之間可以相互替換。
    優(yōu)勢(shì):使算法的變化獨(dú)立于使用算法的用戶
    敏捷原則:接口隔離原則;多用組合,少用繼承;針對(duì)接口編程,而非實(shí)現(xiàn)。

  6. 工廠模式
    應(yīng)用場(chǎng)景:工廠方式創(chuàng)建類的實(shí)例,多與proxy模式配合,創(chuàng)建可替換代理類。
    優(yōu)勢(shì):易于替換,面向抽象編程,application只與抽象工廠和易變類的共性抽象類發(fā)生調(diào)用關(guān)系。
    敏捷原則:DIP依賴倒置原則

六.單例會(huì)有什么弊端?

  • 主要優(yōu)點(diǎn):

    • 1、提供了對(duì)唯一實(shí)例的受控訪問。
    • 2、由于在系統(tǒng)內(nèi)存中只存在一個(gè)對(duì)象,因此可以節(jié)約系統(tǒng)資源,對(duì)于一些需要頻繁創(chuàng)建和銷毀的對(duì)象單例模式無疑可以提高系統(tǒng)的性能。
    • 3、允許可變數(shù)目的實(shí)例。
  • 主要缺點(diǎn):

    • 1、由于單利模式中沒有抽象層,因此單例類的擴(kuò)展有很大的困難。
    • 2、單例類的職責(zé)過重,在一定程度上違背了“單一職責(zé)原則”。
    • 3、濫用單例將帶來一些負(fù)面問題,如為了節(jié)省資源將數(shù)據(jù)庫連接池對(duì)象設(shè)計(jì)為的單例類,可能會(huì)導(dǎo)致共享連接池對(duì)象的程序過多而出現(xiàn)連接池溢出;如果實(shí)例化的對(duì)象長(zhǎng)時(shí)間不被利用,系統(tǒng)會(huì)認(rèn)為是垃圾而被回收,這將導(dǎo)致對(duì)象狀態(tài)的丟失。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 請(qǐng)列舉出在 JDK 中幾個(gè)常用的設(shè)計(jì)模式? 什么是設(shè)計(jì)模式?你是否在你的代碼里面使用過任何設(shè)計(jì)模式? Java 中...
    老干媽炒飯閱讀 386評(píng)論 0 0
  • 一 單例介紹 單例的概念 單例模式是一種對(duì)象創(chuàng)建模式,它用于產(chǎn)生一個(gè)對(duì)象的具體實(shí)例,它可以確保系統(tǒng)中一個(gè)類只產(chǎn)生一...
    總會(huì)顛沛流離閱讀 1,119評(píng)論 0 4
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,653評(píng)論 1 32
  • 1. 瀏覽器渲染機(jī)制 瀏覽器采用流式布局模型(Flow Based Layout) 瀏覽器會(huì)把HTML解析成DOM...
    高磊_IT閱讀 798評(píng)論 0 3
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會(huì),身份的轉(zhuǎn)變要...
    余生動(dòng)聽閱讀 10,836評(píng)論 0 11

友情鏈接更多精彩內(nèi)容