問(wèn)題:
1.多線程的底層實(shí)現(xiàn)
答案:
1>首先搞清楚什么是線程,什么是多線程.
2>Mach是第一個(gè)以多線程方式處理任務(wù)的系統(tǒng),因此多線程的底層實(shí)現(xiàn)機(jī)制是基于Mach的線程
3>開(kāi)發(fā)中很少用Mach級(jí)的線程,因?yàn)?/b>Mach級(jí)的線程沒(méi)有提供多線程的基本特征,線程之間是獨(dú)立的(但是還是可以操作Mach類到子線程后,Mach回到主線程.)
4>開(kāi)發(fā)中實(shí)現(xiàn)多線程的方案
C語(yǔ)言的POSIX接口: #include
OC的NSThread
C語(yǔ)言的GCD接口(蘋果官方推薦使用,由系統(tǒng)管理何時(shí)釋放何時(shí)退出,性能最好,代碼簡(jiǎn)潔)
OC的NSOperation和NSOperationQueue (基于GCD進(jìn)行一層包裝,面向?qū)ο?/b>)
問(wèn)題:
2.線程間怎么通信
答案:
1>performSelector:onThread:withObject:waitUntilDone;
(子線程開(kāi)始任務(wù),任務(wù)完成后回到主線程)
2>NSMachPort
問(wèn)題:
3.網(wǎng)絡(luò)圖片處理問(wèn)題中怎么解決一個(gè)相同的網(wǎng)絡(luò)地址重復(fù)請(qǐng)求的問(wèn)題?
答案:
1>利用字典(圖片地址為Key,下載操作為value)
問(wèn)題:
4.用NSOpertion和NSOpertionQueue處理A,B,C三個(gè)線程,要求執(zhí)行完A,B才能執(zhí)行C,怎么做?
答案:
1>開(kāi)啟線程,添加依賴,執(zhí)行操作.
問(wèn)題:
5.GCD內(nèi)部怎么實(shí)現(xiàn)的
答案:
1>iOS和OSX的核心是XNU內(nèi)核, GCD是基于XNU內(nèi)核,GCD是基于XNU內(nèi)核實(shí)現(xiàn)的.
2>GCD的API全部在lib dispatch庫(kù)中.
3>GCD的底層實(shí)現(xiàn)主要有Dispatch Queue和Dispatch Source.
Dispatch Queue :管理block(操作).
Dispatch Source :處理事件理.
問(wèn)題:
6.NSOperationQueue與GCD區(qū)別
答案:
1>GCD是純C語(yǔ)言的API, NSOperationQueue是基于GCD的OC版本的封裝
2>GCD只支持FIFO的隊(duì)列,NSOperationQueue可以很方便的調(diào)整執(zhí)行順序,設(shè)置最大并發(fā)數(shù)量
3>NSOperationQueue可以輕松在Operation間設(shè)置依賴關(guān)系,而GCD需要寫很多的代碼才能實(shí)現(xiàn)
4>NSOperationQueue支持KVO,可以監(jiān)測(cè)operation是否在執(zhí)行(isExecuted)是否結(jié)束(isFinished),是否取消(isCanceld )
5>GCD的執(zhí)行速度比NSOperationQueue快
問(wèn)題:
7.客戶端安全性處理方式?
答案:
1>網(wǎng)絡(luò)數(shù)據(jù)傳輸(敏感數(shù)據(jù)\[賬號(hào)\密碼\消費(fèi)數(shù)據(jù)\銀行卡賬號(hào)],不能明文發(fā)送)
2>協(xié)議的問(wèn)題(自定義協(xié)議,游戲代練)
3>本地文件存儲(chǔ)(游戲的存檔)
4>源代碼(對(duì)于iOS目前是安全的)
問(wèn)題:
8.sip是什么?
答案:
1>SIP(Session Initiation Protocol),會(huì)話發(fā)起協(xié)議
2>SIP是建立VOIP連接IETF標(biāo)準(zhǔn),IETF是全球互聯(lián)網(wǎng)最具權(quán)威的技術(shù)標(biāo)準(zhǔn)化組織
3>所謂VOIP,就是網(wǎng)絡(luò)電話,直接用互聯(lián)網(wǎng)打電話,不用耗手機(jī)話費(fèi)
問(wèn)題:
9.有些圖片加載的比較慢怎么處理?你是怎么優(yōu)化程序的性能的?
答案:
1>圖片下載放在異步線程
2>圖片下載過(guò)程中使用占位圖片
3>如果圖片比較大,可以考慮多線程斷點(diǎn)下載
問(wèn)題:
10.你實(shí)現(xiàn)過(guò)一個(gè)框架或者庫(kù)以供別人使用么?如果有請(qǐng)談一談構(gòu)建框架或者庫(kù)時(shí)候的經(jīng)驗(yàn);如果沒(méi)有,請(qǐng)?jiān)O(shè)想和設(shè)計(jì)框架的public的API,并指出大概需要如何做,需要注意一些什么方面,來(lái)使別人容易的使用你的框架.
答案:
1>提供給外界的接口功能是否實(shí)用,夠用.
2>別人使用我的框架時(shí),能不能根據(jù)類名,方法名就猜出接口的具體作用.
3>別人調(diào)用接口時(shí),提供的參數(shù)是否夠用,調(diào)用起來(lái)是否簡(jiǎn)單.
4>別人使用我的框架時(shí),要不要再導(dǎo)入依賴其他的框架.