另外一份有點難的 iOS 面試題

這一年的時間已經經歷了實習、校招好幾回的面試了,對於每一個準備找工做或者已經找到工做的人來講,準備面試題都是一次提高本身的機會。但比較慶幸的是,本人幾回面試所遇到的問題都比較簡單,沒有太多能讓本身有所提高的內容,而網上流傳的各類面試題現在看來也沒有什麼太大的新意。所以我決定本身出一份面試題,真正有一點難度的面試題。面試

對於我我的來講,我不太喜歡那些查一查就能獲得答案的題目,好比某個 API 怎麼用,或者某個數據結構怎麼寫等等,由於這些題目其實考察都是肌肉記憶,就算答得好也不表明這我的能力很強,只能說他前期準備工做作得比較好。我下面所提出的幾個問題都是須要必定實踐或者必定經驗才能流暢解答出來的題目,若是這些問題對你來講 so easy,那麼說明你有必定的知識廣度,對問題比較喜歡深刻探究。固然了,若是你以爲某幾個問題有些許難度,也沒有太大的關係,可以說出一個大體的思路也是 ok 的,後期再慢慢摸索一下對本身也是有極大提高的。服務器

下面就來看看個人問題吧!網絡

涵蓋的知識體系

  • UIKit 相關的基礎知識
  • C++ 以及與 Objective-C 的互操做性(沒有接觸過 C++ 的小夥伴能夠暫時跳過這部分題目)
  • 程序連接與裝載相關知識
  • Swift
  • Objective-C runtime
  • 計算機網絡(基礎)
  • 操做系統(基礎)

面試題

  1. 詳細描述一下 UIViewCALayer 的關係,drawRect 必定會影響性能嗎?UI DynamicsUIKit Animation 的最本質區別是什麼?
  2. 如何用 UIImageView 顯示超大分辨率的圖?若是要支持縮放呢?
  3. 瞭解 fishhook 嗎?說說爲何 fishhook 不能修改非動態鏈接庫中的符號?
  4. C++ 調用虛方法與 Objective-C 發消息有什麼區別?
  5. 瞭解 placement new 嗎?Objective-C 中如何實現這個功能?
  6. 如何在 ARC 環境下用 C++ 標準庫容器來管理 Objective-C 對象?
  7. idselfsuper 它們從語法上有什麼區別?
  8. isa 是什麼?是指向 Class 對象自己的指針嗎?
  9. block 修改捕獲變量除了用 __block 還能夠怎麼作?有哪些侷限性?
  10. NSDictionaryNSHashTable 有什麼區別,它們的使用場景是怎樣的?
  11. 用過 Swift 嗎?如何評價 String index 的設計?
  12. 假設 iPhone 上有一個與服務器的 TCP 鏈接,此時 iPhone 突然斷網,服務器能在短期內知會 iPhone 的離線嗎?
  13. 爲何 Wireshark 不能直接抓取 SSL 的原始數據?
  14. backtrace 是在用戶態實現的嗎?可否講講實現它的大體思路?
  15. malloc 的指針 double free 產生的異常與訪問 freed 指針有可能產生的異常有什麼區別?爲何訪問 freed 指針不必定產生異常?
  16. RunLoop 是一個不停歇在運行的死循環嗎?爲何?
  17. 看過 runtime 的源碼嗎?源碼中常有的 fastpathslowpath 是什麼?
  18. runtime 中 SideTables(不是 SideTable)存在的意義是什麼?
  19. 爲何 ARC 環境下不容許咱們調用 [super dealloc]
  20. Objective-C 是如何保證系統升級後的 ABI 穩定性的?
  21. 下面這段僞代碼存在什麼問題?應該如何改進?
int main(int argc, const char * argv[]) {
    // ...
    
    NSUInteger threadCount = [NSProcessInfo processInfo].activeProcessorCount;
    NSCondition *cond = [NSCondition new];
    for (int i = 0; i < threadCount; i++) {
        [NSThread detachNewThreadWithBlock:^{
            while (YES) {
                [cond lock];
                while (/* Queue is empty */) {
                    [cond wait];
                }
                // Dequeue an item.
                [cond unlock];
                // Handle the item.
            }
        }];
    }

    while (YES) {
        // Enqueue something when it comes.
        [cond broadcast];
    }
    
    // ...
}
複製代碼

雖然只有 21 道題,但相關問題仍是不少不少的,往後我可能也會寫一篇文章來解答一下全部的問題,固然我更但願你們可以本身完成這些問題,不要嘗試直接搜答案,不少題也許根本搜不到答案,因此本身探究的過程必定是必不可少的,加油吧!數據結構

相關文章
相關標籤/搜索