1. 程式人生 > >2018 iOS實習生是如何拿到阿里騰訊百度頭條美團Offer的【面試總結】

2018 iOS實習生是如何拿到阿里騰訊百度頭條美團Offer的【面試總結】

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

準備階段

我其實從寒假前就有一點準備,不過也僅僅是過了一下基礎,然後寒假去搜狐實習了。在公司一邊上班一邊複習(請不要舉報我),系統的看書是必須的,作業系統的話我推薦看程式設計師的自我修養,即時很多知識不被問到,瞭解一下我覺得也是很有必要的。然後如果大學作業系統課程學得還算可以的話可以直接去刷題了吧!我覺得,如果我算好最好還是去過一遍作業系統的教材。計網的話我看了圖解HTTP和圖解TCP/IP這兩本書,然後基本就可以去刷題了。當然如果你有更深的追求,大佬們建議我是看TCP/IP詳解,但是我到現在都還沒有靜下心來看一遍(真的很難看)。資料結構和演算法就是刷題了,一定要刷題,等你刷得多了,你會發現面試的大多都是你刷過的,即時你沒刷過,在你刷完足夠多的題後,一般的演算法題你都能找到思路,因為校招演算法不至於多難(ACM演算法大佬就不要跟我們相提並論了)。強推《劍指Offer》這本書,這本書我至少刷了三遍吧,看了也不低於三遍。做到這些,基本就是刷面試題了(說實話我沒刷)。另外,有面試機會一定不要錯過,每一次面試都會是你查缺補漏的過程!!!

作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這是一個我的iOS交流群:638302184,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!

美團一面

主要問專案的一些技術點

如何讓一個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的實現原理

訊息轉發機制

執行緒死鎖的四個條件

程序和執行緒的區別

持久化

事務的特徵

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

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

阿里二面

介紹專案

效能優化

YYModel和AF原始碼

如何自己設計json轉model

架構

迷之演算法題

圖片

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

阿里三面

一個安卓的面試官。。。。。

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

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

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

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

索引的作用

索引的優缺點

在陣列中找最小的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為什麼是三次握手和四次揮手

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

騰訊一面

介紹專案的網路層

為什麼要使用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應該都是沒有問題的。當然有時候面試還是要看一點運氣的,所以我們還需要抓住每一次面試機會。希望面試的同學一切順利。

作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這是一個我的iOS交流群:638302184,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!