iOS面試題01-多線程網(wǎng)絡(★★★)

2018 iOS面試題系列

一、多線程的底層實現(xiàn)骗村?

提示:
1> 首先搞清楚什么是線程姐帚、什么是多線程
2>Mach是第一個以多線程方式處理任務的系統(tǒng)器一,因此多線程的底層實現(xiàn)機制是基于Mach的線程
3> 開發(fā)中很少用Mach級的線程,因為Mach級的線程沒有提供多線程的基本特征纵朋,線程之間是獨立的
4> 開發(fā)中實現(xiàn)多線程的方案
· C語言的POSIX接口:#include <pthread.h>
· OCNSThread
· C語言的GCD接口(性能最好柿顶,代碼更精簡)
· OCNSOperationNSOperationQueue(基于GCD


二、線程間怎么通信操软?
  • performSelector:onThread:withObject:waitUntilDone:
  • NSMachPort
    (基本機制:A線程(父線程)創(chuàng)建NSMachPort對象嘁锯,并加入A線程的runloop。當創(chuàng)建B線程(輔助線程)時聂薪,將創(chuàng)建的NSMachPort對象傳遞到主體入口點家乘,B線程(輔助線程)就可以使用相同的端口對象將消息傳回A線程(父線程)。)

三藏澳、網(wǎng)絡圖片處理問題中怎么解決一個相同的網(wǎng)絡,地址重復請求的問題仁锯?

提示:
利用字典(圖片地址為key,下載操作為value


四笆载、用 NSOpertion 和 NSOpertionQueue 處理A,B,C三個線程,要求執(zhí)行完 A,B后才能執(zhí)行 C,怎么做扑馁?
// 創(chuàng)建隊列
NSOperationQueue*queue=[[NSOperationQueue alloc] init];

// 創(chuàng)建3個操作
NSOperation*a= [NSBlockOperationblockOperationWithBlock:^{
NSLog(@”operationA---“);
}];
NSOperation*b=[NSBlockOperationblockOperationWithBlock:^{
NSLog(@”operationB---“);
}];
NSOperation*c=[NSBlockOperationblockOperationWithBlock:^{
NSLog(@”operationC---“);
}];

// 添加依賴
[c addDependency:a];
[c addDependency:b];

// 執(zhí)行操作
[queueaddOperation:a];
[queueaddOperation:b];
[queueaddOperation:c];

五、列舉 cocoa中常見對幾種多線程的實現(xiàn)凉驻,并談談多線程安全的幾種解決辦法及多線程安全怎么控制腻要?

1> 只在主線程刷新訪問UI
2> 如果要防止資源搶奪,得用synchronized進行加鎖保護
3> 如果異步操作要保證線程安全等問題, 盡量使用GCD(有些函數(shù)默認
就是安全的)


六涝登、GCD內(nèi)部怎么實現(xiàn)的

1> iOS和OS X的核心是XNU內(nèi)核雄家,GCD是基于XNU內(nèi)核實現(xiàn)的
2> GCD的API全部在libdispatch庫中
3> GCD的底層實現(xiàn)主要有Dispatch Queue和Dispatch Source
· Dispatch Queue :管理block(操作)
· Dispatch Source :處理事件


七、你用過 NSOperationQueue么胀滚?如果用過或者了解的話趟济,你為什么要使用 NSOperationQueue乱投,實現(xiàn)了什么?請描述它和 GCD的區(qū)別和類似的地方(提示:可以從兩者的實現(xiàn)機制和適用范圍來描述)顷编。

1>GCD是純C語言的API戚炫,NSOperationQueue是基于GCD的OC版本封裝
2>GCD只支持FIFO的隊列,NSOperationQueue可以很方便地調(diào)整執(zhí)行順
序媳纬、設置最大并發(fā)數(shù)量
3>NSOperationQueue可以在輕松在Operation間設置依賴關(guān)系双肤,而GCD
需要寫很多的代碼才能實現(xiàn)
4>NSOperationQueue支持KVO,可以監(jiān)測operation是否正在執(zhí)行
(isExecuted)钮惠、是否結(jié)束(isFinished)茅糜,是否取消(isCanceld)
5>GCD的執(zhí)行速度比NSOperationQueue快
任務之間不太互相依賴:GCD
任務之間有依賴\或者要監(jiān)聽任務的執(zhí)行情況:NSOperationQueue


八、 既然提到 GCD素挽,那么問一下在使用 GCD以及block時要注意些什么蔑赘?它們兩是一回事兒么?block在 ARC中和傳統(tǒng)的 MRC中的行為和用法有沒有什么區(qū)別预明,需要注意些什么缩赛?

Block的使用注意:
1.block的內(nèi)存管理
2.防止循環(huán)retian
· 非ARC(MRC):__block
· ARC:__weak__unsafe_unretained


九、在異步線程中下載很多圖片,如果失敗了,該如何處理?請結(jié)合 RunLoop來談談解決方案.(提示:在異步線程中啟動一個 RunLoop重新發(fā)送網(wǎng)絡請求,下載圖片)

1> 重新下載圖片
2> 下載完畢, 利用RunLoop的輸入源回到主線程刷新UIImageVIUew


十贮庞、Socket的實現(xiàn)原理及 Socket之間是如何通信的

網(wǎng)絡上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換峦筒,這個連接的一端稱為一個socket。建立網(wǎng)絡通信連接至少要一對端口號(socket)窗慎。socket本質(zhì)是編程接口(API)物喷,對TCP/IP的封裝,TCP/IP也要提供可供程序員做網(wǎng)絡開發(fā)所用的接口遮斥,這就是Socket編程接口峦失;HTTP是轎車,提供了封裝或者顯示數(shù)據(jù)的具體形式术吗;Socket是發(fā)動機尉辑,提供了網(wǎng)絡通信的能力。

TCP,UDP和socket,Http之間聯(lián)系和區(qū)別

Socket通信原理簡介

Socket通信原理和實踐


十一较屿、 http協(xié)議的實現(xiàn)

http協(xié)議的實現(xiàn)

HTTP協(xié)議:工作原理


十二隧魄、什么是 TCP連接的三次握手

第一次握手:客戶端發(fā)送 syn 包(syn=j)到服務器,并進入 SYN_SEND 狀態(tài)隘蝎,等待服務器確認购啄;
第二次握手:服務器收到 syn 包,必須確認客戶的 SYN(ack=j+1)嘱么,同時自己也發(fā)送一個 SYN 包(syn=k)狮含,即 SYN+ACK 包,此時服務器進入 SYN_RECV 狀態(tài);
第三次握手:客戶端收到服務器的SYN+ACK包几迄,向服務器發(fā)送確認包ACK(ack=k+1)蔚龙,此包發(fā)送完畢,客戶端和服務器進入 ESTABLISHED 狀態(tài)映胁,完成三次握手木羹。
握手過程中傳送的包里不包含數(shù)據(jù),三次握手完畢后屿愚,客戶端與服務器才正式開始傳送數(shù)據(jù)汇跨。理想狀態(tài)下务荆,TCP 連接一旦建立妆距,在通信雙方中的任何一方主動關(guān)閉連接之前,TCP 連接都將被一直保持下去函匕。斷開連接時服務器和客戶端均可以主動發(fā)起斷開 TCP 連接的請求娱据,斷開過程需要經(jīng)過“四次握手”(過程就不細寫了,就是服務器和客戶端交互盅惜,最終確定斷開)


十三中剩、http協(xié)議的組成和特性

組成:http 請求由三部分組成,分別是:請求行抒寂、消息報頭结啼、請求正文 特性:HTTP協(xié)議的主要特點可概括如下:1.支持客戶/服務器模式。2.簡單快速:客戶向服務器請求服務時屈芜,只需傳送請求方法和路徑郊愧。請求方法常用的有 GET、HEAD井佑、POST属铁。每種方法規(guī)定了客戶與服務器聯(lián)系的類型不同。由于 HTTP 協(xié)議簡單躬翁,使得 HTTP 服務器的程序規(guī)模小焦蘑,因而通信速度很快。3.靈活:HTTP 允許傳輸任意類型的數(shù)據(jù)對象盒发。正在傳輸?shù)念愋陀?Content-Type 加以標記例嘱。4.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求宁舰,并收到客戶的應答后拼卵,即斷開連接。采用這種方式可以節(jié)省傳輸時間明吩。5.無狀態(tài):HTTP 協(xié)議是無狀態(tài)協(xié)議间学。無狀態(tài)是指協(xié)議對于事務處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳低葫,這樣可能導致每次連接傳送的數(shù)據(jù)量增大详羡。另一方面,在服務器不需要先前信息時它的應答就較快嘿悬。


十四实柠、在項目什么時候選擇使用 GCD,什么時候選擇NSOperation?

項目中使用 NSOperation 的優(yōu)點是 NSOperation 是對線程的高度抽象善涨,在項目中使用它窒盐,會使項目的程序結(jié)構(gòu)更好,子類化NSOperation 的設計思路钢拧,是具有面向?qū)ο蟮膬?yōu)點(復用蟹漓、封裝),使得實現(xiàn)是多線程支持源内,而接口簡單葡粒,建議在復雜項目中使用。項目中使用 GCD 的優(yōu)點是 GCD 本身非常簡單膜钓、易用嗽交,對于不復雜的多線程操作,會節(jié)省代碼量颂斜,而 Block 參數(shù)的使用夫壁,會是代碼更為易讀,建議在簡單項目中使用沃疮。


十五盒让、OC中的協(xié)議和 java中的接口概念有何不同?

OBC 中的代理有 2 層含義忿磅,官方定義為 formal 和 informal protocol糯彬。前者和 Java接口一樣。 informal protocol 中的方法屬于設計模式考慮范疇葱她,不是必須實現(xiàn)的撩扒,但是如果有實現(xiàn),就會改變類的屬性吨些。 其實關(guān)于正式協(xié)議搓谆,類別和非正式協(xié)議我很早前學習的時候大致看過,也寫在了學習教程里 “非正式協(xié)議概念其實就是類別的另一種表達方式“這里有一些你可能希望實現(xiàn)的方法豪墅,你可以使用他們更好的完成工作”泉手。 這個意思是,這些是可選的偶器。比如我門要一個更好的方法斩萌,我們就會申明一個這樣的類別去實現(xiàn)缝裤。然后你在后期可以直接使用這些更好的方法。這么看颊郎,總覺得類別這玩意兒有點像協(xié)議的可選協(xié)議憋飞。" 現(xiàn)在來看,其實 protocal已經(jīng)開始對兩者都統(tǒng)一和規(guī)范起來操作姆吭,因為資料中說“非正式協(xié)議使用 interface修飾“榛做, 現(xiàn)在我們看到協(xié)議中兩個修飾詞:“必須實現(xiàn)(@requied)”和“可選實現(xiàn)(@optional)”。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末内狸,一起剝皮案震驚了整個濱河市检眯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌昆淡,老刑警劉巖锰瘸,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瘪撇,居然都是意外死亡获茬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門倔既,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鹏氧,你說我怎么就攤上這事渤涌。” “怎么了把还?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵实蓬,是天一觀的道長。 經(jīng)常有香客問我吊履,道長安皱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任艇炎,我火速辦了婚禮酌伊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缀踪。我一直安慰自己居砖,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布驴娃。 她就那樣靜靜地躺著奏候,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唇敞。 梳的紋絲不亂的頭發(fā)上蔗草,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天咒彤,我揣著相機與錄音,去河邊找鬼咒精。 笑死蔼紧,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的狠轻。 我是一名探鬼主播奸例,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼向楼!你這毒婦竟也來了查吊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤湖蜕,失蹤者是張志新(化名)和其女友劉穎逻卖,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昭抒,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡评也,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了灭返。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盗迟。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖熙含,靈堂內(nèi)的尸體忽然破棺而出罚缕,到底是詐尸還是另有隱情,我是刑警寧澤怎静,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布邮弹,位于F島的核電站,受9級特大地震影響蚓聘,放射性物質(zhì)發(fā)生泄漏腌乡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一夜牡、第九天 我趴在偏房一處隱蔽的房頂上張望与纽。 院中可真熱鬧,春花似錦氯材、人聲如沸渣锦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袋毙。三九已至,卻和暖如春冗尤,著一層夾襖步出監(jiān)牢的瞬間听盖,已是汗流浹背胀溺。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留皆看,地道東北人仓坞。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像腰吟,于是被迫代替她去往敵國和親无埃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

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

  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 1,962評論 0 7
  • 最全的iOS面試題及答案 iOS面試小貼士 ———————————————回答好下面的足夠了-----------...
    zweic閱讀 2,689評論 0 73
  • 多線程毛雇、特別是NSOperation 和 GCD 的內(nèi)部原理嫉称。運行時機制的原理和運用場景。SDWebImage的原...
    LZM輪回閱讀 2,004評論 0 12
  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,345評論 0 35
  • 文/鴻運 秋雨連三夜灵疮,不見日月辰织阅,頻頻溫差大,莫非冬來臨震捣? 落葉隨風舞荔棉,桂花亂飛塵,處處皆冷雨蒿赢,路上慌行人润樱。
    HONGYUNDANGTOU閱讀 787評論 5 9