1.锁(递归锁的实现原理)
iOS开发中的11种锁以及性能对比 - 简书
2.自动释放池
3.事件的响应链
4.静态链接和动态链接
5.静态库和数据库
名称 | 静态库 | 动态库 |
---|---|---|
定义 | 链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。 | 链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。 |
形式 | .a 和 自己创建framework | .dylib 和 系统framework |
Q:a与.framework有什么区别?
- .a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
- .a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
- .a + .h + sourceFile = .framework
建议用.framework
Q:为什么要使用静态库?
- 方便共享代码,便于合理使用。
- 实现iOS程序的模块化,可以把固定的业务模块化成静态库。
- 和别人分享你的代码库,但不想让别人看到你代码的实现。
- 开发第三方sdk的需要。
Q:制作静态库需要注意什么?
- 图片资源处理使用.bundle
- category处理,在静态哭中调用可以能出现
selector not recognized
,解决办法是:在使用静态库的工程中配置other linker flags
的值为-ObjC
。
6.数据段和代码段
- 代码段:编译之后的代码
- 数据段
- 字符串常量:比如NSString *str = @"123"
- 已初始化数据:已初始化的全局变量、静态变量等
- 未初始化数据:未初始化的全局变量、静态变量等
- 堆:通过alloc、malloc、calloc等动态分配的空间,分配的内存空间地址越来越大
- 栈:函数调用开销,比如局部变量。分配的内存空间地址越来越小
Q:你知道Tagged Pointer么,存储在哪个位置?
- 从64bit开始,iOS引入了Tagged Pointer技术,用于优化NSNumber、NSDate、NSString等小对象的存储
- 在没有使用Tagged Pointer之前, NSNumber等对象需要动态分配内存、维护引用计数等,* * NSNumber指针存储的是堆中NSNumber对象的地址值
- 使用Tagged Pointer之后,NSNumber指针里面存储的数据变成了:Tag + Data,也就是将数据直接存储在了指针中
- 当指针不够存储数据时,才会使用动态分配内存的方式来存储数据
- objc_msgSend能识别Tagged Pointer,比如NSNumber的intValue方法,直接从指针提取数据,节省了以前的调用开销
Q:两段代码打印结果有什么区别?
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
for (int i = 0; i < 100; i++) {
dispatch_async(queue, ^{
self.name = [NSString stringWithFormat:@"abcdefghijk"];
});
}
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
for (int i = 0; i < 1000; i++) {
dispatch_async(queue, ^{
self.name = [NSString stringWithFormat:@"abcdefghijk"];
});
}
第一段代码会引发如下的错误:
第二段代码没有问题。
我们分别打印abcdefghijk和abc字符串的类型。
NSString *str1 = [NSString stringWithFormat:@"abc"];
NSString *str2 = [NSString stringWithFormat:@"abcdefghijk"];
NSLog(@"\n[str1 class]=%@\n[str2 class]=%@",[str1 class],[str2 class]);
[str1 class]=NSTaggedPointerString
[str2 class]=__NSCFString
解决思路是加锁就可以:
@synchronized (self) {
self.name = [NSString stringWithFormat:@"abcdefghijk"];
}
7.直播相关 OPENGL webrtc
8.https考察
端口 :HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。
安全性和资源消耗: HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源。
对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;
非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
9.LRU淘汰算法
https://www.jianshu.com/p/5451e22109a1
10.计时器
Q:实现定时器有哪几种方式