前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS基础问答面试题连载(三)-附答案

iOS基础问答面试题连载(三)-附答案

作者头像
timhbw
发布2018-05-03 11:53:20
7880
发布2018-05-03 11:53:20
举报
文章被收录于专栏:Timhbw博客Timhbw博客
  • 由于HTTP/1.1 不支持多路复用,因此如果要处理多个网络请求,在处理HTTP请求的时候 多数浏览器厂商都是不假思索的就在客户端排队所有的HTTP请求,然后通过一个持久连接,一个接着一个的发送这些请求。然而这种方式性能实在太差。实际上,浏览器开发商对于对于此性能问题,尚没有任何更好的办法,因此只能允许客户端并行打开多个TCP连接会话。但是具体最多可以打开多少个TCP连接是有数量限制的, 多数现代的浏览器,包括桌面和移动浏览器,都支持打开6个连接。即客户端可以并行分派最多6个请求,服务器可以并行处理最多6个请求。
  • 为什么是6个连接?有什么特殊的意义吗?其实,这个数字是多方平衡后的结果:这个数字越大,便能够带来更多的请求并行能力,但是同样的客户端和服务器端所占用的资源也会越多。因此,每个主机6个连接只不过是大家都觉得比较安全,能够接受的一个数字而已。

41.请简单介绍JSON和XML?
  • JSON和XML都是一种用来表示数据的一种数据格式,JSON更加轻量级。
  • 服务器返回的数据通常是JSON的或者是XML的两种,JSON数据格式和OC对象中字典和数组有些相似,XML又称为XML文档,XML的语法结构由三部分构成分别是文档声明,元素和属性。
  • 如果服务器返回的数据是JSON,那么在开发中通常需要对JSON数据进行反序列化处理,把JSON数据转换为OC对象。
  • 如果服务器返回的数据是XML格式的,那么需要对XML文档进行解析,解析XML的方式有两种,分别是SAX(从根元素开始解析)和DOM(先把整个XML文档加载进内存再解析)
42.JSON格式中的true和false,对应OC中的什么数据类型,值为多少?
  • true和false对应OC中的NSNumber数据类型
  • true对应的值为1,false对应的值为0
43.请简单说明什么是序列化和反序列处理,用到了什么方法?
  • 反序列化处理,即把JSON数据--->OC对象,使用的方法为:[NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil]
  • 序列化处理,即把OC对象--->JSON数据,使用的方法为:[NSJSONSerialization dataWithJSONObject:jsonString options:0 error:nil],注意并不是所有的OC对象都能够序列化为JSON数据
44.请简单说明输出流的使用步骤【应用于文件下载时】和注意点?

使用步骤:

  1. 创建输出流(指定路径)
  2. 打开输出流(open)
  3. 使用输出流写数据 (write...)
  4. 关闭输出流 (close)
  5. 注意点:数据写完之后一定要关闭输出流
45.请简单说明文件句柄(NSFileHandle)的使用步骤【应用于文件下载时】和注意点?

使用步骤:

  1. 创建空的文件(路径)
  2. 创建文件句柄(指向文件) 默认指向开头
  3. 使用文件句柄来写数据(内部边写数据边移动文件句柄指针)
  4. 关闭文件句柄(closeFile)
  5. 注意点:
  6. 在写使用文件句柄指针写数据的时候,内部会自动移动文件句柄指针
  7. 写数据的时候可以设置位置(偏移量),如设置从文件的末尾接着写数据
  8. 使用完毕之后,应该把句柄关闭
46.请简单介绍下NSURLSessionTask的几个子类?
  • NSURLSessionTask是一个抽象类,如果要使用那么只能使用它的子类;
  • NSURLSessionTask有两个子类,一个是NSURLSessionDataTask,该task可以用来处理一般的网络请求,如GET|POST请求等,一个是NSURLSessionDownloadTask,该downloadTask在处理下载请求的时候有很大的优势;
  • NSURLSessionDataTask有一个子类为NSURLSessionUploadTask,该uploadTask在处理上传请求的时候有优势.
47.请简单介绍在iOS开发中XML的几种解析方式?
  • XML文档有两种解析模式,一种是SAX(从根元素开发一个接着一个的解析),一种是DOM(将整个XML文档加载进内存解析)
  • 在iOS开发中常用的XML的解析方法有两种,一种是使用苹果原生的NSXMLParser来解析(该方法基于SAX),一种是使用谷歌公司提供的第三方框架GDataXML来解析(该方法基于DOM)
代码语言:javascript
复制
DOM 一次性加载 GDataXML
SAX 一个元素一个元素的解析 NSXMLParser(创建解析器->设置代理->开始解析)
48.如何解决session设置代理之后对代理对象的强引用问题?
  • NSURLSession对象在使用的时候,如果设置了代理,那么session对代理对象会保持一个强引用,在合适的时候应该主动进行释放
  • 可以在控制器调用viewDidDisappear方法的时候来进行处理,可以通过调用invalidateAndCancel方法或者是finishTasksAndInvalidate方法来释放对代理对象的强引用
  • invalidateAndCancel方法直接取消请求然后释放代理对象,finishTasksAndInvalidate方法等请求完成之后释放代理对象。
49.在XCode中如何配置以MRC的方式来编译处理某个类?
  • 点击项目的Targets,点击Build phases(编译阶段),点击展开Compile Sources,找到要处理的类,配置为-fno-objc-arc即可。
50.在使用NSURLSessionDataTask发送请求下载文件的时候,实现断点下载的技术要点是什么?
  • 所谓断点下载,即只下载完整文件中的某一部分数据,如该文件有10M,那么需要做到只请求下载这个文件中5M~10M的这部分数据
  • 可以通过设置请求头信息来实现,参考代码如下:
代码语言:javascript
复制
NSString *header = [NSString stringWithFormat:@"bytes=%zd-",self.currentSize];

[request setValue:header forHTTPHeaderField:@"Range"]

51.请简单比较使用NSURLSessionDownloadTask下载文件和使用NSURLSessionDataTask下载文件的优劣?
  • NSURLSessionDataTask下载文件的优点:可以实现离线断点下载。缺点:代码复杂
  • NSURLSessionDownloadTask下载文件的
  • 优点:
    • 内部已经完成了边接收数据边写入到沙盒中的操作(解决了下载大文件时候的内存飙升问题)
    • 可以方便的实现断点下载
  • 缺点:
    • 无法实现离线断点下载
52.请列出使用NSURLSession发送请求实现文件上传的主要步骤?
  1. 确定上传请求的路径 (NSURL)
  2. 创建可变的请求对象(NSMutableURLRequest)
  3. 修改请求方法为POST
  4. 设置请求头信息(告知服务器端这是一个文件上传请求)
  5. 按照固定的格式拼接要上传的文件等参数
  6. 根据请求对象创建会话对象(NSURLSession对象)
  7. 根据session对象来创建一个uploadTask上传请求任务
  8. 执行该上传请求任务(调用resume方法)
  9. 得到服务器返回的数据,解析数据(上传成功|上传失败)
53.请列出你认为在进行文件上传时候需要注意的细节(注意点)?
  1. 创建可变的请求对象,因为需要修改请求方法为POST,设置请求头信息
  2. 设置请求头这个步骤可能会被遗漏
  3. 要处理上传参数的时候,一定要按照固定的格式来进行拼接
  4. 需要采用合适的方法来获得上传文件的二进制数据类型(MIMEType)
54.请简单说明能够获得文件二进制数据类型(MIMEType)的几种方法?
  • 直接百度 搜索
  • 对着该文件发送一个网络请求,接受到该请求响应的时候,可以通过响应头信息中的MIMEType属性得到
  • 使用通用的二进制数据类型表示任意的二进制数据 application/octet-stream
  • 调用C语言的API来实现
55.请简单介绍下AFN各个主要版本的情况?
代码语言:javascript
复制
0.1--1.0            "2.0---2.6.3"                    3.0-->3.1.0
NSURLConnection - (NSURLConnection + NSURLSession) - NSURLSessio

0.1-2.0  NSURLConnection
2.0 -3.0 NSURLSession + NSURLConnection
3.0 + NSURLSession
56.如果服务器返回的数据不是JSON数据,那么在使用AFN发送网络请求的时候会请求失败请问是什么原因产生的?如何解决?
  • AFN在接受到服务器返回数据的时候,内部默认采用以JSON的方式来对响应体信息进行反序列化处理,而如果服务器返回的数据不是JSON而是其他数据比如XML数据或者是图片数据的时候就会提示网络请求失败
  • 如果服务器返回的数据不是JSON,那么应该修改AFN对响应的解析方式
  • 如果是XML数据,则:manager.responseSerializer = AFXMLParserResponseSerializer serializer
  • 如果既不是JSON也不是XML,则manager.responseSerializer = AFHTTPResponseSerializer serializer
57.在使用NSURLSession进行文件上传的时候,如何监听文件上传的进度,有哪些注意点?
  • 创建会话对象的时候,需要设置代理,让控制器成为session的代理
  • 遵守代理协议(NSURLSessionDataDelegate)
  • 实现代理方法,在代理方法中计算文件的上传进度
代码语言:javascript
复制
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task

didSendBodyData:(int64_t)bytesSent

totalBytesSent:(int64_t)totalBytesSent

totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
  • 注意:当任务执行完毕的时候应该释放对代理对象的强引用
58.请简单说明系统默认提供的NSURLSessionConfiguration三种配置信息?
  • "defaultSessionConfiguration"返回标准配置,这实际上与NSURLConnection的网络协议栈是一样的,具有相同的共享NSHTTPCookieStorage,共享NSURLCache和共享NSURLCredentialStorage
  • "ephemeralSessionConfiguration"返回一个预设配置,没有持久性存储的缓存,Cookie或证书。这对于实现像"秘密浏览"功能的功能来说,是很理想的
  • "backgroundSessionConfiguration":独特之处在于,它会创建一个后台会话。后台会话不同于常规的,普通的会话,它甚至可以在应用程序挂起,退出,崩溃的情况下运行上传和下载任务。初始化时指定的标识符,被用于向任何可能在进程外恢复后台传输的守护进程提供上下文
59.在发送网络请求的时候,如果一个参数(place)需要对应着多个值,那么以下两种请求路径哪种是正确的?
代码语言:javascript
复制
①:[http://192.168.31.520:1314/loveyou?place=Beijing&Shanghai](http://120.25.226.186:32812/weather?place=Beijing&Shanghai)

②:[http://](http://120.25.226.186:32812/weather?place=Beijing&place=Shanghai)[192.168.31.520:1314](http://120.25.226.186:32812/weather?place=Beijing&Shanghai)/loveyou?place=Beijing&place=Shanghai

第二种请求路径是正确的,第一种是错误的,后面的shanghai将会被忽略
60.使用AFN进行文件下载相对于NSURLSessionDownloadTask而言有何好处?
  • 可以很方便的监听文件的下载进度
  • NSURLSessionDownloadTask在实现文件下载的时候,内部默认把文件下载到了tmp临时路径,等下载完毕之后我们需要执行一个剪切操作
  • AFN下载请求的实现内部基于NSURLSessionDownloadTask,在使用的时候只需要告知AFN应该把文件剪切到什么路径,那么AFN内部会自动的进行文件剪切处理

61.请简单回答网络安全的原则是什么?
  • 在网络上"不允许"传输用户隐私数据的"明文"
  • 在本地"不允许"保存用户隐私数据的"明文"
62.请简单介绍下Base64编码?
  • 特点:可以将任意的二进制数据进行Base64编码
  • 结果:所有的数据都能被编码为并只用65个字符就能表示的文本文件。65字符:A~Z a~z 0~9 + / =
  • 对文件进行base64编码后文件数据的变化:编码后的数据~=编码前数据的4/3,会大1/3左右。
  • Base64编码原理:
    • 将所有字符转化为ASCII码;
    • 将ASCII码转化为8位二进制;
    • 将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位;
    • 统一在6位二进制前补两个0凑足8位;
    • 将补0后的二进制转为十进制;
    • 从Base64编码表获取十进制对应的Base64编码
63.请简单说明单向散列函数的特点?
  • 加密后密文的长度是定长的
  • 如果明文不一样,那么散列后的结果一定不一样
  • 如果明文一样,那么加密后的密文一定一样(对相同数据加密,加密后的密文一样)
  • 所有的加密算法是公开的
  • 不可以逆推反算
    • 总结:
  • 不可逆
  • 原文相同 散列值相同
  • 原文不同 散列值不同
  • 加密后密文的长度是定长的
64.请简单介绍下散列函数的一些应用领域?
  • 搜索 多个关键字,先对每个关键字进行散列,然后多个关键字进行或运算,如果值一致则搜索结果一致
  • 版权 对文件进行散列判断该文件是否是正版或原版的
  • 文件完整性验证 对整个文件进行散列,比较散列值判断文件是否完整或被篡改
65.请简单介绍下对称加密的特点和经典算法?
  • 特点:
    • 加密和解密使用相同的秘钥
    • 加密和解密的过程是可逆的
    • 性能好,效率高
  • 经典算法
    • DES 数据加密标准
    • 3DES 使用3个密钥,对消息进行(密钥1·加密)+(密钥2·解密)+(密钥3·加密)
    • AES 高级加密标准
66.请简单说明ECB和CBC两种分组加密模式?
  • ECB模式的全称为Electronic CodeBook模式。又成为电子密码本模式。
  • 特点:
    • 使用ECB模式加密的时候,相同的明文分组会被转换为相同的密文分组。
    • 类似于一个巨大的明文分组——密文分组的对照表。
  • CBC模式全称为Cipher Block Chainning模式(密文分组链接模式|电子密码链条)
  • 特点:
    • 在CBC模式中,首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。
67.请简单介绍下非对称加密的特点和经典算法?
  • 非对称加密的特点:
  • 使用一个密钥对进行加密和解密,公钥加密,私钥解密
  • 公钥是公开的,私钥是保密的
  • 使用非对称加密来处理加密和解密的过程高度安全,但是效率低下,性能很差
  • 经典算法:RSA
68.请简单介绍下数字签名这门技术?
  • 应用场景:需要严格验证发送方身份信息情况
  • 数字签名原理
  • 客户端处理
  • 对"消息"进行 HASH 得到 "消息摘要"
  • 发送方使用自己的私钥对"消息摘要" 加密(数字签名)
  • 把数字签名附着在"报文"的末尾一起发送给接收方
  • 服务端处理
  • 对"消息" HASH 得到 "报文摘要"
  • 使用公钥对"数字签名" 解密
  • 对结果进行匹配
69.数字证书和公钥什么关系?
  • 数字证书就是对公钥进行数字签名
  • 证书和驾照很相似,里面记有姓名、组织、地址等个人信息,以及属于此人的公钥,并有认证机构施加数字签名,只要看到公钥证书,我们就可以知道认证机构认证该公钥的确属于此人
  • 数字证书的主要内容:
  • 公钥
  • 认证机构的数字签名
70.请简单说明在安装cocoapods时,使用pod install命令安装框架后的大致过程?
  1. 分析依赖:该步骤会分析Podfile,查看不同类库之间的依赖情况。如果有多个类库依赖于同一个类库,但是依赖于不同的版本,那么cocoaPods会自动设置一个兼容的版本。
  2. 下载依赖:根据分析依赖的结果,下载指定版本的类库到本地项目中。
  3. 生成Pods项目:创建一个Pods项目专门用来编译和管理第三方框架,CocoaPods会将所需的框架,库等内容添加到项目中,并且进行相应的配置。
  4. 整合Pods项目:将Pods和项目整合到一个工作空间中,并且设置文件链接。

此处为隐藏的内容!

发表评论并刷新,才能查看

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-11-231,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.请简单说明多线程技术的优点和缺点?
  • 2.请简单说明线程和进程,以及他们之间的关系?
  • 3.请简单说明在iOS开发中有哪些多线程的实现方案?
  • 4.请简单说明主线程的作用,以及使用注意点?
  • 5.请简单列出NSThread线程的几种状态,并说明状态转换的逻辑?
  • 6.请简单说明如何简单的解决多线程访问同一块资源造成的线程安全的问题,以及注意点?
  • 7.请简单介绍下什么是原子和非原子属性?
  • 8.请简单介绍下GCD这门技术?
  • 9.请简单介绍GCD中的几种队列?(4种)
  • 10.如果当前有多个任务,这些任务都需要开子线程执行,而多个任务之间有一定的依赖关系,如果使用GCD来实现请试着给出一些解决方案。
  • 11.请简单说明单例模式的特点(作用)?
  • 12.请简单介绍操作队列?
  • 13.如果有多个操作如何来设置依赖关系,如何监听到某个操作执行完毕事件?
  • 14.请简单比较GCD中的全局并发队列和使用dispatch_queue_create函数创建的并发队列异同?
  • 15.请简单说明对图片进行二级缓存的实现思路?
  • 16.请简单对比下GCD和NSOperation两种多线程的实现方案?
  • 17.请按照自己的理解,说一说在进行多线程编程的时候相对于GCD而言,操作队列有哪些优势?
  • 18.请谈一谈,自定义操作的好处?
  • 20.GCD中的dispatch_after是延迟把任务提交到队列还是先提交到队列再延迟执行?
  • 21.请说明NSRunloop和线程的关系?
  • 22.请简单说明NSCache的特点
  • 23.请简单说明runloop中几个类之间的相互关系(runloop & source & timer &observer &mode)
  • 24.请简单介绍下SDWebImage框架?
  • 25.请问SDWebImage框架内部在清理磁盘缓存的时候clearDisk方法和cleanDisk方法有什么区别?
  • 26.请问SDWebImage框架的框架结构是怎么样的?
  • 27.请问SDWebImage框架内部怎么处理内存缓存的?
  • 28.请简单说明NSRunloop的基本作用?
  • 29.什么是runloop?
  • 30.runloop的自动释放池什么时候创建释放?
  • 31.请简单说明使用NSURLConnection发送网络请求的几种方法?
  • 32.请简单说明GET请求和POST个请求有什么区别,如何选择?
  • 33.请简单列出使用NSURLConnection发送一个异步POST网络请求的步骤?
  • 34.请简单说明HTTP通信的过程?
  • 35.请简单说明NSURLSession对比NSURLConnection的优势?
  • 36.请简单列出NSURLSession发送POST请求的步骤?
  • 37.在发送网络请求的时候,如果请求路径中的参数有中文导致发送的网络请求失败,应该如何处理?
  • 38.观察下面的代码,请问completionHandler在主线程还是子线程执行?
  • 39.请简单介绍下网络响应的状态码?
  • 40.使用NSURLSession发送网络请求的时候,最多可以建立多少个TCP连接?
  • 41.请简单介绍JSON和XML?
  • 42.JSON格式中的true和false,对应OC中的什么数据类型,值为多少?
  • 43.请简单说明什么是序列化和反序列处理,用到了什么方法?
  • 44.请简单说明输出流的使用步骤【应用于文件下载时】和注意点?
  • 45.请简单说明文件句柄(NSFileHandle)的使用步骤【应用于文件下载时】和注意点?
  • 46.请简单介绍下NSURLSessionTask的几个子类?
  • 47.请简单介绍在iOS开发中XML的几种解析方式?
  • 48.如何解决session设置代理之后对代理对象的强引用问题?
  • 49.在XCode中如何配置以MRC的方式来编译处理某个类?
  • 50.在使用NSURLSessionDataTask发送请求下载文件的时候,实现断点下载的技术要点是什么?
  • 51.请简单比较使用NSURLSessionDownloadTask下载文件和使用NSURLSessionDataTask下载文件的优劣?
  • 52.请列出使用NSURLSession发送请求实现文件上传的主要步骤?
  • 53.请列出你认为在进行文件上传时候需要注意的细节(注意点)?
  • 54.请简单说明能够获得文件二进制数据类型(MIMEType)的几种方法?
  • 55.请简单介绍下AFN各个主要版本的情况?
  • 56.如果服务器返回的数据不是JSON数据,那么在使用AFN发送网络请求的时候会请求失败请问是什么原因产生的?如何解决?
  • 57.在使用NSURLSession进行文件上传的时候,如何监听文件上传的进度,有哪些注意点?
  • 58.请简单说明系统默认提供的NSURLSessionConfiguration三种配置信息?
  • 59.在发送网络请求的时候,如果一个参数(place)需要对应着多个值,那么以下两种请求路径哪种是正确的?
  • 60.使用AFN进行文件下载相对于NSURLSessionDownloadTask而言有何好处?
  • 61.请简单回答网络安全的原则是什么?
  • 62.请简单介绍下Base64编码?
  • 63.请简单说明单向散列函数的特点?
  • 64.请简单介绍下散列函数的一些应用领域?
  • 65.请简单介绍下对称加密的特点和经典算法?
  • 66.请简单说明ECB和CBC两种分组加密模式?
  • 67.请简单介绍下非对称加密的特点和经典算法?
  • 68.请简单介绍下数字签名这门技术?
  • 69.数字证书和公钥什么关系?
  • 70.请简单说明在安装cocoapods时,使用pod install命令安装框架后的大致过程?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档