美团

初面:

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率

你可能感兴趣的:(美团)