iOS | 面試- 數(shù)據(jù)持久化

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

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

NSUserDefault簡(jiǎn)單數(shù)據(jù)快速讀寫

Property list(屬性列表)文件存儲(chǔ)

Archiver(歸檔)

SQLite本地?cái)?shù)據(jù)庫(kù)

CoreData

2. 什么是序列化和反序列化唉锌,用來(lái)做什么

序列化- 把對(duì)象轉(zhuǎn)化為字節(jié)序列的過(guò)程

反序列- 化把直接序列恢復(fù)成對(duì)象

作用- 把對(duì)象寫到文件或者數(shù)據(jù)庫(kù)中,并且讀取出來(lái)

3. OC中實(shí)現(xiàn)復(fù)雜對(duì)象的存儲(chǔ)

遵循NSCoding協(xié)議截型,實(shí)現(xiàn)復(fù)雜對(duì)象的存儲(chǔ),實(shí)現(xiàn)該協(xié)議后可以對(duì)其進(jìn)行打包或者解包肤寝,轉(zhuǎn)化為NSDate

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

添加SQLite動(dòng)態(tài)庫(kù):

導(dǎo)入主頭文件:#import <sqlite3.h>

利用C語(yǔ)言函數(shù)創(chuàng)建\打開數(shù)據(jù)庫(kù)育苟,編寫SQL語(yǔ)句

5. CoreData是什么?

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

6.? 簡(jiǎn)單描述下客戶端的緩存機(jī)制?

緩存可以分為:內(nèi)存數(shù)據(jù)緩存丈咐、數(shù)據(jù)庫(kù)緩存、文件緩存

每次想獲取數(shù)據(jù)的時(shí)候

先檢測(cè)內(nèi)存中有無(wú)緩存

再檢測(cè)本地有無(wú)緩存(數(shù)據(jù)庫(kù)\文件)

最終發(fā)送網(wǎng)絡(luò)請(qǐng)求

將服務(wù)器返回的網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行緩存(內(nèi)存龙宏、數(shù)據(jù)庫(kù)棵逊、文件), 以便下次讀取

7. 什么是NSManagedObject模型银酗?

NSManagedObjcet是NSObject的子類辆影,Core Date的重要組成部分徒像。是一個(gè)通用類,實(shí)現(xiàn)了Core Date模型層所需的基本功能蛙讥,用戶可以通過(guò)NSManagedObjcet建立自己的數(shù)據(jù)模型锯蛀。

8. 說(shuō)一說(shuō)你對(duì)SQLite的認(rèn)識(shí)

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

9. 說(shuō)一說(shuō)你對(duì)FMDB的認(rèn)識(shí)

FMDB是一個(gè)處理數(shù)據(jù)存儲(chǔ)的第三方框架经备,框架是對(duì)sqlite的封裝拭抬,整個(gè)框架非常輕量級(jí)但又不失靈活性,而且更加面向?qū)ο蟆?/p>

我們知道直接使用libsqlite3進(jìn)行數(shù)據(jù)庫(kù)操作其實(shí)是線程不安全的侵蒙,如果遇到多個(gè)線程同時(shí)操作一個(gè)表的時(shí)候可能會(huì)發(fā)生意想不到的結(jié)果造虎。為了解決這個(gè)問(wèn)題建議在多線程中使用FMDatabaseQueue對(duì)象,相比FMDatabase而言纷闺,它是線程安全的算凿。

將事務(wù)放到FMDB中去說(shuō)并不是因?yàn)橹挥蠪MDB才支持事務(wù),而是因?yàn)镕MDB將其封裝成了幾個(gè)方法來(lái)調(diào)用犁功,不用自己寫對(duì)應(yīng)的sql而已氓轰。其實(shí)在在使用libsqlite3操作數(shù)據(jù)庫(kù)時(shí)也是原生支持事務(wù)的(因?yàn)檫@里的事務(wù)是基于數(shù)據(jù)庫(kù)的,F(xiàn)MDB還是使用的SQLite數(shù)據(jù)庫(kù))浸卦,只要在執(zhí)行sql語(yǔ)句前加上“begin transaction;”執(zhí)行完之后執(zhí)行“commit transaction;”或者“rollback transaction;”進(jìn)行提交或回滾即可署鸡。另外在Core Data中大家也可以發(fā)現(xiàn),所有的增限嫌、刪靴庆、改操作之后必須調(diào)用上下文的保存方法,其實(shí)本身就提供了事務(wù)的支持怒医,只要不調(diào)用保存方法炉抒,之前所有的操作是不會(huì)提交的。在FMDB中FMDatabase有beginTransaction稚叹、commit焰薄、rollback三個(gè)方法進(jìn)行開啟事務(wù)、提交事務(wù)和回滾事務(wù)扒袖。

10. 什么是沙盒機(jī)制?

每個(gè)iOS程序都有一個(gè)獨(dú)立的文件系統(tǒng)(存儲(chǔ)空間)塞茅,而且只能在對(duì)應(yīng)的文件系統(tǒng)中進(jìn)行操作,此區(qū)域被稱為沙盒僚稿。應(yīng)用必須待在自己的沙盒里,其他應(yīng)用不能訪問(wèn)該沙盒蟀伸。

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

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

Documents:常用目錄缅刽,iCloud備份目錄,存放數(shù)據(jù),這里不能存緩存文件,否則上架不被通過(guò)

Library

Caches:存放體積大又不需要備份的數(shù)據(jù),SDWebImage緩存路徑就是這個(gè)

Preference:設(shè)置目錄蠢络,iCloud會(huì)備份設(shè)置信息

tmp:存放臨時(shí)文件衰猛,不會(huì)被備份,而且這個(gè)文件下的數(shù)據(jù)有可能隨時(shí)被清除的可能

12. 使用 NSUserDefaults 時(shí)刹孔,如何處理布爾的默認(rèn)值啡省?(比如返回 NO,不知道是真的 NO 還是沒(méi)有設(shè)置過(guò))

如果使用- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;方法,來(lái)進(jìn)行存儲(chǔ),就可以獲取到正確的 bool 值

如果使用- (void)setObject:(nullable id)value forKey:(NSString *)defaultName;,需要在獲取到值后在轉(zhuǎn)為 bool類型

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

NSUserDefaults*userdefault = [NSUserDefaultsstandardUserDefaults];BOOLflag =NO;[userdefault setObject:@(flag) forKey:@"flag"];if([userdefault objectForKey:@"flag"]) {BOOLeq = [userdefault objectForKey:@"flag"];if(eq) {NSLog(@"a");? ? }else{NSLog(@"b");? ? }}else{BOOLeq = [userdefault objectForKey:@"flag"];if(eq) {NSLog(@"c");? ? }else{NSLog(@"d");? ? }}

打印結(jié)果 a

分析: 包裝成 oc 對(duì)象,OC對(duì)象有值,轉(zhuǎn) bool 都是 yes

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

編寫SQL語(yǔ)句來(lái)操作原來(lái)表中的字段

增加表字段:ALTER TABLE 表名 ADD COLUMN 字段名 字段類型;

刪除表字段:ALTER TABLE 表名 DROP COLUMN 字段名;

修改表字段:ALTER TABLE 表名 RENAME COLUMN 舊字段名 TO 新字段名;

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

FMDatabaseQueue 使用該類保證線程安全,串行隊(duì)列

事物是一個(gè)并發(fā)控制的基本單元,所謂的事務(wù)方库,它是一個(gè)操作序列结序,這些操作要么都執(zhí)行,要么都不執(zhí)行纵潦,它是一個(gè)不可分割的工作單位徐鹤。

15.xml 和 json 區(qū)別

XML的優(yōu)點(diǎn)

格式統(tǒng)一,符合標(biāo)準(zhǔn)邀层; 容易與其他系統(tǒng)進(jìn)行遠(yuǎn)程交互返敬,數(shù)據(jù)共享比較方便。

XML的缺點(diǎn):

XML文件龐大寥院,文件格式復(fù)雜劲赠,傳輸占帶寬;服務(wù)器端和客戶端都需要花費(fèi)大量代碼來(lái)解析XML只磷,導(dǎo)致服務(wù)器端和客戶端代碼變得異常復(fù)雜且不易維護(hù)经磅;客戶端不同瀏覽器之間解析XML的方式不一致,需要重復(fù)編寫很多代碼钮追;服務(wù)器端和客戶端解析XML花費(fèi)較多的資源和時(shí)間预厌。

JSON的優(yōu)點(diǎn):

數(shù)據(jù)格式比較簡(jiǎn)單,易于讀寫元媚,格式都是壓縮的轧叽,占用帶寬小刊棕;易于解析炭晒,客戶端JavaScript可以簡(jiǎn)單的通過(guò)eval()進(jìn)行JSON數(shù)據(jù)的讀取甥角;支持多種語(yǔ)言网严,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服務(wù)器端語(yǔ)言,便于服務(wù)器端的解析嗤无;

JSON的缺點(diǎn):

沒(méi)有XML格式這么推廣的深入人心和喜用廣泛震束,沒(méi)有XML那么通用性怜庸;JSON格式目前在Web Service中推廣還屬于初級(jí)階段。

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

作為單個(gè)邏輯工作單元執(zhí)行的一系列操作垢村,而這些邏輯工作單元需要具有原子性割疾,一致性,隔離性和持久性

是并發(fā)控制的基本單元嘉栓。所謂的事務(wù)宏榕,它是一個(gè)操作序列,這些操作要么都執(zhí)行侵佃,要么都不執(zhí)行麻昼,它是一個(gè)不可分割的工作單元。例如趣钱,銀行轉(zhuǎn)賬工作:從一個(gè)賬號(hào)扣款并使另一個(gè)賬號(hào)增款涌献,這兩個(gè)操作要么都執(zhí)行,要么都不執(zhí)行首有。所以燕垃,應(yīng)該把它們看成一個(gè)事務(wù)。

事務(wù)是一種機(jī)制井联,用于維護(hù)數(shù)據(jù)庫(kù)的完整性

18. 熟悉常用SQL語(yǔ)句

create database namedrop database namealter table name add column coltypeselect * from table1wherecol=valueselect count as totalcount from table1select sum(field1) as sumvalue from table1'insert into table1 (field1,field2) values(value1,value2) 'delete from table1wheresomethingupdate table1setfield1=value1wherefield1 like ’%value1%'

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

19.當(dāng)數(shù)據(jù)庫(kù)中的某項(xiàng)數(shù)據(jù)未 null 時(shí)候,通過(guò)FMDB獲取的數(shù)據(jù)為

[NSNull null]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卜壕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子烙常,更是在濱河造成了極大的恐慌轴捎,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚕脏,死亡現(xiàn)場(chǎng)離奇詭異侦副,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)驼鞭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門秦驯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人挣棕,你說(shuō)我怎么就攤上這事译隘。” “怎么了洛心?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵固耘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我词身,道長(zhǎng)厅目,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮损敷,結(jié)果婚禮上户辫,老公的妹妹穿的比我還像新娘。我一直安慰自己嗤锉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布墓塌。 她就那樣靜靜地躺著瘟忱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪苫幢。 梳的紋絲不亂的頭發(fā)上访诱,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音韩肝,去河邊找鬼触菜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哀峻,可吹牛的內(nèi)容都是我干的涡相。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼剩蟀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼催蝗!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起育特,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤丙号,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后缰冤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體犬缨,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年棉浸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怀薛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涮拗,死狀恐怖乾戏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情三热,我是刑警寧澤鼓择,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站就漾,受9級(jí)特大地震影響呐能,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一摆出、第九天 我趴在偏房一處隱蔽的房頂上張望朗徊。 院中可真熱鬧,春花似錦偎漫、人聲如沸爷恳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)温亲。三九已至,卻和暖如春杯矩,著一層夾襖步出監(jiān)牢的瞬間栈虚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工史隆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留魂务,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓泌射,卻偏偏與公主長(zhǎng)得像粘姜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熔酷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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