面試題總結(jié)
1飞崖、算法問題,鏈表反轉(zhuǎn)谨胞、二分搜索固歪、深度搜索、廣度搜索胯努、常見算法 時(shí)間復(fù)雜度(大 O 表示)
2牢裳、OC相關(guān)
2.1、Block 在內(nèi)存中位置叶沛、原理蒲讯、在Block內(nèi)部可否修改局部變量、如果不能修改為什么灰署,能否修改全局變量判帮,可以修改為什么局嘁、還有靜態(tài)變量,全局靜態(tài)變量能否修改
2.1脊另、GCD與Nsoperation應(yīng)用場(chǎng)景导狡,有什么區(qū)別,Gcd group偎痛、dispatch_barrier_async、dispatch_semaphore用法
2.2独郎、深淺拷貝的區(qū)別踩麦,對(duì)可變對(duì)象執(zhí)行 copy 和 不可變對(duì)象 執(zhí)行? copy有什么區(qū)別,strong 為什么不可以用來修飾 可變屬性氓癌,對(duì)一個(gè)數(shù)組 執(zhí)行 mutableCopy 后谓谦,復(fù)制后新數(shù)組里面的元素是深拷貝,還是淺拷貝
2.3贪婉、對(duì)網(wǎng)絡(luò)層 做過哪些事情反粥,優(yōu)化、H5 與 native 交互疲迂、http 與 Tcp才顿、Udp、Socket區(qū)別尤蒿,常用加密算法有哪些
2.4郑气、有沒有閱讀過第三方源碼、比如 說說 SDWebimage 原理
2.5腰池、對(duì)項(xiàng)目做過哪些性能優(yōu)化尾组、包括優(yōu)化列表滑動(dòng)速度、優(yōu)化 CPU示弓、內(nèi)存 占用率讳侨、線上崩潰統(tǒng)計(jì)分析、優(yōu)化包大小
2.6 奏属、常用設(shè)計(jì)模式跨跨、代理、Block拍皮、通知中心歹叮、在你項(xiàng)目中的應(yīng)用場(chǎng)景、分別有什么區(qū)別呢
2.7铆帽、了解過 MVVM嗎 咆耿? 了解過,講講項(xiàng)目中應(yīng)用爹橱,沒有了解過萨螺、你對(duì) 降低代碼 耦合度,提高代碼復(fù)用、做過哪些嘗試
2.8慰技、常用動(dòng)畫UIview動(dòng)畫椭盏,Basic動(dòng)畫的用法
2.9、怎么保證數(shù)據(jù)的讀寫安全吻商、互斥鎖掏颊、dispatch_semaphore了解過嗎?
2.10艾帐、動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的區(qū)別
2.11乌叶、Cocoapods幫助我們項(xiàng)目做了哪些事情,Podfile文件中有個(gè)參數(shù)use_frameworks!的作用柒爸、Podlock文件的作用
2.12准浴、Runtime? 中isa指針指向的什么,MetaClass是什么捎稚,實(shí)例方法和類方法的methodLists分別存在什么地方乐横,是存在同一個(gè)地方嗎,Runtime消息轉(zhuǎn)發(fā)的流程什么今野,Methodswizzling是什么
2.13葡公、Runtime應(yīng)用,如何通過Runtime給系統(tǒng)類添加一個(gè)屬性腥泥、替換一個(gè)類的方法實(shí)現(xiàn)匾南、給系統(tǒng)類動(dòng)態(tài)添加一個(gè)方法
2.14、RunLoop和線程的關(guān)系什么蛔外、soure0與? soure1區(qū)別蛆楞、AutoreleasePool和runloop的關(guān)系、在在Core Foundation中有RunLoop的五個(gè)類夹厌,分別是什么豹爹、作用是什么
2.15、創(chuàng)建的了A矛纹、B兩個(gè)Nsoperation添加到NsoperationQueue臂聋,設(shè)置B依賴A、同時(shí)B的優(yōu)先級(jí)高于A或南、A與B孩等、哪個(gè)先執(zhí)行
2.16、iOS 點(diǎn)擊程序圖標(biāo)采够,到啟動(dòng) app 經(jīng)歷了什么
2.17肄方、UIView和CALayer的區(qū)別?通過View的layer設(shè)置圓角為什么有性能消耗、什么是離屏渲染
3蹬癌、Swift相關(guān)
3.1权她、為什么說 Swift 是一門函數(shù)式語言
3.2虹茶、Swift的reduce、map隅要、flatMap蝴罪、filter用法
3.3、@discardableResult步清、@escaping用法
3.4要门、泛型的含義,什么是 高階函數(shù)
4.0在一個(gè)方法中的局部變量尼啡,需要return給調(diào)用者暂衡,這個(gè)局部變量什么時(shí)候會(huì)釋放
4.1.調(diào)用一個(gè)對(duì)象未實(shí)現(xiàn)的方法,中間的過程和結(jié)果分別是什么
4.2下面的代碼返回的結(jié)果result1和result2各是什么崖瞭,并解釋下原因
4.3使用過那些提高效率的調(diào)試工具或者技巧
4.4 像一個(gè)nil對(duì)象發(fā)送消息會(huì)發(fā)生什么
因?yàn)镺C的函數(shù)都是通過objc_msgSend進(jìn)行消息發(fā)送來實(shí)現(xiàn)的,相對(duì)于C和C++來說撑毛,對(duì)于空指針的操作會(huì)引起crash問題书聚,而objc_msgSend會(huì)通過判斷self來決定是否發(fā)送消息,如果self為nil藻雌,那么selector也會(huì)為空雌续,直接返回,不會(huì)出現(xiàn)問題胯杭。視方法返回值驯杜,向nil發(fā)消息可能會(huì)返回nil(返回值為對(duì)象),0(返回值為一些基礎(chǔ)數(shù)據(jù))或0X0(返回值為id)等做个。但對(duì)于[NSNull null]對(duì)象發(fā)送消息時(shí)鸽心,是會(huì)crash的,因?yàn)镹SNull類只有一個(gè)null方法居暖。
但是有人會(huì)說顽频,如果向一個(gè)nil對(duì)象發(fā)消息不會(huì)crash的話,那么unrecognized selector sent to instance的錯(cuò)誤是怎么回事太闺?
這是因?yàn)檫@個(gè)對(duì)象已經(jīng)被釋放了(引用計(jì)數(shù)為0了)糯景,那么這個(gè)時(shí)候再去調(diào)用方法肯定是會(huì)Crash的,因?yàn)檫@個(gè)時(shí)候這個(gè)對(duì)象就是一個(gè)野指針(指向僵尸對(duì)象(對(duì)象的引用計(jì)數(shù)為0省骂,指針指向的內(nèi)存已經(jīng)不可用)的指針)了蟀淮,安全的做法是釋放后將對(duì)象重新置為nil,使它成為一個(gè)空指針钞澳,大家可以在關(guān)閉ARC后手動(dòng)release對(duì)象驗(yàn)證一下怠惶。
4.5instanceType 和ID 的區(qū)別
4.6block內(nèi)部如何修改外部局部變量,并闡述原因
4.7循環(huán)引用的產(chǎn)生原因及其整么正確的防止循環(huán)引用
4.8GCD實(shí)現(xiàn)一個(gè)同步鎖
dispatch_queue_t queue = dispatch_queue_create("queue", NULL);
? ? dispatch_sync(queue, ^{
? ? ? ? NSLog(@"---");
? ? });
?? ? NSLog(@"---===");
使用GCD信號(hào)量實(shí)現(xiàn)網(wǎng)絡(luò)請(qǐng)求順序執(zhí)行 - 簡(jiǎn)書
4.9如何使用runtime實(shí)現(xiàn)weak屬性
如何使用 Runtime 給現(xiàn)有的類添加 weak 屬性 - 簡(jiǎn)書
iOS MRC略贮、ARC 與 @autoreleasepool 學(xué)習(xí)筆記
鏈接:iOS MRC甚疟、ARC 與 @autoreleasepool 學(xué)習(xí)筆記 - 簡(jiǎn)書
GitHub - ChenYilong/iOSInterviewQuestions: iOS面試題集錦(附答案)--學(xué)習(xí)交流群515295083