一千個讀者眼中有一千個哈姆雷特,一千名 iOS 程序員心目中就有一千套 iOS 高級面試題。本文就是筆者認爲能夠用來面試高級 iOS 程序員的面試題。git
這套題的題目跟公司和業務都沒有關係,並且也並不表明筆者本人能夠把這些題回答得很是好,筆者只是將一部分以爲比較好的題從收集的面試題裏面抽出來了而已。程序員
收集的面試題有如下三個來源:github
本文分爲三個部分展開:面試
第一部分就是面試題了;第二部分給出了筆者喜歡考察和不喜歡考察的題以及緣由;第三部分是筆者建議你們準備數據結構和算法題的緣由。算法
Autoreleasepool
所使用的數據結構是什麼?AutoreleasePoolPage
結構體瞭解麼?class_ro_t
和 class_rw_t
的區別?class
方法和objc_getClass
方法有什麼區別?objc_allocateClassPair
的方法名尾部爲何是pair(成對的意思)?__block
修飾與否的區別?__weak
修飾的同時須要在內部使用__strong
修飾?不難看出,整套面試題中的iOS部分佔比其實並不大(三分之一),由於筆者認爲:編程
高級 iOS 開發 = 高級開發 + (高級) iOS 開發。設計模式
而其中高級開發的部分應該做爲優先考覈的內容,目的在於首先要驗證面試者是否具有高級開發必備的基本素質。這部分知識的掌握程度會直接影響一個開發者的研究和設計能力,包括橫向和縱向的。而筆者我的以爲後面的(高級) iOS 開發的部分僅僅考查的是面試者對於 iOS 自己的理解程度(API,系統,開發工具等等)。數組
在這套裏面,筆者我的最喜歡的幾道題是:安全
- 這道題一舉兩得,不只考察了面試者對設計模式這種通用性知識的瞭解,還能夠考察其對iOS SDK的熟悉和思考程度。這裏能夠簡單提幾個:單例:UIApplication;觀察者模式:KVO;類簇:NSNumber;裝飾者模式:分類;命令模式:NSInvocation;享元模式:UITableviewCell(UITableview的重用)。還有更多,有興趣的讀者能夠看一下《Objective-C 編程之道》這本書,它介紹了不少在 iOS SDK中使用的設計模式。
- 這道題我看到網上有些答案是錯的,說的大概的意思是「同一時刻只有一個線程訪問」。可是若是按照這個定義的話,那麼那些沒法改變的常量就不算是線程安全的了,因此顯然這類定義就是錯的。因此說學東西要具有批判性思惟,尤爲是看博客的時候,不少狀況須要本身想一想,主動去認證,去思考。
- 致使app崩潰的緣由有不少,好比向某個對象發送其沒法響應的方法,數組越界,集合類中添加nil對象,string訪問越界,KVO不合理的移除關聯key(KVO致使的崩潰不只僅這一種緣由)等。而崩潰很是影響用戶體驗,因此筆者認爲一名高級 iOS 開發應該具有避免這些崩潰的能力,起碼至少也要知道這些容易致使崩潰的場景。
- 看一些優秀開源框架的代碼,梳理實現思路和細節能夠幫助咱們提升在相似場景下設計系統的能力。其實道理很簡單,小時候學習寫做文的辦法是什麼?- 就是背誦課文而已啊。由於寫做是一種輸出,因此若是你沒有好詞好句的積累(輸入),天然寫不出辭藻豐富的文章。寫代碼也是同樣的道理~
- 重構的能力是筆者很是看重的能力。其實筆者我的認爲關於重構的技巧能夠早早學習,在後面寫代碼的時候儘量作到一步到位(若是在排期容許的狀況下),並且也對設計代碼方面能力的提升有幫助:怎樣才能設計出一個低耦合,高內聚,易擴展,易修改的系統?有專門的一本書來介紹重構:《重構 改善既有代碼的設計》。
上面說了筆者喜歡考察的問題,下面說一下筆者不喜歡考察的是哪些問題:網絡
筆者不考察這類問題的緣由有兩個:
在本文的最後說一下數據結構和算法題。
這類問題是比較大的公司喜歡考覈的內容,也就是說大部分公司其實並不考(可是若是瞭解的話是會加分的)。可是筆者我的認爲若是時間上容許,多少仍是準備一些會比較好。除了應對面試,其實算法方面的學習會對編程能力的提升有幫助,這一點筆者本身深有體會:
筆者此次準備面試的過程當中,在LeetCode上面刷了一些道題,其中鏈表,數組,二叉樹的題加起來有30道左右,並把這些題放在了我的倉庫裏面:awesome-algorithm-question-solution。歡迎PR Swift,Java的算法題和答案~
在刷題和學習的過程當中漸漸可以感受到對代碼的理解能力提升了不少,尤爲是鏈表題能夠強化對指針操做的理解,並且對執行條件的檢查,邊界問題的處理能力也提高了一些~
好了,這套題就分享到這裏了,在文章後面也建議你們平時注意數據結構和算法方面的學習。和上一篇同樣,這篇博客主觀方面的內容仍是多一些的,仍是但願讀者能夠多多和我交流~
本篇已同步到我的博客:出一套高級 iOS 面試題
筆者在近期開通了我的公衆號,主要分享編程,讀書筆記,思考類的文章。
歡迎加入iOS開發交流學習羣,咱們一塊兒共同窗習,共同成長