前言
喜歡的可以收藏,大家一起努力。
以下是小編收集總結(jié)的iOS技術(shù)點+面試題分類;看看你都會了嗎?希望自己能有目標(biāo)有計劃地準(zhǔn)備面試,后面我會逐個復(fù)習(xí)一下相應(yīng)的內(nèi)容。
- 更多技術(shù)題合集:
iOS面試常問:
常問例題:
- 如何保證線程安全?死鎖是如何產(chǎn)生的?
- 線程之間是如何共享資源的?
- 從設(shè)計模式的角度分析Delegate、Notification、KVO的區(qū)別。
- NSNotification實現(xiàn)邏輯,子線程中給主線程發(fā)送通知,主線程是否會處理通知.
- 如何令自己所寫的對象具有拷貝功能?
- 自動釋放池在mrc和arc區(qū)別
- 進(jìn)程之間如何共享資源?
- 談?wù)剬τ赽lock理解,mrc和arc下有什么區(qū)別。
- TCP握手為什么是三次?TCP揮手為啥是四次呢?
- Http 和 Https 的區(qū)別?Https為什么更加安全?
- 解釋一下 三次握手 和 四次揮手?
- socket編程里面,select、poll、epoll的區(qū)別和特點?
- client和server之間TCP通信,雙方使用到的socket函數(shù)以及過程?
- TLS的加密過程?
- TLS握手時的隨機數(shù)有什么作用?
- 鏈表和數(shù)組的區(qū)別是什么?插入和查詢的時間復(fù)雜度分別是多少?
- Category(類別)、 Extension(擴(kuò)展)和繼承的區(qū)別。
- 為什么代理要用weak?代理的delegate和dataSource有什么區(qū)別?block和代理的區(qū)別?
- id和NSObject*的區(qū)別。
- 如何令自己所寫的對象具有拷貝功能?
- 使用系統(tǒng)的某些block api(如UIView的block版本寫動畫時),是否也考慮引用循環(huán)問題?
- static有什么作用?
- Swift 下的如何使用 KVC?
- Swift有哪些模式匹配?
- objc在向一個對象發(fā)送消息時,發(fā)生了什么?
- 靜態(tài)庫的原理是什么?你有沒有自己寫過靜態(tài)編譯庫,遇到了哪些問題?
- 不手動指定autoreleasepool的前提下,一個autorealese對象在什么時刻釋放?(比如在一個vc的viewDidLoad中創(chuàng)建)
難一點的
設(shè)計一個progress bar解決方案,追問到 Core Graphic、CGPath、maskLayer。
設(shè)計一個popup view被追問到 keyWindow、UIWindow的layer、UIView hierarchy。
從設(shè)計模式的角度分析Delegate、Notification、KVO的區(qū)別。被追問到自己寫的library和開源的項目中用到哪些設(shè)計模式,為什么使用,有哪些好處和壞處,現(xiàn)在能否改進(jìn)。
算是問題3的追問,設(shè)計一個方案來檢測KVO的同步異步問題。willChange和 didChange的不同點,然后被追問到有沒有其他地方也有類似情況,被追問到Core Data 中falut object。
Multithreading,什么時候采用Multithreading方案,以及理由。追問到系統(tǒng)還有哪些在后臺運行的thread,被追問到view life cycle、iOS6之后的不同以及內(nèi)存管理。
Multithreading中常常遇到的問題,追問到死鎖,優(yōu)先級翻轉(zhuǎn),線程池等。
runloop是來做什么的?runloop和線程有什么關(guān)系?主線程默認(rèn)開啟了runloop么?子線程呢?
不手動指定autoreleasepool的前提下,一個autorealese對象在什么時刻釋放?(比如在一個vc的viewDidLoad中創(chuàng)建
不手動指定autoreleasepool的前提下,一個autorealese對象在什么時刻釋放?(比如在一個vc的viewDidLoad中創(chuàng)建)