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

更新

面試基本已經結束了,目前已拿頭條、百度、騰訊offer,現在可以好好來寫寫總結了,關於面試題,可能沒那麼多時間來總結答案,有什麼需要討論的地方歡迎大家指教。主要記錄一下我的準備過程,和麪試的一些總結,希望能幫助到正在面試或者將要面試的同學吧。

準備階段

我其實從寒假前就有一點準備,不過也僅僅是過了一下基礎,然後寒假去搜狐實習了。在公司一邊上班一邊複習(請不要舉報我),系統的看書是必須的,操作系統的話我推薦看程序員的自我修養,如果想偷懶的話可以看我這篇博客一個程序是如何被機器運行起來的?,這個問題還是很有可能被問到的(不過我好像就美團二面問到了),即時不被問到,瞭解一下我覺得也是很有必要的。然後如果大學操作系統課程學得還算可以的話可以直接去刷題了吧我覺得,如果我算好最好還是去過一遍操作系統的教材。計網的話我看了圖解HTTP和圖解TCP/IP這兩本書,然後基本就可以去刷題了。當然如果你有更深的追求,大佬們建議我是看TCP/IP詳解,但是我到現在都還沒有靜下心來看一遍(真的很難看)。如果不想系統的去看書,可以看看我這的計網的系列文章計算機網絡篇,至少對各個層進行大體的瞭解,然後對具體的問題去深入探索。數據結構和算法就是刷題了,一定要刷題,等你刷得多了,你會發現面試的大多都是你刷過的,即時你沒刷過,在你刷完足夠多的題後,一般的算法題你都能找到思路,因爲校招算法不至於多難(ACM算法大佬就不要跟我們相提並論了)。強推《劍指Offer》這本書,這本書我至少刷了三遍吧,看了也不低於三遍。做到這些,基本就是刷面試題了(說實話我沒刷)。另外,有面試機會一定不要錯過,每一次面試都會是你查缺補漏的過程!!!

美團一面

記不太清了23333
主要問項目的一些技術點
如何讓一個label靠左,一個label靠右,然後右邊的label能夠完全顯示
算法奇數排在前面,偶數排在後面
智力題,一個騎手送餐,ABCD商店,送給abcd四個人
kvo的實現原理
消息調用的過程
get和post的區別
http有哪些部分
tcp和udp的區別
七層模型

總結:美團是視頻面,要求手寫代碼。主要還是問iOS方面的經驗吧,算法題很簡單也很常見,感覺春招面試算法題基本都是那些常見的,從我這份面試題中也可以看出,很多重複的。那道智力題想清除了也不算難。其它就是一些必備的iOS基礎和計網基礎吧。

美團二面

講一講響應鏈
如何通過一個view查找它所在的viewController
如何擴大view的響應範圍
微信分享大圖如何實現,從進程的角度
進程間的通信方式,並舉例
兩個進程分別指向同一個地址空間並初始化一個值,分別輸出是什麼
算法,判斷一個字符串是否所有的大寫字母都在小寫字母前面
修改podfile文件後,怎麼用git diff顯示出修改後版本和當前版本的不同,讓我來設計
程序執行的過程
如果想要刪除自己的一段代碼,如何刪除(在程序執行的過程中刪除)
用過腳本編程嗎
瞭解前後端嗎
各科成績,成績排名

總結:這是我表現得最差的一輪面試吧,美團是我春招面的第一家公司,但是說實話當時準備得還不是很充分,也可以說沒有面試經驗吧,很多面試官問的問題我都沒有get到面試官的點,不過這一面對廣度深度都有要求,我面得有點懵逼,以爲是一面表現得好二面故意壓力面,結果並不是,猝。

阿里一面

先介紹了項目,然後問了一些項目中的問題,然後開始問基礎
屬性的關鍵字
淺拷貝和深拷貝的區別
Block的循環引用、如何解決、原理
三種Block
Block和delegate的比較
kvo的實現原理
Autorelease pool的實現原理
消息轉發機制
線程死鎖的四個條件
進程和線程的區別
持久化
事務的特徵
中途還討論了Masonry的約束應該寫在哪裏,我說應該寫在layoutSubViews,他說會調用多次,然後爭論了一會兒

總結:阿里一面算是一次中規中矩的一場面試吧,從介紹項目開始,然後由淺入深,主要考察iOS基礎,面試官說我表現得不錯,這次面試的時候我還在搜狐實習(捂臉)

阿里二面

介紹項目
性能優化
YYModel和AF源碼
如何自己設計json轉model
架構
迷之算法題

image.jpeg

總結:阿里的面試效率是真的不提了,二面和一面間隔時間可能相差了一個月吧,我已經從北京回到了學校開始上課了,而且這次面試感覺有點奇怪,最後那道迷之算法題我們也有討論,實在沒搞懂計算兩點間的距離的算法還能怎樣優化,面試結束後我問了面試官最優解是怎樣的,面試官告訴我沒有最優,只有更優(微笑臉)
阿里三面

一個安卓的面試官。。。。。
主要問了項目的一些東西 和給一些場景問我如何實現
自我介紹 介紹一些項目難點
主線程是相對於什麼而言的
一張圖片的內存佔用大小是由什麼決定的
索引的作用
索引的優缺點
在數組中找最小的k個數
淘寶下拉加載更多如何優化
淘寶頁面發送HTTP請求的過程
介紹一下MVVM
知道哪些設計模式

總結:三面面試官主要就聊了一些具體場景問題和一些基礎,基礎我覺得沒太大問題。面試過程中我講到一些東西發現面試官聽不懂,才知道面試官是做安卓的,問一些問題其實有點讓我無語,但是總的來說還是回答過來了,感覺也沒有太大問題,但是後面還是被掛了,很無奈。

頭條一面

MVC的一些缺點
講一講其它架構
你知道哪些編碼方式
算法字符串翻轉
HTTPS
多線程的方式和它們的區別
隊列和線程的關係
一道線程安全的題
有哪些鎖
屬性的關鍵字
assign可以用於OC對象嗎
copy和strong的區別
weak如何實現自動賦nil
爲什麼不可變對象要用copy
assing可以使用在對象中嗎

頭條二面

Pod update和pod install的區別
layoutIfNeeded和setNeedsLayout的區別
抓包工具抓取HTTPS的原理
isEquel和hash的關係
SD的源碼
bitmap的結構
可變數組的實現原理
如何hook一個對象的方法,而不影響其它對象
如何避免if else
自旋鎖和互斥鎖的區別

頭條三面

介紹項目,主要介紹自己強項一點的地方
數組cop后里面的元素會複製一份新的嗎
數組的淺拷貝與深拷貝
TCP爲什麼是三次握手和四次揮手

頭條總結:頭條一直都是視頻面,而且是一條龍服務。總體來說感覺不錯,反正主要就是需要基礎足夠紮實,不過之前聽說的會手撕算法我倒是運氣好沒有碰到,就一面寫了一道算法題。三面面試官等了一會兒沒有來,約到了第二天(畢竟大佬都比較忙)。

聲明:面試是對自我審視的一種過程,面試題和iOS程序員本身技術水平沒任何關聯,無論你能否全部答出,都不要對自己產生任何正面或消極的評價!有興趣的可以加入iOS開發交流羣:681503716,請備註編號《晨》,些面試資料在羣文件有共享,希望每一位求職者都可以找到適合的工作)

騰訊一面

介紹項目的網絡層
爲什麼要使用HTTP???爲什麼不直接用TCP
如何保證HTTP傳輸到達
HTTP頭部有哪些內容
講一講擁塞控制
MVVM如何實現綁定
block和通知的區別,分別適用什麼場景
算法。連續問了好幾個,都是數組,層層遞進的,但是我忘了,只記得最後是找出數組中重複的數字
進程和線程的區別
程序在運行時操作系統除了分配內存空間還有什麼
進程間通信的方式
如何檢測應用是否卡頓
好像沒多少問題了,記不太清,然後他說完了,我感覺好快,以爲要掛了,就強行講了些runloop和性能優化的東西,然後他說好了,你和下一輪面試官再說吧

總結:k神前一天晚上幫我推的簡歷,第二天就接到電話了,效率還是比較高。打電話的時候我正在上課,面試官上來就要開始面試,我約到了晚上。這次面試其實表現得也不夠好,前兩個問題有點沒get到面試官想問的點,問得很快。最後面試官突然說他問完了,我很虛,以爲自己是掛了,然後給面試官說面試是不是太快了,iOS方面的東西好像都沒怎麼問。面試官說如果你覺得你還有什麼沒用展現出來的,你就說說吧,然後我強行講了一些性能優化方面的東西,因爲這是我唯一準備的瞭解得稍微有點深的東西了。最後還沒講完,面試官直接告訴我讓我和下一輪面試官再講。我不知道如果後面我不強行講的話,這一面會不會掛,所以很多事情還是需要我們自己努力去爭取機會的。

騰訊二面

OC中對象的結構
多態
Ping是什麼協議
知道MTU嗎
TCP頭部多長,IP呢
線程同步的方式
iOS中有哪些鎖
MVC和MVVM的區別
瞭解哪些設計模式
存一個通訊錄,包括增刪改查,用什麼數據結構
看過哪些源碼,講講思路
兩個鏈表找第一個相同結點
字符串旋轉
找鏈表的倒數第k個結點
把一個鏈表比某個值大的放在左邊,比它小的放在右邊
二叉樹的中序遍歷,非遞歸

總結:主要還是基礎,騰訊是真的喜歡問計網和數據結構。這一輪面試我可以說是裸面了,那幾天都在放飛自我,因爲那時候已經拿了頭條offer,也沒有其它想法了,就想着隨便面面吧,不過也無所謂。還好面試的時候還能進入狀態,雖然面得不是特別好,不過基本上還是能答出來,最後的二叉樹遍歷,由於平常都想的是遞歸,一直沒怎麼注意非遞歸的實現,我卡了一會兒,還好最後還是想出來了(請不要嘲笑我)。
中間有個小插曲,就是過了幾天我在公衆號上面查發現我的狀態已經掛了,都已經“心灰意冷”了,結果昨天收到一個廣東深圳的電話,當時心裏就挺激動的,接通後果然是騰訊的HR,意外驚喜。

百度一面

大概回憶一下
進程和線程的區別
一個進程有哪些區
擁塞控制
進程間通信的方式
七層模型
TCP和UDP的區別
傳輸層和網絡層分別是做什麼的
UDP可以實現一對多??
算法 求數組的最長子數組
Http2.0如1.x的區別

總結:開始是把我推給的一個偏網絡層做C++的部門,所以面試基本都是計算機基礎,也講了一些iOS的東西,但是我猜面試官可能也不是做iOS的。本來打算問我C++,我果斷說自己沒怎麼寫過C++,如果問C++我肯定hold不住。

百度二面

發送一個HTTP請求的過程
TCP是如何保證可靠的
內核態和用戶態的區別
在一個10G的數據裏面找出最大的100個數
講一下我最滿意的一個項目
然後講了一下網絡造成卡頓的原因

總結:這一面是把我轉到做APM的那個組後面的,感覺面試官時間很急,面得有些突兀,不過沒有太大的問題,所以基本就讓我過了吧。

百度三面

全是問得iOS方面的問題,問得真的很細,需要基礎很紮實,對各個機制真的足夠理解,不然確實有點難回答。我只列舉一下大概方向,這些東西也是iOS開發必須掌握的基礎吧
屬性的關鍵字方面的
內存管理方面的
多線程
各種隊列
線程鎖
MVVM

總結:本來前一面面完都說我技術面已經通過了,我還很詫異,結果發現是搞錯了,所以補了這一面,就是考察一下我iOS方面的能力到底是否有水分吧。問得很細,確實需要基礎足夠紮實才行。

寫在最後

以上的面試題肯定是不完整的,只能根據我的印象記錄我能想起來的了,而且即時是一個看似簡單的題,你如果沒有真正弄明白它的原理的話,在面試過程中你也很有可能被問懵,所以一定要打好基礎,要知其然並知其所以然。如果你能把上面的問題搞得很清楚的話,我覺得BAT的offer應該都是沒有問題的。當然有時候面試還是要看一點運氣的,所以我們還需要抓住每一次面試機會。希望面試的同學一切順利。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章