美团

作者: ruiying | 来源:发表于2020-05-15 11:51 被阅读0次

    初面:

    1.dynamic和@synthesize的区别

    • @synthesize默认情况下由系统自动生成setter和getter方法,除非开发者自己定义了方法;它的作用经常用来修改一些变量名,系统自动合成时默认变量名为_var
    • @dynamic用来明确禁止编译器自动合成属性存取方法和默认_var变量名,用的时候需要开发者自己编写(如果没有实现编译器不会报错,这也体现 OC动态绑定的一个特性(运行时确定对象的调用方法))

    2.layoutIfNeeded和setNeedsLayout的区别

    先总结:

    • layoutIfNeeded 不一定会调用layoutSubviews方法。如果标记为需要重新布局,那么才会立即调用layoutSubViews(有刷新标记才会调用)
      那么它的触发点是什么呢?1.布局发生变化 2.在此之前调用setNeedsLayout方法刷新标记
    • setNeedsLayout :系统是会标记为重新布局,不立即刷新,一定会调用layoutSubviews方法(但是它不是马上刷新,而是在下一轮runloop结束前调用)
    • 那么如果想在当前runloop中立即刷新,调用顺序是:
    [self setNeedsLayout];
    [self layoutIfNeeded];
    

    3.git和svn的区别,merge和rebase的区别

    4.load有什么业务场景

    hook的时候

    5.main函数之前做哪些操作

    6.对NSString的分类加实力方法printA,对NSObject的分类方法加实力方法printB。【NSString performSelctor:printA】;[NSObject performSelector:printB];结果会打印什么?答案是都打印B

    @implementation NSObject (Print)
    //为NSObject分类添加实例方法print
    - (void)print{
        NSLog(@"B");
    }
    @end
    
    @implementation NSString (Print)
    //为NSString分类添加实例方法print
    - (void)print{
        NSLog(@"A");
    }
    //分别导入两个分类,在ViewController中分别调用print方法
     [NSString performSelector:@selector(print) withObject:nil];
     [NSObject performSelector:@selector(print) withObject:nil];
    @end
    
    • 自己的表述:我现在是这么理解的:NSString perporm:print调用的是String的类方法,类方法存在于猿类对象里,所以通过isa指针找到元类对象,元类对象里因为存放的是类方法所以找不到,那么就通过superclass指针找元类对象的父类,一直到元类对象的基类,也没有的话,元类对象的基类指向类对象,类对象里有实例方法print所以成功调用。因为NSString继承于NSObject所以打印的是B

    7.自己对哪方面比较擅长

    8.OSI模型

    截屏2020-05-08下午6.15.25.png

    9.tcp位于哪一层

    tcp,udp属于传输层,HTTP属于应用层


    截屏2020-05-08下午6.16.13.png

    10.https是怎么保证安全的,客户端是怎么验证服务端发送的证书是安全的?
    11.进程间通信方式
    12.runloop的使用?定时器都用过哪些?GCD的底层实现(为什么高效)?检测卡顿,CADisplayLink会有哪些问题?
    13.哈希表的复杂度,怎么进行存取的?取值的过程
    14.崩溃率crash率

    相关文章

      网友评论

          本文标题:美团

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