2019年底在北京面試兩天 - 5家公司,無一例外的被面試官鄙視了哟绊。特此吸收教訓北救,做此總結(jié)。
網(wǎng)絡(luò)編程:http / https / tcp/ip / socket 網(wǎng)絡(luò)編程這塊是一塊大石頭诅妹。希望日后能撿起來吧罚勾。
數(shù)據(jù)結(jié)構(gòu) + 算法 + 網(wǎng)絡(luò)編程:對我而言的三座大山。runtime底層:在剛畢業(yè)的時候 準備的面試題是:什么是runtime吭狡。那時候只需要答一答定義就好尖殃。
現(xiàn)在的問題是:你的項目中哪塊用到了runtime。你的項目中哪里用到了kvc(調(diào)取私有屬性) kvo(屬性值監(jiān)聽)method swapping(方法交換) 關(guān)聯(lián)對象 動態(tài)創(chuàng)建類赵刑、方法
--- 其中一個面試官還問到了 objc_msgSend() 有哪三步分衫?
1。 消息發(fā)送 :查找方法緩存列表 - 查找方法列表 - 父類方法列表(查到后會塞進緩存般此,然后返回方法)
2蚪战。動態(tài)解析 --- method resolved 消息決議牵现,實現(xiàn)方法返回要決議的方法。
3邀桑。消息轉(zhuǎn)發(fā) --- 實現(xiàn)方法返回 target/selector 瞎疼。
最后,如果都沒實現(xiàn) 拋出unrecognized selector壁畸。多線程:必問贼急。thread / gcd / operation qeueu 區(qū)別聯(lián)系。
這里可能會出題來實際考察:自己總結(jié)了一個竅門吧捏萍,應該會有點用太抓。
多線程無非就是兩點:1隊列 2任務。
首先考慮任務順序令杈,是不是必須一個執(zhí)行完才能執(zhí)行另一個走敌。判斷出是串行隊列還是并行隊列。
再者是任務方式:線程執(zhí)行a的時候逗噩,能不能同時執(zhí)行b掉丽。判斷是同步任務還是異步任務。設(shè)計模式:mvc mvvm 單例 代理异雁。
會問你 mvvm 捶障。還有單例在哪里用過。block是oc對象纲刀。什么是block值截獲项炼。 block為什么要用copy。
load initialize
線程安全:atomic / lock / gcd_sync / @ synchronized
table view 的優(yōu)化柑蛇!必問芥挣!滾動視圖的卡頓!必問耻台!
cell復用
cell高度緩存
復雜視圖的優(yōu)化(圓角空免、陰影會觸發(fā)離屏渲染)還問到了什么是離屏渲染
異步繪制圖片 這里提到了將所有控件繪制到一張圖片中,還挺厲害的
9.runloop 這個問的比較少 只有一個面試官問到了幾個模式盆耽,平時幾乎也用不到蹋砚。
10 array dictionary set 的理解:基本知識 + 空間復雜度
11 弱引用 循環(huán)引用 weak -> 這個太靈活 可以問的點太多
零星東西:
a。方法交換要用gcd_once處理摄杂,保證類的唯一性坝咐。
b。項目中哪里用到了分類(面試官提到了frame坐標轉(zhuǎn)換析恢,這個當時人家也不告訴我墨坚,我到現(xiàn)在也不知道)。
c映挂。還有一位面試官問到了 clang泽篮。有這么個東西 一般情況也就是用看下編譯為c++的源碼盗尸,用來擴展視野
d。還有一個問題是 請求用到的userid存在哪里帽撑?我說userDefault泼各,面試官說性能會變差,然后也不告訴我應該存在哪里亏拉,煩請看到的同學留言告訴我扣蜻,共同進步。
突然想到及塘,這貨可以成為一個單例類莽使。
e。static作用
f笙僚。還提到了為什么直接用autolayout比frame耗能吮旅。
g。圖片的異步繪制
h味咳。安裝包的優(yōu)化