1. 怎麼解決緩存池滿的問題(cell)java
ios中不存在緩存池滿的狀況,由於一般咱們ios中開發,對象都是在須要的時候纔會建立,有種經常使用的說話叫作懶加載,還有在UITableView中通常只會建立剛開始出如今屏幕中的cell,以後都是從緩存池裏取,不會在建立新對象。緩存池裏最多也就一兩個對象,緩存池滿的這種狀況通常在開發java中比較常見,java中通常把最近最少使用的對象先釋放。ios
2. CAAnimation的層級結構git
3. UIButton與UITableView的層級結構github
1> 繼承結構面試
2> 內部的子控件結構sql
4. 如何渲染自定義格式字符串的UILabel數據庫
1> 經過NSAttributedString類json
5. 設置scroll view的contensize能在Viewdidload裏設置麼,爲何xcode
1> 能緩存
6. 按鈕或者其它UIView控件的事件傳遞的具體過程
1> 回顧事件處理課程便可
7. 控制器View的生命週期及相關函數是什麼?你在開發中是如何用的?
* 1.首先判斷控制器是否有視圖,若是沒有就調用loadView方法建立:經過storyboard或者代碼;
* 2.隨後調用viewDidLoad,能夠進行下一步的初始化操做;只會被調用一次;
* 3.在視圖顯示以前調用viewWillAppear;該函數能夠屢次調用;
* 4.視圖viewDidAppear
* 3.在視圖顯示以前調用viewWillDisappear;該函數能夠屢次調用;
如須要);
* 5.在佈局變化先後,調用viewWill/DidLayoutSubviews處理相關信息;
6、應用程序
1. NSRunLoop的實現機制,及在多線程中如何使用
NSRunLoop是IOS消息機制的處理模式
>1.NSRunLoop的主要做用:控制NSRunLoop裏面線程的執行和休眠,在有事情作的時候使當前NSRunLoop控制的線程工做,沒有事情作讓當前NSRunLoop的控制的線程休眠。
>2.NSRunLoop 就是一直在循環檢測,從線程start到線程end,檢測inputsource(如點擊,雙擊等操做)異步事件,檢測timesource同步事件,檢測到輸入源會執行處理函數,首先會產生通知,corefunction向線程添加runloop observers來監聽事件,意在監聽事件發生時來作處理。
>3.runloopmode是一個集合,包括監聽:事件源,定時器,以及需通知的runloop observers
>1. 只有在爲你的程序建立次線程的時候,才須要運行run loop。對於程序的主線程而言,run loop是關鍵部分。Cocoa提供了運行主線程run loop的代碼同時也會自動運行run loop。IOS程序UIApplication中的run方法在程序正常啓動的時候就會啓動run loop。若是你使用xcode提供的模板建立的程序,那你永遠不須要本身去啓動run loop
>2. 在多線程中,你須要判斷是否須要run loop。若是須要run loop,那麼你要負責配置run loop並啓動。你不須要在任何狀況下都去啓動run loop。好比,你使用線程去處理一個預先定義好的耗時極長的任務時,你就能夠毋需啓動run loop。Run loop只在你要和線程有交互時才須要
2.IOS7以前,後臺執行內容有幾種形式,都是什麼
通常的應用在進入後臺的時候能夠獲取必定時間來運行相關任務,也就是說能夠在後臺運行一小段時間(10S左右)。
1. 後臺播放音樂
2. 後臺GPS跟蹤
3. 後臺voip支持
3簡單說一下APP的啓動過程,從main文件開始提及
程序啓動分爲兩類:1.有storyboard 2.沒有storyboard
有storyboard狀況下:
1.main函數
2.UIApplicationMain
* 建立UIApplication對象
* 建立UIApplication的delegate對象
3.根據Info.plist得到最主要storyboard的文件名,加載最主要的storyboard(有storyboard)
* 建立UIWindow
* 建立和設置UIWindow的rootViewController
* 顯示窗口
沒有storyboard狀況下:
1.main函數
2.UIApplicationMain
* 建立UIApplication對象
* 建立UIApplication的delegate對象
3.delegate對象開始處理(監聽)系統事件(沒有storyboard)
* 程序啓動完畢的時候, 就會調用代理的application:didFinishLaunchingWithOptions:方法
* 在application:didFinishLaunchingWithOptions:中建立UIWindow
* 建立和設置UIWindow的rootViewController
* 顯示窗口
4.把程序本身關掉和程序進入後臺,遠程推送的區別
1. 關掉後不執行任何代碼, 不能處理事件
2. 應用程序進入後臺狀態不久後轉入掛起狀態。在這種狀態下,應用程序不執行任何代碼,並有可能在任意時候從內存中刪除。只有當用戶再次運行此應用,應用纔會從掛起狀態喚醒,代碼得以繼續執行
3.或者進入後臺時開啓多任務狀態,保留在內存中,這樣就能夠執行系統容許的動做
4.遠程推送是由遠程服務器上的程序發送到APNS,再由APNS把消息推送至設備上的程序,當應用程序收到推送的消息會自動調用特定的方法執行事先寫好的代碼
5本地通知和遠程推送通知對基本概念和用法?
本地通知和遠程推送通知均可以向不在前臺運行的應用發送消息,這種消息既多是即將發生的事件,也多是服務器的新數據.不論是本地通知仍是遠程通知,他們在程序界面的顯示效果相同,均可能顯示爲一段警告信息或應用程序圖標上的微章.
本地通知和遠程推送通知的基本目的都是讓應用程序可以通知用戶某些事情, 並且不須要應用程序在前臺運行.兩者的區別在於本地通知由本應用負責調用,只能從當前設備上的iOS發出, 而遠程通知由遠程服務器上的程序發送到APNS,再由APNS把消息推送至設備上的程序
7、第三方框架
1. 第三方API是怎麼用的?
1> 大公司的開放API
2> github上面別人發佈的框架
用
l 第三方API在官方文檔都有說明,按照官方文檔的一步一步作
l 參考官方提供的示例程序
l 先本身建立一個工程試試,等熟悉了,在使用到項目中
2. 列舉如今熟悉iOS開發庫和第三方開發庫?
友盟(包括第三方登陸和分享),高德地圖,百度地圖,AFN,SDWebimage,FMDB, MBProgressHUD等等
8、其餘
1. 客戶端安全性處理方式?
1> 網絡數據傳輸(敏感數據[帳號\密碼\消費數據\銀行卡帳號], 不能明文發送)
2> 協議的問題(自定義協議, 遊戲代練)
3> 本地文件存儲(遊戲的存檔)
4> 源代碼
2. sip是什麼?
1> SIP(Session Initiation Protocol),會話發起協議
2> SIP是創建VOIP鏈接的 IETF 標準,IETF是全球互聯網最具權威的技術標準化組織
3> 所謂VOIP,就是網絡電話,直接用互聯網打電話,不用耗手機話費
3. 有些圖片加載的比較慢怎麼處理?你是怎麼優化程序的性能的?
1> 圖片下載放在異步線程
2> 圖片下載過程當中使用佔位圖片
3> 若是圖片較大,能夠考慮多線程斷點下載
4. 你實現過一個框架或者庫以供別人使用麼?若是有,請談一談構建框架或者庫時候的經驗;若是沒有,請設想和設計框架的public的API,並指出大概須要如何作、須要注意一些什麼方面,來使別人容易地使用你的框架。
1> 提供給外界的接口功能是否實用、夠用
2> 別人使用個人框架時,能不能根據類名、方法名就猜出接口的具體做用
3> 別人調用接口時,提供的參數是否夠用、調用起來是否簡單
4> 別人使用個人框架時,要不要再導入依賴其餘的框架
5. App須要加載超大量的數據,給服務器發送請求,可是服務器卡住瞭如何解決?
1> 設置請求超時
2> 給用戶提示請求超時
3> 根據用戶操做再次請求數據
6. 利用NSNotificationCenter實現跨多控制器傳輸數據和消息中用同步仍是異步?
7. 如何編寫xml
8. 地圖導航不能用了怎麼辦
提示用戶打開導航定位功能
9. SDWebImage具體如何實現
1> 利用NSOperationQueue和NSOperation下載圖片, 還使用了GCD的一些函數(解碼GIF圖片)
2> 利用URL做爲key,NSOperation做爲value
3> 利用URL做爲key,UIImage做爲value
10. AFN 與 ASI 有什麼區別
1> AFN基於NSURL,ASI基於底層的CFNetwork框架,所以ASI的性能優於AFN
2> AFN採起block的方式處理請求,ASI最初採起delegate的方式處理請求,後面也增長了block的方式
3> AFN只封裝了一些經常使用功能,知足基本需求,直接忽略了不少擴展功能,好比沒有封裝同步請求;ASI提供的功能較多,預留了各類接口和工具供開發者自行擴展
4> AFN直接解析服務器返回的JSON、XML等數據,而ASI比較原始,返回的是NSData二進制數據
11. 你在實際開發中,有哪些手機架構與性能調試經驗
1> 剛接手公司的舊項目時,模塊特別多,並且幾乎全部的代碼都寫在控制器裏面,好比UI控件代碼、網絡請求代碼、數據存儲代碼
2> 接下來採起MVC模式進行封裝、重構
l 自定義UI控件封裝內部的業務邏輯
l 封裝網絡請求工具類
l 封裝數據存儲工具類
12. runloop定時源和輸入源
1> 你建立的程序不須要顯示的建立run loop;每一個線程,包括程序的主線程(main thread)都有與之相應的run loop對象, 主線程會自行建立並運行run loop
2> Run loop處理的輸入事件有兩種不一樣的來源:輸入源(input source)和定時源(timer source)
3> 輸入源傳遞異步消息,一般來自於其餘線程或者程序。定時源則傳遞同步消息,在特定時間或者必定的時間間隔發生
13. 大家項目中都用了哪些框架, 及何種開發工具,具體到是哪一個版本,這個版本的特性有哪些???(好比xcode的版本)
1> AFN、SDWebImage、MBProgressHUD等 (搜索: 網易新聞 第三方庫)
2> Xcode 5.0
14. 本身怎麼實現原子鎖
iOS中通常用nonaotomic
15. 運行時的內部實現
16. 即時通信中的大數據處理
用put上傳到文件服務器,而後髮帶url的自定義格式的給對方,對方接收到以後下載
17. json解析的具體實現
1> SBJson
2> JSONKit
3> NSJSONSerialization
18. 若是在網絡數據處理過程當中,發現一處比較卡,通常怎麼解決
1> 檢查網絡請求操做是否被放在主線程了
2> 看看異步請求的數量是否太多了(子線程數量)
3> 數據量是否太大?若是太大,先清除一些沒必要要的對象(看不見的數據、圖片)
4> 手機CPU使用率和內存問題
19. 怎麼介紹一個項目
1> 項目的價值(能夠加些「老闆」關鍵字)
2> 項目的模塊
3> 我作的是哪一個模塊
20. 怎麼解決sqlite鎖定的問題
1> 設置數據庫鎖定的處理函數
int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*);
2> 設定鎖定時的等待時間
int sqlite3_busy_timeout(sqlite3*, 60); :
9、百度面試題
百度面試題目:
自我介紹下,而後說說本身作的哪些項目,在這些項目中作了哪些功能
請介紹一下isa指針,怎麼用,用來幹嗎!!!
控制器的生命週期
怎麼實現和qq相似的收到圖片顯示一個小三角的(使用quarzcore) 不能給view使用背景圖片
使用coregrahiis該變view的樣式。剪裁出一個三角
coreanimation 裏面含有什麼東西
談一談你是怎麼封裝view的
6\7適配怎麼進行的
autolayout?
存儲字典怎麼進行
runtime怎麼添加屬性方法
category和extension區別
如何判斷兩個鏈表是否有交叉,求交叉點
socket?包含的哪些方法
AsyncSokcet