iOS | 面試知識整理 - 數(shù)據(jù)持久化(八)

前言:

最近公司項目不怎么忙, 閑暇時間把iOS 在面試中可能會遇到的問題整理了一番, 一部分題目是自己面試遇到的,一部分題目則是網(wǎng)上收錄的, 方便自己鞏固復習, 也分享給大家! 知識點比較多,比較雜,這里做了分類,下面是分類鏈接地址;

面試知識點整理 - 目錄:

iOS | 面試知識整理 - OC基礎(chǔ) (一)
iOS | 面試知識整理 - OC基礎(chǔ) (二)
iOS | 面試知識整理 - OC基礎(chǔ) (三)
iOS | 面試知識整理 - UI 相 關(guān) (四)
iOS | 面試知識整理 - 內(nèi)存管理 (五)
iOS | 面試知識整理 - 多 線 程 (六)
iOS | 面試知識整理 - 網(wǎng)絡(luò)相關(guān) (七)
iOS | 面試知識整理 - 數(shù)據(jù)持久化 (八)
iOS | 面試知識整理 - Swift基礎(chǔ) (九)

iOS | 面試知識整理 - 數(shù)據(jù)持久化(八)


1. iOS中數(shù)據(jù)持久化方案有哪些?

  • NSUserDefault 簡單數(shù)據(jù)快速讀寫
  • Property list (屬性列表)文件存儲
  • Archiver (歸檔)
  • SQLite 本地數(shù)據(jù)庫
  • CoreData

2. 什么是序列化和反序列化,用來做什么

  • 序列化- 把對象轉(zhuǎn)化為字節(jié)序列的過程
  • 反序列- 化把直接序列恢復成對象
  • 作用- 把對象寫到文件或者數(shù)據(jù)庫中,并且讀取出來

3. OC中實現(xiàn)復雜對象的存儲

  • 遵循NSCoding協(xié)議,實現(xiàn)復雜對象的存儲,實現(xiàn)該協(xié)議后可以對其進行打包或者解包,轉(zhuǎn)化為NSDate

4. SQLite 數(shù)據(jù)存儲是怎么用?

  • 添加SQLite動態(tài)庫:
  • 導入主頭文件:#import <sqlite3.h>
  • 利用C語言函數(shù)創(chuàng)建\打開數(shù)據(jù)庫,編寫SQL語句

5. CoreData是什么?

  • CoreData是iOS5之后才出現(xiàn)的一個框架,本質(zhì)上是對SQLite的一個封裝,它提供了對象-關(guān)系映射(ORM)的功能,即能夠?qū)C對象轉(zhuǎn)化成數(shù)據(jù),保存在SQLite數(shù)據(jù)庫文件中,也能夠?qū)⒈4嬖跀?shù)據(jù)庫中的數(shù)據(jù)還原成OC對象,通過CoreData管理應(yīng)用程序的數(shù)據(jù)模型,可以極大程度減少需要編寫的代碼數(shù)量!

6. 簡單描述下客戶端的緩存機制?

  1. 緩存可以分為:內(nèi)存數(shù)據(jù)緩存、數(shù)據(jù)庫緩存、文件緩存
  2. 每次想獲取數(shù)據(jù)的時候
  3. 先檢測內(nèi)存中有無緩存
  4. 再檢測本地有無緩存(數(shù)據(jù)庫\文件)
  5. 最終發(fā)送網(wǎng)絡(luò)請求
  6. 將服務(wù)器返回的網(wǎng)絡(luò)數(shù)據(jù)進行緩存(內(nèi)存、數(shù)據(jù)庫、文件), 以便下次讀取

7. 什么是NSManagedObject模型?

NSManagedObjcet是NSObject的子類,Core Date的重要組成部分。是一個通用類,實現(xiàn)了Core Date模型層所需的基本功能,用戶可以通過NSManagedObjcet建立自己的數(shù)據(jù)模型。

8. 說一說你對SQLite的認識

  • SQLite是目前主流的嵌入式關(guān)系型數(shù)據(jù)庫,其最主要的特點就是輕量級、跨平臺,當前很多嵌入式操作系統(tǒng)都將其作為數(shù)據(jù)庫首選。

9. 說一說你對FMDB的認識

  • FMDB是一個處理數(shù)據(jù)存儲的第三方框架,框架是對sqlite的封裝,整個框架非常輕量級但又不失靈活性,而且更加面向?qū)ο蟆?/li>
  • 我們知道直接使用libsqlite3進行數(shù)據(jù)庫操作其實是線程不安全的,如果遇到多個線程同時操作一個表的時候可能會發(fā)生意想不到的結(jié)果。為了解決這個問題建議在多線程中使用FMDatabaseQueue對象,相比FMDatabase而言,它是線程安全的。
  • 將事務(wù)放到FMDB中去說并不是因為只有FMDB才支持事務(wù),而是因為FMDB將其封裝成了幾個方法來調(diào)用,不用自己寫對應(yīng)的sql而已。其實在在使用libsqlite3操作數(shù)據(jù)庫時也是原生支持事務(wù)的(因為這里的事務(wù)是基于數(shù)據(jù)庫的,F(xiàn)MDB還是使用的SQLite數(shù)據(jù)庫),只要在執(zhí)行sql語句前加上“begin transaction;”執(zhí)行完之后執(zhí)行“commit transaction;”或者“rollback transaction;”進行提交或回滾即可。另外在Core Data中大家也可以發(fā)現(xiàn),所有的增、刪、改操作之后必須調(diào)用上下文的保存方法,其實本身就提供了事務(wù)的支持,只要不調(diào)用保存方法,之前所有的操作是不會提交的。在FMDB中FMDatabase有beginTransaction、commit、rollback三個方法進行開啟事務(wù)、提交事務(wù)和回滾事務(wù)。

10. 什么是沙盒機制?

  • 每個iOS程序都有一個獨立的文件系統(tǒng)(存儲空間),而且只能在對應(yīng)的文件系統(tǒng)中進行操作,此區(qū)域被稱為沙盒。應(yīng)用必須待在自己的沙盒里,其他應(yīng)用不能訪問該沙盒。

11. 沙盒目錄結(jié)構(gòu)是怎樣的?

沙盒結(jié)構(gòu)

  • Documents:常用目錄,iCloud備份目錄,存放數(shù)據(jù),這里不能存緩存文件,否則上架不被通過
  • Library
    • Caches:存放體積大又不需要備份的數(shù)據(jù),SDWebImage緩存路徑就是這個
    • Preference:設(shè)置目錄,iCloud會備份設(shè)置信息
  • tmp:存放臨時文件,不會被備份,而且這個文件下的數(shù)據(jù)有可能隨時被清除的可能

12. 使用 NSUserDefaults 時,如何處理布爾的默認值?(比如返回 NO,不知道是真的 NO 還是沒有設(shè)置過)

  • 如果使用 - (void)setBool:(BOOL)value forKey:(NSString *)defaultName;方法,來進行存儲,就可以獲取到正確的 bool 值
  • 如果使用 - (void)setObject:(nullable id)value forKey:(NSString *)defaultName;,需要在獲取到值后在轉(zhuǎn)為 bool類型

13. 代碼題目分析,打印結(jié)果是什么?

NSUserDefaults *userdefault = [NSUserDefaults standardUserDefaults];
BOOL flag = NO;
[userdefault setObject:@(flag) forKey:@"flag"];

if ([userdefault objectForKey:@"flag"]) {
    BOOL eq = [userdefault objectForKey:@"flag"];
    if (eq) {
        NSLog(@"a");
    }else{
        NSLog(@"b");
    }
}else{
    BOOL eq = [userdefault objectForKey:@"flag"];
    if (eq) {
        NSLog(@"c");
    }else{
        NSLog(@"d");
    }
}

打印結(jié)果 a
分析: 包裝成 oc 對象,OC對象有值,轉(zhuǎn) bool 都是 yes

11. 如果后期需要增加數(shù)據(jù)庫中的字段怎么實現(xiàn),如果不使用CoreData呢?

  • 編寫SQL語句來操作原來表中的字段
  • 增加表字段:ALTER TABLE 表名 ADD COLUMN 字段名 字段類型;
  • 刪除表字段:ALTER TABLE 表名 DROP COLUMN 字段名;
  • 修改表字段:ALTER TABLE 表名 RENAME COLUMN 舊字段名 TO 新字段名;

14.FMDB使用 線程與事務(wù)

  1. FMDatabaseQueue 使用該類保證線程安全,串行隊列
  2. 事物是一個并發(fā)控制的基本單元,所謂的事務(wù),它是一個操作序列,這些操作要么都執(zhí)行,要么都不執(zhí)行,它是一個不可分割的工作單位。

15.xml 和 json 區(qū)別

  • XML的優(yōu)點
    格式統(tǒng)一,符合標準; 容易與其他系統(tǒng)進行遠程交互,數(shù)據(jù)共享比較方便。

  • XML的缺點:
    XML文件龐大,文件格式復雜,傳輸占帶寬;服務(wù)器端和客戶端都需要花費大量代碼來解析XML,導致服務(wù)器端和客戶端代碼變得異常復雜且不易維護;客戶端不同瀏覽器之間解析XML的方式不一致,需要重復編寫很多代碼;服務(wù)器端和客戶端解析XML花費較多的資源和時間。

  • JSON的優(yōu)點:
    數(shù)據(jù)格式比較簡單,易于讀寫,格式都是壓縮的,占用帶寬小;易于解析,客戶端JavaScript可以簡單的通過eval()進行JSON數(shù)據(jù)的讀取;支持多種語言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服務(wù)器端語言,便于服務(wù)器端的解析;

  • JSON的缺點:
    沒有XML格式這么推廣的深入人心和喜用廣泛,沒有XML那么通用性;JSON格式目前在Web Service中推廣還屬于初級階段。

17.什么是事務(wù)?

  • 作為單個邏輯工作單元執(zhí)行的一系列操作,而這些邏輯工作單元需要具有原子性,一致性,隔離性和持久性
  • 是并發(fā)控制的基本單元。所謂的事務(wù),它是一個操作序列,這些操作要么都執(zhí)行,要么都不執(zhí)行,它是一個不可分割的工作單元。例如,銀行轉(zhuǎn)賬工作:從一個賬號扣款并使另一個賬號增款,這兩個操作要么都執(zhí)行,要么都不執(zhí)行。所以,應(yīng)該把它們看成一個事務(wù)。
  • 事務(wù)是一種機制,用于維護數(shù)據(jù)庫的完整性

18. 熟悉常用SQL語句

create database name
drop database name
alter table name add column col type
select * from table1 where col=value
select count as totalcount from table1
select sum(field1) as sumvalue from table1
'insert into table1 (field1,field2) values(value1,value2) '
delete from table1 where something
update table1 set field1=value1 where field1 like ’%value1%'

參考:http://www.cnblogs.com/acpe/p/4970765.html

19.當數(shù)據(jù)庫中的某項數(shù)據(jù)未 null 時候,通過FMDB獲取的數(shù)據(jù)為

[NSNull null]

下一篇入口:

iOS | 面試知識整理 - Swift基礎(chǔ) (九)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,310評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,566評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,055評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,303評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,799評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,683評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,899評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,135評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,528評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,844評論 2 372

推薦閱讀更多精彩內(nèi)容