版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
iOS网络编程面试题及详细答案(实战版)一、网络基础面试题1.简述HTTP与HTTPS的核心区别参考答案:1.端口不同:HTTP默认80端口,HTTPS默认443端口。2.安全性不同:HTTP是明文传输,数据无加密,容易被抓包、篡改、劫持;HTTPS基于SSL/TLS加密传输,传输数据为密文,防抓包和篡改。3.协议层级不同:HTTP是应用层协议;HTTPS是HTTP+SSL/TLS,在应用层和传输层之间增加了安全加密层。4.证书要求:HTTP无需证书;HTTPS需要服务器配置CA数字证书,用来校验服务器合法性,防止伪装服务器。5.性能差异:HTTPS需要握手、加密、解密流程,相比HTTP会有轻微的延迟和性能损耗。2.说一说TCP和UDP的区别,项目中分别用过哪些场景参考答案:核心区别:1.TCP是面向连接的协议,传输前需要三次握手建立连接,传输完成后四次挥手断开连接;UDP是无连接协议,无需建立连接,直接发包。2.TCP可靠传输,有确认应答、超时重传、拥塞控制、流量控制机制,保证数据完整、有序、不丢失;UDP不可靠,无校验和重传机制,可能丢包、乱序。3.TCP面向字节流,无数据边界;UDP面向报文,保留数据边界。4.TCP开销大、速度稍慢;UDP开销小、传输速度快。项目场景:TCP:接口请求、文件上传下载、即时通讯文字消息、网页加载等对数据可靠性要求高的场景。UDP:直播流媒体、语音通话、视频通话、游戏数据同步等对实时性要求高,轻微丢包不影响使用的场景。3.TCP三次握手、四次挥手的过程,为什么不能两次握手参考答案:三次握手:1.第一次握手:客户端发送SYN报文,请求建立连接。2.第二次握手:服务端收到SYN,回复SYN+ACK,确认客户端请求,同时向客户端发起连接请求。3.第三次握手:客户端收到SYN+ACK,回复ACK,告知服务端连接已就绪,双方正式建立连接。四次挥手:1.客户端发送FIN报文,主动关闭己方发送通道。2.服务端收到FIN,回复ACK,确认关闭请求,此时服务端仍可向客户端发数据。3.服务端数据传输完成后,发送FIN报文,关闭己方发送通道。4.客户端收到FIN,回复ACK,等待超时后正式断开连接。为什么不能两次握手:两次握手只能保证客户端发送、服务端接收成功,无法保证客户端收到服务端的应答报文。会出现服务端建立连接、占用资源,但客户端未收到消息、未建立连接的情况,造成服务器资源浪费,三次握手可以双向校验双方收发能力。4.简述HTTP缓存机制,强缓存和协商缓存的区别参考答案:HTTP缓存是客户端本地缓存静态资源(图片、JS、CSS、静态接口数据),减少重复请求,提升加载速度、减少服务器压力。主要分为强缓存和协商缓存。强缓存:状态码200(frommemorycache/fromdiskcache),无需请求服务器,直接使用本地缓存。对应响应头:Cache-Control、Expires。Cache-Control优先级高于Expires,可控制缓存有效期、是否缓存、是否强制校验。协商缓存:强缓存失效后,客户端携带缓存标识请求服务器,服务器校验资源是否更新,未更新则返回304,客户端继续使用本地缓存;更新则返回200和新资源。对应标识:Last-Modified/If-Modified-Since、ETag/If-None-Match。ETag优先级高于Last-Modified,精度更高,可解决秒级内资源更新无法识别的问题。核心区别:强缓存不发请求,协商缓存一定会发起请求校验资源状态。二、iOS原生网络层面试题(NSURLSession/NSURLConnection)1.NSURLConnection和NSURLSession的区别,为什么废弃NSURLConnection参考答案:1.生命周期不同:NSURLConnection绑定线程,创建和回调需在同一线程,复杂场景易出现线程问题;NSURLSession独立管理任务,不依赖单一线程,内部维护线程池,回调更稳定。2.后台任务支持:NSURLConnection不支持后台下载/上传,程序退后台后任务会暂停;NSURLSession专门支持后台网络任务,可在后台持续完成文件传输。3.任务粒度:NSURLConnection只能整体请求,无法精准控制暂停、续传、取消;NSURLSession拆分出DataTask、DownloadTask、UploadTask、StreamTask,任务独立可控,支持随时暂停、断点续传、取消。4.缓存和配置:NSURLSession支持独立的Session配置,可单独设置超时、缓存策略、Cookie、协议代理,灵活性远高于NSURLConnection。系统从iOS9开始正式废弃NSURLConnection,项目中统一使用NSURLSession做原生网络请求。2.NSURLSession四种任务类型分别是什么,各自使用场景参考答案:1.DataTask:最常用,用于普通接口请求(GET/POST),请求数据在内存中接收,适合短小的接口数据,不适合大文件。2.DownloadTask:文件下载任务,数据直接写入沙盒磁盘,不占用大量内存,支持断点续传、后台下载,适合图片、压缩包、视频等大文件下载。3.UploadTask:文件上传任务,支持大文件流式上传、后台上传,相比DataTask上传更稳定,内存占用更低。4.StreamTask:流式读写任务,适用于长连接、实时数据流传输场景,比如实时音视频、长轮询。3.iOS网络请求超时如何设置,常见超时问题如何排查参考答案:超时设置方式:通过NSURLSessionConfiguration设置超时时间:1.timeoutIntervalForRequest:请求超时,单个请求无数据传输的最大超时时间,常用15-30秒。2.timeoutIntervalForResource:资源超时,整个资源传输的最大超时时间,适合大文件上传下载。常见超时排查思路:1.网络环境问题:用户弱网、断网、VPN干扰、局域网限制。2.服务器问题:接口卡顿、服务宕机、接口限流、参数错误导致服务器阻塞。3.客户端问题:请求体过大、请求头异常、超时时间设置过短、主线程卡顿阻塞网络回调。4.防火墙/证书问题:HTTPS证书校验失败、域名拦截导致请求无响应。4.说一说iOS网络请求的线程机制,回调在哪个线程参考答案:NSURLSession的代理回调默认在子线程执行,不会阻塞主线程,这也是它比NSURLConnection更稳定的原因之一。开发中需要注意:所有UI刷新必须切回主线程执行,否则会出现UI卡顿、UI刷新异常、甚至闪退问题。如果使用completionHandler回调方式,系统会自动切回主线程;仅代理回调需要手动处理线程切换。三、AFNetworking高频面试题1.AFNetworking核心架构、核心类有哪些参考答案:AFNetworking基于NSURLSession封装,核心架构分层清晰,核心类如下:1.AFHTTPSessionManager:核心管理类,项目中最常用,封装了GET/POST/PUT/DELETE等常规请求,自带请求头、响应序列化配置。2.AFURLSessionManager:底层基础管理类,封装NSURLSession所有任务,处理下载、上传、流式任务,AFHTTPSessionManager继承自此类。3.AFHttpRequestSerializer:请求参数序列化,默认二进制序列化,支持JSON、表单、plist序列化,统一格式化请求参数。4.AFHttpResponseSerializer:响应数据序列化,默认JSON解析,自动解析服务器返回的JSON数据,返回字典/数组。5.AFSecurityPolicy:安全策略类,管理HTTPS证书校验、SSL信任规则,支持证书固定、公钥校验。6.AFNetworkReachabilityManager:网络状态监听类,实时监听2G/3G/4G/WiFi/无网状态变化。2.AFN如何处理HTTPS证书校验,证书固定怎么做参考答案:AFN通过AFSecurityPolicy处理HTTPS校验,有三种校验模式:1.不校验:allowInvalidCertificates=YES,verifyDomainName=NO,开发调试常用,生产环境禁止使用,存在安全风险。2.系统默认校验:校验证书合法性和域名一致性,默认模式,满足常规HTTPS安全需求。3.证书固定(SSLPinning):将服务器证书/公钥打包到客户端,客户端只信任内置证书,即使服务器证书被篡改、劫持,请求也会直接失败,杜绝中间人劫持。证书固定两种方式:1.证书固定:打包.cer证书文件,校验完整证书信息,证书过期需更新客户端。2.公钥固定:只校验证书公钥,证书更新但公钥不变时,无需升级客户端,兼容性更好,项目主流使用。3.AFN常见报错原因解析(-1001、-1003、-1004、-1009)参考答案:1.-1001请求超时:网络弱、服务器响应慢、超时时间过短、请求体过大导致。解决方案:合理调整超时时间、优化请求参数、弱网做容错提示。2.-1003无法找到服务器:域名解析失败、DNS异常、域名错误、网络DNS污染。解决方案:校验域名、切换DNS、增加域名备用地址。3.-1004无法连接服务器:服务器宕机、端口未开放、IP拦截、防火墙限制。解决方案:核对服务器状态、端口配置、白名单配置。4.-1009无网络连接:设备断网、飞行模式、APP未开启网络权限。解决方案:监听网络状态,无网时弹窗提示用户开启网络权限。4.AFN如何实现批量请求、请求依赖参考答案:1.批量并行请求:使用GCD队列组(dispatch_group),同时发起多个网络请求,所有请求完成后统一回调,适合首页多接口并行加载场景。2.请求依赖(串行请求):通过信号量、递归回调、任务队列实现,上一个请求成功后再执行下一个请求,适合接口存在参数依赖的场景(如先获取token,再请求业务接口)。项目中禁止直接嵌套大量回调,会造成回调地狱,统一通过队列组和信号量封装,代码更整洁。四、文件上传下载与断点续传1.iOS如何实现大文件断点续传(下载)参考答案:断点续传核心原理:记录已下载的文件字节大小,暂停后再次请求时,通过请求头告知服务器从指定字节位置继续传输,无需重新下载全量文件。实现步骤:1.下载开始前,获取沙盒中已缓存的文件大小,记录已下载字节数。2.发起续传请求,设置请求头Range:bytes=已下载字节数-。3.服务器响应206PartialContent,返回剩余文件数据。4.客户端将新数据拼接至原有文件末尾,实时更新文件大小。5.NSURLSessionDownloadTask原生支持暂停、续传,可通过resumeData保存暂停状态,重启任务实现续传,无需手动拼接数据,是项目主流方案。2.大文件分片上传的实现思路参考答案:大文件直接上传易超时、失败、占用内存过高,项目均采用分片上传,核心思路:大文件拆分、分片传输、服务端合并。实现步骤:1.客户端本地将大文件按固定大小(如2M)拆分为多个分片,生成唯一文件MD5标识和分片序号。2.逐片上传分片数据,携带分片序号、总分片数、文件唯一标识。3.服务端接收所有分片,临时缓存分片数据,校验分片完整性。4.所有分片上传完成后,客户端发送合并请求,服务端按序号合并为完整文件。5.支持断点续传上传:上传失败后,查询服务端已接收分片,仅上传未完成分片,避免重复上传。五、网络优化与异常处理1.项目中做过哪些网络优化参考答案:1.缓存优化:对首页、静态数据接口做本地缓存,优先读取缓存,异步刷新网络数据,提升首次加载速度;合理配置HTTP强缓存、协商缓存。2.请求合并:多个小接口并行请求优化为批量接口,减少HTTP请求次数,减少握手和请求开销。3.超时与重试:针对弱网场景,配置合理超时时间,对非核心接口做有限次数自动重试,提升弱网可用性。4.资源压缩:图片上传压缩、接口数据开启GZIP压缩,减少传输数据量,提升传输速度。5.DNS优化:接入HTTPDNS,避免系统DNS解析失败、劫持问题,提升域名解析稳定性。6.网络监听容错:实时监听网络状态,无网、弱网时提前弹窗提示,拦截无效请求,避免崩溃和无效耗时。7.任务管控:页面退出时取消当前页面所有网络请求,避免无用请求、防止页面销毁后回调导致的闪退。2.如何防止网络重复请求参考答案:1.请求锁机制:建立请求池字典,以接口URL+参数为唯一key,记录正在请求的接口,相同key请求未完成前,拦截后续重复请求。2.按钮防重:点击请求后禁用按钮,请求结束后恢复交互,防止快速连续点击触发多次请求。3.页面生命周期管控:ViewController消失、页面销毁时,取消当前所有未完成的网络任务。4.防抖处理:对搜索、筛选等高频触发的接口,添加延时防抖,短时间内多次触发仅执行最后一次请求。3.网络请求如何做统一异常封装参考答案:项目中会封装统一的网络请求工具类,统一处理所有异常,避免每个业务页面重复写容错代码:1.统一参数校验:请求前校验参数合法性、网络状态,提前拦截无效请求。2.统一错误解析:封装系统错误码、服务器业务码,统一归类超时、无网、服务器错误、参数错误、token失效等异常。3.统一弹窗提示:不同异常对应不同提示文案,无需业务层单独处理。4.统一token处理:拦截401、token过期错误,自动触发登录过期逻辑,跳转登录页。5.日志收集:统一打印请求地址、参数、错误信息,方便线上问题排查。六、进阶面试
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年贵州省兴义市高三生物下册期末考试模拟试卷及参考答案
- 2026年广东省四会市高一化学上册期末考试模拟卷及完整答案【夺冠系列】
- 2026年吉林省梅河口市高一化学上册期末考试检测卷含答案(培优B卷)
- 2026年湖南省吉首市高一历史下册期末考试模拟考试卷附参考答案【模拟题】
- 2026年吉林省梅河口市高三生物上册期末考试自测卷含答案
- 2026年山西省潞城市高一化学上册期末考试自测卷带答案(典型题)
- 2026年山东省昌邑市高一化学上册期末考试模拟考试卷含完整答案【易错题】
- 2026年四川省绵竹市高一化学上册期末考试自测卷附答案(综合卷)
- 2026年吉林省公主岭市高三生物上册期末考试模拟测试卷及答案
- 2026年湖北省利川市高一化学上册期末考试自测卷及参考答案【研优卷】
- 磷酸铁及磷酸铁锂异物防控管理
- 循环流化床锅炉司炉工培训
- 《运动治疗技术》课件-pnf技术
- 产品设计开发项目移交量产交付文件清单
- 《大学语文》课件22 《归园田居(其二)》
- 公司经营情况简要说明模板
- JGT233-2017 建筑门窗用通风器
- 动物学实验之扇贝解剖
- 康复技能大赛备考试题库汇总(供参考)
- GB/T 9724-2007化学试剂pH值测定通则
- GB/T 17738.4-2013射频同轴电缆组件第4部分:半硬同轴电缆组件分规范
评论
0/150
提交评论