阿里騰訊頭條美團等iOS面試總結

Geek.發表於2019-04-23

美團

一面

1、簡歷上寫的專案問了一遍,然後開始問知識點。

2、volley的原始碼,在圖片快取部分討論了挺長時間,http中快取機制,

3、視覺控制器的生命週期

4、資料庫

5、多執行緒(NSTread、NSOPeration、GCDA+block)

6、http協議get post的區別

7、手機適配一些方案

8、真機除錯、專案上線注意事項

9、靜態方法是否能被重寫

這些大概聊了1個半小時,開始的時候還有些緊張,慢慢聊開了,就好多了,面試官的語速有點快,老是需要面試官重複一遍,我也不經意間語速也變快了,不過能看出來面試官還是很厲害的。

二面

1、id和nill代表什麼(nill和NULL的區別)

2、向一個nill物件傳送訊息會發生什麼?

3、http中的同步和非同步

4、MVC 和 MVVM 的區別。

用 MVVM 實現一個業務。VC 是入口,VC1 顯示 “省” 的列表,VC2 顯示省關聯的 “市” 的列表,VC3 顯示市關聯的 “縣” 的列表。VC 到 VC1,VC1到 VC2,VC2 到 VC3,VC3 再跳轉到 VC。相關點在於如何設計 ViewModel 和 Model ,以及 VC3 到 VC。

如何編寫單元測試,比如寫了一個網路庫,如何測試該網路庫,用例怎麼寫的更全面一些。

程式碼從 Git 上拉下來到生成 .ipa 都有哪些過程,期間都生成了什麼檔案。

最近讀過哪些書,看過哪些框架,有什麼收穫。

談到 JSPatch,問 JSPatch 是如何處理 Block 的。

自己擅長的地方。

遇到過什麼樣的挫折。

新增二面被問到的問題:如果沒有instruments,該如何檢測memory leak, zombie object 之類的問題。

三面

1、iOS是如何進行資源管理的。

2、Python比較重要的幾個特性

3、網路五層結構,每一層協議,由於我網路不是很好,還問了一些其他的問題(例如MAC地址和ip地址的區別等)。

先談了下前兩面的感受和問題,又和麵試官聊到了單例和全域性變數的區別。

Block和Protocol的區別,Block是為了解決什麼問題而使用的。

iOS 的設計模式。iOS 為什麼沒有類似於 Java 和 C 之類的 “Builder” 的構造模式。

冒泡、插入、快速排序的平均時間複雜度和最壞時間複雜度。

堆排序。

有時間複雜度為 O(n) 的排序嗎?

最近從 stackOverFlow 上解決過的問題,讀過的開源框架,讀過的書,業餘興趣,最有成就感的事情。

阿里

一面

1、介紹專案

2、在KVO中,他是怎麼知道監聽的物件發生了變化?

3、字典的工作原理 ?怎100w箇中是怎麼快速去取value?

4、一個上線的專案,知道這個方法可能會出問題,在不破壞改方法前提下,怎麼搞?

5、Block和函式指標的區別?

6、效能優化

7、YYModel和AF原始碼

8、如何自己設計json轉model

9、架構

他們的面試官好像都愛問一下底層的東西,比如這次面試上來機會問我KVO的問題。

問題【1】,看著好像很吊的樣子,仔細一樣不去思考,可能還真不是太瞭解,

問題【2】,這個就是純純的資料結構的問題了。

問題【3】,這個就是iOS的runTime的問題了,要只要isa,和一些swizzling技術

問題【4】,就是看你瞭解有多廣泛了。

二面

1、淺拷貝和深拷貝的區別

2、Block的迴圈引用、如何解決、原理

3、Block和delegate的比較

4、kvo的實現原理

5、Autorelease pool的實現原理

6、訊息轉發機制

7、執行緒死鎖的四個條件

8、程式和執行緒的區別

9、持久化

10、事務的特徵

中途還討論了Masonry的約束應該寫在哪裡,我說應該寫在layoutSubViews,他說會呼叫多次,然後爭論了一會兒

三面

主要問了專案的一些東西 和給一些場景問我如何實現

自我介紹 介紹一些專案難點

主執行緒是相對於什麼而言的

一張圖片的記憶體佔用大小是由什麼決定的

索引的作用

索引的優缺點

在陣列中找最小的k個數

淘寶下拉載入更多如何優化

淘寶頁面傳送HTTP請求的過程

介紹一下MVVM

知道哪些設計模式

三面面試官主要就聊了一些具體場景問題和一些基礎,基礎應該是沒太大問題。

頭條

一面

自我介紹

專案相關

怎麼自定義導航跳轉

談談runtime的理解

KVC的用途

使用method swizzling要注意什麼?(進行版本迭代的時候需要進行一些檢驗,防止系統庫的函式發生了變化)

談對引用計數的理解

談談runloop的理解

runloop有哪些狀態

autoreleasepool的使用場景

TableView優化,怎麼減少卡頓

copy assign retain weak關鍵詞

JSON轉Model

程式碼佈局

多螢幕適配

HTTP2

HTTP請求頭和響應頭

Cookie

NSCache

自己設計一個快取器

怎麼實現LRU

SDWebImage

二叉樹先序遍歷(遞迴和非遞迴)

二面

MVC的一些缺點

講一講其它架構

你知道哪些編碼方式

演算法字串翻轉

多執行緒的方式和它們的區別

佇列和執行緒的關係

一道執行緒安全的題

有哪些鎖

屬性的關鍵字

assign可以用於OC物件嗎

copy和strong的區別

weak如何實現自動賦nil

為什麼不可變物件要用copy

assing可以使用在物件中嗎

Pod update和pod install的區別

layoutIfNeeded和setNeedsLayout的區別

抓包工具抓取HTTPS的原理

isEquel和hash的關係

bitmap的結構

可變陣列的實現原理

如何hook一個物件的方法,而不影響其它物件

如何避免if else

自旋鎖和互斥鎖的區別

三面

介紹專案,主要介紹自己強項一點的地方

陣列cop后里面的元素會複製一份新的嗎

陣列的淺拷貝與深拷貝

TCP為什麼是三次握手和四次揮手

頭條一直都是視訊面,而且是一條龍服務。總體來說感覺不錯,反正主要就是需要基礎足夠紮實,

百度

一面

1、iOS基礎知識

2、Python基礎知識,大概是多執行緒,執行緒安全,集合類,JVM,類相關知識等。

3、iOS一些原始碼的閱讀

4、優秀的第三方框架原始碼閱讀

5、GLSurfaceView的相關知識,OpenGL,Shader,繪製流程。

6、詢問當前做的專案,以及到具體的實現和優化。

7、多程式間的通訊,Binder機制。

8、詢問看過哪些框架原始碼,EventBus,Volley講了一下。

二面

1、Delegate 、Notification和KVO比較各自的優缺點

2、在一個UI的正中間實現一個正方形的紅色檢視有幾種方式?

3、手觸碰到螢幕的時候,響應機制是怎樣的?第一響應者是誰?追問 UIView和UIResponse的關係是什麼?

4、UIViewController的生命週期是什麼?追問 UIViewController 只alloc而沒用到的時候,

5、UIViewController 的view是否載入了?如果沒有載入那什麼時候載入?

直接用UILabel和自己用DrawRect畫UILabel,哪個效能好?為什麼?哪個佔用的記憶體少?為什麼?

6、AFNetworking是否支援ipv6?

7、專案採用64位,為什麼要用64位?怎麼修改成64位?i386是什麼?他們有什麼關係?

8、iOS的應用程式有幾種狀態?追問,退到後臺程式碼是否可以執行?雙擊home鍵,程式碼是否可以執行?

9、一般使用的圖示記憶體為多大?比如200×300的圖片,記憶體應該佔用多少比較合理?

10、說說你對記憶體洩漏的看法,追問,block為什麼容易引起記憶體洩漏?

11、[object copy]是淺拷貝還是深拷貝?為什麼是淺拷貝?copy是實現了哪個協議?

12、Images.xcassets和直接用圖片有什麼不一樣?

三面

全是問得iOS方面的問題,問得真的很細,需要基礎很紮實,對各個機制真的足夠理解,不然確實有點難回答。

1、記憶體管理方面的

2、多執行緒

3、各種佇列

4、執行緒鎖

5、MVVM

就是考察一下我iOS方面的能力到底是否有水分吧。問得很細,確實需要基礎足夠紮實才行。

騰訊

一面

1、介紹一下實習的專案,任務分工,做了哪些工作?介紹實習內容

2、網路相關的:專案裡面使用到什麼網路庫,用過ASIHTTP庫嗎

3、斷點續傳怎麼實現?需要設定什麼?

4、在杭州HTTP請求伺服器響應快,可能離伺服器距離近,而在深圳訪問就很慢很慢,會是什麼原因?如果使用者投訴,怎麼分析這個問題?

5、HTTP請求的哪些方法用過?什麼時候選擇get、post、put?

6、TCP建立連線的過程,斷開連線的過程,為什麼是四次握手?

7、專案裡面的資料儲存都用了哪些?知道iOS裡面有哪些資料儲存方法?什麼時候該用哪些方法儲存?

8、MVVM如何實現繫結

9、block和通知的區別,分別適用什麼場景

10、演算法。連續問了好幾個,都是陣列,層層遞進的,但是我忘了,只記得最後是找出陣列

11、中重複的數字

12、程式和執行緒的區別

13、程式在執行時作業系統除了分配記憶體空間還有什麼

14、程式間通訊的方式

15、如何檢測應用是否卡頓

16、釋出出去的版本,怎麼收集crash日誌?不使用bugly等第三方平臺或者這些第三方平臺是怎麼收集crash日誌的?

17、在block裡面使用_property會造成迴圈引用嗎?怎麼解決?除了使用self->_property,可以使用valueforkey來訪問嗎 在block裡面可以修改它的值嗎setvalueforkey?可以修改它的值,可以用valueforkey來解決,顯式的的使用self,block外先持有self的弱引用。

二面

1、OC中物件的結構

2、多型

3、Ping是什麼協議

4、知道MTU嗎

5、ARC和MRC的本質區別是什麼?

6、NSThread,GCD,NSOperation相關的。開啟一條執行緒的方法?執行緒可以取消嗎?

7、子執行緒中呼叫connection方法,為什麼不回撥?因為沒有加入runloop,執行完任務就銷燬了,所以沒有回撥。

8、MVC和MVVM的區別

9、瞭解哪些設計模式

10、存一個通訊錄,包括增刪改查,用什麼資料結構

11、autorelease變數什麼時候釋放?手動新增的是大括號結束的時候釋放,系統自動釋放是在12、當前runloop迴圈結束的時候

13、那子執行緒中的autorelease變數什麼時候釋放?

14、子執行緒裡面,需要加autoreleasepool嗎

15、GCD和NSOperation的區別?

16、專案裡面遇到過死鎖嗎?怎麼解決?資料庫訪問本來就是執行緒安全的,不會造成死鎖啊。什麼是死鎖?

17、Viewcontroller的生命週期?

18、在init方法裡面,設定背景顏色,會生效嗎 會生效。為什麼會?

19、WWDC2016公佈了哪些新特性?對蘋果系列的最新特性有關注嗎

20、看過哪些原始碼,講講思路

21、兩個連結串列找第一個相同結點

22、字串旋轉

23、找連結串列的倒數第k個結點

24、把一個連結串列比某個值大的放在左邊,比它小的放在右邊

25、二叉樹的中序遍歷,非遞迴

此文章源自第三方轉載

相關文章