2023年新版IOS筆試題_第1頁
2023年新版IOS筆試題_第2頁
2023年新版IOS筆試題_第3頁
2023年新版IOS筆試題_第4頁
2023年新版IOS筆試題_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、即時聊天App不會采用的網(wǎng)絡(luò)傳輸方式A.UDPB.TCP

C.HTTP

D.FTP

FTP:是文獻傳輸協(xié)議,是FileTransferProtocol的簡稱,它的作用是用于控制互聯(lián)網(wǎng)上文獻的雙向傳輸,因此一定不會是即時聊天使用的;UDP:是面向無連接的傳輸層協(xié)議,數(shù)據(jù)傳輸是不可靠的,它只管發(fā),不管收不收得到;TCP:是面向連接的,可靠的傳輸層協(xié)議;HTTP:是超文本傳輸協(xié)議,相應(yīng)于應(yīng)用層,而HTTP是基于TCP的。關(guān)于socket理論基礎(chǔ)知識,更具體可閱讀下面的文章:Socket理論知識參考答案:D-----------------可愛的分割線------------------

2、下列技術(shù)不屬于多線程的是ABlock

BNSThread

CNSOperationDGCD

蘋果提供了NSThread、NSOperation、GCD這三種技術(shù)用于解決多線程。對于NSThread是需要自己管理其生命周期的;對于NSOpeartion也是常用的技術(shù)之一,通常與NSOperationQueue一起配合使用;對于GCD是平時見到最多的,使用起來很方便,而它與block配合起來使用,簡樸并且簡潔。Block不是一項技術(shù),只是代碼段,但是具有自動捕獲上下文信息的功能,與函數(shù)指針有點類似,其實全局函數(shù)就是特殊的block。關(guān)于NSOperation/NSOperationQueue,可閱讀筆者的文章:多線程之NSOperatoin/NSOperationQueue;參考答案:A-----------------可愛的分割線------------------

3、線程和進程的區(qū)別不對的的是A進程和線程都是由操作系統(tǒng)所提供的程序運營的基本單元B線程之間有單獨的地址空間C進程和線程的重要差別在于它們是不同的操作系統(tǒng)資源管理方式D線程有自己的堆棧和局部變量

這是學(xué)習(xí)操作系統(tǒng)知識的時候經(jīng)常會考試的內(nèi)容,但是在工作中經(jīng)常會碰到多線程解決問題。通常來說,一個進程就代表著一個應(yīng)用程序,而操作系統(tǒng)為了更好的運用資源,提供了線程用于解決并發(fā)。線程之間沒有有單獨的地址空間,解決完畢之后還得回到主線程,所以,一個線程死掉就等于整個進程死掉。進程和線程都是操作系統(tǒng)的基本單元,只是分工不同,是兩種不同的資源管理方式。線程所需要的資源都來自于進程,它沒有自己獨立的資源,也就沒有自己的堆棧和局部變量。修正:這里參考答案與描述不符合的問題。參考答案:B-----------------可愛的分割線------------------

4、堆和棧的區(qū)別對的的是A對于棧來講,我們需要手工控制,容易產(chǎn)生memoryleakB對于堆來說,釋放工作由編譯器自動管理,無需我們手工控制C在Windows下,棧是向高地址擴展的數(shù)據(jù)結(jié)構(gòu),是連續(xù)的內(nèi)存區(qū)域,棧頂?shù)牡刂泛蜅5淖畲笕萘渴窍到y(tǒng)預(yù)先規(guī)定好的D對于堆來講,頻繁的new/delete勢必會導(dǎo)致內(nèi)存空間的不連續(xù),從而導(dǎo)致大量的碎片,使程序效率減少

棧是由編譯器管理的,不是我們手動控制,但是棧所能分派的內(nèi)存是比較少的,假如要解決大數(shù)據(jù),則需要在堆上分派,因此在棧上比較容易出現(xiàn)MemoryLeak;對于堆,需要我們自己申請內(nèi)存,同時也需要我們自己手動釋放,否則會導(dǎo)致內(nèi)存泄露;對于堆,假如過多地申請內(nèi)存空間,會導(dǎo)致內(nèi)存空間不連接,從而導(dǎo)致內(nèi)存碎片,使程序效率減少。參考答案:D-----------------可愛的分割線------------------

5、下列回調(diào)機制的理解不對的的是Atarget-action:當(dāng)兩個對象之間有?較緊密的關(guān)系時,如視圖控制器與其下的某個視圖。

Bdelegate:當(dāng)某個對象收到多個事件,并規(guī)定同一個對象來解決所有事件時。委托機制必須依賴于某個協(xié)議定義的?法來發(fā)送消息。

CNSNotification:當(dāng)需要多個對象或兩個無關(guān)對象解決同一個事件時。

DBlock:適?于回調(diào)只發(fā)?生一次的簡樸任務(wù)。

對于Target-Action機制,規(guī)定兩個對象之間有比較緊密的聯(lián)系,比如在控制器與cell之間,可通過設(shè)立target為控制器對象,而action則為控制器中的某個回調(diào)方法;對于Delegator機制,它是蘋果提供的標(biāo)準(zhǔn)回調(diào)機制,通常會提供一個標(biāo)準(zhǔn)的協(xié)議,然后由代理類遵守協(xié)議,最常用的用法是反向傳值,比如打開藍牙后要反饋給前一個界面藍牙的開關(guān)狀態(tài);對于告知,通常是多對多的關(guān)系,它并不關(guān)心是誰要解決消息,任意對象都可以注冊告知到告知中心,當(dāng)發(fā)送告知時,所有注冊了該告知的對象都可以收到消息。最常用的場景是跨模塊,比如登錄模塊與其它模塊有著非常緊密的聯(lián)系,但是登錄成功后各個地方也許需要做一些解決,因此通常會在登錄成功或者登出成功后發(fā)送告知,以便各個需要解決的模塊得到對的的解決;對于Block是相稱簡樸的,它只合用于一對一的關(guān)系,比如在做某個操作成功或者失敗后回調(diào)。

參考答案:B-----------------可愛的分割線------------------

6、對于runloop的理解不對的的是A每一個線程都有其相應(yīng)的RunLoopB默認(rèn)非主線程的RunLoop是沒有運營的C在一個單獨的線程中沒有必要去啟用RunLoopD可以將NSTimer添加到runloop中

說到RunLoop,它可是多線程的法寶。通常來說,一個線程一次只能執(zhí)行一個任務(wù),執(zhí)行完任務(wù)后就會退出線程。但是,對于主線程是不能退出的,因此我們需要讓主線程即時任務(wù)執(zhí)行完畢,也可以繼續(xù)等待接受事件而不退出,那么RunLoop就是關(guān)鍵法寶了。但是非主線程通常來說就是為了執(zhí)行某一任務(wù)的,執(zhí)行完畢就需要歸還資源,因此默認(rèn)是不運營RunLoop的。每一個線程都有其相應(yīng)的RunLoop的,只是默認(rèn)只有主線程的RunLoop是啟動的,其它子線程的RunLoop默認(rèn)是不啟動的,若要啟動則需要手動啟動。在一個單獨的線程中,假如需要在解決完某個任務(wù)后不退出,繼續(xù)等待接受事件,則需要啟用RunLoop。NSRunLoop提供了一個添加NSTimer的方法,可以指定Mode,假如要讓任何情況下都回調(diào),則需要設(shè)立Mode為Common模式。實質(zhì)上,對于子線程的runloop默認(rèn)是不存在的,由于蘋果采用了懶加載的方式。假如我們沒有手動調(diào)用[NSRunLoopcurrentRunLoop],就不會去查詢是否存在當(dāng)前線程的RunLoop,也就不會去加載,更不會創(chuàng)建。下面是CFRunLoop的部分源碼://shouldonlybecalledbyFoundation//t==0isasynonymfor"mainthread"thatalwaysworksCF_EXPORTCFRunLoopRef_CFRunLoopGet0(pthread_tt){if(pthread_equal(t,kNilPthreadT)){

t=pthread_main_thread_np();}__CFSpinLock(&loopsLock);if(!__CFRunLoops){

__CFSpinUnlock(&loopsLock);

CFMutableDictionaryRefdict=CFDictionaryCreateMutable(kCFAllocatorSystemDefault,0,NULL,&kCFTypeDictionaryValueCallBacks);

CFRunLoopRefmainLoop=__CFRunLoopCreate(pthread_main_thread_np());

CFDictionarySetValue(dict,pthreadPointer(pthread_main_thread_np()),mainLoop);

if(!OSAtomicCompareAndSwapPtrBarrier(NULL,dict,(void*volatile*)&__CFRunLoops)){

CFRelease(dict);

}

CFRelease(mainLoop);

__CFSpinLock(&loopsLock);}CFRunLoopRefloop=(CFRunLoopRef)CFDictionaryGetValue(__CFRunLoops,pthreadPointer(t));__CFSpinUnlock(&loopsLock);if(!loop){

CFRunLoopRefnewLoop=__CFRunLoopCreate(t);

__CFSpinLock(&loopsLock);

loop=(CFRunLoopRef)CFDictionaryGetValue(__CFRunLoops,pthreadPointer(t));

if(!loop){

CFDictionarySetValue(__CFRunLoops,pthreadPointer(t),newLoop);

loop=newLoop;

}

//don'treleaserunloopsinsidetheloopsLock,becauseCFRunLoopDeallocatemayenduptakingit

__CFSpinUnlock(&loopsLock);

CFRelease(newLoop);}if(pthread_equal(t,pthread_self())){

_CFSetTSD(__CFTSDKeyRunLoop,(void*)loop,NULL);

if(0==_CFGetTSD(__CFTSDKeyRunLoopCntr)){

_CFSetTSD(__CFTSDKeyRunLoopCntr,(void*)(PTHREAD_DESTRUCTOR_ITERATIONS-1),(void(*)(void*))__CFFinalizeRunLoop);

}}returnloop;

關(guān)鍵加載過程如下:檢查全局字典里是否存在該線程的runLoop,假如有則退出,否則創(chuàng)建一個新的runLoop放到全局字典中參考答案:C-----------------可愛的分割線------------------

7、斷點續(xù)傳需要在請求頭中添加的控制續(xù)傳最重要的關(guān)鍵字ArangeBlength

Ctype

Dsize

理由:對于實現(xiàn)文獻的斷點續(xù)傳和斷點下載,需要設(shè)立請求頭中的Range實體頭,指定第一個字節(jié)的位置和最后一個字節(jié)的位置,而與之相應(yīng)的響應(yīng)頭有Content-Range,指示了整個實體的長度及部分插入位置,如Content-Range:bytes0-500/801,指定了范圍為當(dāng)前范圍與文獻總大小。參考答案:A-----------------可愛的分割線------------------

8、MVC優(yōu)點不對的的是A低耦合性B高重用性和可合用性C較低的生命周期成本D代碼高效率

理由:MVC只是一種構(gòu)架設(shè)計模式,它的出現(xiàn)有比較久的歷史了。Model-Controller-View是在開發(fā)中最常見到的架構(gòu)設(shè)計模式,通過將Model、View、Controller三者互相聯(lián)系,以Model作為數(shù)據(jù)加工廠,以Controller作為橋梁,解決業(yè)務(wù),而View只是數(shù)據(jù)展示層,理應(yīng)與業(yè)務(wù)無關(guān)。MVC設(shè)計模式減少了耦合性,提供了重用性和合用性,可有效地提高開發(fā)效率。參考答案:D-----------------可愛的分割線------------------

9、混編ObjC和C++的源碼文獻需要將文獻格式的后綴改為A.cB.cppC.mmD.m

理由:ObjC要想與C++源代碼文獻混編,那么就需要將文獻后綴改為.mm。這個沒有什么可細說了,記住就好了!參考答案:C-----------------可愛的分割線------------------

10、ObjC聲明一個類所要用到的編譯指令是A@interfaceSomeClassB@protocolSomeClassC@implementationSomeClassD@autoreleaseSomeClass

理由:A是聲明類的指令;B是聲明協(xié)議的指令;C是實現(xiàn)類的定義的指令;D是聲明自動釋放池的指令。參考答案:A-----------------可愛的分割線------------------

11、MRC文獻在ARC工程混合編譯時,需要在文獻的CompilerFlags上添加什么參數(shù)A-sharedB-fno-objc-arcC-fobjc-arcD-dynamic

理由:對于ARC工程中,假如要混編MRC文獻,需要在工程的CompilerFlags添加-fno-bojc-arc;對于MRC工程中,假如要混編ARC文獻,需要設(shè)立為-fobjc-arc。參考答案:B-----------------可愛的分割線------------------

12、下面關(guān)于Objective-C內(nèi)存管理的描述錯誤的是A當(dāng)使用ARC來管理內(nèi)存時,代碼中不可以出現(xiàn)autoreleaseBautoreleasepool在drain的時候會釋放在其中分派的對象C當(dāng)使用ARC來管理內(nèi)存時,在線程中大量分派對象而不用autoreleasepool則也許會導(dǎo)致內(nèi)存泄露D在使用ARC的項目中不能使用NSZone

理由:ARC只是在大多時候編譯自動為我們添加上內(nèi)存管理的代碼,只是我們的源代碼看不到而已,但是在編譯時,編譯器會添加上相關(guān)內(nèi)存管理代碼。對于自動釋放池,在drain時會將自動釋放池中的所有對象的引用計數(shù)減一,若引用計數(shù)為0,則會自動釋放掉其內(nèi)存。假如在線程中需要大量分派內(nèi)存,我們理應(yīng)添加上自動釋放池,以防內(nèi)存泄露。比如在for循環(huán)中要分派大量的內(nèi)存解決數(shù)據(jù),那么我們應(yīng)當(dāng)在for循環(huán)內(nèi)添加自動釋放池,在每個循環(huán)后就將內(nèi)存釋放掉,防止內(nèi)存泄露。在ARC項目中,自然不能手動使用NSZone,也不能調(diào)用父類的dealloc。參考答案:A-----------------可愛的分割線------------------

13、下面哪個不屬于對象數(shù)據(jù)序列化方法AJSONBPropertyListCXMLDHTTP

理由:數(shù)據(jù)序列化是將對象的數(shù)據(jù)轉(zhuǎn)化成某一種格式的數(shù)據(jù),在ios開發(fā)中最常用的就是JSON,部分公司會采用XML,筆者從未碰到過使用PropertyList來傳輸數(shù)據(jù)的,但是我們通過會將一些小量的數(shù)據(jù)存儲到PropertyList中,比如NSUserDefaults就是操作plist文獻的。而HTTP是超文獻傳輸協(xié)議,只是一種協(xié)議。參考答案:D-----------------可愛的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論