如何準備面試?
一、梳理基礎(chǔ)知識
我相信大部分開發(fā)者恐懼面試有一部分原因是由于平時忙于公司項目的業(yè)務(wù)或者界面開發(fā), 對一些計算機基礎(chǔ)知識疏于記憶和理解,往往在面試過程中被面試官問到時,明明有印象但卻表述不出來。所以個人認為在面試準備時做好知識梳理非常重要,我整理了一些基礎(chǔ)知識點:
1、網(wǎng)絡(luò)
TCP/IP 推薦《TCP/IP詳解 卷一》
HTTP協(xié)議結(jié)構(gòu),重用, 緩存,安全傳輸(HTTPS握手機制)
Socket (理解流和包)
序列化協(xié)議 (Protocol Buffer)
2、內(nèi)存管理
推薦《 iOS與OS X多線程和內(nèi)存管理》
理解屬性的不同內(nèi)存管理策略
內(nèi)存布局
循環(huán)引用
弱引用
3、多線程編程
任務(wù)并發(fā)
線程同步
數(shù)據(jù)競爭
鎖
4、基本的數(shù)據(jù)結(jié)構(gòu) (樹/圖/堆就看個人掌握程度,這些必須掌握的)
數(shù)組,隊列,棧
單鏈表/雙向鏈表
哈希表
5、基本的算法
排序
二分
遞歸
哈希
6、界面渲染性能
CPU和GPU負責(zé)的任務(wù)分別是哪些?
如何分析和定位卡頓問題?
如何解決或優(yōu)化復(fù)雜布局下界面卡頓?
在面試前仔細去梳理和回顧這些知識點,把基礎(chǔ)掌握得越扎實,就越能夠提高自信,給面試官留下好印象。并且我建議大家能想一個項目中的具體case來增強你對這些知識的運用,因為也有很多面試官會問到你在項目中的具體應(yīng)用,比如像Runloop , 可以用在處理主線程中分片的耗時任務(wù),通過監(jiān)聽Runloop間隙,將一些需要在主線程中做,但一次做完又會很耗時的任務(wù),切分成小塊Task去執(zhí)行,減少主線程卡頓。同樣還可以用來監(jiān)測應(yīng)用的卡頓情況。所以將知識點發(fā)散到實際的項目或者場景中去解決某個具體的問題也是很重要的一種能力。
過往項目梳理
我在頭條的面試過程中,面試官都有問到過往項目技術(shù)架構(gòu)設(shè)計,以及項目中的一些技術(shù)難點和亮點。個人覺得在準備過程中選取最近的一兩個項目做一個全面的分析是比較重要的,最好是不局限于某個自己寫的功能頁面或模塊,如果能自己在白板上清晰的畫出架構(gòu)設(shè)計圖是最好的,雖然在公司具體開發(fā)中一般都是負責(zé)具體的業(yè)務(wù)模塊,但整體的程序設(shè)計能力在面試中所占配比還是很高的。
數(shù)據(jù)結(jié)構(gòu)和算法
從我最近面試六七家公司的經(jīng)歷來看,包括頭條,騰訊等,現(xiàn)在面試官對于程序員計算機基礎(chǔ)能力的考察是愈來愈重視了, 無論大小互聯(lián)網(wǎng)公司,都會有那么幾道算法題等著你,或筆試中,或面試中讓你解決某個問題,無外乎都是對基本算法和設(shè)計模式的檢驗。比如如何設(shè)計一個表現(xiàn)良好的緩存框架?如何在有限的額外內(nèi)存中進行海量數(shù)據(jù)的排序查找? 不過話說回來,基礎(chǔ)能力在于長期的鞏固與練習(xí),并不能一蹴而就。如果同學(xué)們覺得自己在這方面的基礎(chǔ)比較薄弱的話,可以在LeetCode上多加練習(xí),通過Discuss也可以學(xué)習(xí)到其他人的一些解題思路。在這里推薦一本書《劍指 offer》,如果需要快速準備一下的話不妨看看,會有不少收獲。