1. 程式人生 > >bat、頭條、愛奇藝iOS面試題總結

bat、頭條、愛奇藝iOS面試題總結

1.什麼是函數語言程式設計?

函式可以接受函式當作輸入(引數)和輸出(返回值)。

2.什麼是ABI

應用程式二進位制介面(application binary interface,ABI) 描述了應用程式和作業系統之間,一個應用和它的庫之間,或者應用的組成部分之間的低介面 。ABI不同於API ,API定義了原始碼和庫之間的介面,因此同樣的程式碼可以在支援這個API的任何系統中編譯 ,

作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS交流群:656315826,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!希望幫助開發者少走彎路。

3.什麼是MVC,請結合CocoaTouch說明?

4.什麼是MVVM,請設計View moled需要考慮哪些?

1. 低耦合。檢視(View)可以獨立於Model變化和修改,一個ViewModel可以繫結到不同的"View"上,當View變化的時候Model不可以不變,當Model變化的時候View也可以不變。

2. 可重用性。你可以把一些檢視邏輯放在一個ViewModel裡面,讓很多view重用這段檢視邏輯。

3. 獨立開發。開發人員可以專注於業務邏輯和資料的開發(ViewModel),設計人員可以專注於頁面設計,使用Expression Blend可以很容易設計介面並生成xaml程式碼。

4. 可測試。介面素來是比較難於測試的,而現在測試可以針對ViewModel來寫。

5.swift相對於OC有哪些優點?

、簡潔的語法:

我們不得不承認的是swift語言比OC精簡,整個專案中丟掉了標頭檔案,以及標頭檔案的引入。

、報錯精準:

報錯的時候直接顯示報錯行。

、定義變數簡單:

定義變數不用區分整型,浮點型等等,變數使用var,常量使用let。

、視覺化互動效果:

開發工具帶來了Xcode Playgrounds功能,該功能提供強大的互動效果,能讓Swift原始碼在撰寫過程中實時顯示出其執行結果。

、函數語言程式設計的支援:

Swift 語言本身提供了對函數語言程式設計的支援;

Objc 本身是不支援的,通過引入 ReactiveCocoa 這個庫才可支援函數語言程式設計。

6.oc裡有多少種開闢多執行緒的方式

7.多少種執行緒鎖的寫法

8.block的實質和原理

指標結構體

9.https的原理 為什麼安全

10.談談事件響應鏈,如何響應view之外的事

11.深拷貝和淺拷貝的區別

12.isa指標是什麼,在oc中起什麼用。

每個Objective-C物件都有一個隱藏的資料結構,這個資料結構是Objective-C物件的第一個成員變數,它就是isa指標。這個指標指向哪呢?它指向一個類物件(class object 記住它是個物件,是佔用記憶體空間的一個變數,這個物件在編譯的時候編譯器就生成了,專門來描述某個類的定義),這個類物件包含了Objective-C物件的一些資訊(為了區分兩個物件,我把前面提到的物件叫Objective-C物件),包括Objective-C物件的方法排程表,實現了什麼協議等等。這個包含資訊就是Objective-C動態能力的根源了。

14.delegate解決了什麼問題,Notification與它有什麼不同?

解決物件間通訊,耦合度高,易懂

15.im訊息不重複 不丟失

16.LLVMClang的區別?

** LLVM**是構架編譯器(compiler)的框架系統

lang是一個C++編寫、基於LLVM、釋出於LLVM BSD許可證下的C/C++/Objective-C/Objective-C++編譯器。那麼為什麼已經有了GCC還要開發Clang呢?Clang相比於GCC有什麼優勢呢?

其實,這也是Clang當初在設計開發的時候所主要考慮的原因。Clang是一個高度模組化開發的輕量級編譯器,它的編譯速度快、佔用記憶體小、非常方便進行二次開發。

17.Classobjc的區別是什麼?

18.AFN的原理

19.死鎖的理解怎麼解決

資源競爭迴圈等待

20.開發中遇到的最大的困難,怎麼解決的。如果是現在你會怎麼解決。

21.arc weak原理

(1)前端編譯器 ----給“擁有的”每個物件插入相應的release語句。某個方法裡面建立了一個物件,前端編譯器會在方法末尾自動新增release語句銷燬它。類擁有的物件(例項變數/屬性)在dealloc方法內釋放。

(2)ARC優化器---當代碼中出現多個對 retain 和release的重複呼叫,ARC優化器負責移出多餘的 retain 和release語句。 --------------------- 本文來自 bfmeans 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/bfmeans/article/details/51485970?utm_source=copy

22.@property的所有關鍵字。strong和weak的區別

23.GCD的理解和原理

24.kvo 的原理

kvc

  • 1、首先搜尋setKey:方法.(key指成員變數名, 首字母大寫)
  • 2、上面的setter方法沒找到, 如果類方法accessInstanceVariablesDirectly返回YES. 那麼按 _key, _isKey,key, iskey的順序搜尋成員名.(NSKeyValueCodingCatogery中實現的類方法, 預設實現為返回YES)
  • 3、如果沒有找到成員變數, 呼叫setValue:forUnderfinedKey:

25.訊息轉發 runloop的原理。

26. jspatch原理

JSPatch 使⽤用 Objective-C 的 runtime 讓 JS 調⽤用任意的 Objective-C 的類和⽅方法。如果想要動態調⽤用 Objective-C 的任意類、任意⽅方法,恰巧 Objective-C 的 runtime 可以做到這⼀一點。那麼 JSPatch 的 核⼼心就是把 JS 中的⽅方法調⽤用,轉換成 Objective-C 的⽅方法調⽤用,並且 JS 和 Objective-C 之間需要進⾏行行 資料傳遞。

補丁下發 補丁格式替換為 __c 對需要新增或修改的⽅方法進⾏行行處理理,傳遞給 OC,使⽤用 runtime 處理理 調⽤用下發的 JS 函式 調⽤用補丁程式碼的實現 調⽤用 __c 函式 調⽤用 _OC_callI 或者 _OC_callC

27.設計模式, 路由設計模式和橋接設計

30.category和extensions的區別

31.記憶體優化

32.tableview 效能優化

33.NSMutable原理

34.webview 效能體驗和優化

  • WebView初始化慢,可以在初始化同時先請求資料,讓後端和網路不要閒著。
  • 後端處理慢,可以讓伺服器分trunk輸出,在後端計算的同時前端也載入網路靜態資源。
  • 指令碼執行慢,就讓指令碼在最後執行,不阻塞頁面解析。
  • 同時,合理的預載入、預快取可以讓載入速度的瓶頸更小。
  • WebView初始化慢,就隨時初始化好一個WebView待用。
  • DNS和連結慢,想辦法複用客戶端使用的域名和連結。
  • 指令碼執行慢,可以把框架程式碼拆分出來,在請求頁面之前就執行好。

35.自動釋放池

36.NSproxy是幹嘛用的

NSProxy通常用來實現訊息轉發機制和惰性初始化資源。

37.演算法 反斜對角列印,取陣列第n大的值,three sum

作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS交流群:656315826,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!希望幫助開發者少走彎路。

轉自簡書

作者:wu大維 連結:https://www.jianshu.com/p/406713c87521