函数可以接受函数当作输入(参数)和输出(返回值)。
应用程序二进制接口(application binary interface,ABI) 描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口 。ABI不同于API ,API定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统中编译
我们不得不承认的是swift语言比OC精简,整个项目中丢掉了头文件,以及头文件的引入。
报错的时候直接显示报错行。
定义变量不用区分整型,浮点型等等,变量使用var,常量使用let。
开发工具带来了Xcode Playgrounds功能,该功能提供强大的互动效果,能让Swift源代码在撰写过程中实时显示出其运行结果。
Swift 语言本身提供了对函数式编程的支持;
Objc 本身是不支持的,通过引入 ReactiveCocoa 这个库才可支持函数式编程。
OC开线程的三种方式
##7.多少种线程锁的写法
实现线程读写锁的四种方法
iOS Block原理和内存中位置
HTTPS 的实现原理
iOS UI事件传递与响应者链
在iOS中关于深拷贝和浅拷贝以及copy属性的理解
##12.isa指针是什么,在oc中起什么用。
每个Objective-C对象都有一个隐藏的数据结构,这个数据结构是Objective-C对象的第一个成员变量,它就是isa指针。这个指针指向哪呢?它指向一个类对象(class object 记住它是个对象,是占用内存空间的一个变量,这个对象在编译的时候编译器就生成了,专门来描述某个类的定义),这个类对象包含了Objective-C对象的一些信息(为了区分两个对象,我把前面提到的对象叫Objective-C对象),包括Objective-C对象的方法调度表,实现了什么协议等等。这个包含信息就是Objective-C动态能力的根源了。
解决对象间通信,耦合度高,易懂
即时通讯软件如何保证消息的不重复和不丢失
LLVM是构架编译器(compiler)的框架系统
其实,这也是Clang当初在设计开发的时候所主要考虑的原因。Clang是一个高度模块化开发的轻量级编译器,它的编译速度快、占用内存小、非常方便进行二次开发。
深入理解objc中的类与对象
资源竞争循环等待
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:1012951431 不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
(1)前端编译器 ----给“拥有的”每个对象插入相应的release语句。某个方法里面创建了一个对象,前端编译器会在方法末尾自动添加release语句销毁它。类拥有的对象(实例变量/属性)在dealloc方法内释放。
(2)ARC优化器---当代码中出现多个对 retain 和release的重复调用,ARC优化器负责移出多余的 retain 和release语句。
iOS 中 weak 的实现原理
[详解KVO底层实现
](https://www.cnblogs.com/oc-bowen/p/5884768.html)
kvc
iOS基础面试题之RunLoop篇
JSPatch 使⽤用 Objective-C 的 runtime 让 JS 调⽤用任意的 Objective-C 的类和⽅方法。如果想要动态调⽤用 Objective-C 的任意类、任意⽅方法,恰巧 Objective-C 的 runtime 可以做到这⼀一点。那么 JSPatch 的 核⼼心就是把 JS 中的⽅方法调⽤用,转换成 Objective-C 的⽅方法调⽤用,并且 JS 和 Objective-C 之间需要进⾏行行 数据传递。
补丁下发 补丁格式替换为 __c 对需要添加或修改的⽅方法进⾏行行处理理,传递给 OC,使⽤用 runtime 处理理 调⽤用下发的 JS 函数 调⽤用补丁代码的实现 调⽤用 __c 函数 调⽤用 _OC_callI 或者 _OC_callC
iOS数据库技术进阶
category和extensions区别
UITableView的性能优化
NSDictionary和NSMutableArray底层原理
WebView初始化慢,可以在初始化同时先请求数据,让后端和网络不要闲着。 后端处理慢,可以让服务器分trunk输出,在后端计算的同时前端也加载网络静态资源。 脚本执行慢,就让脚本在最后运行,不阻塞页面解析。 同时,合理的预加载、预缓存可以让加载速度的瓶颈更小。 WebView初始化慢,就随时初始化好一个WebView待用。 DNS和链接慢,想办法复用客户端使用的域名和链接。 脚本执行慢,可以把框架代码拆分出来,在请求页面之前就执行好。
线程、自动释放池、RunLoop
NSProxy通常用来实现消息转发机制和惰性初始化资源。
反斜对角打印,取数组第n大的值,three sum
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:1012951431 不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
解析:
办法1:线程:NSOperation 操作依赖和优先级
[operationB addDependency:operationA]; // 操作B依赖于操作
办法2:逻辑:在上一个网络请求的响应回调中进行下一网络请求的激活
信号的依赖 使用场景是当信号A执行完才会执行信号B,和请求的依赖很类似,例如请求A请求完毕才执行请求B,我们需要注意信号A必须要执行发送完成信号,否则信号B无法执行
//这相当于网络请求中的依赖,必须先执行完信号A才会执行信号B
//经常用作一个请求执行完毕后,才会执行另一个请求
//注意信号A必须要执行发送完成信号,否则信号B无法执行
RACSignal * concatSignal = [self.signalA concat:self.signalB]
//这里我们是对这个拼接信号进行订阅
[concatSignal subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
解析:这个涉及到简单知识,可参考 http://www.360doc.com/content/17/0111/22/32626470_621879084.shtml
解析:首先,简单介绍下KVO的用法,先添加观察者,然后怎样实现监听的代理。关于原理,可以利用runtime的知识进行实现KVO的原理,笔者曾经实现KVO的block和delegate两种形式,可参考 iOS开发·KVO用法
当你观察一个对象时,一个新的类会动态被创建。这个类继承自该对象的原本的类,并重写了被观察属性的 setter 方法。自然,重写的 setter 方法会负责在调用原 setter方法之前和之后,通知所有观察对象值的更改。最后把这个对象的 isa 指针 ( isa 指针告诉 Runtime 系统这个对象的类是什么 ) 指向这个新创建的子类,对象就神奇的变成了新创建的子类的实例。
原来,这个中间类,继承自原本的那个类。不仅如此,Apple 还重写了 -class 方法,企图欺骗我们这个类没有变,就是原本那个类。更具体的信息,去跑一下 Mike Ash 的那篇文章里的代码就能明白,这里就不再重复。
解析:比较简单,可以参考这个 C语言字符串压缩显示
解析:思路,递归,从根节点开始,判断左右子节点是否对称,若对称,递归,若不对称,则返回NO。
答:首先在操作系统中,栈的内存增长是向下的,堆是向上的,栈的内存分配是操作系统支持的数据结构,操作系统中具有专门的寄存器存储栈指针,以及有相应的硬件指令去操作栈内存分配,堆是程序员通过系统调用库函数对堆内存进行分配存储。栈内存速率比堆快,但是栈默认的大小比堆小很多,vs中一般默认为1M,但是大小可以在编译器中设置,堆内存比较大,一般会达到4G。相比来说一般大块内存会更多在堆上分配。
答:这个大小和虚拟内存有关,应该是2^32计算的。
进程上CPU,CPU能够访问到的是进程中记录的逻辑地址,如果是页式内存管理方案,则逻辑地址包括,页号和页内偏移量,页号可以在页表中查询得到物理内存中划分的页框号,页框号+CPU基址寄存器值(进程在内存中的起始地址),结果再拼接上页内偏移量就可以得到对应的实际物理地址。
有一个TLB快表,可以去记录,但是具体机制不清楚。
答:HTTP分为请求消息和响应消息,请求消息格式:请求方法+URL+协议版本 ;响应消息格式:状态响应码+协议版本;根据请求方式不同,消息header也不同。
输入URL后,首先URL=协议+域名+服务器上的资源位置,因为在通信子网中是通过IP为标志进行分组转发,因此需要通过DNS进行解析出IP,封装HTTP消息请求下发到传输层,在传输数据之前需要双方简历TCP链接,链接建立完成后,根据TCP协议进行首部封装,然后下发到网络层根据IP协议进行IP数据单元封装,到数据链路层根据ARP协议对IP进行转换为MAC地址,然后加帧首帧尾巴,进行帧封装,然后到物理层转为bit流进行通信传输到目的主机,自底向上进行解封装到达应用层,根据资源位置,在服务器上查询到web对象,将HTML文档加到响应消息返回给客户端浏览器。
HTTPS在HTTP明文传输的基础上加了SSL层进行加密数据传输。
首先客户端向服务器发送自身的SSL版本以及加密参数给服务器,服务器返回自己的SSL版本和参数以及数字证书包括了服务器的公钥,客户端生成浏览器会话秘钥通过公钥进行加密返回给服务器,服务器通过私钥解密出会话秘钥,客户端再发送一个报文通知服务器以后通过该会话秘钥进行加密传输,并发送加密报文表示我方SSL链接建立完成,服务器也回复相同的表示自己也建立连接完成。
数字证书也是别的机构颁发给网站,也是加密过的,需要客户端通过公钥对它解密来验证它的有效性合法性,是否过期等信息。
TCP是传输控制协议,是面向字节流的可靠传输,通过分组编号,确认应答,超时重发,流量控制和拥塞控制机制保证数据分组正确有序完整的传输到接收方,UDP是用户数据包协议,不具有TCP的以上机制来保证可靠传输,是以数据报的形式发出,从最下层发出后,它认为发送成功,是不具有保序 正确和完整传输的性质。
答:我理解就是端到端传输,你首先是将数据发送到我的局域网的出口网关路由,然后进入内网,在局域网中是通过交换机进行Mac地址进行转发,识别到对应的主机。(对方不满意)
二叉树的遍历
用 MVVM 实现一个业务。VC 是入口,VC1 显示 “省” 的列表,VC2 显示省关联的 “市” 的列表,VC3 显示市关联的 “县” 的列表。VC 到 VC1,VC1到 VC2,VC2 到 VC3,VC3 再跳转到 VC。相关点在于如何设计 ViewModel 和 Model ,以及 VC3 到 VC。
动态语言、运行时特性、消息转发机制。
将对象类型的确定由编译期延迟到了运行时。
不能,atomic只针对getter和setter方法
使用信号量。
用weak属性
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:1012951431 不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
另附上一份各好友收集的大厂面试题,进群可自行下载!