1. 客戶端安全性處理方式?
- 網絡數據傳輸
- 敏感數據不能明文發(fā)送:
- 賬號
- 密碼
- 消費數據
- 銀行卡賬號
- 敏感數據不能明文發(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);
