2023年新版IOS笔试题_第1页
2023年新版IOS笔试题_第2页
2023年新版IOS笔试题_第3页
2023年新版IOS笔试题_第4页
2023年新版IOS笔试题_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、即时聊天App不会采用的网络传输方式A.UDPB.TCP

C.HTTP

D.FTP

FTP:是文献传输协议,是FileTransferProtocol的简称,它的作用是用于控制互联网上文献的双向传输,因此一定不会是即时聊天使用的;UDP:是面向无连接的传输层协议,数据传输是不可靠的,它只管发,不管收不收得到;TCP:是面向连接的,可靠的传输层协议;HTTP:是超文本传输协议,相应于应用层,而HTTP是基于TCP的。关于socket理论基础知识,更具体可阅读下面的文章:Socket理论知识参考答案:D-----------------可爱的分割线------------------

2、下列技术不属于多线程的是ABlock

BNSThread

CNSOperationDGCD

苹果提供了NSThread、NSOperation、GCD这三种技术用于解决多线程。对于NSThread是需要自己管理其生命周期的;对于NSOpeartion也是常用的技术之一,通常与NSOperationQueue一起配合使用;对于GCD是平时见到最多的,使用起来很方便,而它与block配合起来使用,简朴并且简洁。Block不是一项技术,只是代码段,但是具有自动捕获上下文信息的功能,与函数指针有点类似,其实全局函数就是特殊的block。关于NSOperation/NSOperationQueue,可阅读笔者的文章:多线程之NSOperatoin/NSOperationQueue;参考答案:A-----------------可爱的分割线------------------

3、线程和进程的区别不对的的是A进程和线程都是由操作系统所提供的程序运营的基本单元B线程之间有单独的地址空间C进程和线程的重要差别在于它们是不同的操作系统资源管理方式D线程有自己的堆栈和局部变量

这是学习操作系统知识的时候经常会考试的内容,但是在工作中经常会碰到多线程解决问题。通常来说,一个进程就代表着一个应用程序,而操作系统为了更好的运用资源,提供了线程用于解决并发。线程之间没有有单独的地址空间,解决完毕之后还得回到主线程,所以,一个线程死掉就等于整个进程死掉。进程和线程都是操作系统的基本单元,只是分工不同,是两种不同的资源管理方式。线程所需要的资源都来自于进程,它没有自己独立的资源,也就没有自己的堆栈和局部变量。修正:这里参考答案与描述不符合的问题。参考答案:B-----------------可爱的分割线------------------

4、堆和栈的区别对的的是A对于栈来讲,我们需要手工控制,容易产生memoryleakB对于堆来说,释放工作由编译器自动管理,无需我们手工控制C在Windows下,栈是向高地址扩展的数据结构,是连续的内存区域,栈顶的地址和栈的最大容量是系统预先规定好的D对于堆来讲,频繁的new/delete势必会导致内存空间的不连续,从而导致大量的碎片,使程序效率减少

栈是由编译器管理的,不是我们手动控制,但是栈所能分派的内存是比较少的,假如要解决大数据,则需要在堆上分派,因此在栈上比较容易出现MemoryLeak;对于堆,需要我们自己申请内存,同时也需要我们自己手动释放,否则会导致内存泄露;对于堆,假如过多地申请内存空间,会导致内存空间不连接,从而导致内存碎片,使程序效率减少。参考答案:D-----------------可爱的分割线------------------

5、下列回调机制的理解不对的的是Atarget-action:当两个对象之间有⽐较紧密的关系时,如视图控制器与其下的某个视图。

Bdelegate:当某个对象收到多个事件,并规定同一个对象来解决所有事件时。委托机制必须依赖于某个协议定义的⽅法来发送消息。

CNSNotification:当需要多个对象或两个无关对象解决同一个事件时。

DBlock:适⽤于回调只发⽣生一次的简朴任务。

对于Target-Action机制,规定两个对象之间有比较紧密的联系,比如在控制器与cell之间,可通过设立target为控制器对象,而action则为控制器中的某个回调方法;对于Delegator机制,它是苹果提供的标准回调机制,通常会提供一个标准的协议,然后由代理类遵守协议,最常用的用法是反向传值,比如打开蓝牙后要反馈给前一个界面蓝牙的开关状态;对于告知,通常是多对多的关系,它并不关心是谁要解决消息,任意对象都可以注册告知到告知中心,当发送告知时,所有注册了该告知的对象都可以收到消息。最常用的场景是跨模块,比如登录模块与其它模块有着非常紧密的联系,但是登录成功后各个地方也许需要做一些解决,因此通常会在登录成功或者登出成功后发送告知,以便各个需要解决的模块得到对的的解决;对于Block是相称简朴的,它只合用于一对一的关系,比如在做某个操作成功或者失败后回调。

参考答案:B-----------------可爱的分割线------------------

6、对于runloop的理解不对的的是A每一个线程都有其相应的RunLoopB默认非主线程的RunLoop是没有运营的C在一个单独的线程中没有必要去启用RunLoopD可以将NSTimer添加到runloop中

说到RunLoop,它可是多线程的法宝。通常来说,一个线程一次只能执行一个任务,执行完任务后就会退出线程。但是,对于主线程是不能退出的,因此我们需要让主线程即时任务执行完毕,也可以继续等待接受事件而不退出,那么RunLoop就是关键法宝了。但是非主线程通常来说就是为了执行某一任务的,执行完毕就需要归还资源,因此默认是不运营RunLoop的。每一个线程都有其相应的RunLoop的,只是默认只有主线程的RunLoop是启动的,其它子线程的RunLoop默认是不启动的,若要启动则需要手动启动。在一个单独的线程中,假如需要在解决完某个任务后不退出,继续等待接受事件,则需要启用RunLoop。NSRunLoop提供了一个添加NSTimer的方法,可以指定Mode,假如要让任何情况下都回调,则需要设立Mode为Common模式。实质上,对于子线程的runloop默认是不存在的,由于苹果采用了懒加载的方式。假如我们没有手动调用[NSRunLoopcurrentRunLoop],就不会去查询是否存在当前线程的RunLoop,也就不会去加载,更不会创建。下面是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;

关键加载过程如下:检查全局字典里是否存在该线程的runLoop,假如有则退出,否则创建一个新的runLoop放到全局字典中参考答案:C-----------------可爱的分割线------------------

7、断点续传需要在请求头中添加的控制续传最重要的关键字ArangeBlength

Ctype

Dsize

理由:对于实现文献的断点续传和断点下载,需要设立请求头中的Range实体头,指定第一个字节的位置和最后一个字节的位置,而与之相应的响应头有Content-Range,指示了整个实体的长度及部分插入位置,如Content-Range:bytes0-500/801,指定了范围为当前范围与文献总大小。参考答案:A-----------------可爱的分割线------------------

8、MVC优点不对的的是A低耦合性B高重用性和可合用性C较低的生命周期成本D代码高效率

理由:MVC只是一种构架设计模式,它的出现有比较久的历史了。Model-Controller-View是在开发中最常见到的架构设计模式,通过将Model、View、Controller三者互相联系,以Model作为数据加工厂,以Controller作为桥梁,解决业务,而View只是数据展示层,理应与业务无关。MVC设计模式减少了耦合性,提供了重用性和合用性,可有效地提高开发效率。参考答案:D-----------------可爱的分割线------------------

9、混编ObjC和C++的源码文献需要将文献格式的后缀改为A.cB.cppC.mmD.m

理由:ObjC要想与C++源代码文献混编,那么就需要将文献后缀改为.mm。这个没有什么可细说了,记住就好了!参考答案:C-----------------可爱的分割线------------------

10、ObjC声明一个类所要用到的编译指令是A@interfaceSomeClassB@protocolSomeClassC@implementationSomeClassD@autoreleaseSomeClass

理由:A是声明类的指令;B是声明协议的指令;C是实现类的定义的指令;D是声明自动释放池的指令。参考答案:A-----------------可爱的分割线------------------

11、MRC文献在ARC工程混合编译时,需要在文献的CompilerFlags上添加什么参数A-sharedB-fno-objc-arcC-fobjc-arcD-dynamic

理由:对于ARC工程中,假如要混编MRC文献,需要在工程的CompilerFlags添加-fno-bojc-arc;对于MRC工程中,假如要混编ARC文献,需要设立为-fobjc-arc。参考答案:B-----------------可爱的分割线------------------

12、下面关于Objective-C内存管理的描述错误的是A当使用ARC来管理内存时,代码中不可以出现autoreleaseBautoreleasepool在drain的时候会释放在其中分派的对象C当使用ARC来管理内存时,在线程中大量分派对象而不用autoreleasepool则也许会导致内存泄露D在使用ARC的项目中不能使用NSZone

理由:ARC只是在大多时候编译自动为我们添加上内存管理的代码,只是我们的源代码看不到而已,但是在编译时,编译器会添加上相关内存管理代码。对于自动释放池,在drain时会将自动释放池中的所有对象的引用计数减一,若引用计数为0,则会自动释放掉其内存。假如在线程中需要大量分派内存,我们理应添加上自动释放池,以防内存泄露。比如在for循环中要分派大量的内存解决数据,那么我们应当在for循环内添加自动释放池,在每个循环后就将内存释放掉,防止内存泄露。在ARC项目中,自然不能手动使用NSZone,也不能调用父类的dealloc。参考答案:A-----------------可爱的分割线------------------

13、下面哪个不属于对象数据序列化方法AJSONBPropertyListCXMLDHTTP

理由:数据序列化是将对象的数据转化成某一种格式的数据,在ios开发中最常用的就是JSON,部分公司会采用XML,笔者从未碰到过使用PropertyList来传输数据的,但是我们通过会将一些小量的数据存储到PropertyList中,比如NSUserDefaults就是操作plist文献的。而HTTP是超文献传输协议,只是一种协议。参考答案:D-----------------可爱的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论