美文网首页
2021-03-05

2021-03-05

作者: 檐下风铃听雨声 | 来源:发表于2021-03-05 12:07 被阅读0次

    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.数据段和代码段

    iOS的内存分区.png
    • 代码段:编译之后的代码
    • 数据段
      • 字符串常量:比如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"];
        });
    }
    

    第一段代码会引发如下的错误:


    内存出错.png

    第二段代码没有问题。
    我们分别打印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:实现定时器有哪几种方式

    11.block ARC和MRC的区别

    相关文章

      网友评论

          本文标题:2021-03-05

          本文链接:https://www.haomeiwen.com/subject/gidrqltx.html