iOS面試題錦集(八)——綜合

1. 客戶端安全性處理方式?

  • 網絡數據傳輸
    • 敏感數據不能明文發(fā)送:
      • 賬號
      • 密碼
      • 消費數據
      • 銀行卡賬號
  • 協(xié)議的問題
    • 自定義協(xié)議
    • 游戲代練
  • 本地文件存儲
    • 游戲的存檔
  • 源代碼

2. SIP是什么?

  • SIP(Session Initiation Protocol),會話發(fā)起協(xié)議
  • SIP是建立VoIP連接的IETF標準,IETF是全球互聯(lián)網最具權威的技術標準化組織
  • 所謂VoIP,就是網絡電話,直接用互聯(lián)網打電話,不用耗費手機話費

3. 有些圖片加載的比較慢怎么處理?你是怎么優(yōu)化程序的性能的?

  • 圖片下載放在異步線程
  • 圖片下載過程中使用占位圖片
  • 如果圖片較大,可以考慮多線程斷點下載

4. 你實現過一個框架或者庫以供別人使用嗎?如果有,請談一談構建框架或者庫的時候經驗;如果沒有,請設想和設計框架的public的API,并指出大概需要如何做、需要注意一些什么方面來使別人容易地使用你的框架?

  • 提供給外界的接口功能是否實用、夠用
  • 別人使用我的框架時,能不能根據類名、方法名就猜出接口的具體作用
  • 別人調用接口時,提供的參數是否夠用、調用起來是否簡單
  • 別人使用我的框架時,要不要再導入其他的框架

5. APP需要加載超大量的數據時,給服務器發(fā)送請求,但是服務器卡住了如何解決?

  • 設置請求超時
  • 給用戶提示請求超時
  • 根據用戶操作再次請求數據

6. 利用NSNotificationCenter實現跨多控制器傳輸數據和消息中用同步還是異步?

  • 如果通知是在主線程發(fā)出,那么接收通知的方法中的耗時操作要放到異步線程
[[NSNotificationCenter defaultCenter]  postNotificationName: @"abc" object; nil ];

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(test) name: @"abc" object : nil];

  • (void) test { dispatch.....}
  • 如果通知實在異步線程中發(fā)出,那么接收通知后調用的方法會默認在異步線程中執(zhí)行
dispatch_async ( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{

[NSNotificationCenter defaultCenter] postNotificationName: @"abc" object; nil ];
});

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(test) name: @"abc" object : nil];

  • (void) test {}

7. 如何編寫XML?

  • 打開Xcode創(chuàng)建XML文件,見下圖:
XML Create.png

XML Show.png

8. 地圖導航不能用了怎么辦?

  • 提示用戶打開導航定位功能

9. SDWebImage具體如何實現?

  • 利用NSOperationQueue和NSOperation下載圖片,還使用了GCD的一些函數(解碼GIF圖片)
  • 利用URL作為key,NSOperation作為value
  • 利用URL作為key,UIImage作為value

10. AFN與ASI有什么區(qū)別?

  • AFN基于NSURL,ASI基于底層的CFNetwork框架,因此ASI的性能優(yōu)于AFN
  • AFN采取block的方式處理請求,ASI最初采取delegate的方式處理請求,后面也增加了block的方式
  • AFN只封裝了一些常用功能,滿足基本需求,直接忽略了很多擴展功能,比如沒有封裝同步請求;ASI提供的功能較多,預留了各種接口和工具供開發(fā)者自行擴展
  • AFN直接解析服務器返回的JSON、XML等數據,而ASI比較原始,返回的是NSData二進制數據
AFN&ASI.png

11. 你在實際開發(fā)中,有哪些手機架構與性能調試經驗

  • 剛接手公司的舊項目時,模塊特別多,而且?guī)缀跛械拇a都寫在控制器里面,比如UI控件代碼、網絡請求代碼、數據存儲代碼
  • 接下來采取MVC模式進行封裝、重構
    • 自定義UI控件封裝內部業(yè)務邏輯
    • 封裝網絡請求工具類
    • 封裝數據存儲工具類

12. runloop定時器和輸入源

  • 程序不需要顯示的創(chuàng)建runloop;每個線程,包括程序的主線程(main thread)都有與之相對應的runloop對象,主線程會自動創(chuàng)建并運行runloop
  • runloop處理的輸入事件有兩種不同的來源:輸入源(input source)和定時源(timer source)
  • 輸入源傳遞異步消息,通常來自于其他線程或者程序。定時源則傳遞同步消息,在特定時間或者一定的時間間隔發(fā)生


    runloop.png

13. 你的項目中都用了哪些框架,及何種開發(fā)工具,具體到是哪個版本,這個版本的特性有哪些?(比如Xcode的版本)

  • AFN、SDWebImage、MBProgressHUD等(推薦參考:網易新聞 第三方庫
  • Xcode 6.4

14. 自己怎么實現原子鎖?

*iOS中一般用nonatomic

15. 即時通訊中的大數據處理

  • put方式上傳到文件服務器,然后發(fā)帶URL的自定義格式的文件給對方,對方收到后下載

16. JSON解析的具體實現

  • SBJSON
  • JSONKit
  • NSJSONSerialization

17. 如果在網絡數據處理中,發(fā)現一處比較卡,一般怎么解決?

  • 檢查網絡請求操作是否被放在主線程
  • 看看異步請求的數量是否太多了(子線程數量)
  • 數據量是否太大,如果太大,先清除一些不必要的對象(看不見的數據,圖片)
  • 手機CPU使用率和內存問題

18. 怎么合理地介紹一個項目?

  • 項目的價值(可以加些“老板”關鍵字)
  • 項目的模塊
  • 我做的是哪個模塊

19. 怎么解決SQLite鎖定的問題?

  • 設置數據庫鎖定的處理函數

int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*);

  • 設定鎖定時的等待時間

int sqlite3_busy_timeout(sqlite3*, 60);

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 一、深復制和淺復制的區(qū)別? 1、淺復制:只是復制了指向對象的指針,即兩個指針指向同一塊內存單元!而不復制指向對象的...
    iOS_Alex閱讀 1,535評論 1 27
  • AFN什么是AFN全稱是AFNetworking,是對NSURLConnection、NSURLSession的一...
    醉葉惜秋閱讀 1,349評論 0 0
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,653評論 30 472
  • 1.請簡單說明多線程技術的優(yōu)點和缺點? 優(yōu)點:能夠適當提高程序的執(zhí)行效率;能夠適當的提高資源的利用率,比如CPU、...
    deeper_iOS閱讀 1,554評論 1 12
  • “先苦后甜”是我從小到大的座右銘,我做任何事情都以此為標準。 遇到任何事情都告訴自己,會先苦后甜的。哪怕是吃飯這么...
    山風里閱讀 266評論 0 0

友情鏈接更多精彩內容