面試的時候你可能碰到面試官設的各種坑:不止喜歡問你iOS開發的一些特性和方法,更喜歡喜歡問你這些特性及方法你覺得它是怎麼實現的?你覺得蘋果公司為什麼要這樣設計?
也許面試官自己也沒自己實現過,畢竟有些東西蘋果為什麼這樣設計,若不是蘋果公司的工程師無法知道。
但作為面試者,這個些問題正是拉開差距的最好辦法:不一定要你親手用C去重現蘋果的機制,但可以談談你的見解和看法。所以,這一塊最好有個準備。
1. 用法實踐篇
一般,會問你怎麼實現某個模組,用過哪些API,介紹下他們的用法。
-
你以前的專案架構是怎樣的?
-
你是如何資料建模的?
-
你怎麼實現字典轉模型的?
-
你用過哪些動畫效果?
-
你怎麼處理圖片載入的?
-
你有怎樣用過一些第三方庫的?
2. 思考見解篇
但是,還有的喜歡問你OC語法各種高階特性如Runtime動態性,以及你平時經常用的某個方法,如果我讓你自己寫自己實現,你覺得它是怎麼實現的?
-
除了App應用程式的生命週期,ViewController的生命週期你知道嗎?它的生命週期是怎麼操作和控制的?你覺得這些操作的方法是怎麼實現的?它和App的生命週期的區別你說說看?
-
你平時copy用的多嗎?什麼時候會用?關於copy的其它特性你有了解過嗎,比如說引用計數和記憶體管理方面,你能不能說說看?如果我讓你自己寫個copy的方法,你覺得copy這個方法是怎麼實現的?
-
你有了解過執行時嗎?執行時是什麼?你覺得執行時的這些特性是怎麼實現的?動態性的這些特性在編譯和執行分別怎樣體現的?你平時程式設計的時候有怎樣利用過執行時的一些特性?
-
多執行緒程式設計你有過了解嗎?關於多執行緒有哪些方法?執行緒和程式有什麼區別?為什麼要用多執行緒?分別最多可以開多少程式和執行緒?你覺得GCD裡面的開啟執行緒的操作是怎麼實現的?還有執行緒切換的操作你覺得是怎麼實現的?
-
記憶體管理你瞭解多少?我知道你提到了ARC和strong,retain等等一些東西,但你覺得在ARC之前的MRC是怎麼實現記憶體管理的?ARC又是怎麼實現記憶體管理的?還有,你覺得OC中操作記憶體的這些方法是怎麼實現的?
-
好的,你剛才提到了FMDB,能介紹你用過它的哪些類?做了些什麼事情?在你的專案中是怎麼用到它的?你覺得它和CoreData的區別是什麼?還能說說其它有關資料模型的一些框架嗎?它們是怎麼實現資料儲存功能的?實現資料儲存的時候各自有什麼共同點和區別?
3. 後面的話
這些問題是PA一個面試官問過的,聽說他是從百度公司跳槽出來的。可能吧,百度系出來的面試官真的喜歡問底層。
關於這些問題的答案,特別是關於自由發揮和獨立見解的部分,歡迎讀者在自己複習相關知識後,在評論區貼出你的見解。