字節(jié)跳動(dòng)(視頻面試2020-03)

1翅溺、UI渲染為什么要放在主線程中?
- UIKit不是線程安全的;
- UI操作涉及到渲染訪問各種View對象的屬性髓抑,如果是異步操作會(huì)有讀寫問題咙崎;
- 如果加鎖,性能損耗大(視圖層次深吨拍、屬性多)褪猛;
所以,主線程操作UI羹饰,是約定俗稱的開發(fā)規(guī)則

2伊滋、TCP三次握手和四次揮手
- 第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài)队秩,等待服務(wù)器確認(rèn)笑旺;
- 第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1)馍资,同時(shí)自己也發(fā)送一個(gè)SYN包筒主,即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN+RECV狀態(tài);
- 第三次握手:客戶端收到服務(wù)器的SYN+ACK包乌妙,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1)使兔,此發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài)冠胯,完成三次狀態(tài)火诸。
- 第一次揮手:客戶端向服務(wù)器發(fā)送FIN包,表示自己沒有數(shù)據(jù)要發(fā)送了荠察;
- 第二次揮手:服務(wù)器收到FIN包置蜀,回復(fù)FIN ACK,表示收到了FIN包悉盆,不會(huì)在接收數(shù)據(jù)了盯荤;
- ??服務(wù)器在發(fā)完FIN ACK后,可能還有數(shù)據(jù)要發(fā)給客戶端焕盟,這個(gè)數(shù)據(jù)是不能停止發(fā)送的秋秤,有數(shù)據(jù)還是需要繼續(xù)發(fā)送;
- 第三次揮手:服務(wù)器發(fā)完了數(shù)據(jù)脚翘,也發(fā)出FIN包灼卢,告訴客戶端自己的數(shù)據(jù)發(fā)送完了,不再發(fā)送數(shù)據(jù)来农;
- 第四次揮手:客服戶收到服務(wù)器發(fā)送的FIN包鞋真,知道服務(wù)器沒有數(shù)據(jù)要發(fā)送了,回復(fù)FIN ACK沃于,此時(shí)斷開連接涩咖。
為什么要多次確認(rèn)呢?

TCP 是傳輸層的協(xié)議繁莹,是建立在物理層檩互、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層之上的協(xié)議咨演,
而底層的網(wǎng)絡(luò)是不可靠的闸昨,可能路由、網(wǎng)關(guān)薄风、網(wǎng)線出問題零院,客戶端沒法保證自己發(fā)出來的消息服務(wù)器一定能收到。
所以一定要反饋機(jī)制村刨,即 ACK告抄,這樣才能在不可靠的網(wǎng)絡(luò)層智商構(gòu)建可靠的傳輸層。
建連只需要交互三次嵌牺,斷連卻需要四次打洼,這是為什么呢龄糊?

- 建連的時(shí)候,只要雙方都告知對方自己準(zhǔn)備好了就可以募疮;
- 斷連的時(shí)候炫惩,一方提出要斷開連接,不再發(fā)數(shù)據(jù)阿浓,另一方不能立即斷開他嚷,
因?yàn)檫@一方可能還有數(shù)據(jù)要發(fā)送,直到數(shù)據(jù)全部發(fā)送完成后才能確認(rèn)斷開芭毙。

3筋蓖、GCD定時(shí)器和NSTimer有什么不同
- NSTimer需要一個(gè)運(yùn)行的Runloop 來處理其定時(shí)任務(wù), MainThread是一直啟動(dòng)并運(yùn)行的,所以在自定的線程如果使用NSTIme必須手動(dòng)開啟并運(yùn)行子線程的Runloop;
- NSTimer必須調(diào)用invalidate來停止其定時(shí)任務(wù),并且NSTimer 對其Target是強(qiáng)引用,要注意Target 與 - NSTimer間造成的循環(huán)引用造成的內(nèi)存泄漏(可以封裝成一個(gè)類方法來解決此問題);
- NSTimer的創(chuàng)建和 invalidate必須放在相同的線程中進(jìn)行

- GCDTimer 是基于GCD實(shí)現(xiàn)的,使用的時(shí)候只要我們把任務(wù)提交給相應(yīng)隊(duì)列就好;
- GCDTimer 在使用時(shí)要注意 dispatch_resume(obj) dispatch_suspend(obj) -dispatch_source_cancel(obj)API 的使用
- GCDTimer 在對文件資源定期進(jìn)行讀寫操作時(shí)很方便,其他與NSTimer使用場景差不多

4、https原理

必看文章一
必看文章二

  • 4.1退敦、為什么用了HTTPS 就是安全的粘咖?HTTPS 的底層原理如何實(shí)現(xiàn)?用了 HTTPS 就一定安全嗎侈百?

??大家可能都聽說過 HTTPS 協(xié)議之所以是安全的瓮下,是因?yàn)镠TTPS協(xié)議會(huì)對傳輸?shù)臄?shù)據(jù)進(jìn)行加密,而加密過程是使用了非對稱加密實(shí)現(xiàn)钝域。
??但其實(shí)讽坏,HTTPS 在內(nèi)容傳輸?shù)募用苌鲜褂玫氖菍ΨQ加密,非對稱加密只作用在證書驗(yàn)證階段例证。

HTTPS 的實(shí)現(xiàn)原理.png
  • 4.2震缭、證書驗(yàn)證階段:
1、瀏覽器發(fā)起 HTTPS 請求战虏;
2、服務(wù)端返回 HTTPS 證書党涕;
3烦感、客戶端驗(yàn)證證書是否合法,如果不合法則提示告警
  • 4.3膛堤、數(shù)據(jù)傳輸階段:
1手趣、當(dāng)證書驗(yàn)證合法后,在本地生成隨機(jī)數(shù)肥荔;
2绿渣、通過公鑰加密隨機(jī)數(shù),并把加密后的隨機(jī)數(shù)傳輸?shù)椒?wù)端燕耿;
3中符、服務(wù)端通過私鑰對隨機(jī)數(shù)進(jìn)行解密;
4誉帅、服務(wù)端通過客戶端傳入的隨機(jī)數(shù)構(gòu)造對稱加密算法淀散,對返回結(jié)果內(nèi)容進(jìn)行加密后傳輸
  • 4.4右莱、數(shù)據(jù)傳輸階段
為什么數(shù)據(jù)傳輸是用對稱加密?
- HTTP 的應(yīng)用場景中通常端與端之間存在大量的交互,非對稱加密的加解密效率是非常低的;
- 另外档插,在 HTTPS 的場景中只有服務(wù)端保存了私鑰慢蜓,一對公私鑰只能實(shí)現(xiàn)單向的加解密
所以 HTTPS 中 ***內(nèi)容傳輸*** 加密采取的是對稱加密,而不是非對稱加密郭膛。
  • 4.5晨抡、本地隨機(jī)數(shù)被竊取怎么辦?

??證書驗(yàn)證是采用非對稱加密實(shí)現(xiàn),但是傳輸過程是采用對稱加密则剃,而其中對稱加密算法中重要的隨機(jī)數(shù)是由本地生成并且存儲(chǔ)于本地的耘柱,HTTPS 如何保證隨機(jī)數(shù)不會(huì)被竊取?
??其實(shí) HTTPS 并不包含對隨機(jī)數(shù)的安全保證,HTTPS 保證的只是傳輸過程安全忍级,而隨機(jī)數(shù)存儲(chǔ)于本地帆谍,本地的安全屬于另一安全范疇,應(yīng)對的措施有安裝殺毒軟件轴咱、反木馬汛蝙、瀏覽器升級修復(fù)漏洞等.


5、Charles抓包原理

??HTTPS 的數(shù)據(jù)是加密的朴肺,常規(guī)下抓包工具代理請求后抓到的包內(nèi)容是加密狀態(tài)窖剑,無法直接查看。但是戈稿,瀏覽器只會(huì)提示安全風(fēng)險(xiǎn)西土,如果用戶授權(quán)仍然可以繼續(xù)訪問網(wǎng)站,完成請求鞍盗。
??因此需了,只要我們自己的客戶端在授權(quán)的情況下,便可以組建中間人網(wǎng)絡(luò)般甲,而抓包工具便是作為中間人的代理肋乍。
??通常HTTPS抓包工具的使用方法是會(huì)生成一個(gè)證書,用戶需要手動(dòng)把證書安裝到客戶端中敷存,然后終端發(fā)起的所有請求通過該證書完成與抓包工具的交互墓造。
??然后抓包工具再轉(zhuǎn)發(fā)請求到服務(wù)器,最后把服務(wù)器返回的結(jié)果在控制臺(tái)輸出后再返回給終端锚烦,從而完成整個(gè)請求的閉環(huán)觅闽。

  • 5.1、既然HTTPS不能防抓包涮俄,那 HTTPS 有什么意義?

??HTTPS可以防止用戶在不知情的情況下通信鏈路被監(jiān)聽蛉拙,對于主動(dòng)授信的抓包操作是不提供防護(hù)的,因?yàn)檫@個(gè)場景用戶是已經(jīng)對風(fēng)險(xiǎn)知情彻亲。
??要防止被抓包刘离,需要采用應(yīng)用級的安全防護(hù)室叉,例如采用私有的對稱加密,同時(shí)做好移動(dòng)端的防反編譯加固硫惕,防止本地算法被破解茧痕。

https 通信流程
Charles 抓包原理

6、說說你知道的線程鎖
常用:@synchronized恼除、NSLock踪旷、dispatch_semaphore
不常用:OSSpinLock、pthread_mutex豁辉、NSCondition令野、NSRecursiveLock等等

具體可以看看這篇文章:iOS 開發(fā)中的八種鎖


7、UITableView卡頓是如何優(yōu)化的
- 可通過Instruments測試FPS徽级,確保刷新幀率在 60+/s 
- 要想滾動(dòng)UITableView流暢气破,關(guān)鍵的在創(chuàng)建cell或者從緩存池取cell時(shí),讓系統(tǒng)花費(fèi)最少的時(shí)間餐抢,

即盡可能的減少顯示cell的計(jì)算量现使。

主要目的是減少CPU的占用使用,圖像繪制的原理大體可以概括為CPU計(jì)算布局旷痕,GPU進(jìn)行圖像繪制碳锈,當(dāng)在下一幀到來之前CPU占用時(shí)間太長的話,留給
1欺抗、緩存行高
舉個(gè)簡單的栗子: 如果現(xiàn)在要顯示100個(gè)Cell售碳,當(dāng)前屏幕顯示5個(gè)。

- 全局刷新UITableView時(shí):
會(huì)先調(diào)用100次tableView:heightForRowAtIndexPath绞呈,然后調(diào)用5次tableView:cellForRowAtIndexPath

- 滾動(dòng)屏幕時(shí):
當(dāng)Cell滾入屏幕贸人,都會(huì)調(diào)用一次tableView:heightForRowAtIndexPath和tableView:cellForRowAtIndexPath

所以,要提前計(jì)算并緩存好高度佃声,因?yàn)閔eightForRowAtIndexPath:是調(diào)用最頻繁的方法
2艺智、不要?jiǎng)討B(tài)創(chuàng)建子視圖
Cell所有的子視圖都預(yù)先在初始化方法中創(chuàng)建。如果根據(jù)實(shí)際情況不需要顯示的可以設(shè)置hidden秉溉。
這樣能盡可能的減少Cell創(chuàng)建或從緩存池取時(shí)因?yàn)椴季肿涌丶牡臅r(shí)間。
3碗誉、所有的子視圖都必須指定背景顏色(可能會(huì)為你造成這種現(xiàn)象的原因)
相信很多程序員在開發(fā)時(shí)經(jīng)常會(huì)遇到這種情況,當(dāng)從某個(gè)控制器A跳轉(zhuǎn)到下一個(gè)控制器B時(shí),若B控制器的view未設(shè)置背景顏色,跳轉(zhuǎn)時(shí)會(huì)有卡頓現(xiàn)象召嘶。
cell也一樣,若控件未指定背景顏色,會(huì)影響tableView滾動(dòng)的流暢度。
4哮缺、所有的顏色都不要使用alpha
控件如有透明度,會(huì)顯示底部控件的部分輪廓,系統(tǒng)在顯示cell時(shí),需要計(jì)算各控件間的疊加面積,顏色的透明度等;
但如果所有控件顏色不透明,則不需要耗費(fèi)性能去計(jì)算,能節(jié)省大量時(shí)間.
5弄跌、異步繪制
如果Cell 比較復(fù)雜,可以設(shè)置cell圖層的屬性 self.layer.drawsAsynchronously = YES;
6尝苇、UITableview加載圖片的時(shí)候使用懶加載模式和異步加載模式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铛只,一起剝皮案震驚了整個(gè)濱河市埠胖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淳玩,老刑警劉巖直撤,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愈污,死亡現(xiàn)場離奇詭異段多,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)遭庶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門承匣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蓖乘,“玉大人,你說我怎么就攤上這事韧骗〖问悖” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵袍暴,是天一觀的道長些侍。 經(jīng)常有香客問我,道長容诬,這世上最難降的妖魔是什么娩梨? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮览徒,結(jié)果婚禮上狈定,老公的妹妹穿的比我還像新娘。我一直安慰自己习蓬,他們只是感情好纽什,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著躲叼,像睡著了一般芦缰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枫慷,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天让蕾,我揣著相機(jī)與錄音,去河邊找鬼或听。 笑死探孝,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的誉裆。 我是一名探鬼主播顿颅,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼足丢!你這毒婦竟也來了粱腻?” 一聲冷哼從身側(cè)響起庇配,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绍些,沒想到半個(gè)月后捞慌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遇革,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年卿闹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萝快。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锻霎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出揪漩,到底是詐尸還是另有隱情旋恼,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布奄容,位于F島的核電站冰更,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏昂勒。R本人自食惡果不足惜蜀细,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望戈盈。 院中可真熱鬧奠衔,春花似錦、人聲如沸塘娶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刁岸。三九已至脏里,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虹曙,已是汗流浹背迫横。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酝碳,地道東北人矾踱。 一個(gè)月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像击敌,于是被迫代替她去往敵國和親介返。 傳聞我的和親對象是個(gè)殘疾皇子拴事,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

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