天天看點

自己面試大廠iOS開發的心得以及一些面試題

前期準備

        從去年換了一家公司後,開始有空餘的時間,然後就開始研究一些OC的底層原理。當時隻是走馬觀花的看了遍視訊,是以記得不是特别深刻。

        後來flutter聽說特别火,就又去學了幾個月flutter,到自己嘗試可以寫一些demo之後,把現有的項目用flutter寫了大緻流程之後,就再也沒碰過了。再後來,機緣巧合吧,看到戴銘老師的一篇文章,要想走的遠,還是學好基礎,是以重新去跟着視訊學習底層,這回就比較認真一點,看完後會記錄在部落格中,也算小有成就吧。學完感覺自己的技術有了很大的提升,雖然視訊裡面還是有很多細節沒有記住,但是大部分基礎原理都是掌握了,可以描述出來。而且,某些技術點也自己嘗試用在了自己的項目中,某些優化,雖然效果甚微,但是技術點還是很突出的。

        然後開始不滿足現狀,想追求一個更好的發展平台,于是開始了求職之旅。這裡一定要注意,你的履歷一定要符合現實,而且你履歷描述的點,基本上都會過問一遍,自己準備好,我就吃了這個的虧,錯過了一些公司。我自己的履歷上,把使用到的二進制重排這個技術點也寫在履歷上,還有懂得些底層原理,就這樣有幾個突出的技術點,我的履歷被很多大公司篩選通過了,但是接下來才是噩夢,我有些高估了自己的水準。

        大廠問的問題都特别的深入,從app啟動過程dyld做了什麼,預編譯的時候做了什麼,再到各種技術點的底層原理,比如kvc、kvo、通知啊什麼的,有些還會根據某些原理,讓你去想想實際的應用,比如網易的大佬問的,contentsize實作的原理,又給我舉例,frame和bounds的差別,我們都知道是基于參考坐标不一樣,那麼它對應的具體應用是什麼呢,這個就是contentsize的原理,基于自己的坐标,更改位置,進而産生滑動的效果。再有,會問你閱讀過哪些三分架構,常見的afn、sdwebimage基本上都可以去看看,裡面的設計模式,這麼設計的好處,好處基本上都是基于六大設計原則,記憶體管理,什麼時候銷毀緩存的圖檔之類的,提前準備好被問。

        總之,就是底層一定要紮實,我自己是3年的ios工作經驗,之前一直都是混迹于小公司,2年的ui仔,然後開始學習底層,買了一些課程,才接觸到世界。其次,你的履歷上寫的,一定要對應好每一個點,都準備好被提問,因為面試官面試你,最開始的就是履歷篩選,然後通過履歷去了解你的技術深度,再做額外拓展。

面試題

0、深copy和淺copy

1、load方法在什麼時候調用 initialize又是什麼時候調用 差別

2、runtime是什麼

3、方法的本質,sel是什麼,imp是什麼,兩者的關系

4、能否向編譯後得到的類中增加執行個體變量?能否運作時建立的類中添加執行個體變量?

5、[self class][super class]

6、weak原理,為什麼可以自動置為nil

7、線程與程序的關系 線程的同步方案

8、block?循環引用,__block 

9、如何解決循環引用

10、tablevie的重用機制

11、wkwebview與h5互動

12、記憶體5大區 (堆和棧的差別)

13、記憶體管理方式

14、資料存儲方式

15、property的本質

16、isa指針

17、什麼是runloop

18、uiview和calayer的關系

19、自動釋放池原理

20、分類的作用 和拓展的差別

21、關聯對象 原理

22、tcp和udp

23、為什麼會離屏渲染 可能的原因

24、單利 優缺點

25、kvo、kvc 原理

26、mvc、mvvm mvp,優缺點

27、通知的原理 通知對對象是強引用還是弱引用

28、@asycnized原理

29、了解那些跨平台開發,以及對應的優缺點,flutter為什麼比其他跨平台好

30、flutter混合開發(如何與原生互動,幾種方式)

31、apns 通知的原理

32、sdimage的原理,以及其中圖檔的銷毀機制

33、strong和copy

34、assign和weak 如果用assign修飾了對象會怎麼樣

35、編譯原理

36、簽名機制

37、工廠模式和抽象工廠模式

38、js橋原理  怎麼去觸發回調(如何觸發多線程)

39、常用的加密算法(md5 、rsa、des 、3des,以及一些雜湊演算法)

40、.a和.framework

41、bounds和frame uitableview的contentsize 基于bounds

42、斷點下載下傳原理 (再深一層 就是http做了什麼)

43、tableview卡頓可能原因

44、app啟動流程(main函數 dyld做了什麼)

45、啟動優化(二進制重排 及其原理  去除沒有用到的code load)

46、afn這麼設計的原理(或者你自己看過的三分庫,一定要知道原理,然後這麼設計的好處,好處可以參考六大設計準則)

47、簡單的防崩潰(使用hook nsarray的類是根據内容的數量初始化産生的,原理是try catch)

48、符号表内的結構

49、有哪些鎖 (互斥和自旋  有什麼差別 )

50、事件的響應鍊

51、六大設計準則

52、runloop原理 實際應用(卡頓檢測以及它的原理)

53、子線程内使用nstimer會失效

54、與js互動的方式 (webview 内的js橋,注入js代碼等等,還有原生提供的jscore)

55、崩潰的收集,友盟崩潰收集原理(提示要上傳符号表)

56、app的日活量,崩潰率多少優秀

57、多線程使用 nsoperation 和 gcd 

58、資料庫的使用

59、消息機制過程,可以利用消息機制做什麼

60、代碼管理方式,我所在的是用git,在分支上操作

繼續閱讀