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

面试数据结构(三)

作者: 撒花小仙女_卡卡 | 来源:发表于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

相关文章

  • 面试数据结构(三)

    数据结构简介什么是数据结构?1、计算机存储以及组织数据的方式2、也可以理解为,有一堆数据,他们之间有些特殊的关系常...

  • 2018-08-28美团点评校招前端

    【面试方式】: 现场面试 【面试内容】: 数据结构和算法+github+设计实例 【面试过程】 1. 提前签到,叫...

  • 面试官:讲一讲你对数据结构——数组、链表、栈、队列的理解

    本文已收录GitHub,更有互联网大厂面试真题,面试攻略,高效学习资料等 一、解释定义 1. 数据结构: 数据结构...

  • Java 面试常用的数据结构

    面试常用的数据结构 面试时数据结构应该算是必问的内容, 今天准备了两个更常问的数据结构,链表和二叉树的实现 链表 ...

  • 面试材料

    面试经验 面试题1 面试题2 面试题3 面试题4 面试题5 面试题6――数据结构 面试题7――网络 面试题8――汇...

  • 剑指offer学习笔记:2.3 数据结构

    2.3 数据结构 数据结构一直都是技术面试的重点,大部分面试都是围绕数组,字符串,链表,树,栈以及队列这几种常见数...

  • 阿里栈

    -> 项目介绍 * 要有特色,抓住面试 -> 算法(这次电话面试未考,现场面试应该会随时考) * 基础数据结构要会...

  • Android 面试题(重点2)

    掘金官网Android面试题 Android 动画 Android 动画Android面试题 算法和数据结构 设计...

  • 面试准备——ArrayList、Linked原理与比较

    从一个面试题开始: 数组 像这种面试题,基本都是考察数据结构和算法的知识。所以我们需要先从数据结构开始说起在jav...

  • 数据结构面试题(三)

    1、 常用数据结构简介 a、数组:顺序存储,随机访问 链表:链表存储,顺序访问b、栈,分为栈顶和栈底,遵循先...

网友评论

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

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