iOS 面試題整理(BAT)

iOS開發在一般人眼里是簡單重復的代碼搬運工,是最底層的碼農;iOS或android都只是負責請求網絡參數,搭建界面而已。關鍵還是后臺的接口和系統的架構來支撐整個系統的穩定和發展。其實如果想開發出優秀的APP,成為真正的優秀的iOS開發者,就必須深入了解Objective-C語言和不斷地代碼優化,向優秀的人學習。這里我想通過整理大型公司的iOS面試題,幫助小伙伴們提升自己,并且進入優秀的公司和優秀的人一起工作。

面試題整理

百度面試題

1.1代碼規范考察

代碼規范.jpg

能夠有 10 處以上修改的就基本達到標準了。

1.2快速基礎考察

@property 后面可以有哪些修飾符?
什么情況使用 weak 關鍵字,相比 assign 有什么不同?
怎么用 copy 關鍵字?
這個寫法會出什么問題: @property (copy) NSMutableArray *array;
如何讓自己的類用 copy 修飾符?如何重寫帶 copy 關鍵字的 setter?
這一套問題區分度比較大,如果上面的問題都能回答正確,可以延伸問更深入點的:

@property 的本質是什么?ivar、getter、setter 是如何生成并添加到這個類中的
@protocol 和 category 中如何使用 @property
runtime 如何實現 weak 屬性

1.2能力等級考察題

[※]@property中有哪些屬性關鍵字?
[※]weak屬性需要在dealloc中置nil么?
[※※]@synthesize和@dynamic分別有什么作用?
[※※※]ARC下,不顯式指定任何屬性關鍵字時,默認的關鍵字都有哪些?
[※※※]用@property聲明的NSString(或NSArrayNSDictionary)經常使用copy關鍵字,為什么?如果改用strong關鍵字,可能造成什么問題?
[※※※]@synthesize合成實例變量的規則是什么?假如property名為foo,存在一個名為_foo的實例變量,那么還會自動合成新變量么?
[※※※※※]在有了自動合成屬性實例變量之后,@synthesize還有哪些使用場景?

[※※]objc中向一個nil對象發送消息將會發生什么?
[※※※]objc中向一個對象發送消息[obj foo]objc_msgSend()函數之間有什么關系?
[※※※]什么時候會報unrecognized selector的異常?
[※※※※]一個objc對象如何進行內存布局?(考慮有父類的情況)
[※※※※]一個objc對象的isa的指針指向什么?有什么作用?
[※※※※]下面的代碼輸出什么?

@implementation Son : Father
- (id)init
{
    self = [super init];
    if (self) {
        NSLog(@"%@", NSStringFromClass([self class]));
        NSLog(@"%@", NSStringFromClass([super class]));
    }
    return self;
}
@end

[※※※※]runtime如何通過selector找到對應的IMP地址?(分別考慮類方法和實例方法)
[※※※※]使用runtime Associate方法關聯的對象,需要在主對象dealloc的時候釋放么?
[※※※※※]objc中的類方法和實例方法有什么本質區別和聯系?
[※※※※※]_objc_msgForward函數是做什么的,直接調用它將會發生什么?
[※※※※※]runtime如何實現weak變量的自動置nil?
[※※※※※]能否向編譯后得到的類中增加實例變量?能否向運行時創建的類中添加實例變量?為什么?

[※※※]runloop和線程有什么關系?
[※※※]runloop的mode作用是什么?
[※※※※]以+ scheduledTimerWithTimeInterval...的方式觸發的timer,在滑動頁面上的列表時,timer會暫定回調,為什么?如何解決?
[※※※※※]猜想runloop內部是如何實現的?

[※]objc使用什么機制管理對象內存?
[※※※※]ARC通過什么方式幫助開發者管理內存?
[※※※※]不手動指定autoreleasepool的前提下,一個autorealese對象在什么時刻釋放?(比如在一個vc的viewDidLoad中創建)
[※※※※]BAD_ACCESS在什么情況下出現?
[※※※※※]蘋果是如何實現autoreleasepool的?

[※※]使用block時什么情況會發生引用循環,如何解決?
[※※]在block內如何修改block外部變量?
[※※※]使用系統的某些block api(如UIView的block版本寫動畫時),是否也考慮引用循環問題?

[※※]GCD的隊列(dispatch_queue_t)分哪兩種類型?
[※※※※]如何用GCD同步若干個異步調用?(如根據若干個url異步加載多張圖片,然后在都下載完成后合成一張整圖)
[※※※※]dispatch_barrier_async的作用是什么?
[※※※※※]蘋果為什么要廢棄dispatch_get_current_queue?
[※※※※※]以下代碼運行結果如何?

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"1");
    dispatch_sync(dispatch_get_main_queue(), ^{
        NSLog(@"2");
    });
    NSLog(@"3");
}

[※※]addObserver:forKeyPath:options:context:各個參數的作用分別是什么,observer中需要實現哪個方法才能獲得KVO回調?
[※※※]如何手動觸發一個value的KVO
[※※※]若一個類有實例變量NSString *_foo,調用setValue:forKey:時,可以以foo還是_foo作為key?
[※※※※]KVC的keyPath中的集合運算符如何使用?
[※※※※]KVC和KVO的keyPath一定是屬性么?
[※※※※※]如何關閉默認的KVO的默認實現,并進入自定義的KVO實現?
[※※※※※]apple用什么方式實現對一個對象的KVO?

[※※]IBOutlet連出來的視圖屬性為什么可以被設置成weak?
[※※※※※]IB中User Defined Runtime Attributes如何使用?

[※※※]如何調試BAD_ACCESS錯誤
[※※※]lldb(gdb)常用的調試命令?

阿里面試題

阿里的面試題更側重于底層和數據結構,下面僅僅是iOS開發中用到的面試題

1:在KVO中,他是怎么知道監聽的對象發生了變化?

2:字典的工作原理 ?在100W個中是怎么快速去取value?

3:一個上線的項目,知道這個方法可能會出問題,在不破壞改方法前提下,怎么搞?

4:Block和函數指針的區別?

5 :說說你對 OC 中 `load `方法和` initialize` 方法的異同。——主要說一下執行時間,各自用途,沒實現子類的方法會不會調用父類的?

6 :說說你對 block 的理解。—— 三種 block,棧上的自動復制到堆上,block 的屬性修飾符是 copy,循環引用的原理和解決方案。

7 :說說你對 runtime 的理解。——主要是方法調用時如何查找緩存,如何找到方法,找不到方法時怎么轉發,對象的內存布局。

8 :說說你對 MVC 和 MVVM 的理解。—— MVC 的 C 太臃腫,可以和 V 合并,變成 MVVM 中的 V,而 VM 用來將 M 轉化成 V 能用的數據。

9 :說說 UITableView 的調優。——一方面是通過 instruments 檢查影響性能的地方,另一方面是估算高度并在 runloop 空閑時緩存。

10:談談你對 ARC 的理解。ARC 是編譯器完成的,依靠引用計數,談談幾個屬性修飾符的內存管理策略,什么情況下會內存泄露。

騰訊面試題

1: MVC 具有什么樣的優勢,各個模塊之間怎么通信,比如點擊 Button 后 怎么通知 Model?

2:兩個無限長度鏈表(也就是可能有環) 判斷有沒有交點
UITableView 的相關優化

3:KVO、Notification、delegate 各自的優缺點,效率還有使用場景

4:如何手動通知 KVO

5:Objective-C 中的 copy 方法

6:runtime 中,SEL 和 IMP 的區別

7:autoreleasepool 的使用場景和原理

8:RunLoop 的實現原理和數據結構,什么時候會用到

9:block 為什么會有循環引用

10:使用 GCD 如何實現這個需求:A、B、C 三個任務并發,完成后執行任務 D。

11:NSOperation 和 GCD 的區別

12:CoreData 的使用,如何處理多線程問題

13:如何設計圖片緩存?

14:有沒有自己設計過網絡控件?

15:怎么判斷某個 cell 是否顯示在屏幕上

16:進程和線程的區別

17:TCP 與 UDP 區別

18:TCP 流量控制

19:數組和鏈表的區別

20:UIView 生命周期

21:如果頁面 A 跳轉到 頁面 B,A 的 `viewDidDisappear` 方法和 B 的`viewDidAppear` 方法哪個先調用?

22:block 循環引用問題

23:ARC 的本質

24:RunLoop 的基本概念,它是怎么休眠的?

25:Autoreleasepool 什么時候釋放,在什么場景下使用?

26:如何找到字符串中第一個不重復的字符

27:哈希表如何處理沖突
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,312評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,993評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,667評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,410評論 6 411
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,778評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,955評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,521評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,266評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,468評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,696評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,095評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,385評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,193評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,431評論 2 378

推薦閱讀更多精彩內容