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

序言程序員

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

今年,找過工做人可能會更深入地體會到今年的就業形勢不容樂觀,隨着各大公司秋招的開始,不少小夥伴都行動起來了,我也有幸得到了一份不錯的offer並和你們分享本身的經驗心得。算法

因爲我面試公司比較多,因此天然也是作了這方面的準備,所以這篇總結並不必定適合想去創業公司的同窗。另外,因爲經驗原本就是主觀性極強的東西,加之筆者水平有限,因此若是有不承認的地方,萬望諸君呵呵一笑,拋之腦後。編程

首先我要問你們幾個問題數組

什麼是面試緩存

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

做爲一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這是一個個人iOS交流羣:638302184,無論你是小白仍是大牛歡迎入駐
,分享BAT,阿里面試題、面試經驗,討論技術, 你們一塊兒交流學習成長!

我卻是以爲,面試沒有這麼誇張(抱歉作了一回標題黨),它實際上是一次你和麪試官互相瞭解的絕佳機會,藉此機會你還能夠對將來的工做有初步的瞭解。函數

面試自己並不能徹底評價一我的的實力。面試經過的人,也許只是剛好在面試時遇到了本身熟悉的問題,面試不經過,也有多是面試官自身的問題,並不是每一個面試官都具有客觀評價別人的能力。oop

換句話說,面試沒經過也許是面試官沒有發現你的才華,面試經過了也並不表明你就能勝任工做,由於進入企業以後可不是天天負責回答面試題!佈局

因此從這一點來看,面試有點像相親。你滿意我,我滿意你,王八對綠豆——看上眼了,那就一拍即合,不然就分道揚鑣。我本人很是但願可以多幾輪面試(實際並不老是能作到),這樣你們都有充足的時間互相瞭解,決定去留。

網上某些面經中,介紹了一些「裝逼」的方法,還有所謂的「面試技巧」,我是不太承認的。技巧須要有,這是爲了讓你更好的展現本身,而非坑蒙拐騙,無理取鬧,無中生有。我更想展示一個真實的本身,若是面試官不承認,說明咱們沒有緣分,或者說本身的能力還不夠。

面試要準備什麼

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,走向人生巔峯,迎娶白富美

做爲一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這是一個個人iOS交流羣:638302184,無論你是小白仍是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 你們一塊兒交流學習成長!
相關文章
相關標籤/搜索