阿里擎宝、字節(jié):一套高效的iOS面試題

簡述

runtime相關(guān)問題

runtime是iOS開發(fā)最核心的知識了郁妈,如果下面的問題都解決了,那么對runtime的理解已經(jīng)很深了绍申。 runtime已經(jīng)開源了噩咪,這有一份別人調(diào)試好可運(yùn)行的源碼objc-runtime,也可以去官網(wǎng)找objc4

結(jié)構(gòu)模型

  1. 介紹下runtime的內(nèi)存模型(isa极阅、對象胃碾、類、metaclass涂屁、結(jié)構(gòu)體的存儲(chǔ)信息等)
  2. 為什么要設(shè)計(jì)metaclass
  3. class_copyIvarList & class_copyPropertyList區(qū)別
  4. class_rw_tclass_ro_t 的區(qū)別
  5. category如何被加載的,兩個(gè)category的load方法的加載順序书在,兩個(gè)category的同名方法的加載順序
  6. category & extension區(qū)別,能給NSObject添加Extension嗎拆又,結(jié)果如何
  7. 消息轉(zhuǎn)發(fā)機(jī)制儒旬,消息轉(zhuǎn)發(fā)機(jī)制和其他語言的消息機(jī)制優(yōu)劣對比
  8. 在方法調(diào)用的時(shí)候栏账,方法查詢-> 動(dòng)態(tài)解析-> 消息轉(zhuǎn)發(fā) 之前做了什么
  9. IMPSEL栈源、Method的區(qū)別和使用場景
  10. load挡爵、initialize方法的區(qū)別什么?在繼承關(guān)系中他們有什么區(qū)別
  11. 說說消息轉(zhuǎn)發(fā)機(jī)制的優(yōu)劣

內(nèi)存管理

  1. weak的實(shí)現(xiàn)原理甚垦?SideTable的結(jié)構(gòu)是什么樣的
  2. 關(guān)聯(lián)對象的應(yīng)用茶鹃?系統(tǒng)如何實(shí)現(xiàn)關(guān)聯(lián)對象的
  3. 關(guān)聯(lián)對象的如何進(jìn)行內(nèi)存管理的?關(guān)聯(lián)對象如何實(shí)現(xiàn)weak屬性
  4. Autoreleasepool的原理艰亮?所使用的的數(shù)據(jù)結(jié)構(gòu)是什么
  5. ARC的實(shí)現(xiàn)原理闭翩?ARC下對retain & release做了哪些優(yōu)化
  6. ARC下哪些情況會(huì)造成內(nèi)存泄漏

其他

  1. Method Swizzle注意事項(xiàng)
  2. 屬性修飾符atomic的內(nèi)部實(shí)現(xiàn)是怎么樣的?能保證線程安全嗎
  3. iOS 中內(nèi)省的幾個(gè)方法有哪些?內(nèi)部實(shí)現(xiàn)原理是什么
  4. class迄埃、objc_getClass疗韵、object_getclass 方法有什么區(qū)別?

NSNotification相關(guān)

  1. 實(shí)現(xiàn)原理(結(jié)構(gòu)設(shè)計(jì)、通知如何存儲(chǔ)的侄非、name&observer&SEL之間的關(guān)系等)
  2. 通知的發(fā)送時(shí)同步的蕉汪,還是異步的
  3. NSNotificationCenter接受消息和發(fā)送消息是在一個(gè)線程里嗎?如何異步發(fā)送消息
  4. NSNotificationQueue是異步還是同步發(fā)送逞怨?在哪個(gè)線程響應(yīng)
  5. NSNotificationQueuerunloop的關(guān)系
  6. 如何保證通知接收的線程在主線程
  7. 頁面銷毀時(shí)不移除通知會(huì)崩潰嗎
  8. 多次添加同一個(gè)通知會(huì)是什么結(jié)果者疤?多次移除通知呢
  9. 下面的方式能接收到通知嗎?為什么
// 發(fā)送通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:@"TestNotification" object:@1];
// 接收通知
[NSNotificationCenter.defaultCenter postNotificationName:@"TestNotification" object:nil];

Runloop & KVO

runloop

runloop對于一個(gè)標(biāo)準(zhǔn)的iOS開發(fā)來說都不陌生叠赦,應(yīng)該說熟悉runloop是標(biāo)配驹马,下面就隨便列幾個(gè)典型問題吧

  1. app如何接收到觸摸事件的
  2. 為什么只有主線程的runloop是開啟的
  3. 為什么只在主線程刷新UI
  4. PerformSelectorrunloop的關(guān)系
  5. 如何使線程保活

KVO

runloop一樣眯搭,這也是標(biāo)配的知識點(diǎn)了窥翩,同樣列出幾個(gè)典型問題

  1. 實(shí)現(xiàn)原理
  2. 如何手動(dòng)關(guān)閉kvo
  3. 通過KVC修改屬性會(huì)觸發(fā)KVO么
  4. 哪些情況下使用kvo會(huì)崩潰,怎么防護(hù)崩潰
  5. kvo的優(yōu)缺點(diǎn)

Block

  1. block的內(nèi)部實(shí)現(xiàn)鳞仙,結(jié)構(gòu)體是什么樣的
  2. block是類嗎,有哪些類型
  3. 一個(gè)int變量被 __block 修飾與否的區(qū)別笔时?block的變量截獲
  4. block在修改NSMutableArray棍好,需不需要添加__block
  5. 怎么進(jìn)行內(nèi)存管理的
  6. block可以用strong修飾嗎
  7. 解決循環(huán)引用時(shí)為什么要用__strong、__weak修飾
  8. block發(fā)生copy時(shí)機(jī)
  9. Block訪問對象類型的auto變量時(shí)允耿,在ARC和MRC下有什么區(qū)別

多線程

主要以GCD為主

  1. iOS開發(fā)中有多少類型的線程借笙?分別對比
  2. GCD有哪些隊(duì)列,默認(rèn)提供哪些隊(duì)列
  3. GCD有哪些方法api
  4. GCD主線程 & 主隊(duì)列的關(guān)系
  5. 如何實(shí)現(xiàn)同步较锡,有多少方式就說多少
  6. dispatch_once實(shí)現(xiàn)原理
  7. 什么情況下會(huì)死鎖
  8. 有哪些類型的線程鎖业稼,分別介紹下作用和使用場景
  9. NSOperationQueue中的maxConcurrentOperationCount默認(rèn)值
  10. NSTimer、CADisplayLink蚂蕴、dispatch_source_t 的優(yōu)劣

視圖&圖像相關(guān)

  1. AutoLayout的原理低散,性能如何
  2. UIView & CALayer的區(qū)別
  3. 事件響應(yīng)鏈
  4. drawrect & layoutsubviews調(diào)用時(shí)機(jī)
  5. UI的刷新原理
  6. 隱式動(dòng)畫 & 顯示動(dòng)畫區(qū)別
  7. 什么是離屏渲染
  8. imageName & imageWithContentsOfFile區(qū)別
  9. 多個(gè)相同的圖片俯邓,會(huì)重復(fù)加載嗎
  10. 圖片是什么時(shí)候解碼的,如何優(yōu)化
  11. 圖片渲染怎么優(yōu)化
  12. 如果GPU的刷新率超過了iOS屏幕60Hz刷新率是什么現(xiàn)象熔号,怎么解決

性能優(yōu)化

  1. 如何做啟動(dòng)優(yōu)化稽鞭,如何監(jiān)控
  2. 如何做卡頓優(yōu)化,如何監(jiān)控
  3. 如何做耗電優(yōu)化引镊,如何監(jiān)控
  4. 如何做網(wǎng)絡(luò)優(yōu)化朦蕴,如何監(jiān)控

開發(fā)證書

  1. 蘋果使用證書的目的是什么
  2. AppStore安裝app時(shí)的認(rèn)證流程
  3. 開發(fā)者怎么在debug模式下把a(bǔ)pp安裝到設(shè)備呢

架構(gòu)設(shè)計(jì)

典型源碼的學(xué)習(xí)

只是列出一些iOS比較核心的開源庫,這些庫包含了很多高質(zhì)量的思想弟头,源碼學(xué)習(xí)的時(shí)候一定要關(guān)注每個(gè)框架解決的核心問題是什么吩抓,還有它們的優(yōu)缺點(diǎn),這樣才能算真正理解和吸收

  1. AFN
  2. SDWebImage
  3. JSPatch赴恨、Aspects(雖然一個(gè)不可用琴拧、另一個(gè)不維護(hù),但是這兩個(gè)庫都很精煉巧妙嘱支,很適合學(xué)習(xí))
  4. Weex/RN, 筆者認(rèn)為這種前端和客戶端緊密聯(lián)系的庫是必須要知道其原理的
  5. CTMediator蚓胸、其他router庫,這些都是常見的路由庫除师,開發(fā)中基本上都會(huì)用到
  6. 圈友們在評論下面補(bǔ)充吧

架構(gòu)設(shè)計(jì)

  1. 手動(dòng)埋點(diǎn)沛膳、自動(dòng)化埋點(diǎn)、可視化埋點(diǎn)
  2. MVC汛聚、MVP锹安、MVVM設(shè)計(jì)模式
  3. 常見的設(shè)計(jì)模式
  4. 單例的弊端
  5. 常見的路由方案,以及優(yōu)缺點(diǎn)對比
  6. 如果保證項(xiàng)目的穩(wěn)定性
  7. 設(shè)計(jì)一個(gè)圖片緩存框架(LRU)
  8. 如何設(shè)計(jì)一個(gè)git diff
  9. 設(shè)計(jì)一個(gè)線程池倚舀?畫出你的架構(gòu)圖
  10. 你的app架構(gòu)是什么叹哭,有什么優(yōu)缺點(diǎn)、為什么這么做痕貌、怎么改進(jìn)

其他問題

  1. PerformSelector & NSInvocation優(yōu)劣對比
  2. oc怎么實(shí)現(xiàn)多繼承风罩?怎么面向切面
  3. 哪些bug會(huì)導(dǎo)致崩潰,如何防護(hù)崩潰
  4. 怎么監(jiān)控崩潰
  5. app的啟動(dòng)過程(考察LLVM編譯過程舵稠、靜態(tài)鏈接超升、動(dòng)態(tài)鏈接、runtime初始化)
  6. 沙盒目錄的每個(gè)文件夾劃分的作用
  7. 簡述下match-o文件結(jié)構(gòu)

系統(tǒng)基礎(chǔ)知識

  1. 進(jìn)程和線程的區(qū)別
  2. HTTPS的握手過程
  3. 什么是中間人攻擊哺徊?怎么預(yù)防
  4. TCP的握手過程室琢?為什么進(jìn)行三次握手,四次揮手
  5. 堆和棧區(qū)的區(qū)別落追?誰的占用內(nèi)存空間大
  6. 加密算法:對稱加密算法和非對稱加密算法區(qū)別
  7. 常見的對稱加密和非對稱加密算法有哪些
  8. MD5盈滴、Sha1、Sha256區(qū)別
  9. charles抓包過程轿钠?不使用charles巢钓,4G網(wǎng)絡(luò)如何抓包

數(shù)據(jù)結(jié)構(gòu)與算法

對于移動(dòng)開發(fā)者來說病苗,一般不會(huì)遇到非常難的算法,大多以數(shù)據(jù)結(jié)構(gòu)為主竿报,筆者列出一些必會(huì)的算法铅乡,當(dāng)然有時(shí)間了可以去LeetCode上刷刷題

  1. 八大排序算法
  2. 棧&隊(duì)列
  3. 字符串處理
  4. 鏈表
  5. 二叉樹相關(guān)操作
  6. 深搜廣搜
  7. 基本的動(dòng)態(tài)規(guī)劃題、貪心算法烈菌、二分查找
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阵幸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子芽世,更是在濱河造成了極大的恐慌挚赊,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件济瓢,死亡現(xiàn)場離奇詭異荠割,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)旺矾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門蔑鹦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人箕宙,你說我怎么就攤上這事嚎朽。” “怎么了柬帕?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵哟忍,是天一觀的道長。 經(jīng)常有香客問我陷寝,道長锅很,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任凤跑,我火速辦了婚禮爆安,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饶火。我一直安慰自己鹏控,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布肤寝。 她就那樣靜靜地躺著,像睡著了一般抖僵。 火紅的嫁衣襯著肌膚如雪鲤看。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天耍群,我揣著相機(jī)與錄音义桂,去河邊找鬼找筝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛慷吊,可吹牛的內(nèi)容都是我干的袖裕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼溉瓶,長吁一口氣:“原來是場噩夢啊……” “哼急鳄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起堰酿,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤疾宏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后触创,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坎藐,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年哼绑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岩馍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抖韩,死狀恐怖蛀恩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帽蝶,我是刑警寧澤赦肋,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站励稳,受9級特大地震影響佃乘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜驹尼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一趣避、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧新翎,春花似錦程帕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至亏吝,卻和暖如春岭埠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工惜论, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留许赃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓馆类,卻偏偏與公主長得像混聊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子乾巧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容