iOS學(xué)習(xí)筆記(9-2)

1.音視頻方向有了解過什么東西么?

2.簡歷中寫了足跡繪制多邊形的,介紹下如何繪制的。曲線是怎么繪制的?

使用CAShapeLayer進行繪制,比如使用

3.簡歷中寫了動態(tài)貼紙相關(guān)的,介紹下實現(xiàn)原理。

4.有一個列表頁,數(shù)據(jù)有很多種類型,類型在產(chǎn)品迭代中會增加,對應(yīng)的每個cell上都會有很多種操作(比如cell會代理出去),設(shè)計一種模式,要求簡潔,實現(xiàn)這種結(jié)構(gòu)。

可以通過工廠模式進行設(shè)計,然后通過分類,或者將方法抽離成一個工具類,進行方法的操作和擴展。

5.介紹簡歷中寫的直播業(yè)務(wù)中相對復(fù)雜業(yè)務(wù)的實現(xiàn)邏輯。中間穿插幾個問題:1、如果送禮后,網(wǎng)絡(luò)比較差,服務(wù)端沒有收到,這時候又送了一個禮物,如何處理?2、IM長連接你們用的什么協(xié)議?3、設(shè)置mask設(shè)置透明度有什么影響?

6.寫快排。時間復(fù)雜度?什么時候時間復(fù)雜度是n2?

快速排序其實就是分而治之的方法。

7.堆的數(shù)據(jù)結(jié)構(gòu)有什么特點?怎么去實現(xiàn)一個堆?如果有一個堆對象,它會有哪些方法,每個方法的參數(shù)、返回值和對應(yīng)的功能是啥?

堆就是用數(shù)組實現(xiàn)的二叉樹,所以它沒有使用父指針或者子指針。堆根據(jù)“堆屬性”來排序,“堆屬性”決定了樹中節(jié)點的位置。

算法題:

8.一個棧中元素的類型為整型,現(xiàn)在想將該棧從頂?shù)降装磸拇蟮叫〉捻樞蚺判?,只許申請一個棧(也就是有兩個棧)。除此之外,可以申請新的變量,但不能申請額外的數(shù)據(jù)結(jié)構(gòu)。如何完成排序?例:輸入[5,8,4,3,6],輸出[8,6,5,4,3]

9.多線程有什么實際的應(yīng)用么?

10.主線程同步sync到主線程為什么死鎖?

11.什么隊列可以死鎖?

造成死鎖的原因,串行中同步,還有就是線程互相依賴。

12.并發(fā)隊列可以死鎖么?

13.非主線程async到主隊列中,這種場景為了啥,可以舉幾個例子。

為了在主線程中刷新UI。
安全+效率:因為UIKit框架不是線程安全的框架,當(dāng)在多個線程進行UI操作,有可能出現(xiàn)資源搶奪,導(dǎo)致問題。其實:在子線程是不能更新UI的, 看到能更新的結(jié)果只是個假象。
比如addObject必須在一個線程進行操作,NSMutableArray是線程不安全的,當(dāng)有多個線程同時對數(shù)組進行操作的時候可能導(dǎo)致崩潰或數(shù)據(jù)錯誤。

14.為啥不能在分類中添加屬性?

ivars是objc_ivar_list(成員變量列表)指針;methodLists是指向objc_method_list指針的指針。在Runtime中,objc_class結(jié)構(gòu)體大小是固定的,不可能往這個結(jié)構(gòu)體中添加數(shù)據(jù),只能修改。所以ivars指向的是一個固定區(qū)域,只能修改成員變量值,不能增加成員變量個數(shù)。methodList是一個二維數(shù)組,所以可以修改*methodLists的值來增加成員方法,雖沒辦法擴展methodLists指向的內(nèi)存區(qū)域,卻可以改變這個內(nèi)存區(qū)域的值(存儲的是指針)。因此,可以動態(tài)添加方法,不能添加成員變量。

15.以下代碼的執(zhí)行結(jié)果

這個會輸出什.jpg

并不會產(chǎn)生死鎖,順序執(zhí)行,并且在dispatch_async會開辟一個新的線程,同步執(zhí)行,所以應(yīng)該是10分鐘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容