美文网首页
面试数据结构(三)

面试数据结构(三)

作者: 撒花小仙女_卡卡 | 来源:发表于2019-06-20 11:24 被阅读0次

    数据结构简介
    什么是数据结构?
    1、计算机存储以及组织数据的方式
    2、也可以理解为,有一堆数据,他们之间有些特殊的关系
    常见的数据结构
    1、线性表(数组 链表 栈 队列)
    2、树
    3、图
    存储结构
    1、顺序存储结构存储单元内存地址是连续的
    2、链式存储结构存储单元内存地址可以是连续的也可以是不连续的,它不要求逻辑上相邻的元素在地里位置上也相邻

    线性表
    什么是线性表?
    1、线性表就是多个具有相同特性的数据元素(节点)组成的,有限而且有序的集合
    2、当线性表的节点个数为0时,我们称之为空表
    3、线性表第一个元素称为首节点,最后一个元素称为尾节点

    block的理解,外部变量的修改
    block的定义

    void (^block)(void) = ^{
        NSLog(@"block");
    }
    block();
    //无参无返回值block
    /**
    block的分类
    1、NSGLobalBlock
    2、NSMallocBlock
    3、NSStackBlock 栈
    */
    NSLog(%@,block);//没有引入外部变量的block就是NSGLobalBlock
    int a = 10;
    void (^block)(void) = ^{
        NSLog(@"%d",a);
        NSLog(@"block");
    }
    block();//引入外部变量的block就是堆block(NSMallocBlock)=赋值符号相当于copy 由原来的栈拷贝到了堆
    NSLog(@"%@", ^{
        NSLog(@"%d",a);
    });//栈block (NSStackBlock此用法较少没什么意义)
    

    修改外部变量

    //前0x7fff5d34dc88 16进制
    //后0x604000038d38
    //中0x604000038d38
    
    //栈区空间比较小 2M 1024*1024 = 10^6*2
    
    __block int a = 10;
    NSLog(@"前%p",&a);
    void (^block)(void) = ^{
        NSLog(@"中%p",&a);
        a + = 10;
        NSLog(@"%d",a);
    }
    block();
    //__block 把观察到的变量由栈区copy到堆区
    NSLog(@"后%p",&a);
    

    C语言监听block
    在终端输入touch.block.c
    vim block.c

    屏幕快照 2019-06-19 上午11.14.10.png esc GG光标到最前面 shift + G全选 退出保存wq
    gcc block.c
    此时报错显示缺少;添加分号即可
    此刻生成了a.outC的可执行文件
    ./a.out block.c

    clang -rewrite-objc block.c
    此刻生成block.cpp文件


    屏幕快照 2019-06-19 上午11.23.37.png 屏幕快照 2019-06-19 上午11.26.57.png
    屏幕快照 2019-06-19 上午11.32.57.png
    添加变量a ,并打印变量,如图:
    屏幕快照 2019-06-19 下午1.20.17.png
    在C语言下理解:
    屏幕快照 2019-06-19 下午1.23.48.png
    __block修饰
    屏幕快照 2019-06-19 下午1.25.58.png
    理解:
    屏幕快照 2019-06-19 下午1.30.33.png
    屏幕快照 2019-06-19 下午1.32.31.png
    屏幕快照 2019-06-19 下午1.33.33.png
    注意:在block里进行的操作是在堆区进行的操作!!!
    在MRC下block必须用copy修饰 但是在ARC下用strong和copy都可以

    YYKit的分析以及使用

    屏幕快照 2019-06-19 下午1.47.53.png
    -(void)viewDidLoad{
         [super viewDidLoad];
         NSDictionary * dict = @{@"name":@"Lucy",@"nickName":@"Lucy",@"age":@"18",@"books":@"iOS"};
         [self testYY:dict];
         [self testMJ:dict];
    }
    -(void)testYY:(NSDictionary*)dict{
          CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
          for(int I = 0;i< 10000,i++){
          //字典转模型
          Person * p = [Person modelWithDictionary:dict];
          }
          NSLog(@"%.2f", CFAbsoluteTimeGetCurrent() - start);//0.23
    }
    -(void)testMJ:(NSDictionary*)dict{
          CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
          for(int I = 0;i< 10000,i++){
          //字典转模型
          Person * p = [Person mj_objectWithKeyValues:dict];
          }
          NSLog(@"%.2f", CFAbsoluteTimeGetCurrent() - start);//1.84
    }
    

    masonry
    masonry内结构图

    屏幕快照 2019-06-19 下午3.48.30.png
    最重要的三个方法
    屏幕快照 2019-06-19 下午5.25.46.png
    屏幕快照 2019-06-19 下午5.28.11.png

    相关文章

      网友评论

          本文标题:面试数据结构(三)

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