iOS面試題整理
在線查看地址:https://ios.nobady.cnhtml
iOS面試相關問題整理,作這個的初心是但願能鞏固本身的基礎知識,固然也但願能幫助更多的開發者,如發現答案不許確或者不完整的可前往 Github 提交完善。ios
主要從如下方面作了整理:git
數據結構
- 1.數據結構的存儲通常經常使用的有幾種?各有什麼特色?
- 2.集合結構 線性結構 樹形結構 圖形結構
- 3.單向鏈表 雙向鏈表 循環鏈表
- 4.數組和鏈表區別
- 5.堆、棧和隊列
- 6.輸入一棵二叉樹的根結點,求該樹的深度?
- 7.輸入一課二叉樹的根結點,判斷該樹是否是平衡二叉樹?
算法
- 1.時間複雜度
- 2.空間複雜度
- 3.經常使用的排序算法
- 4.字符串反轉
- 5.鏈表反轉(頭差法)
- 6.有序數組合並
- 7.查找第一個只出現一次的字符(Hash查找)
- 8.查找兩個子視圖的共同父視圖
- 9.無序數組中的中位數(快排思想)
- 10.給定一個整數數組和一個目標值,找出數組中和爲目標值的兩個數。
Foundation
- 1.nil、NIL、NSNULL 有什麼區別?
- 2.如何實現一個線程安全的 NSMutableArray?
- 3.atomic 修飾的屬性是絕對安全的嗎?爲何?
- 4.實現 isEqual 和 hash 方法時要注意什麼?
- 5.id 和 instanceType 有什麼區別?
- 6.self和super的區別
- 7.@synthesize和@dynamic分別有什麼做用?
- 8.typeof 和 typeof,typeof 的區別?
- 9.類族
- 10.struct和class的區別
UIKit
- 1.UIView 和 CALayer 是什麼關係?
- 2.Bounds 和 Frame 的區別?
- 3.setNeedsDisplay 和 layoutIfNeeded 二者是什麼關係?
- 4.談談對UIResponder的理解
- 5.loadView的做用?
- 6.使用 drawRect有什麼影響?
- 7.keyWindow 和 delegate的window有何區別
WebView
內存管理
- 1.什麼狀況使用 weak 關鍵字,相比 assign 有什麼不一樣?
- 2.如何讓本身的類用 copy 修飾符?如何重寫帶 copy 關鍵字的 setter?
- 3.@property 的本質是什麼?ivar、getter、setter 是如何生成並添加到這個類中的
- 4.@protocol 和 category 中如何使用 @property
- 5.簡要說一下 @autoreleasePool 的數據結構??
- 6.BAD_ACCESS在什麼狀況下出現?
- 7.使用CADisplayLink、NSTimer有什麼注意點?
- 8.iOS內存分區狀況
- 9.iOS內存管理方式
消息傳遞的方式
網絡
- 1.網絡七層協議
- 2.Http 和 Https 的區別?Https爲何更加安全?
- 3.HTTPS的鏈接創建流程
- 4.解釋一下 三次握手 和 四次揮手
- 5.TCP 和 UDP的區別
- 6.Cookie和Session
- 7.DNS是什麼
- 8.DNS解析過程
數據存儲
多線程
- 1.進程與線程
- 2.什麼是多線程?
- 3.多線程的優勢和缺點
- 4.多線程的 並行 和 併發 有什麼區別?
- 5.iOS中實現多線程的幾種方案,各自有什麼特色?
- 6.多個網絡請求完成後執行下一步
- 7.多個網絡請求順序執行後執行下一步
- 8.異步操做兩組數據時, 執行完第一組以後, 才能執行第二組
- 9.多線程中的死鎖?
- 10.GCD執行原理?
動畫
圖像處理
數據安全及加密
Runtime
- 1.Category 的實現原理?
- 2.isa指針的理解,對象的isa指針指向哪裏?isa指針有哪兩種類型?
- 3.Objective-C 如何實現多重繼承?
- 4.runtime 如何實現 weak 屬性?
- 5.講一下 OC 的消息機制
- 6.runtime具體應用
- 7.runtime如何經過selector找到對應的IMP地址?
- 8.簡述下Objective-C中調用方法的過程
- 9.load和initialize的區別
- 10.怎麼理解Objective-C是動態運行時語言。
Runloop
- 1.Runloop 和線程的關係?
- 2.RunLoop的運行模式
- 3.runloop內部邏輯?
- 4.autoreleasePool 在什麼時候被釋放?
- 5.GCD 在Runloop中的使用?
- 6.AFNetworking 中如何運用 Runloop?
- 7.PerformSelector 的實現原理?
- 8.PerformSelector:afterDelay:這個方法在子線程中是否起做用?
- 9.事件響應的過程?
- 10.手勢識別的過程?
- 11.CADispalyTimer和Timer哪一個更精確
項目架構
設計模式
組件化
調試技巧
性能優化
- 1.形成tableView卡頓的緣由有哪些?
- 2.如何提高 tableview 的流暢度?
- 3.APP啓動時間應從哪些方面優化?
- 4.如何下降APP包的大小
- 5.如何檢測離屏渲染與優化
- 6.平常如何檢查內存泄露?
源碼理解
代碼管理
持續集成
本文同步分享在 博客「xiangzhihong8」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。web