iOS面试题集
new_dev
这个作者很懒,什么都没留下…
展开
-
iOS开发 数据结构
集合结构 线性结构 树形结构 图形结构1.1、集合结构 说白了就是一个集合,就是一个圆圈中有很多个元素,元素与元素之间没有任何关系 这个很简单 1.2、线性结构 说白了就是一个条线上站着很多个人。 这条线不一定是直的。也可以是弯的。也可以是值的 相当于一条线被分成了好几段的样子 (发挥你的想象力)。 线性结构是一对一的关系 1.3、树形结构 说白了 做开发的肯定或多或少的知道xml 解析 ...原创 2019-11-22 16:44:09 · 249 阅读 · 0 评论 -
简述 `SSL` 加密的过程用了哪些加密方法,为何这么作?
简述SSL加密的过程用了哪些加密方法,为何这么作?SSL加密的过程之前有些过,此处不再赘述。SSL加密,在过程中实际使用了对称加密和非对称加密的结合。主要的考虑是先使用非对称加密进行连接,这样做是为了避免中间人攻击秘钥被劫持,但是非对称加密的效率比较低。所以一旦建立了安全的连接之后,就可以使用轻量的对称加密。...原创 2019-11-22 16:42:10 · 708 阅读 · 0 评论 -
iOS 内存相关面试题(内存中的5大区分别是什么?)
内存中的5大区分别是什么?栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区...原创 2019-11-22 16:38:54 · 247 阅读 · 0 评论 -
iOS 内存相关面试题(内存中的5大区分别是什么?)
内存中的5大区分别是什么?栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区...原创 2019-11-16 17:15:35 · 172 阅读 · 0 评论 -
iOS 性能优化面试题(怎么检测图层混合?)
1、模拟器debug- 选中 color blended layers红色区域表示图层发生了混合2、Instrument-选中Core Animation-勾选Color Blended Layers避免图层混合:1、确保控件的opaque属性设置为true,确保backgroundColor和父视图颜色一致且不透明2、如无特殊需要,不要设置低于1的alpha值3、确保UIIm...原创 2019-11-20 18:56:05 · 673 阅读 · 0 评论 -
iOS 性能优化面试题(如何检测离屏渲染?)
1、模拟器debug-选中color Offscreen - Renderd离屏渲染的图层高亮成黄 可能存在性能问题2、真机Instrument-选中Core Animation-勾选Color Offscreen-Rendered Yellow离屏渲染的触发方式设置了以下属性时,都会触发离屏绘制:1、layer.shouldRasterize(光栅化)光栅化概念:将图转化为一...原创 2019-11-20 18:55:59 · 1995 阅读 · 0 评论 -
iOS 性能优化面试题(什么是 离屏渲染?什么情况下会触发?该如何应对?)
什么是离屏渲染?什么情况下会触发?该如何应对?离屏渲染就是在当前屏幕缓冲区以外,新开辟一个缓冲区进行操作。离屏渲染出发的场景有以下:圆角 (maskToBounds并用才会触发) 图层蒙版 阴影 光栅化为什么要避免离屏渲染?CPUGPU在绘制渲染视图时做了大量的工作。离屏渲染发生在GPU层面上,会创建新的渲染缓冲区,会触发OpenGL的多通道渲染管线,图形...原创 2019-11-20 18:55:51 · 742 阅读 · 0 评论 -
iOS 性能优化面试题(如何有效降低 APP 包的大小?)
如何有效降低APP包的大小?降低包大小需要从两方面着手可执行文件 编译器优化 Strip Linked Product、Make Strings Read-Only、Symbols Hidden by Default 设置为 YES 去掉异常支持,Enable C++ Exceptions、Enable Objective-C Exceptions 设置为 NO, Oth...原创 2019-11-20 18:55:44 · 601 阅读 · 0 评论 -
iOS 性能优化面试题(如何优化 `APP` 的电量?)
如何优化APP的电量?程序的耗电主要在以下四个方面:CPU 处理 定位 网络 图像优化的途径主要体现在以下几个方面:尽可能降低 CPU、GPU 的功耗。 尽量少用 定时器。 优化 I/O 操作。 不要频繁写入小数据,而是积攒到一定数量再写入 读写大量的数据可以使用 Dispatch_io ,GCD 内部已经做了优化。 数据量比较大时,建议使用数据库 网络...原创 2019-11-20 18:55:35 · 980 阅读 · 0 评论 -
iOS 性能优化面试题(如何提升 `tableview` 的流畅度?)
如何提升tableview的流畅度?本质上是降低 CPU、GPU 的工作,从这两个大的方面去提升性能。CPU:对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制 GPU:纹理的渲染卡顿优化在 CPU 层面尽量用轻量级的对象,比如用不到事件处理的地方,可以考虑使用 CALayer 取代 UIView 不要频繁地调用 UIView 的相...原创 2019-11-20 18:55:29 · 503 阅读 · 0 评论 -
iOS 性能优化面试题(如何高性能的画一个圆角?)
如何高性能的画一个圆角?视图和圆角的大小对帧率并没有什么卵影响,数量才是伤害的核心输出label.layer.cornerRadius = 5label.layer.masksToBounds = true首先上面的方式是不可取的,会触发离屏渲染。 如果能够只用cornerRadius解决问题,就不用优化。 如果必须设置masksToBounds,可以参...原创 2019-11-19 15:02:52 · 542 阅读 · 0 评论 -
iOS 性能优化面试题(日常如何检查内存泄露?)
日常如何检查内存泄露?目前我知道的方式有以下几种Memory Leaks Alloctions Analyse Debug Memory Graph MLeaksFinder泄露的内存主要有以下两种:Laek Memory这种是忘记Release操作所泄露的内存。 Abandon Memory这种是循环引用,无法释放掉的内存。上面所说的五种方式,其实前四种都比较麻...原创 2019-11-19 15:02:42 · 622 阅读 · 0 评论 -
iOS 性能优化面试题(光栅化)
光栅化是将几何数据经过一系列变换后最终转换为像素,从而呈现在显示设备上的过程,光栅化的本质是坐标变换、几何离散化我们使用 UITableView 和 UICollectionView 时经常会遇到各个 Cell 的样式是一样的,这时候我们可以使用这个属性提高性能:cell.layer.shouldRasterize=YES;cell.layer.rasterizationScale=[...原创 2019-11-19 15:02:33 · 753 阅读 · 0 评论 -
iOS 性能优化面试题
在性能优化中一个最具参考价值的属性是FPS:Frames Per Second,其实就是屏幕刷新率,苹果的iphone推荐的刷新率是60Hz,也就是说GPU每秒钟刷新屏幕60次,这每刷新一次就是一帧frame,FPS也就是每秒钟刷新多少帧画面。静止不变的页面FPS值是0,这个值是没有参考意义的,只有当页面在执行动画或者滑动的时候,FPS值才具有参考价值,FPS值的大小体现了页面的流畅程度高低,当低...原创 2019-11-19 15:02:28 · 492 阅读 · 0 评论 -
iOS 网络相关面试题(IPv6、从IPv4到IPv6的迁移)
由于新的子网和IP结点以惊人的增长率连到因特网上,并被分配唯一的IP地址,32比特的IPv4地址空间即将用尽,为了解决这一问题,IPv6也应运而生。而事实上在20多年前,因特网工程任务组就开始致力于开发一种替代IPv4的协议,即IPv6一、IPv6数据报格式1、IPv6数据报格式image版本(4比特) 该字段用于标识IP版本号,IPv6将该字段值设为6。而如果将该字段设为4并...原创 2019-11-19 15:02:17 · 398 阅读 · 0 评论 -
iOS 网络相关面试题(IP协议、IP数据报分片、IPv4编址、网络地址转换(NAT))
之前有说到OSI七层协议中的应用层(HTTP协议)、传输层(TCP协议、UDP协议),在传输层之上就是网络层,网络层负责IP数据报的产生以及IP数据包在逻辑网络上的路由转发,网络层分为三个组件: 1、IP协议 2、路由选择协议,它决定了数据报从源到目的地所流经的路径 3、ICMP协议 (Internet Control Message Protocol, 因特网控制报文协...原创 2019-11-19 15:02:11 · 579 阅读 · 0 评论 -
iOS 网络相关面试题(Cookie和Session)
一、Cookie这里有说到,HTTP协议是无状态的,服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器基于HTTP这种特点,就产生了cookie/session1、用户与服务器的交互:Cookiecookie主要是用来记录用户状态,区分用户,状态保存在客户端。1.首次访问amazon时,客户端发送一个HTTP请求到服务器端 。服务器端发送一个HTTP响应到客户...原创 2019-11-19 15:02:03 · 267 阅读 · 0 评论 -
iOS 网络相关面试题(DNS)
一、DNS因特网上的主机,可以使用多种方式标识,比如主机名或IP地址。一种标识方法就是用它的主机名(hostname),比如·www.baidu.com、www.google.com、gaia.cs.umass.edu等。这方式方便人们记忆和接受,但是这种长度不一、没有规律的字符串路由器并不方便处理。 还有一种方式,就是直接使用定长的、有着清晰层次结构的IP地址,路由器比较热衷于这种方式...原创 2019-11-19 15:01:59 · 593 阅读 · 0 评论 -
iOS 网络相关面试题(可靠数据传输、流量控制(滑动窗口)、拥塞控制)
一、可靠数据传输网络层服务(IP服务)是不可靠的。IP不保证数据报的交付,不保证数据报的按序交付,也不保证数据报中数据的完整性。TCP则是在IP服务上创建了一种可靠数据传输服务TCP的可靠数据传输服务确保一个进程从其接收缓存中读出的数据流是无损坏、无间隔、无冗余、按序的数据流。即该字节流与连接的另一端发出的字节流是完全相同的。作为TCP接收方,有三个与发送和重传有关的主要事件1、从...原创 2019-11-19 15:01:52 · 382 阅读 · 0 评论 -
iOS 网络相关面试题(TCP、三次握手、四次挥手、代码实现)
一、TCP的特点和报文结构1、面向连接、可靠传输、面向字节流、全双工服务2、TCP的报文结构TCP报文段由首部字段和一个数据字段组成。数据字段包含一块应用数据。最大报文长度MSS(Maximum Segment Size)限制了报文段数据字段的最大长度。MSS选项用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度。所以当TCP发送一个大文件(比如一张高清图...原创 2019-11-19 15:01:46 · 628 阅读 · 0 评论 -
iOS 网络相关面试题(UDP的特点、UDP的报文结构及差错检测)
TCP(Transmission Control Protocol 传输控制协议)和UDP(User Datagram Protocol 用户数据报协议)同属传输层协议一、UDP的特点UDP是是面向非连接的协议,传送数据不需要和服务器连接,只需要知道ip和监听端口,不需要链接没有目的的socket,只是将数据报投递出去,不管接收方是否成功接收到,是一种不可靠的传输。既然UDP是不可靠数...原创 2019-11-18 17:13:27 · 453 阅读 · 0 评论 -
iOS 网络相关面试题(一个基于UDP的简单的聊天Demo)
一、分别用C语言、python、GCDAsyncUdpSocket来实现UDP通信1、C语言方式首先初始化socket对象,Udp要用SOCK_DGRAM 然后初始化sockaddr_in网络通信对象,如果作为服务端要绑定socket对象与通信链接,来接收消息 然后开启一个循环,循环调用recvfrom来接收消息 收到消息后,保存下发消息对象的地址,以便之后回复消息- (void...原创 2019-11-18 17:13:16 · 294 阅读 · 0 评论 -
iOS 网络相关面试题(HTTPS、对称加密、非对称加密)
一、HTTPS和HTTP的区别HTTPS协议 = HTTP协议 + SSL/TLS协议SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。TLS的全称是Transport Layer Security,即安全传输层协议。即HTTPS是安全的HTTP。二、HTTPS的连接建立流程HTTPS为了兼顾安全与效率,同时使...原创 2019-11-18 17:12:59 · 996 阅读 · 0 评论 -
iOS 网络相关面试题(HTTP协议)
HTTP协议:超文本传输协议是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。HTTP是基于TCP的应用层协议(OSI网络七层协议从上到下分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)请求/响应报文 连接建立流程 HTTP的特点一、请求报文和响应报文1、请求报文...原创 2019-11-18 17:12:43 · 1704 阅读 · 0 评论 -
iOS 算法面试题(二)
字符串反转给定字符串 "hello,world",实现将其反转。输出结果:dlrow,olleh- (void)charReverse{ NSString * string = @"hello,world"; NSLog(@"%@",string); NSMutableString * reverString = [NSMutableStri...原创 2019-11-18 17:12:32 · 400 阅读 · 0 评论 -
iOS 算法面试题(一)
1、不用中间变量,用两种方法交换A和B的值// 1.中间变量void swap(int a, int b) { int temp = a; a = b; b = temp;}// 2.加法void swap(int a, int b) { a = a + b; b = a - b; a = a - b;}// 3.异或(相同为0,不同为1....原创 2019-11-18 17:12:25 · 1443 阅读 · 0 评论 -
RSA非对称加密
RSA非对称加密对称加密[算法]在加密和解密时使用的是同一个秘钥;而[非对称加密算法]需要两个[密钥]来进行加密和解密,这两个秘钥是[公开密钥](public key,简称公钥)和私有密钥(private key,简称私钥)。RSA加密与对称加密[算法]不同,[非对称加密算法]需要两个[密钥]:[公开密钥](publickey)和私有密钥(privatekey)。公开密钥与私有密...原创 2019-11-18 17:12:10 · 209 阅读 · 0 评论 -
iOS 设计模式面试题(编程中的六大设计原则?)
编程中的六大设计原则?1.单一职责原则通俗地讲就是一个类只做一件事CALayer:动画和视图的显示。 UIView:只负责事件传递、事件响应。2.开闭原则对修改关闭,对扩展开放。要考虑到后续的扩展性,而不是在原有的基础上来回修改3.接口隔离原则使用多个专门的协议、而不是一个庞大臃肿的协议UITableviewDelegate UITableViewDataSou...原创 2019-11-18 17:12:00 · 328 阅读 · 0 评论 -
iOS 设计模式面试题(如何设计一个图片缓存框架?)
如何设计一个图片缓存框架?可以模仿SDWebImage来实现。构成Manager 内存缓存 磁盘缓存 网络下载 Code Manager 图片解码 图片解压缩 图片的存储是以图片的单向hash值为Key内存设计需要考虑的问题存储的Size因为内存的空间有限,我们针对不同尺寸的图片,给出不同的方案10K以下的50个 100Kb以下的...原创 2019-11-18 17:11:53 · 1190 阅读 · 0 评论 -
iOS 设计模式面试题(如何设计一个时长统计框架?)
如何设计一个时长统计框架?记录器页面式记录器 流式记录器 自定义式记录管理者内存记录缓存 磁盘存储 上传器如何降低数据的丢失率?定期写入磁盘 每当达到某个值的时候,就写入磁盘记录上传的时机前后台切换的时候可以上传 从无网到有网切换的时候可以上传上传时机的选择立即上传 定时上传 延时上传...原创 2019-11-18 17:11:43 · 482 阅读 · 0 评论 -
iOS 内存管理面试题( `__weak` 和 `_Unsafe_Unretain` 的区别?)
__weak和_Unsafe_Unretain的区别?weak 修饰的指针变量,在指向的内存地址销毁后,会在Runtime的机制下,自动置为nil。_Unsafe_Unretain不会置为nil,容易出现悬垂指针,发生崩溃。但是_Unsafe_Unretain比__weak效率高。...原创 2019-11-17 22:25:32 · 308 阅读 · 0 评论 -
iOS 内存管理面试题(`__weak` 属性修饰的变量,如何实现在变量没有强引用后自动置为 `nil` ?)
__weak属性修饰的变量,如何实现在变量没有强引用后自动置为nil?用的弱引用 -weak表。也是一张哈希表。被weak修饰的指针变量所指向的地址是key,所有指向这块内存地址的指针会被添加在一个数组里,这个数组是Value。当内存地址销毁,数组里的所有对象被置为nil。...原创 2019-11-17 22:25:22 · 289 阅读 · 0 评论 -
iOS 内存管理面试题(`ARC` 的 `retainCount` 怎么存储的?)
ARC的retainCount怎么存储的?存在64张哈希表中,根据哈希算法去查找所在的位置,无需遍历,十分快捷散列表(引用计数表、weak表)-SideTables表在 非嵌入式的64位系统中,有 64张SideTable表- 每一张SideTable主要是由三部分组成。自旋锁、引用计数表、弱引用表。- 全局的引用计数之所以不存在同一张表中,是为了避免资源竞争,...原创 2019-11-17 22:25:15 · 461 阅读 · 0 评论 -
iOS 内存管理面试题(`ARC` 在编译时做了哪些工作)
ARC在编译时做了哪些工作根据代码执行的上下文语境,在适当的位置插入retain,release原创 2019-11-17 22:24:58 · 457 阅读 · 0 评论 -
iOS 内存管理面试题( `ARC` 在运行时做了哪些工作?)
ARC在运行时做了哪些工作?主要是指weak关键字。weak修饰的变量能够在引用计数为0时被自动设置成nil,显然是有运行时逻辑在工作的。为了保证向后兼容性,ARC在运行时检测到类函数中的autorelease后紧跟其后retain,此时不直接调用对象的autorelease方法,而是改为调用objc_autoreleaseReturnValue。objc_auto...原创 2019-11-17 22:24:52 · 542 阅读 · 0 评论 -
iOS 内存管理面试题(ARC自动内存管理的原则)
ARC自动内存管理的原则自己生成的对象,自己持有 非自己生成的对象,自己可以持有 自己持有的对象不再需要时,需要对其进行释放 非自己持有的对象无法释放...原创 2019-11-17 22:24:46 · 358 阅读 · 0 评论 -
iOS 内存管理面试题(`autoReleasePool` 什么时候释放?)
autoReleasePool什么时候释放?App启动后,苹果在主线程RunLoop里注册了两个Observer,其回调都是_wrapRunLoopWithAutoreleasePoolHandler()。第一个Observer监视的事件是Entry(即将进入Loop),其回调内会调用_objc_autoreleasePoolPush()创建自动释放池。其order...原创 2019-11-17 22:24:40 · 1104 阅读 · 0 评论 -
iOS 内存管理面试题(`BAD_ACCESS` 在什么情况下出现? )
BAD_ACCESS在什么情况下出现?访问了已经被销毁的内存空间,就会报出这个错误。根本原因是有悬垂指针没有被释放。原创 2019-11-17 22:24:31 · 401 阅读 · 0 评论 -
iOS 内存管理面试题(MRC(手动引用计数)和ARC(自动引用计数))
MRC(手动引用计数)和ARC(自动引用计数)1、MRC:alloc,retain,release,retainCount,autorelease,dealloc2、ARC:ARC是LLVM和Runtime协作的结果 ARC禁止手动调用retain,release,retainCount,autorelease关键字 ARC新增weak,strong关键字3、引用计数管理:all...原创 2019-11-17 22:24:19 · 466 阅读 · 0 评论 -
iOS 内存管理面试题(`retain`、`release` 的实现机制?)
retain、release的实现机制?1.Retain的实现机制。SideTable& table = SideTables()[This];size_t& refcntStorage = table.refcnts[This];refcntStorage += SIZE_TABLE_RC_ONE;2.Release的实现机制。SideTable&...原创 2019-11-17 22:24:11 · 257 阅读 · 0 评论