OC語(yǔ)法
1. Block是如何實(shí)現(xiàn)的诱篷?Block對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)是什么樣子的?__block的作用是什么嘁傀?它對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)又是什么樣子的兴蒸?
- block結(jié)構(gòu)是一個(gè)結(jié)構(gòu)體
struct __main_block_impl_0 { struct __block_impl impl; struct __main_block_desc_0* Desc; __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) { impl.isa = &_NSConcreteStackBlock; impl.Flags = flags; impl.FuncPtr = fp; Desc = desc; } };
- block的具體實(shí)現(xiàn)保存在impl的FuncPtr字段中
- block中的變量捕獲:
(1)自動(dòng)變量保存在block結(jié)構(gòu)體中,通過(guò)block結(jié)構(gòu)體獲取自動(dòng)變量的值细办。
(2)局部靜態(tài)變量的指針保存在block結(jié)構(gòu)體中橙凳,通過(guò)block結(jié)構(gòu)體獲取到變量指針最后獲取變量的值。
(3)全局變量可以直接訪問(wèn)笑撞。
(4)全局靜態(tài)變量可以直接訪問(wèn)岛啸。 - block的類型:
(1)沒(méi)有捕獲參數(shù)時(shí)是NSGlobalBlock類型
(2)捕獲了參數(shù),但是block沒(méi)有被引用時(shí)是NSStackBlock
(3)當(dāng)block作為返回值時(shí)茴肥,當(dāng)block被賦值給strong指針時(shí)坚踩,當(dāng)block作為Cocoa API方法參數(shù)時(shí),當(dāng)block作為GCD方法參數(shù)時(shí)瓤狐,是NSMallocBlock - 在block被copy時(shí)瞬铸,會(huì)通過(guò)__main_block_copy_0和__main_block_dispose_0函數(shù)對(duì)捕獲的參數(shù)進(jìn)行內(nèi)存管理。
- 當(dāng)參數(shù)使用__block修飾時(shí)础锐,捕獲的參數(shù)會(huì)被包在__Block_byref_object_0結(jié)構(gòu)體中嗓节,結(jié)構(gòu)體中__forwarding字段會(huì)將棧block中byref結(jié)構(gòu)體指向堆block中的byref結(jié)構(gòu)體,使block內(nèi)外的變量統(tǒng)一皆警,這樣就可以在變量被copy到堆上之后還是能修改棧上的變量拦宣。
2. stringWithFormat中%@的占位原理
3. 已知變量 age是NSInteger類型,下面這段代碼能編譯通過(guò),請(qǐng)問(wèn)在運(yùn)行時(shí)會(huì)不會(huì)崩潰鸵隧?請(qǐng)從原理上解釋為什么绸罗?
NSString *str = [NSString stringWithFormat:@"%@",1];
4. GCD中的Block是在堆上還是棧上?
堆上豆瘫∩后埃可以通過(guò)block的isa指針確認(rèn)。
5. NSCoding協(xié)議是干什么用的靡羡?
6. KVO的實(shí)現(xiàn)原理系洛。
7. NSOperation有哪些特性比著GCD有哪些優(yōu)點(diǎn)俊性,它有哪些API略步?
8. NSNotificaiton是同步還是異步的,如果發(fā)通知時(shí)在子線程定页,接收在哪個(gè)線程趟薄?
9. 符號(hào)綁定原理。
10. performSelecter與runloop有什么關(guān)系
通過(guò)performSelecter調(diào)用方法時(shí)典徊,會(huì)創(chuàng)建一個(gè)timer杭煎,將這個(gè)timer添加到runloop中執(zhí)行。當(dāng)在子線程中調(diào)用performSelecter時(shí)需要注意runloop是不是跑起來(lái)了卒落。
11. 一個(gè)NSObject對(duì)象占用多少內(nèi)存羡铲?
需要理解OC對(duì)象在內(nèi)存中有哪些內(nèi)容,是怎樣分布的儡毕。
OC對(duì)象的底層是基于C/C++的結(jié)構(gòu)體來(lái)實(shí)現(xiàn)的也切。
利用下面的命令將OC代碼編譯為C++代碼(xx為文件名)
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc xx.m -o xx.cpp
"-sdk"指定平臺(tái)
"-arch"指定架構(gòu)(模擬器:i386,32位:armv7腰湾,64位:arm64)
12. Mach-O的結(jié)構(gòu)里面有啥
UI
- 事件響應(yīng)鏈?zhǔn)侨绾蝹鬟f的雷恃?
- 什么是異步渲染?
- layoutsubviews是在什么時(shí)機(jī)調(diào)用的费坊?
- 一張圖片的展示經(jīng)歷了哪些步驟倒槐?
- 什么是離屏渲染,什么情況會(huì)導(dǎo)致離屏渲染附井?
- CoreAnimation這個(gè)框架的作用什么讨越,它跟UIKit的關(guān)系是什么?
- UIView與CALayer有什么關(guān)系永毅?舉例一個(gè)CALayer的秒用把跨。
- 顯示動(dòng)畫與隱式動(dòng)畫的區(qū)別。
內(nèi)存管理
- ARC方案的原理是什么卷雕?它是在什么時(shí)候做的隱式添加release操作节猿?
- 循環(huán)引用有哪些場(chǎng)景,如何避免?
- 為什么當(dāng)我們?cè)谑褂胋lock時(shí)外面是weak 聲明一個(gè)weakSelf滨嘱,還要在block內(nèi)部使用strong再持有一下峰鄙?
- Autoreleasepool是實(shí)現(xiàn)機(jī)制是什么?它是什么時(shí)候釋放內(nèi)部的對(duì)象的太雨?它內(nèi)部的數(shù)據(jù)結(jié)構(gòu)是什么樣的吟榴?當(dāng)我提到哨兵對(duì)象時(shí),會(huì)繼續(xù)問(wèn)哨兵對(duì)象的作用是什么囊扳,為什么要設(shè)計(jì)它吩翻?(runtime源碼)
- 哪些對(duì)象會(huì)放入到Autoreleasepool中?
- weak的實(shí)現(xiàn)原理是什么锥咸?當(dāng)引用對(duì)象銷毀是它是如何管理內(nèi)部的Hash表的狭瞎?(這里要參閱weak源碼)
多線程
- 進(jìn)程,線程搏予,任務(wù)熊锭,隊(duì)列概念
- GCD
- 串行,并行雪侥,并發(fā)
- 同步碗殷,異步
- 串行、并發(fā)和同步速缨、異步相互結(jié)合能否開(kāi)啟新線程
- 主線程和主隊(duì)列
- 隊(duì)列與線程的關(guān)系
- gcd中常用隊(duì)列有哪些
- 什么情況下會(huì)發(fā)生死鎖锌妻?
- 如何避免死鎖?這段代碼應(yīng)該如何修改旬牲?
- GCD如何常駐線程仿粹?
開(kāi)啟子線程的runloop,然后添加一個(gè)監(jiān)聽(tīng)端口事件引谜。(待細(xì)化)
Runtime
- 消息發(fā)送的流程是怎樣的牍陌?
- 關(guān)聯(lián)對(duì)象時(shí)什么情況下會(huì)導(dǎo)致內(nèi)存泄露?
- 消息轉(zhuǎn)發(fā)的流程是什么员咽?
- category能否添加屬性毒涧,為什么?能否添加實(shí)例變量贝室,為什么契讲?
- 元類的作用是什么?
- 類方法是存儲(chǔ)到什么地方的滑频?類屬性呢捡偏?
- 講幾個(gè)runtime的應(yīng)用場(chǎng)景
- 實(shí)例對(duì)象與類對(duì)象的存儲(chǔ)結(jié)構(gòu)是什么樣的?
- 調(diào)用類對(duì)象和實(shí)例對(duì)象的方法時(shí)峡迷,是如何在內(nèi)存中查找到方法并調(diào)用的银伟?
- 什么是線程安全你虹,為什么UI操作必須在主線程執(zhí)行
- 開(kāi)啟新的線程有哪些方法
- 多線程任務(wù)要實(shí)現(xiàn)順序執(zhí)行有哪些方法
- 如何實(shí)現(xiàn)一個(gè)多讀單寫的功能?
- 用GCD如何實(shí)現(xiàn)一個(gè)控制最大并發(fā)數(shù)且執(zhí)行任務(wù)FIFO的功能彤避?
- 怎么去攔截C語(yǔ)言的系統(tǒng)函數(shù)
http://www.reibang.com/p/aeb0d891607e
Runloop
- 講一下對(duì)Runloop的理解傅物?
- 可以用Runloop實(shí)現(xiàn)什么功能?
- 多線程與Runloop的關(guān)系
性能優(yōu)化
- 對(duì)TableView進(jìn)行性能優(yōu)化有哪些方式琉预?
- Xcode的Instruments都有哪些調(diào)試的工具董饰?
- 講一下你做過(guò)的性能優(yōu)化的事情。
- 如何檢測(cè)卡頓圆米,都有哪些方法卒暂?
- 縮小包體積有哪些方案?
- APM的具體實(shí)現(xiàn)
網(wǎng)絡(luò)
TCP為什么需要三次握手呢娄帖?
TCP為什么揮手需要四次呢也祠?為什么不能將ACK和FIN報(bào)文一起發(fā)送?
TCP為什么TIMED_WAIT之后要等2MSL才進(jìn)入CLOSED狀態(tài)块茁?
TCP怎么保證安全性
校驗(yàn)和
序列號(hào)
確認(rèn)應(yīng)答
超時(shí)重傳
連接管理
流量控制
擁塞控制Https為什么握手過(guò)程需要三個(gè)隨機(jī)數(shù)齿坷,而且安全性只取決于第三個(gè)隨機(jī)數(shù)?
Charles如何實(shí)現(xiàn)HTTPS的攔截数焊?
為什么有些HTTPS請(qǐng)求(例如微信)抓包結(jié)果仍是加密的,如何實(shí)現(xiàn)的崎场?
DNS解析流程
DNS遞歸查詢
DNS迭代查詢
DNS劫持
CDN工作流程
Cookie和Session的區(qū)別
Socket
如果某一請(qǐng)求只在某一地特定時(shí)刻失敗率較高佩耳,會(huì)有哪些原因
http有沒(méi)有做過(guò)一些http弱網(wǎng)的優(yōu)化
計(jì)算機(jī)相關(guān)
- 項(xiàng)目編譯的流程是什么?手機(jī)上的應(yīng)用程序自點(diǎn)擊圖標(biāo)開(kāi)始到首屏內(nèi)容展示都經(jīng)歷了哪些步驟谭跨?
- 對(duì)于基本數(shù)據(jù)類型干厚,一般是存儲(chǔ)到棧中的,它有沒(méi)有可能存在堆上螃宙,什么情況下會(huì)存儲(chǔ)到堆上蛮瞄?
- 數(shù)據(jù)庫(kù)中的事務(wù)是什么意思?
- FMDB中事務(wù)的實(shí)現(xiàn)原理是什么谆扎?
- 使用過(guò)什么數(shù)據(jù)庫(kù)(我回答的Sqlite挂捅,Realm),Realm在使用時(shí)有哪些注意事項(xiàng)堂湖,如何實(shí)現(xiàn)批量操作闲先?
- LRU算法是否了解,如何實(shí)現(xiàn)一套LRU算法无蜂?
- 知道哪些設(shè)計(jì)模式伺糠,怎么理解設(shè)計(jì)模式的作用?
- 如果有1000萬(wàn)個(gè)Int類型的數(shù)字斥季,如何對(duì)他們排序训桶?
- 設(shè)計(jì)一套數(shù)據(jù)庫(kù)方案,實(shí)現(xiàn)類似微信的搜索關(guān)鍵詞能快速檢索出包含該字符串的聊天信息,并展示對(duì)應(yīng)數(shù)量(聊天記錄的數(shù)據(jù)量較大)舵揭。
- iOS系統(tǒng)代碼中使用了哪些設(shè)計(jì)模式慰照?
其他開(kāi)發(fā)技能
- Lottie實(shí)現(xiàn)動(dòng)畫效果的原理是什么?
- OClint實(shí)現(xiàn)靜態(tài)分析的原理是什么琉朽,它是如何做到的毒租?
- MVVM和MVC有什么區(qū)別?
- 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的區(qū)別是什么箱叁?
- 了解Flutter嗎墅垮?它有沒(méi)有使用UIKit?它是如何渲染UI的耕漱?
- 二進(jìn)制重排的核心依據(jù)是什么算色?
- 如何設(shè)計(jì)一套切換主題的方案?
- AVPlayer和IJKPlayer有什么區(qū)別螟够?用IJKPlayer如何實(shí)現(xiàn)一個(gè)緩存視頻列表每條視頻前1s的內(nèi)容灾梦?
- 類似微博的短視頻列表,滑動(dòng)停留播放妓笙,如何實(shí)現(xiàn)若河?
- 使用python做過(guò)哪些事?如何理解腳本語(yǔ)言寞宫?
- 簽名文件里面有啥
- ipa是怎么校驗(yàn)簽名的
- 線上的webview怎么去調(diào)試,除了用safari瀏覽器的開(kāi)發(fā)者模式還有別的么
數(shù)據(jù)結(jié)構(gòu)與算法
- 什么是Hash表萧福,什么是Hash碰撞,解決Hash碰撞有什么方法辈赋?
- 如何遍歷二叉樹(shù)鲫忍?
- 簡(jiǎn)述下快速排序的過(guò)程,時(shí)間復(fù)雜度是多少钥屈?
- 有一個(gè)整數(shù)數(shù)組悟民,如何只遍歷一遍就實(shí)現(xiàn)讓該數(shù)組奇數(shù)都在前面,偶數(shù)都在后面篷就?
- 假設(shè)你正在爬樓梯射亏。需要 n 階你才能到達(dá)樓頂。每次你可以爬 1 或 2 個(gè)臺(tái)階腻脏。你有多少種不同的方法可以爬到樓頂呢鸦泳?
- 給出一個(gè) 32 位的有符號(hào)整數(shù),你需要將這個(gè)整數(shù)中每位上的數(shù)字進(jìn)行反轉(zhuǎn)永品。leetcode 7
- 有紅做鹰、黃、藍(lán)三種顏色的氣球鼎姐。在偶佤铮客王國(guó)更振,1個(gè)紅氣球+1個(gè)黃氣球+1個(gè)藍(lán)氣球可以兌換一張彩票。
2個(gè)紅氣球+1個(gè)黃氣球可以兌換1個(gè)藍(lán)氣球饭尝。
2個(gè)黃氣球+1個(gè)藍(lán)氣球可以兌換1個(gè)紅氣球肯腕。
2個(gè)藍(lán)氣球+1個(gè)紅氣球可以兌換1個(gè)黃氣球。
現(xiàn)在牛牛有a個(gè)紅氣球钥平,b個(gè)黃氣球实撒, c個(gè)藍(lán)氣球,牛牛想知道自己最多可以兌換多少?gòu)埐势薄?/li>
軟技能
- 做過(guò)哪些工作職責(zé)之外的事情涉瘾?
- 經(jīng)歷過(guò)最難的一次業(yè)務(wù)開(kāi)發(fā)是什么樣的知态,最終怎么解決的?
- 最近有學(xué)習(xí)什么新技術(shù)嗎立叛?有何收獲负敏?
- 你最擅長(zhǎng)iOS哪方面的知識(shí)?怎么體現(xiàn)出來(lái)的秘蛇?
- 常用哪些開(kāi)源庫(kù)其做,有沒(méi)有研究過(guò)他們的原理?
- 如何保持個(gè)人成長(zhǎng)赁还?