iOS技能 - 最新美團(tuán)、百度、騰訊、頭條、阿里 面試題目記錄

美團(tuán)

一面

1、簡歷上寫的項(xiàng)目問了一遍,然后開始問知識(shí)點(diǎn)。

2、volley的源代碼,在圖片緩存部分討論了挺長時(shí)間,http中緩存機(jī)制,

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

4、數(shù)據(jù)庫

5、多線程(NSTread、NSOPeration、GCDA+block)

6、http協(xié)議get post的區(qū)別

7、手機(jī)適配一些方案

8、真機(jī)調(diào)試、項(xiàng)目上線注意事項(xiàng)

9、靜態(tài)方法是否能被重寫

這些大概聊了1個(gè)半小時(shí),開始的時(shí)候還有些緊張,慢慢聊開了,就好多了,面試官的語速有點(diǎn)快,老是需要面試官重復(fù)一遍,我也不經(jīng)意間語速也變快了,不過能看出來面試官還是很厲害的。

二面

1、id和nill代表什么(nill和NULL的區(qū)別)

2、向一個(gè)nill對(duì)象發(fā)送消息會(huì)發(fā)生什么?

3、http中的同步和異步

4、MVC 和 MVVM 的區(qū)別。

用 MVVM 實(shí)現(xiàn)一個(gè)業(yè)務(wù)。VC 是入口,VC1 顯示 “省” 的列表,VC2 顯示省關(guān)聯(lián)的 “市” 的列表,VC3 顯示市關(guān)聯(lián)的 “縣” 的列表。VC 到 VC1,VC1到 VC2,VC2 到 VC3,VC3 再跳轉(zhuǎn)到 VC。相關(guān)點(diǎn)在于如何設(shè)計(jì) ViewModel 和 Model ,以及 VC3 到 VC。

如何編寫單元測(cè)試,比如寫了一個(gè)網(wǎng)絡(luò)庫,如何測(cè)試該網(wǎng)絡(luò)庫,用例怎么寫的更全面一些。

代碼從 Git 上拉下來到生成 .ipa 都有哪些過程,期間都生成了什么文件。

最近讀過哪些書,看過哪些框架,有什么收獲。

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

自己擅長的地方。

遇到過什么樣的挫折。

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

三面

1、iOS是如何進(jìn)行資源管理的。

2、Python比較重要的幾個(gè)特性

3、網(wǎng)絡(luò)五層結(jié)構(gòu),每一層協(xié)議,由于我網(wǎng)絡(luò)不是很好,還問了一些其他的問題(例如MAC地址和ip地址的區(qū)別等)。

先談了下前兩面的感受和問題,又和面試官聊到了單例和全局變量的區(qū)別。

Block和Protocol的區(qū)別,Block是為了解決什么問題而使用的。

iOS 的設(shè)計(jì)模式。iOS 為什么沒有類似于 Java 和 C 之類的 “Builder” 的構(gòu)造模式。

冒泡、插入、快速排序的平均時(shí)間復(fù)雜度和最壞時(shí)間復(fù)雜度。

堆排序。

有時(shí)間復(fù)雜度為 O(n) 的排序嗎?

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

更多精彩內(nèi)容可關(guān)注我的【個(gè)人博客】

阿里

一面

1、介紹項(xiàng)目

2、在KVO中,他是怎么知道監(jiān)聽的對(duì)象發(fā)生了變化?

3、字典的工作原理 ?怎100w個(gè)中是怎么快速去取value?

4、一個(gè)上線的項(xiàng)目,知道這個(gè)方法可能會(huì)出問題,在不破壞改方法前提下,怎么搞?

5、Block和函數(shù)指針的區(qū)別?

6、性能優(yōu)化

7、YYModel和AF源碼

8、如何自己設(shè)計(jì)json轉(zhuǎn)model

9、架構(gòu)

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

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

問題【2】,這個(gè)就是純純的數(shù)據(jù)結(jié)構(gòu)的問題了。

問題【3】,這個(gè)就是iOS的runTime的問題了,要只要isa,和一些swizzling技術(shù)

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

二面

1、淺拷貝和深拷貝的區(qū)別

2、Block的循環(huán)引用、如何解決、原理

3、Block和delegate的比較

4、kvo的實(shí)現(xiàn)原理

5、Autorelease pool的實(shí)現(xiàn)原理

6、消息轉(zhuǎn)發(fā)機(jī)制

7、線程死鎖的四個(gè)條件

8、進(jìn)程和線程的區(qū)別

9、持久化

10、事務(wù)的特征

中途還討論了Masonry的約束應(yīng)該寫在哪里,我說應(yīng)該寫在layoutSubViews,他說會(huì)調(diào)用多次,然后爭論了一會(huì)兒

三面

主要問了項(xiàng)目的一些東西 和給一些場(chǎng)景問我如何實(shí)現(xiàn)

自我介紹 介紹一些項(xiàng)目難點(diǎn)

主線程是相對(duì)于什么而言的

一張圖片的內(nèi)存占用大小是由什么決定的

索引的作用

索引的優(yōu)缺點(diǎn)

在數(shù)組中找最小的k個(gè)數(shù)

淘寶下拉加載更多如何優(yōu)化

淘寶頁面發(fā)送HTTP請(qǐng)求的過程

介紹一下MVVM

知道哪些設(shè)計(jì)模式

三面面試官主要就聊了一些具體場(chǎng)景問題和一些基礎(chǔ),基礎(chǔ)應(yīng)該是沒太大問題。

頭條

一面

自我介紹

項(xiàng)目相關(guān)

怎么自定義導(dǎo)航跳轉(zhuǎn)

談?wù)剅untime的理解

KVC的用途

使用method swizzling要注意什么?(進(jìn)行版本迭代的時(shí)候需要進(jìn)行一些檢驗(yàn),防止系統(tǒng)庫的函數(shù)發(fā)生了變化)

談對(duì)引用計(jì)數(shù)的理解

談?wù)剅unloop的理解

runloop有哪些狀態(tài)

autoreleasepool的使用場(chǎng)景

TableView優(yōu)化,怎么減少卡頓

copy assign retain weak關(guān)鍵詞

JSON轉(zhuǎn)Model

代碼布局

多屏幕適配

HTTP2

HTTP請(qǐng)求頭和響應(yīng)頭

Cookie

NSCache

自己設(shè)計(jì)一個(gè)緩存器

怎么實(shí)現(xiàn)LRU

SDWebImage

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

二面

MVC的一些缺點(diǎn)

講一講其它架構(gòu)

你知道哪些編碼方式

算法字符串翻轉(zhuǎn)

多線程的方式和它們的區(qū)別

隊(duì)列和線程的關(guān)系

一道線程安全的題

有哪些鎖

屬性的關(guān)鍵字

assign可以用于OC對(duì)象嗎

copy和strong的區(qū)別

weak如何實(shí)現(xiàn)自動(dòng)賦nil

為什么不可變對(duì)象要用copy

assing可以使用在對(duì)象中嗎

Pod update和pod install的區(qū)別

layoutIfNeeded和setNeedsLayout的區(qū)別

抓包工具抓取HTTPS的原理

isEquel和hash的關(guān)系

bitmap的結(jié)構(gòu)

可變數(shù)組的實(shí)現(xiàn)原理

如何hook一個(gè)對(duì)象的方法,而不影響其它對(duì)象

如何避免if else

自旋鎖和互斥鎖的區(qū)別

三面

介紹項(xiàng)目,主要介紹自己強(qiáng)項(xiàng)一點(diǎn)的地方

數(shù)組cop后里面的元素會(huì)復(fù)制一份新的嗎

數(shù)組的淺拷貝與深拷貝

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

頭條一直都是視頻面,而且是一條龍服務(wù)。總體來說感覺不錯(cuò),反正主要就是需要基礎(chǔ)足夠扎實(shí),

百度

一面

1、iOS基礎(chǔ)知識(shí)

2、Python基礎(chǔ)知識(shí),大概是多線程,線程安全,集合類,JVM,類相關(guān)知識(shí)等。

3、iOS一些源碼的閱讀

4、優(yōu)秀的第三方框架源碼閱讀

5、GLSurfaceView的相關(guān)知識(shí),OpenGL,Shader,繪制流程。

6、詢問當(dāng)前做的項(xiàng)目,以及到具體的實(shí)現(xiàn)和優(yōu)化。

7、多進(jìn)程間的通訊,Binder機(jī)制。

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

二面

1、Delegate 、Notification和KVO比較各自的優(yōu)缺點(diǎn)

2、在一個(gè)UI的正中間實(shí)現(xiàn)一個(gè)正方形的紅色視圖有幾種方式?

3、手觸碰到屏幕的時(shí)候,響應(yīng)機(jī)制是怎樣的?第一響應(yīng)者是誰?追問 UIView和UIResponse的關(guān)系是什么?

4、UIViewController的生命周期是什么?追問 UIViewController 只alloc而沒用到的時(shí)候,

5、UIViewController 的view是否加載了?如果沒有加載那什么時(shí)候加載?

直接用UILabel和自己用DrawRect畫UILabel,哪個(gè)性能好?為什么?哪個(gè)占用的內(nèi)存少?為什么?

6、AFNetworking是否支持ipv6?

7、項(xiàng)目采用64位,為什么要用64位?怎么修改成64位?i386是什么?他們有什么關(guān)系?

8、iOS的應(yīng)用程序有幾種狀態(tài)?追問,退到后臺(tái)代碼是否可以執(zhí)行?雙擊home鍵,代碼是否可以執(zhí)行?

9、一般使用的圖標(biāo)內(nèi)存為多大?比如200×300的圖片,內(nèi)存應(yīng)該占用多少比較合理?

10、說說你對(duì)內(nèi)存泄漏的看法,追問,block為什么容易引起內(nèi)存泄漏?

11、[object copy]是淺拷貝還是深拷貝?為什么是淺拷貝?copy是實(shí)現(xiàn)了哪個(gè)協(xié)議?

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

三面

全是問得iOS方面的問題,問得真的很細(xì),需要基礎(chǔ)很扎實(shí),對(duì)各個(gè)機(jī)制真的足夠理解,不然確實(shí)有點(diǎn)難回答。

1、內(nèi)存管理方面的

2、多線程

3、各種隊(duì)列

4、線程鎖

5、MVVM

就是考察一下我iOS方面的能力到底是否有水分吧。問得很細(xì),確實(shí)需要基礎(chǔ)足夠扎實(shí)才行。

騰訊

一面

1、介紹一下實(shí)習(xí)的項(xiàng)目,任務(wù)分工,做了哪些工作?介紹實(shí)習(xí)內(nèi)容

2、網(wǎng)絡(luò)相關(guān)的:項(xiàng)目里面使用到什么網(wǎng)絡(luò)庫,用過ASIHTTP庫嗎

3、斷點(diǎn)續(xù)傳怎么實(shí)現(xiàn)?需要設(shè)置什么?

4、在杭州HTTP請(qǐng)求服務(wù)器響應(yīng)快,可能離服務(wù)器距離近,而在深圳訪問就很慢很慢,會(huì)是什么原因?如果用戶投訴,怎么分析這個(gè)問題?

5、HTTP請(qǐng)求的哪些方法用過?什么時(shí)候選擇get、post、put?

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

7、項(xiàng)目里面的數(shù)據(jù)存儲(chǔ)都用了哪些?知道iOS里面有哪些數(shù)據(jù)存儲(chǔ)方法?什么時(shí)候該用哪些方法存儲(chǔ)?

8、MVVM如何實(shí)現(xiàn)綁定

9、block和通知的區(qū)別,分別適用什么場(chǎng)景

10、算法。連續(xù)問了好幾個(gè),都是數(shù)組,層層遞進(jìn)的,但是我忘了,只記得最后是找出數(shù)組

11、中重復(fù)的數(shù)字

12、進(jìn)程和線程的區(qū)別

13、程序在運(yùn)行時(shí)操作系統(tǒng)除了分配內(nèi)存空間還有什么

14、進(jìn)程間通信的方式

15、如何檢測(cè)應(yīng)用是否卡頓

16、發(fā)布出去的版本,怎么收集crash日志?不使用bugly等第三方平臺(tái)或者這些第三方平臺(tái)是怎么收集crash日志的?

17、在block里面使用_property會(huì)造成循環(huán)引用嗎?怎么解決?除了使用self->_property,可以使用valueforkey來訪問嗎 在block里面可以修改它的值嗎setvalueforkey?可以修改它的值,可以用valueforkey來解決,顯式的的使用self,block外先持有self的弱引用。

二面

1、OC中對(duì)象的結(jié)構(gòu)

2、多態(tài)

3、Ping是什么協(xié)議

4、知道MTU嗎

5、ARC和MRC的本質(zhì)區(qū)別是什么?

6、NSThread,GCD,NSOperation相關(guān)的。開啟一條線程的方法?線程可以取消嗎?

7、子線程中調(diào)用connection方法,為什么不回調(diào)?因?yàn)闆]有加入runloop,執(zhí)行完任務(wù)就銷毀了,所以沒有回調(diào)。

8、MVC和MVVM的區(qū)別

9、了解哪些設(shè)計(jì)模式

10、存一個(gè)通訊錄,包括增刪改查,用什么數(shù)據(jù)結(jié)構(gòu)

11、autorelease變量什么時(shí)候釋放?手動(dòng)添加的是大括號(hào)結(jié)束的時(shí)候釋放,系統(tǒng)自動(dòng)釋放是在12、當(dāng)前runloop循環(huán)結(jié)束的時(shí)候

13、那子線程中的autorelease變量什么時(shí)候釋放?

14、子線程里面,需要加autoreleasepool嗎

15、GCD和NSOperation的區(qū)別?

16、項(xiàng)目里面遇到過死鎖嗎?怎么解決?數(shù)據(jù)庫訪問本來就是線程安全的,不會(huì)造成死鎖啊。什么是死鎖?

17、Viewcontroller的生命周期?

18、在init方法里面,設(shè)置背景顏色,會(huì)生效嗎 會(huì)生效。為什么會(huì)?

19、WWDC2016公布了哪些新特性?對(duì)蘋果系列的最新特性有關(guān)注嗎

20、看過哪些源碼,講講思路

21、兩個(gè)鏈表找第一個(gè)相同結(jié)點(diǎn)

22、字符串旋轉(zhuǎn)

23、找鏈表的倒數(shù)第k個(gè)結(jié)點(diǎn)

24、把一個(gè)鏈表比某個(gè)值大的放在左邊,比它小的放在右邊

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

作者:一意孤行的程序猿
鏈接:http://www.itdecent.cn/p/7d93215fb495
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

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

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