iOS-網(wǎng)絡(luò)多線程題

一、選擇題


  1. 對(duì)以下四種多線程的技術(shù)簡介錯(cuò)誤的是( C )
    A. pthread是一套通用的多線程API,適用于Unix\Linux\Windows等系統(tǒng),跨平臺(tái)\可移植,使用難度大
    B. NSThread 是使用更加面向?qū)ο?簡單易用,可直接操作線程對(duì)象
    C. GCD是基于NSThread的,充分利用設(shè)備的多核
    D. NSOperation基于GCD(底層是GCD)比GCD多了一些更簡單實(shí)用的功能,使用更加面向?qū)ο?/p>

  2. 下面關(guān)于GCD說法不正確的是 ( C )
    A. GCD是 C語言的“并發(fā)技術(shù)”框架
    B. GCD是蘋果公司為多核的并行運(yùn)算提出的解決方案
    C. GCD是直接對(duì)線程操作的并發(fā)編程.
    D. GCD自動(dòng)管理線程的生命周期(創(chuàng)建線程、調(diào)度任務(wù)条辟、銷毀線程等)

解析:

  • GCD是蘋果公司為多核的并行運(yùn)算提出的解決方案
  • GCD會(huì)自動(dòng)利用更多的CPU內(nèi)核(比如雙核违寿、四核)
  • GCD對(duì)自動(dòng)管理線程的生命周期(創(chuàng)建線程萧豆、調(diào)度任務(wù)籍救、銷毀線程)
  • 程序員只需要告訴GCD想要執(zhí)行什么任務(wù)胸蛛、不需要編寫線程任何管理代碼
  • 圖片2.png
  1. GCD的隊(duì)列可以分為( B )大類型 和( C )種隊(duì)列
    A. 1 B. 2 C. 3 D. 4

解析:


圖片3-1.png

三種隊(duì)列:


圖片3-2.png
  1. 多選題,以下對(duì)Block的描述正確的是(ABC )
    A. Block是一種數(shù)據(jù)類型,可以被當(dāng)做參數(shù)傳遞
    B. Block是一個(gè)能工作的代碼單元,可以在任何需要的時(shí)候被執(zhí)行
    C. 默認(rèn)情況下,不允許在塊代碼內(nèi)部修改外部變量的數(shù)值
    D. 用Block傳值時(shí)要注意循環(huán)引用,當(dāng)Block內(nèi)引用局部變量時(shí)要用__weak修飾此變量來解除循環(huán)引用

  2. 對(duì)于語句NSString *str = [NSData alloc] init];在編譯時(shí)和運(yùn)行時(shí)分別是什么類型( D )
    A. 編譯時(shí)NSData,運(yùn)行時(shí)NSData
    B. 編譯時(shí)NSString,運(yùn)行時(shí)NSString
    C. 編譯時(shí)NSData,運(yùn)行時(shí)NSString
    D. 編譯時(shí)NSString,運(yùn)行時(shí)NSData

  3. 數(shù)組中可以添加以下那種空值( B )
    A. Nil 是類的空指針類型
    B. NSNull 集合中的空值
    C. nil 是對(duì)象的空指針類型
    D. NULL 是其它類型(基本數(shù)據(jù)類型,C類型指針) 為空值

解析:


圖片6.png
  1. 以下哪項(xiàng)不是創(chuàng)建線程的目的( D )
    A.開啟一條新的執(zhí)行路徑
    B.運(yùn)行指定的代碼
    C.把耗時(shí)操作放在后臺(tái)執(zhí)行
    D.線程開的越多執(zhí)行效率越快

  2. 關(guān)于NSURLSession說法錯(cuò)誤的是( D )
    A.NSURLSession是iOS7中新的網(wǎng)絡(luò)接口,與NSURLConnection是并列的
    B.當(dāng)程序在前臺(tái)時(shí),NSURLSession與NSURLConnection大部分可以互相替代
    C.NSURLSession支持后臺(tái)網(wǎng)絡(luò)操作污茵,除非用戶強(qiáng)行關(guān)閉
    D.所有的NSURLSession對(duì)象必須共用一個(gè)NSURLSessionConfiguration

解析:
每一個(gè)NSURLSession對(duì)象都可以設(shè)置不同的NSURLSessionConfiguration,從而滿足應(yīng)用內(nèi)不同類型的網(wǎng)絡(luò)請(qǐng)求

  1. 以下哪項(xiàng)不屬于耗時(shí)操作( D )
    A. 從服務(wù)器請(qǐng)求用戶信息
    B. 文件上傳/下載
    C. 執(zhí)行1萬次NSLog(@“itcast");
    D. 在本地判斷用戶名是否包含非法字符

解析:

  • D選項(xiàng).一般使用正則表達(dá)式判斷用戶名是否包含非法字符,不屬于耗時(shí)操作.
  • A.B.兩項(xiàng)都與網(wǎng)絡(luò)有關(guān),都屬于耗時(shí)操作
  • C選項(xiàng).NSLog性能比較低,打印1萬次也是耗時(shí)操作,因此實(shí)際開發(fā)中在應(yīng)用程序發(fā)布前都會(huì)將NSLog調(diào)試去掉.
  1. POST對(duì)上傳的文件大小限制一般為( C )
    A. 512KB B. 1M C. 2M D.無限

解析:


圖片10.png

11.下面不屬于block的定義的是( D )
A.返回類型 (^blockName)(參數(shù)列表) = ^返回類型 (參數(shù)列表) { /// 代碼實(shí)現(xiàn); }
B.void (^blockName)(參數(shù)列表) = ^ (參數(shù)列表) { /// 代碼實(shí)現(xiàn); }
C.void (^blockName) = ^ { /// 代碼實(shí)現(xiàn); }
D.void (^blockName)() = ^ { /// 代碼實(shí)現(xiàn); }

12.下面哪一個(gè)不是創(chuàng)建線程的方法( A )
A. [NSThread currentThread];
B.[selfperformSelectorInBackground:@selector(longOperation) withObject:nil];
C.[NSThread detachNewThreadSelector:@selector(longOperation) toTarget:selfwithObject:nil];
D.[[NSThread alloc] initWithTarget:selfselector:@selector(longOperation) object:nil]

13.對(duì)于單例理解正確的是( C )
A.單例是系統(tǒng)自帶的類才有的。
B.單例系統(tǒng)運(yùn)行時(shí)就創(chuàng)建了葬项,不用自己創(chuàng)建泞当。
C.單例是無論以何種方式來創(chuàng)建該類的對(duì)象,創(chuàng)建的對(duì)象總是同一個(gè)民珍。
D.單例是系統(tǒng)給我們提供好的的一種高效率的創(chuàng)建對(duì)象的方法襟士。

二、簡答題


  1. KVO的實(shí)現(xiàn)原理,使用場(chǎng)景
  • KVO的實(shí)現(xiàn)原理:
    當(dāng)某個(gè)類的對(duì)象第一次被觀察時(shí)嚷量,系統(tǒng)就會(huì)在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建該類的一個(gè)派生類陋桂,在這個(gè)派生類中重寫原類中被觀察屬性的setter方法,派生類在被重寫的setter方法實(shí)現(xiàn)真正的通知機(jī)制(Person->NSKVONotifying_Person).
    派生類重寫了 class 方法以“欺騙”外部調(diào)用者它就是起初的那個(gè)類。然后系統(tǒng)將這個(gè)對(duì)象的isa指針指向這個(gè)新誕生的派生類蝶溶,因此這個(gè)對(duì)象就成為該派生類的對(duì)象了嗜历,因而在該對(duì)象上對(duì)setter的調(diào)用就會(huì)調(diào)用重寫的setter,從而激活鍵值通知機(jī)制抖所。此外梨州,派生類還重寫了dealloc方法來釋放資源。
  • KVO使用場(chǎng)景:
    1.實(shí)現(xiàn)上下拉刷新控件 contentoffset
    2.webview混合排版 contentsize
    3.監(jiān)聽模型屬性實(shí)時(shí)更新UI
  1. 手寫單例的實(shí)現(xiàn)

  2. 為什么弱引用一些類方法返回的對(duì)象沒有釋放(如 + (id)buttonWithType:(UIButtonType)buttonType;)? ARC中需要使用autorelease嗎,為什么?自動(dòng)釋放池是如何工作的
    很多類方法為了在代碼塊結(jié)束時(shí)引用的對(duì)象不會(huì)因無強(qiáng)引用而被釋放內(nèi)存采用自動(dòng)釋放的方式,當(dāng)其最近的自動(dòng)釋放池釋放時(shí)該對(duì)象才會(huì)釋放.
    ARC中手動(dòng)添加autoreleasepool可用于提前釋放使用自動(dòng)釋放策略的對(duì)象,防止大量自動(dòng)釋放的對(duì)象堆積造成內(nèi)存峰值過高.
    自動(dòng)釋放池時(shí)棧結(jié)構(gòu),每個(gè)線程的runloop運(yùn)行時(shí)都會(huì)自動(dòng)創(chuàng)建自動(dòng)釋放池,程序員可以代碼手動(dòng)創(chuàng)建自動(dòng)釋放池,自動(dòng)釋放的對(duì)象會(huì)被添加到最近的(棧頂)自動(dòng)釋放池中,系統(tǒng)自動(dòng)創(chuàng)建的自動(dòng)釋放池在每個(gè)運(yùn)行循環(huán)結(jié)束時(shí)銷毀釋放池并給池中所有對(duì)象發(fā)release消息,手動(dòng)創(chuàng)建釋放池在所在代碼塊結(jié)束時(shí)銷毀釋放池并發(fā)消息統(tǒng)一release

  3. NSOperationQueue和GCD的區(qū)別和類似的地方
    1> GCD是純C語言的API田轧,NSOperationQueue是基于GCD的OC版本封裝
    2> GCD僅僅支持FIFO隊(duì)列摊唇,只可以設(shè)置隊(duì)列的優(yōu)先級(jí),而NSOperationQueue中的每一個(gè)任務(wù)都可以被重新設(shè)置優(yōu)先級(jí)(setQueuePriority:),從而實(shí)現(xiàn)不同操作的執(zhí)行順序調(diào)整,
    3> GCD不支持異步操作之間的依賴關(guān)系設(shè)置涯鲁。如果某個(gè)操作的依賴另一個(gè)操作的數(shù)據(jù)巷查,使用NSOperationQueue能夠設(shè)置依賴按照正確的順序執(zhí)行操作(addDependency:)。GCD則沒有內(nèi)建的依賴關(guān)系支持(只能通過Barrior和同步任務(wù)手動(dòng)實(shí)現(xiàn))抹腿。
    4> NSOperationQueue方便停止隊(duì)列中的任務(wù)(cancelAllOperations, suspended),GCD不方便停止隊(duì)列中的任務(wù).
    5> NSOperationQueue支持KVO岛请,可以監(jiān)測(cè)operation是否正在執(zhí)行(isExecuted)、是否結(jié)束(isFinished)警绩,是否取消(isCanceld)
    6> GCD的執(zhí)行速度比NSOperationQueue快
    7>NSOperationQueue可設(shè)置最大并發(fā)數(shù)量(節(jié)電),GCD具有dispatch_once(只執(zhí)行一次,單例)和dispatch_after(延遲執(zhí)行)功能

  4. 出現(xiàn)資源搶奪有哪些解決辦法?
    1> 互斥鎖 @synchronized(xx) {...}
    2> NSCondition NSLock
    3> dispatch_barrior_async
    4> dispatch_semaphore_wait

  5. 請(qǐng)寫出HTTP請(qǐng)求常用的幾種方式崇败。
    GET :獲取指定資源
    POST :2M 向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求,在RESTful 風(fēng)格用于新增資源
    HEAD :獲取指定資源頭部信息
    PUT :替換指定資源(不支持瀏覽器操作)
    DELETE: 刪除指定資源

  6. 如何使一個(gè)方法返回多個(gè)數(shù)據(jù)(這些數(shù)據(jù)不在一個(gè)集合或者自定義對(duì)象中)
    傳參指針變量的地址,方法內(nèi)部通過*運(yùn)算符使用該地址可以修改該地址保存的內(nèi)容(引用對(duì)象的地址),當(dāng)外部再次使用該指針變量取出引用對(duì)象時(shí),引用對(duì)象已經(jīng)在方法內(nèi)部發(fā)生了改變,指針變量指向其他數(shù)據(jù),相當(dāng)于方法的返回值(經(jīng)方法處理后生成的外部可使用的結(jié)果數(shù)據(jù)).

  7. (拓展)KVC可以修改只讀屬性嗎,為什么? KVC的查找順序是什么
    KVC在某種程度上提供了訪問器的替代方案肩祥。不過訪問器方法是一個(gè)很好的東西后室,以至于只要是有可能,KVC也盡量再訪問器方法的幫助下工作混狠。為了設(shè)置或者返回對(duì)象屬性岸霹,KVC按順序使用如下技術(shù):
    ①檢查是否存在-<key>、-is<key>(只針對(duì)布爾值有效)或者-get<key>的訪問器方法将饺,如果有可能贡避,就是用這些方法返回值;
    檢查是否存在名為-set<key>:的方法予弧,并使用它做設(shè)置值刮吧。對(duì)于 -get<key>和 -set<key>:方法,將大寫Key字符串的第一個(gè)字母掖蛤,并與Cocoa的方法命名保持一致杀捻;
    ②如果上述方法不可用,則檢查名為-_<key>蚓庭、-_is<key>(只針對(duì)布爾值有效)致讥、-_get<key>和-set<key>:方法;
    ③如果沒有找到訪問器方法彪置,可以嘗試直接訪問實(shí)例變量拄踪。實(shí)例變量可以是名為:<key>或
    <key>;
    ④如果仍為找到,則調(diào)用valueForUndefinedKey:和setValue:forUndefinedKey:方法拳魁。這些方法的默認(rèn)實(shí)現(xiàn)都是拋出異常惶桐,我們可以根據(jù)需要重寫它們。

  8. (拓展)TCP如何解決亂序和丟包問題,描述一下三次握手
    TCP數(shù)據(jù)包的頭格式中有兩個(gè)概念,Sequence Number是數(shù)據(jù)包的序號(hào)潘懊,用來解決網(wǎng)絡(luò)包亂序(reordering)問題姚糊。Acknowledgement Number就是ACK——用于確認(rèn)收到,用來解決不丟包的問題授舟。
    位碼即tcp標(biāo)志位救恨,有6種標(biāo)示:SYN(synchronous建立聯(lián)機(jī)) ACK(acknowledgement 確認(rèn)) PSH(push傳送) FIN(finish結(jié)束) RST(reset重置) URG(urgent緊急)Sequence number(順序號(hào)碼) Acknowledge number(確認(rèn)號(hào)碼).
    SeqNum的增加是和傳輸?shù)淖止?jié)數(shù)相關(guān)的,TCP傳輸數(shù)據(jù)時(shí),如A主機(jī)第一次傳輸1440個(gè)字節(jié),seq=1,那么第二次時(shí)seq = 1441,B拼接數(shù)據(jù)就是根據(jù)seq進(jìn)行拼接的,seq數(shù)字不斷累加避免了亂序.B主機(jī)收到第一次數(shù)據(jù)包以后會(huì)返回ack = 1441.
    A主機(jī)收到B的ack = 1441時(shí),就知道第一個(gè)數(shù)據(jù)包B已收到. 如果B沒有收到第一次的數(shù)據(jù)包,那么B再收到A的數(shù)據(jù)包時(shí),他就會(huì)發(fā)ack = 1回去,A收到B的回復(fù),發(fā)現(xiàn)B沒有收到第一次數(shù)據(jù)包,就會(huì)重發(fā)第一次數(shù)據(jù)包,這樣就可以防止丟包.

    圖片 1.png

    第一次握手:建立連接時(shí),客戶端發(fā)送syn包(syn=j)到服務(wù)器释树,并進(jìn)入SYN_SEND狀態(tài)肠槽,等待服務(wù)器確認(rèn)擎淤;
    第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1)秸仙,同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k)嘴拢,即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)寂纪;
    第三次握手:客戶端收到服務(wù)器的SYN+ACK包席吴,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢捞蛋,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài)孝冒,完成三次握手。完成三次握手拟杉,客戶端與服務(wù)器開始傳送數(shù)據(jù).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庄涡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捣域,更是在濱河造成了極大的恐慌啼染,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焕梅,死亡現(xiàn)場(chǎng)離奇詭異迹鹅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贞言,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門斜棚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人该窗,你說我怎么就攤上這事弟蚀。” “怎么了酗失?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵义钉,是天一觀的道長。 經(jīng)常有香客問我规肴,道長捶闸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任拖刃,我火速辦了婚禮删壮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兑牡。我一直安慰自己央碟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布均函。 她就那樣靜靜地躺著亿虽,像睡著了一般菱涤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上经柴,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天狸窘,我揣著相機(jī)與錄音,去河邊找鬼坯认。 笑死,一個(gè)胖子當(dāng)著我的面吹牛氓涣,可吹牛的內(nèi)容都是我干的牛哺。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼劳吠,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼引润!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起痒玩,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤淳附,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蠢古,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奴曙,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年草讶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了洽糟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堕战,死狀恐怖坤溃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嘱丢,我是刑警寧澤薪介,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站越驻,受9級(jí)特大地震影響汁政,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伐谈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一烂完、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诵棵,春花似錦抠蚣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怀跛。三九已至,卻和暖如春柄冲,著一層夾襖步出監(jiān)牢的瞬間吻谋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工现横, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漓拾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓戒祠,卻偏偏與公主長得像骇两,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子姜盈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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

  • 史上最全的iOS面試題及答案 iOS面試小貼士———————————————回答好下面的足夠了----------...
    Style_偉閱讀 2,360評(píng)論 0 35
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛閱讀 1,990評(píng)論 0 7
  • 多線程低千、特別是NSOperation 和 GCD 的內(nèi)部原理。運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場(chǎng)景馏颂。SDWebImage的原...
    LZM輪回閱讀 2,009評(píng)論 0 12
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用示血,...
    LZM輪回閱讀 3,331評(píng)論 0 6
  • 端午節(jié)前上班的最后一天里,經(jīng)理說讓我們提前一個(gè)小時(shí)下班救拉。 我們每次回到住處第一件事就是吃和弄什么吃难审。中午下的混沌還...
    Amilyren閱讀 315評(píng)論 0 0