一些簡單的 iOS 面試題!

面試題能得60分以上的能夠考慮來面試,要求知其然知其因此然 代碼部分能夠用 Xcode 調試 , 面試時候只須要說出來爲何代碼執行結果是這樣的.面試

一、KVO內部實現原理,如何手動觸發KVO? (把 KVO 底層實現將清楚的明明白白的給10分)算法

2 load、initialize方法的區別什麼?它們在category中的調用的順序?以及出現繼承時他們之間的調用過程?(分開回答 load 執行順序,父類 子類 分類 , initialize執行順序 父類 子類 分類)swift

3 Category可否添加成員變量?若是能夠,如何給Category添加成員變量?(能把關聯對象技術講的清楚的的給10分)bash

4 Category 和 Class Extension的最本質的區別是什麼? (能夠根據底層數據結構 編譯原理 運行時特性 進行回答)微信

5 如下代碼執行順序是什麼?數據結構

- (void)interview01
{
 NSLog(@"執行任務1");
 dispatch_queue_t queue = dispatch_queue_create("myqueu", DISPATCH_QUEUE_SERIAL);
 dispatch_async(queue, ^{ // 0
      NSLog(@"執行任務2");
    dispatch_sync(queue, ^{ // 1
         NSLog(@"執行任務3");
    });
    NSLog(@"執行任務4");
});
    NSLog(@"執行任務5");
}
複製代碼

6 下面的代碼輸出什麼?(能把原理講清楚的10分,能夠從 OC 對象方法內部查找,消息發送講起)多線程

@interface  Son :  Father

@end

@implementation Son 

⁃ (id) init
{
    self = [super init];
    if (self) {
        NSLog(@"%@", NSStringFromClass([self class]));
        NSLog(@"%@", NSStringFromClass([super class]));
    }
    return self;
}
@end
複製代碼

7 如下代碼執行順序是什麼 ? (可以講清楚 performSelector 底層原理的10分,能夠參考 GNUStep 源碼)併發

- (void) interview {

     NSLog(@"1");

    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    dispatch_async(queue, ^{
        NSLog(@「3」);        
        [self performSelector:@selector(test) withObject:nil afterDelay:0.0f];
        NSLog(@「4」);
    });

     NSLog(@「2」);
 }

- (void) test {
    NSLog(@「5」);
}
複製代碼

8 如何在不利用第三方SDK 狀況下 實現微信支付 , 支付寶支付, 第三方登陸 ,分享等功能 ,說下大概思路.異步

9 NSTimer 或者 CADisplayLink 如何解決循環引用問題. (能把NSProxy消息轉發講清楚的10分)async

image

10 下邊代碼 dataArray最終輸出結果是什麼 ? 若是輸出結果異常 問題可能出如今那個地方? (多線程訪問讀寫操做)

@interface FROMainViewController ()

///dataArray
@property (atomic,strong) NSMutableArray *dataArray;

@end

@implementation FROMainViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.dataArray = [NSMutableArray array];
    for (int i = 0; i<10; i++) {
        ///併發隊列 異步任務 具有開啓多個線程能力
        dispatch_queue_t queue = dispatch_queue_create("queue",DISPATCH_QUEUE_CONCURRENT);
        ///寫入任務
        dispatch_async(queue, ^{
            [self write:@(i)];
        });
        ///讀取任務
        dispatch_async(queue, ^{
            [self read];
        });
    }

}

///讀取操做
- (void) read {
    NSLog(@"%@",self.dataArray);
}
///寫入操做
- (void) write:(id)obj {
    [self.dataArray addObject:obj];
}
複製代碼

若是以爲個人文章對您有用,請隨意讚揚。您的支持將鼓勵我繼續創做!

小編給你們推薦一個iOS技術交流羣:763164022! 羣內提供數據結構與算法、底層進階、swift、逆向、底層面試題整合文檔等免費資料!但願找到更多的同行多多交流!如下資料,進羣能夠免費得到哦

相關文章
相關標籤/搜索