歡迎光臨
每天分享高質量文章

簡單易懂 iOS 面試篇(含各大廠面試題及知識總結)

作者:SepCode
連結:https://juejin.im/post/5cdae4fe6fb9a0324c20decf

引言

目前經濟增速的放緩,到處都在鼓吹網際網路發展進入下半場。今年跳槽季的遭遇想必大家也是感受到了一絲寒意。筆者有一個朋友在阿裡工作,今年3月底開始請他幫忙內推,也許是阿裡的大前端戰略,也許真的是網際網路的寒意。對於一個三年的iOSer上海這邊一直沒有合適的崗位可推,即便是有也是招P7級別,統統被拒的命運。我也是放棄了希望,開始找其它渠道推銷自己,不過最終還是找到了心儀的工作,現在終於可以做一下總結了。

一、概述

前期面試還是很有激情的,每次面試完畢都會回憶並記錄,總結,再學習。其實這個過程也是一個非常有效的學習過程。不過代價有點大,你可能會失去一次機會。最好的方式,還是做好充足的準備。我在說什麼?好吧,好像是一些感慨之類的。能體會到的讀者,就請點個贊吧,哈哈!沒體會到的讀者就當沒看到吧,反正僅僅是感慨而已,哈哈嗝!

二、個人總結

1、經歷總結

 

還是簡單再說下,這段時間的經歷吧。首先這段經歷是從老司機周報開始的,因為之前就和周報的峰哥有些聯絡,所以看到周報的內推時,也就自然而然的聯絡峰哥內推了。首先就是位元組跳動,不過簡歷篩選都沒透過。幫忙內推的曾鳴大佬說出了原因:

 

1、沒有大廠背景

2、不是985院校畢業(筆者本人211院校畢業)

3、簡歷沒有亮點

 

沒辦法,確實沒亮點。之後峰哥也是幫忙指導了簡歷,我也儘量按照STAR法則修改了簡歷,透過其他渠道投遞了位元組跳動不過也都沒有機會。可能是有失敗記錄,半年或三個月內都不能透過篩選了吧。後來掘金的內推群有位前百度、美團的現頭條大佬說他內推的成功率高,還不受之前簡歷鎖定影響,投遞之後仍然沒有訊息。不過後來北京位元組跳動的HR聯絡了我,問我有沒有興趣去北京,我當即來了個沒興趣。通完電話才想到即便是不去也應該增加一下遠端面試經驗呀…這讓我想到之前看到的一篇文章說上海的位元組跳動比北京門檻高,現在來看確實如此了。

 

接下來就是阿裡的內推了。朋友在口碑做的前端,在連續一週多都沒有合適投遞崗位的情況下,朋友給我分析了一下原因。口碑大概有2000多人,前端有40~50人,iOS只有6個人。阿裡的大前端戰略和所謂的不裁人策略,也導致很多轉崗。所以阿裡目前在招的大多是P7級別的專家,又是一個無可奈何。

 

在這兩家開始遭遇不順時,我就已經開始了招聘網站的簡歷投遞。接下來就進入了面試,回憶記錄,總結,學習研究的輪迴,直到終於拿到了心儀的工作。

 

2、知識總結

 

知識總結我是透過MindNode處理的,有些詳細,有些僅僅一提,但是都能從看到的知識點展開回答。每次看一遍內心就複述一遍,基本都背下來了。當然這隻是部分知識,還有很多沒有總結,以後我也會繼續為它添磚加瓦的。如果有朋友想要加入的話我非常歡迎,大家也可以自己下載自行新增知識點。或者自己建立都行,我只是感覺以這種方式完善知識體系很不錯。當然這裡不能做詳細展開,所以最好也有適合自己的筆記總結。例如:我使用印象筆記收藏相關模組的高質量文章作為相關知識點的擴充套件。

 

 

這裡放出源檔案的地址:iOS面試,如果沒有安裝MindNode可以到應用商店安裝,或者這裡精品MAC應用分享(個人最愛)

 

關於演演算法練習我們都會想到去LeetCode刷題。雖然LeetCode支援Swift答題,但是讓人不爽的是有些處理字串的題,用Swift作答會超時,所以筆者在練習時主要使用C和Swift作答。有時也會使用OC先理清思路,再使用其他語言進行作答。畢竟有些題需要邊寫邊想,還有些需要進行除錯才行。所以這也是用Playground不方便的地方,它不能進行斷點除錯。有了這些前提我就在想怎麼才能使用現在工具,更好的進行演演算法題的練習呢?我想到了Xcode的單元測試,我們知道在繼承自XCTestCase的類中實現以test為字首的方法時,該方法前會生成一個菱形指示符,滑鼠置於其上時會顯示執行按鈕,我們就可以透過該按鈕執行測試用例,同時還支援斷點除錯。例如下圖中的判斷是否為迴文數一題:

 

 

需要使用Swift解答也採用同樣的策略,就個人來說,這麼練題實在是太爽了。

 

當然完善知識體系看書也是必須的,例如圖解HTTP、劍指offer、Effective Objective-C 2.0、Objective-C高階程式設計等大家都推薦到爛的書都是必須的,但是技術也是有時效性的。所以例如高階程式設計中的一些知識,就需要在它指導的思想上實踐出目前的實現原理。

 

所以請記住兩點:基礎一定要扎實,原理一定要理解。

三、面試題

接下來貼出一些面試題,前面也說道前期很認真的記錄,學習。面了一段時間這些問題很熟悉了,也就沒有詳細記錄了。大家瞭解一下主要方向就可以了,畢竟很多問題會從你的簡歷中提問:

 

小莫運動

  • 專案經歷

  • 試題

  • 遞迴反轉字串

 

- (void)testReserveStr {
    NSLog(@"--%@", [self func:@"Antyum"]);
}

- (NSString *)func:(NSString *)str {
    return str.length ? [NSString stringWithFormat:@"%@%@",[self func:[str substringFromIndex:1]],[str substringToIndex:1]] : @"";

 

  • 快排過程描述和時間複雜度

  • weak用法,以及不採用時產生的問題

  • notification,delegate,block的區別

 

小紅書

  • 電話

  • 說一下你做過的東西

  • 對連結串列和陣列的認識,應用場景

  • weak和assign的區別

  • assign可以修飾OC物件嗎

  • weak置為nil是如何實現的

  • GCD中的Block用到的屬性是否需要__weak修飾

  • Block中對陣列增刪怎麼操作

  • +load和+initilaze在分類,父類,子類和main函式的呼叫順序

 

+load載入順序:父類,子類,分類。如果多個分類會按照PBXSourcesBuildPhase中順序逐個呼叫。

main()

+initialize載入順序:首先有分類時,最後被load的分類會改寫類的該方法。然後先父類,再子類,直到第一次被呼叫的類。

  • 為什麼要把+load中的邏輯放到+initilize

 

浦發

  • 單例的實現方式,還有其他方式嗎

  • abc三個任務,執行完掃清UI,怎麼處理?除了你說的group還有其他方式嗎

  • 單行多個Label,中間可壓縮,怎麼新增約束

  • 輪播圖實現要點

  • 定時器什麼時候銷毀,一些通知,KVO放在哪裡銷毀

  • 看過哪些第三方框架,AF2和3有什麼區別

  • 離屏渲染底層角度

  • 如何讓Cell中的Button被點選時同時響應

 

愛回收

  • KVO底層實現

  • GCD相關,NSOperation相關

  • OSI七層協議,TCP/IP協議簇四層模型,每層的協議,Http相關

  • HEAD請求作用

  • 專案相關

  • 講一講響應者鏈條,如何處理點選範圍和響應的兩個方法分別是

  • weak如何自動置為nil

  • 屬性關鍵字

  • 如何處理迴圈取用

  • 對runtime的認識

  • 連結串列成環判斷

  • 二叉搜尋樹

  • 關聯物件原理

  • 方法交換原理

  • 你部落格中挑一篇主要寫了什麼

  • 值型別和取用型別,和swift中它們的應用

  • json支援的型別

 

 

 

  • 如何一次連線多個請求

 

京東

  • weak如何自動置為nil

  • 屬性關鍵字

  • 可變物件copy

  • 專案相關

  • OC中用到的設計樣式

  • 三種Block

  • 通知,代理,block的應用場景

  • MVVM的認識

  • KVO的實現原理,被建立內部類有什麼特點

  • 專案中遇到的印象最深的問題

  • 如何對一個微信聊天介面分工

  • 微信語音轉文字如何實現的

  • 專案中提到的支援核心動畫如何實現的

  • 單例樣式

  • 應用埋點

  • 控制器生命週期

 

攜程

  • 電話

  • KVO與autoreleasepool

  • 深淺copy

  • 屬性關鍵字

 

匯正財經

  • oc的反射機制

  • 面向物件的特徵

  • block和delegate的區別

  • NSString的copy和strong屬性關鍵字的影響

  • NSOperation和GCD的區別

  • runloop

  • weak和assign的區別

 

攜程

  • KVO的底層

  • KVC的認識

  • oc中記憶體的分配

  • weak置nil的實現

  • 深淺copy

  • runtime的認識

  • 訊息轉發的認識

  • 訊息轉發的應用

  • 事件鏈的認識

  • 離屏渲染問題

  • 設計樣式的認識

  • 同一行lable左右約束佈局問題

  • 設計架構的應用

  • 深度優先和廣度優先

  • (簡歷中有寫道)XMPP的認識

  • 謂詞的認識

  • UICollectionView的應用

四、面試套路

關於面試套路,我這邊沒有特別多的方法。目前主要有一個方法吧,化被動為主動。這個怎麼講呢?首先我們看一下下麵的自我介紹:

 

  • 我叫xx,16年畢業於xx大學計科專業。上大學時就已經開始自學iOS了,到現在也已經工作三年了,一直都是從事的iOS開發工作。16年3月份加入一家2C的創業公司,主要學習研究了UI的處理。17年加入目前2B的做企業服務公司,主要學習研究了架構,設計樣式,記憶體管理這些東西。目前我主要在探索OC的一些設計實現的原理,在學習的過程中發現網上,很多文章對一些知識的認識都是錯誤的。等忙完這段時間面試,我就要發幾篇文章來指正一下這些問題。

 

幾乎所有聽完這個自我介紹的面試問題都是:那你說的那些認識錯誤的問題都有哪些呢?這時就是你主動表現你深入研究過知識點的時候了。

當你被問到一個不會的問題時,不要含糊回答,直接說明你對這個問題認識不深,或者不太清楚。但是我知道…(回答與之相關的知識)

再有可以思考幾個常用問題,例如:你認為工作中遇到過印象最深的問題?你還有哪些可以介紹的亮點?你有什麼問題想問我嗎?這些問題幾乎每次都會被問到,提前思考主動準備還是非常有必要的。

 

更多的關於這方面的總結推薦大家可以看下麵兩篇文章:

  • 百度/阿裡/網易 iOS 面經(已入職)

    https://www.nowcoder.com/discuss/21022

  • 大三iOSer春招總結(騰訊螞蟻頭條京東網易)

    http://nathanliuyolo.com/2018/05/11/大三iOSer春招總結-騰訊螞蟻頭條京東網易/

結語

文章寫到這裡也就到了該結束的時候了,總之一句話機會留給有準備的人。所以最好的方式還是平時花費一定的時間用來提升自己,等到需要做面試準備時,再鞏固複習。這個不是告訴大家,這個算是我自己寫下來提醒自己的吧!臨陣拼命磨槍畢竟對精神和身體消耗極大。個人出文章確實有點慢,為了圖中的tcp握手的描述,翻了好多文章書籍,有些[FIN]有些[FIN,ACK]各種各樣的都有,最後也是抓包研究得出結論。總之也就是想表達對細節的追求,但水平有限,有不足之處還請大家指點。關於面試的文章到這個時間段,大家可能都沒興趣看了,不管怎樣都是自己的經歷,也算是對這段時間的一個總結。希望大家喜歡。

贊(0)

分享創造快樂