有趣的面试经历

记得是 2018年底,去海淀区一家公司面试。

记得约的下午2点钟的面试,差不多中午那会就到达了即将面试的公司附近。

距离2点钟还早,于是就去附近的一家肯德基吃了中饭,拿出电脑复习面试题。

一点四十五左右,起身往公司走,到达那家公司第一印象,空间压抑,空气中透露着闷热,跟大冬天外边寒冷的空气对比非常明显。

说实话,第一印象非常一般,公司规模不大, 环境一般,填表,各种信息。填完表坐等面试。

没想到,正是这家以为是小公司,印象不怎么好的公司, 问了一些能让我在两年时间内,还能记忆清晰的题目。考察的真是基本功。

比如,Charles为什么能抓https ? 再比如即将总结的这道题。

扯着扯着就扯远了,回归正题,题目

题目 :

查看以下代码,指出 r1, r2, r3的值分别是几 ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
- (void)viewDidLoad {
    [super viewDidLoad];
    
    __block int key = 0;
    objc_setAssociatedObject(self, &key, @1, OBJC_ASSOCIATION_ASSIGN);
    
    int r1 = [objc_getAssociatedObject(self, &key) intValue];
    
    void (^block)(void) = ^{
        objc_setAssociatedObject(self, &key, @2, OBJC_ASSOCIATION_ASSIGN);
    };
    
    int r2 = [objc_getAssociatedObject(self, &key) intValue];
    
    block();
    
    int r3 = [objc_getAssociatedObject(self, &key) intValue];
    
    NSLog(@"-----%d, %d, %d", r1, r2, r3);
}

题目分析 :

  • 这道题考察了 runtime关联对象block , __block关键词等知识点