面試總結 - 緩存機制

緩存可以分爲:內存數據緩存,數據庫緩存,文件緩存。
每次想獲取數據的時候,先檢測內存中有無緩存,再檢測本地有無緩存(數據庫\文件),最終發送網絡請求,將服務器返回的網絡數據進行緩存(內存,數據庫,文件),以便下次讀取

緩存機制是二級緩存:內存緩存和本地緩存

歸檔 解檔

讓子類遵循NSCoding協議,並實現initWithCoder:以及encodeWithCoder:方法,
這些方法會在程序歸解檔某個對象的時候被調用。
利用NSKeyedArchiver archiveRootObject:coder toFile:path 進行歸檔。
利用NSKeyedUnarchiver unarchiveObjectWithFile:path 進行解檔

其中遍歷要歸檔類屬性的時候,可以利用runtime中class_copyIvarList獲取屬性數組 和 count個數;
得到數組中對應的ivar 並通過ivar_getName()方法獲取對應的key,進而獲取對應的value,進行encodeWithCoder歸檔。

根據對應的key獲取需要解檔的value,進行initWithCoder解檔。

應用在本地數據存儲都有什麼形式?
    plist:只能存儲 NSString  NSDictionary NSArray  NSData NSNumber等基本數據類型,因爲這些基本數據類型已經遵守了<NSCoding>協議
    歸檔:也叫序列化,或是NSCoding,自定義類的對象必須遵守了NSCoding協議並且實現兩個協議方法纔可以 encodeWithCoder:歸檔   initWithCoder:解檔
    NSUserDefault:本質也是通過plist來存儲的
    SQLite3:輕量級數據庫
    CoreData:是對SQLite3的封裝,更加面向對象,效率沒有SQLite3高,蘋果官方推出的
    FMDB:第三方框架,它是將比較麻煩的C語言函數封裝成OC對象方法。
	Realm

FMDB 優化:

1.不要在多線程下使用FMDatabase,要用FMDatabaseQueue,是串行隊列
2.如果執行大量SQLite語句調用,使用事務操作可以提高性能
3.Cached Statement功能是一種提高SQLite數據庫訪問的技術,在開發中,如果執行的SQL語句大量重複,使用該功能可以提升App性能。但如果不重複,則可以考慮關閉該功能,以節省資源。在FMDB中,開發者可以使用setShouldCacheStatements方法開啓或關閉該功能,並使用shouldCacheStatements方法判斷狀態。當使用完,可以使用clearCachedStatements方法清空緩存。
4.加密,重寫open和openWithFlags方法,調用setKey:方法。

FMDB死鎖

在一個事務內部,嵌套使用了queue去執行其他任務,造成死鎖。
也就是說,串行隊列裏面串行任務嵌套執行

FMDB使用

FMDatabase:一個FMDatabase對象代表一個單獨的SQLite數據庫,通過SQLite語句執行數據庫的增刪改查操作
FMResultSet:使用FMDatabase對象查詢數據庫後的結果集
FMDatabaseQueue:用於多線程操作數據庫,它保證線程安全

FMDatabase
beginTransaction 開啓事務
rollback 事務回滾
commit 事務提交

FMDatabaseQueue
inTransaction 直接調用事務的block
在添加失敗時*rollback = YES

FMDB的事務

(1) 事務定義:
事務(Transaction)是併發操作的基本單位,是指單個邏輯工作單位執行的一系列操作序列,這些操作要不都成功,要不就不成功,事務是數據庫維護數據一致性的單位,在每個事務結束時,都能保證數據一致性與準確性,通常事務跟程序是兩個不同的概念,一個程序中包含多個事務,事務主要解決併發條件下操作數據庫,保證數據
(2) 事務特徵:
原子性(Atomic):事務中包含的一系列操作被看作一個邏輯單元,這個邏輯單元要不全部成功,要不全部失敗
一致性(Consistency):事務中包含的一系列操作,只有合法的數據被寫入數據庫,一些列操作失敗之後,事務會滾到最初創建事務的狀態
隔離性(Isolation):對數據進行修改的多個事務之間是隔離的,每個事務是獨立的,不應該以任何方式來影響其他事務
持久性(Durability)事務完成之後,事務處理的結果必須得到固化,它對於系統的影響是永久的,該修改即使出現系統固執也將一直保留,真實的修改了數據庫
(3) 事務語句:
開啓事務 :beginTransaction
回滾事務:rollback
提交事務:commit
(4)事務代碼
用事務處理一系列數據庫操作,省時效率高

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章