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

BAT面試經驗分享——iOS高級開發工程師的自我總結!

作者:原來是澤鏡啊

鏈接:https://blog.csdn.net/iOSzhuoyuan/article/details/85056818

序言

目前形勢,參加到iOS隊伍的人是越來越多,甚至已經到供過於求了。


今年,找過工作人可能會更深刻地體會到今年的就業形勢不容樂觀,隨著各大公司秋招的開始,很多小伙伴都行動起來了,我也有幸獲得了一份不錯的offer並和大家分享自己的經驗心得。


由於我面試公司比較多,所以自然也是做了這方面的準備,因此這篇總結並不一定適合想去創業公司的同學。另外,由於經驗本來就是主觀性極強的東西,加之筆者水平有限,所以如果有不認可的地方,萬望諸君呵呵一笑,拋之腦後。


首先我要問大家幾個問題

什麼是面試

有些人可能會把面試看的太重,覺得面試過了就能進入大廠,技術和財富兼得……


我倒是覺得,面試沒有這麼誇張(抱歉做了一回標題黨),它其實是一次你和麵試官互相瞭解的絕佳機會,藉此機會你還可以對未來的工作有初步的瞭解。


面試本身並不能完全評價一個人的實力。面試通過的人,也許只是恰好在面試時遇到了自己熟悉的問題,面試不通過,也有可能是面試官自身的問題,並非每個面試官都具備客觀評價別人的能力。


換句話說,面試沒通過也許是面試官沒有發現你的才華,面試通過了也並不代表你就能勝任工作,因為進入企業之後可不是每天負責回答面試題!


所以從這一點來看,面試有點像相親。你滿意我,我滿意你,王八對綠豆——看上眼了,那就一拍即合,否則就分道揚鑣。我本人非常希望能夠多幾輪面試(實際並不總是能做到),這樣大家都有充足的時間互相瞭解,決定去留。


網上某些面經中,介紹了一些“裝逼”的方法,還有所謂的“面試技巧”,我是不太認可的。技巧需要有,這是為了讓你更好的展示自己,而非坑蒙拐騙,無理取鬧,無中生有。我更想展現一個真實的自己,如果面試官不認可,說明我們沒有緣分,或者說自己的能力還不夠。

面試要準備什麼

1、有一位小伙伴面試阿裡被拒後,面試官給出了這樣的評價:“……計算機基礎,以及編程基礎能力上都有所欠缺……”。但這種籠統的回答並非是我們希望的答案,所謂的基礎到底指的是什麼?


作為一名 iOS 開發者,我所理解的基礎是 操作系統、網絡和演算法這三大塊,不同的開發方向可能有不同的側重,但基礎總的來說就是這些。,我不推薦通過去網上看教程來學習這些基礎知識,因為能用短短幾篇文章講明白的事情不叫基礎,至少我沒見過寫得這麼深入淺出的文章。


2、不知道有多少讀者和我一樣有過這樣的困擾:“我知道某些東西很重要,所以去百度查了資料,但是查到的文章質量很差,正確率沒有保證”。


這其實是正常的,優秀的文章一般都放在優秀的作者的個人博客上,這恰恰是搜索引擎的盲區,所以一般只能搜到 CSDN、博客園這種地方的文章。自然就無法保證文章質量。所以擁有一個自己的iOS交際圈子就很重要。


3、除了準備通用的基礎知識以外,簡歷也是一個很重要的環節。一直很仰慕唐巧老師的猿題庫,無奈簡歷太差,都沒有收到面試邀請。後來好好改了簡歷以後,就沒有這種問題了。


關於簡歷的書寫,推薦兩篇文章:如何寫面向互聯網公司的求職簡歷、程式猿簡歷模板。你也可以參考我的簡歷,沒有亮點,就當是拋磚引玉。


4、最後,當然是準備好相關崗位的基礎知識了。作為 iOS 開發者,雖然 Swift 已經發佈了快兩年,但是大公司轉向 Swift 的動作還不明顯,所以 Objective-C 幾乎是必備項,Swift 都不一定能算是加分項。


iOS 方面的知識也必不可少,雖然招聘信息上寫著如果基礎扎實,零 iOS 基礎也可以,但是現實往往是比較殘酷的。

接下來我給大家分享一下我的經歷吧!

公司一


一面:約 1.5 小時


首先是四個演算法題:


不用臨時變數怎麼實現 swap(a, b)——用加法或者異或都可以


二維有序陣列查找數字——劍指 offer 第 3題


億級日誌中,查找登陸次數最多的十個用戶——(不確定對不對,我的思路是)先用哈希表儲存登陸次數和ID,然後用紅黑樹儲存最大的十個數。劍指 offer 第 30題


簡述排序演算法——快排partion函式的原理,堆排(不穩定),歸併排序,基數排序。


最後是 iOS 相關,面試官問的很開放,都是談談自己的理解


說說你對 block 的理解。—— 三種 block,棧上的自動複製到堆上,block 的屬性修飾符是 copy,迴圈取用的原理和解決方案。


說說你對 runtime 的理解。——主要是方法呼叫時如何查找快取,如何找到方法,找不到方法時怎麼轉發,物件的記憶體佈局。


說說你對 MVC 和 MVVM 的理解。—— MVC 的 C 太臃腫,可以和 V 合併,變成 MVVM 中的 V,而 VM 用來將 M 轉化成 V 能用的資料。


說說 UITableView 的調優。——一方面是通過 instruments 檢查影響性能的地方,另一方面是估算高度併在 runloop 空閑時快取。


談談你對 ARC 的理解。ARC 是編譯器完成的,依靠取用計數,談談幾個屬性修飾符的記憶體管理策略,什麼情況下會記憶體泄露。


一面的問題非常基礎,主要是演算法和 Objective-C,因為準備比較充分,基本上答出來 80% 吧。大約一周後突然二面。


二面:約 0.5 小時


二面比較突然,顯示簡單的自我介紹,然後問了三個問題:


野指標是什麼,iOS 開發中什麼情況下會有野指標?——野指標是不為 nil,但是指向已經被釋放的記憶體的指標,不知道什麼時候會有,如果有知道的讀者還望提醒。


介紹 block。—— (接第一問) 我讓面試官提示我一下什麼時候會有野指標,他說用 block 時,我表示還是不知道,只知道 block 會有迴圈取用。於是就扯回了一面的問題。


說說你是怎麼優化 UITableView 的。——還是一面的問題。。。。。。。。。。。


雖然通過了,但是幾乎又問了一遍一面的問題讓我感覺對方不太認真。


公司二


筆試


主要是計算機方面的大雜燴,涉及操作系統,網絡,移動開發,演算法等。難度不大,目測是為了淘汰渾水摸魚的人,就不列出題目了,演算法有三題,直接在線寫(木有 IDE 表示很憂傷):


很長一道題,讀了很久才讀懂,目測是 DFS,但是最後沒時間了,寫了個思路。


把 “www.zhidao.baidu.com” 這樣的字串改成 “com/baidu/zhidao/www”。——老題目了,劍指 offer 的,兩次逆序排列即可。


求陣列中和為某個值的所有子陣列,比如陣列是[5,5,10,2,3]一共有四個子陣列的和是 15,比如[5,10],[5,10],[10,2,3],[5,5,2,3]。這個就是簡單的遞迴了,分兩種情況,當前位置的數字在子陣列中,以及不在子陣列中。


面試


全部是 iOS 題,可能是覺得演算法已經面過了


介紹 block。——我提到棧上的 block 在 ARC 下會自動複製到堆上,面試官問我從 iOS 4 還是 5 開始支持這一特性,表示不知道,我又不是學 OC 歷史的,後來想想可能是公司內部老專案有這個坑


介紹一下 MVVM 和 RAC。——可能是我簡歷的某個角落寫了用過 RAC,被挖出來了,大概談了一下,結果面試官問我資料的雙向系結怎麼做,bind函式瞭解過麽,果斷說已經忘了


介紹自己用過哪些開源庫。——Masonry 和 SnapKit,AFNetWorking,MKNetworkKit,Alamofire,Mantle,SDWebImage


SDWebImage 下載了圖片後為什麼要解碼?——當時矇住了,面試官很 nice 的解釋了一下,說是要把 png 檔案建立一個什麼記憶體映射,目前還不太懂,有空研究一下。

面試收穫,註意看!!非常重要!!

1、給自己寫一份非常專業的簡歷


我的建議是,如果你想增加自己的入選機會,那最好還是花點錢製作一份專業的簡歷。相較於你將來可能得到的巨大收穫,這真的只是一個小小的投資。


2、研究面試官


當HR聯繫程式員來面試的時候,他總是會事先發電子郵件給他,並附上他的名字和博客地址。但是讓我驚訝的是,當很多小伙伴去面試的時候,他竟然對HR還是一無所知。


舉個正面的例子,當HR在面試時遇到一位開發人員,甚至能對他以前寫的一篇博客或者做的教學視頻上面的內容侃侃而談。


你說HR會推薦哪個?


面試官也是人,也會有人性的弱點和特點。Dale Carnegie曾說過,要讓別人對你感興趣,最簡單的方法就是你先表達出對對方的興趣。


不管這種方法是否有欠公正,但是如果你想面試成功,那麼我建議你事先最好先好好研究一下你應聘的這家公司和麵試官(如果知道的話)。


當今社會的信息是如此的發達,我們完全可以在貼吧、論壇、微博、博客上找到任何人的資料。即使你只是大致瀏覽一番,也會讓你受益良多。

3、獲得內部推薦


知道找工作最簡單的方法是什麼嗎?那就是獲得內部推薦。


這不但可以增加面試機會,還能提升40%的錄用幾率。


講一下我以前的一次經歷吧,我找到了一家心儀的公司。然後直接投簡歷?NONO,猜猜我是怎麼做的吧?


首先我找到一名和我有共同想法和意見的開發人員,然後開始關註他的博客。


接著我在他的博客中留言、發表建議,並且表現出對他的工作和公司非常感興趣的想法。最後我成功拿到了這個寶貴的內部推薦資格。


很多程式員會說,“可是,某某某公司裡面的人我一個也不認識啊”。如果你想就此放棄,那當我什麼也沒說,如果你願意試試,我敢打賭,你總能想出一種方法達到你的目的。


不過這有個秘訣,那就是首先你得在網上創建自己的“名片”——讓別人有瞭解你的機會,所以do it now吧。


4、學會解決演算法問題


這是每一個開發人員都應該具備的重要技能,而且真要掌握起來也並非那麼難。


在很多面試中,都會有這樣的問題,要求你在白板或者電腦上解決編程問題,但是許多程式員,即使是那些非常優秀的程式員,都會一下子大腦一片空白,完全理不出思路來。


如果你能花時間學會如何解決這種型別的面試問題,那麼下次再碰到這種場景,就不會這麼緊張了。


我們會緊張其實和怯場無關,主要是因為我們不熟悉這些問題,也沒有自信能解決這種問題。

在這方面建立起自信之後,你就再也不會緊張了。

5、活力洋溢地回答問題


只用一個字或者一句話,照本宣科平平無奇地回答問題,或許在技術上是正確的,但是你忘了應該藉此機會好好展示自己的激情——這才是一個開發人員能帶給團隊的最大正能量。


舉個例子說,如果我問你什麼是多型性,我不是要你按照課本中的定義重覆給我聽,我希望你能就這個主題闡述一下,然後我們可以更深入地聊一聊。


6、最後


祝福大家都可以找到自己心儀的工作,進入BAT,走向人生巔峰,迎娶白富美!



編號375,輸入編號直達本文

赞(0)

分享創造快樂