萌新iOS面試官迷你廠第一視角

image

今年的環境很差,很多大廠繼去年的寒冬之後,今年又裁了一波(本地就有兩個大廠上了新聞-。-),我有兩個哥們也是最近進入了找工作的狀態。由於我之前做過一段時間的面試官,負責了一段時間iOS端的技術招聘,他們也諮詢了我不少關於這方面的細節,借著這個機會,以一個初級面試官第一視角介紹下招聘方的想法。

其實距離現在已經有段時間了,大幾個月前吧,那是在我還在前東家的時候,前東家是一家規模不大的公司,兩層的寫字樓,百來號人,環境算偏一線吧,但是名氣不大,不算好招人。然後有一天,老大突然和我說,再招兩個人吧,我們要擴一條產品線,做一個類似迷你版滴滴的新產品。(這是背景)

那時候其實我們組就我一個 iOS 開發,當時已經有一個 App 上架了, 突然擴招兩個人其實對我們當時的項目來說,其實算比較大的人力擴充了。沒辦法,大佬都發話了,硬著頭皮上了,擴招的兩個人,想招一個高級的比較有經驗的,35年的,另一個13年的就行,如果有比較好的應屆生其實也可以,這樣,我一個才剛畢業2年的小菜雞,大概率要遇到一堆經驗遠比我豐富的人的毒打,壓力不可謂不大。

小公司的面試流程一般比較簡單,第一輪技術面(就是本弟弟), 第二輪我們老大面進行 (大佬後來去了阿里,所以他這輪也不算很好過),第三輪就是和HR談錢了,基本上半天搞定。當然,怕有的大佬看到要做筆試題扭頭就跑,所以一般是沒有筆試題。演算法的話一般也不怎麼考,一般是確定他淘汰了,才會出一題來勸退。

從我們發出招聘之後,第二天就開始陸續有簡歷收到了。第一個哥們就是來面高級崗的,接近四年經驗,當時拿到簡歷其實心裡有點虛,怕hold不住,所以那天拿到他簡歷之後,認真地過了一下他寫的技術點(>.<)因為一般招人,是面試者寫什麼我們問什麼,我們是要發現面試者會什麼,而不是出一些只有我們自己會的很冷門的東西去刁難面試者,那樣對面試者其實有點不友好。(招人,不就是想招一個能展示)

第二天那個小哥就來了,我先給他倒了一杯水,其實第一次有點緊張,所以我先讓他做一下自我介紹,小哥介紹得特別的簡短,三句話概括完。然後我事先有先去看了一下他項目,讓他展示一下他做的 App,讓他從最擅長的地方上手,問一些比較有技術難度的。老實說,那哥們的項目還可以,但是我問到項目中技術點的實現的時候,他的回答都是使用XXX第三方庫,但是並不知道具體實現原理,他的回答都是 「這個很簡單,用XXX,一行程式碼集成搞定「 之類的,以我當時的面試官視角,感覺他是個比較熟悉API調用的,其他技術細節也不夠深入,最後遺憾道別。

以一個普通開發者視角來看,我們平時遇到的需求,也不一定說全部的第三方庫都能完美解決,所以我們有時候一些功能不得不自己實現,而如果招一個基本只會用第三方庫的同事,想必他很難 hold 得住一個全新的項目。

第一次面試之後,面試起來比較得心應手了,但是這裡還是要友情提示一下,HR和面試者約的是幾點,面試者在那個時間點提前10分鐘到就行,太早到。那時候有個哥們,約的下午1點30面試,11點多就來了,我們是12點到1點30休息,一般我中午是有午休的,那哥們這一來,雖然最後還是1:30面試,但是我一中午沒睡,有點傷。還有那哥們的一個操作,也是差點把老夫秀翻,那時候正在面試ing…, 突然他電話響了,他說他接個電話,然後走開離我差不多三米的地方,和對方約第二天下午的面試。。。?

其實面了三四個的時候,就有一個哥們,很合適了,我使勁渾身解數盡量往深度問,發現他都能答上來,反正技術肯定甩我好幾個身位的,然後我也如實和我們老大說了,由他進行二面,但是最終這哥們還是理智地選擇了大廠?~

小廠招聘有一個劣勢,就是比如你錢和大廠一樣,甚至稍高一點,別人也大概率會選擇大廠,光環在那,但是小廠畢竟資金有限,所以其實有時候就陷入一種境地,要的人他不來,想來的又達不到要求。陸陸續續面了可能半個多月吧,發現如果不降低面試要求,就我們廠應該很難搶到別人要的人了,最後把目標鎖定在 => 經驗豐富,能幹活的就行。

最終有兩個哥們入圍了決賽圈,如果僅從短暫的面試來看,實力應該差不多,期望薪資有點差距,最終 HR 從經濟的角度出發,選擇了那個性價比較高的,(當然那哥們那時候的工資也遠超過我?)但是這裡確實有一個很血粼粼的現實問題出現了,當兩個人水平相當的時候,確實招聘方從成本角度出發,可能會優先考慮要價低的,所以有時候你面試的時候,對方說幾天內給你消息,這時候可能就是在權衡性價比?


理想目標

面試官招人要說合格的話,最理想的目標應該是符合以下幾個標準:

  • 要基礎紮實,頭腦靈活聰明的
  • 思維清晰,善於溝通的
  • 和團隊風格匹配的
  • 喜歡鑽研,對技術有追求的

敲黑板!重點來了

這段時間,看了不下一百分簡歷,面了也有一二十個人,簡歷合格的其實不多,這裡有幾個小小的建議:

  • 簡歷可以直接用 markdown 格式的
    • 接到過好多word格式的,打開排版全亂了
  • 簡歷不要寫太多,一般 2 頁夠了,不要從網上抄一大堆 JD,不要有錯別字
  • 簡歷實事求是,別太浮誇
    • 收到過好幾個哥們簡歷 5 年經驗,面試表現不如實習生的,感覺水分可能還是有一點
  • 寫進簡歷的,都要對他負責任,做好準備
    • 完全不懂的就不要寫
    • 慎用精通!
    • 用技術亮點吸引面試官
  • 要有亮點
    • 大廠背景
    • 名校背景
    • 都沒有的話,GitHub && 技術部落格很重要
      • (如果想進大廠的話,這個很重要!)
  • 面試前,準備工作要先準備好
    • 把要演示的 App 先安裝好,面試官如果要看能直接演示的
      • 遇到過不止一個被問到能否演示的時候,才去 App Store 下載的
    • 如果你是iOS開發,盡量用 iPhone 手機演示
      • 遇到過用Android手機演示的,說iOS的和這個都一樣,有點醉
    • 來之前檢查下手機電量
      • 遇到過3%電的,我首頁點了沒兩分鐘,直接沒電了?
    • 注意App的版本是否正確
      • 遇到過一個 App 一划就crash的,最後得出的結論,是版本裝錯了,其實這個bug修復了~ ?
  • 回答問題簡明扼要,挑重點回答
    • 不要問你 who,你回答 how。 問你 where,你回答 when (英語老師饒命?)
    • 不要回答一大堆毫不相干的,一句話能表述的,說一兩百字,但是回答不到重點的
  • 要掌握主動權
    • 從自我介紹開始,挑一些自己比較擅長的領域,引導面試官來問你
    • 如果面試官進入到自己熟悉的領域,由淺入深慢慢引導其繼續發問
      • ?: KVO -> isa混寫 -> 底層原理 ->。。。
    • 如果正好問到知識盲區,虛心請教,讓面試官給點提示引導下~
  • 其實面試過沒過,面試結束的時候,憑自己的感覺,也能猜到個八分了,如果全程無障礙溝通,對方問的問題也都能答得上七七八八,準備接offer吧兄弟~

面試考點(根據簡歷由淺入深提問)

初級

  1. copy 和 mutablecopy 的區別
    • NSarry 用 copy 和 mutablecopy 修飾的不同
    • NSMutableArry 用 copy 和 mutablecopy 修飾的不同
  2. 介紹一下 TableView 的代理和數據源方法
    • 講一下他們的調用順序
  3. 介紹控制器的聲明周期
  4. 介紹下通知,代理 和 block,使用的場景分別是什麼
  5. 代理修飾為什麼用weak,
    • 擴展:知道什麼是循環引用嗎
  6. 屬性的關鍵字都有哪些,默認的是哪些
  7. 使用 #import 跟 #include 、@class 的區別是什麼,分別在什麼情況下使用
    • 擴展:在.h 文件中一般使用哪個,為什麼
  8. 原子(atomic)跟非原子(non-atomic)屬性有什麼區別?
    • atomic一定是執行緒安全的嗎?
  9. 淺複製和深複製的區別? 可以舉個?嗎
  10. category 和 extensions 的區別,在項目中使用過嗎
    • category 可以添加屬性嗎
  11. 了解KVO 和 KVC 嗎?
  12. 對於單例的理解
  13. frame和bounds有什麼不同
  14. iOS 中的多執行緒有哪些
    • GCD的一些常用的函數(group,barrier,訊號量,執行緒同步)
  15. 實現數據持久化的幾個方案
    • 介紹一下沙盒模型,存儲的位置
  16. 用過 UICollectionView 嗎?如何實現一個流水布局
    • 一般是根據項目問
  17. 了解 svn, git 等版本控制工具么
    • 如果有寫git,可以拓展一下 git 的一些指令問題(merge 和 rebase 區別等等)
    • 分支管理
    • 一次發版的流程
  18. 簡述記憶體分區情況
  19. 隊列和棧有什麼區別
  20. Http請求了解嗎
    • 知道什麼是Restful API 嗎
    • GET 和 POST 請求的區別
    • 特殊的狀態碼,比如401、503,201的意義
      • 或者直接問 4XX 是哪端的錯誤

中級

  1. 講述類和結構體的區別,了解什麼是 isa指針嗎
  2. 消息查找的順序
    • 子類調用父類的對象方法,執行的流程是如何的?
  3. 如何實現消息轉發
  4. 給一個nil對象發消息會crash嗎
  5. 有使用過分類嗎
    • 分類會"覆蓋" 原來的方法嗎
    • 分類可以添加屬性嗎,了解關聯對象嗎
    • 分類的內部結構是什麼
  6. 各種Block
    • 有遇到過記憶體泄漏嗎
  • Block的幾種類型
    • Block的變數捕捉
  • __block中的 _ forwarding 指針
    • ARC下和MRC下,__block的區別
  1. KVO & KVC 細問
    • 什麼是 isa 混寫
    • 如何手動觸發一個 value 的 KVO
    • KVC修改屬性是否會觸發KVO
  2. 為什麼 delegate 設置為 weak 就不會有循環引用
    • 了解什麼是哈希表嗎
    • 弱引用表做了什麼
  3. 對UITableView有做過什麼優化嗎
    • UITableView 為什麼會卡頓
    • 如何避免卡頓
  4. 最熟悉的第三方庫是什麼
    • 99.9%是回答 SDWebImage
      • 問一下 SDWebImage 的快取機制
      • 如果設計一個圖片下載框架
      • 引導對方說出 LRU 演算法
    • 萬一回答 AFNetworking
      • 問下 AFNetworing 有遇到記憶體泄漏嗎
      • 有沒有對 AFNetworing 進行二次封裝過
      • 有沒有對 AFNetworing 中的常駐現場有了解
      • 有辦法自己寫一個常駐執行緒嗎
    • 如果回答 Masonry
      • 問一些自動布局相關的
      • 兩個label相互擠壓拉伸的
      • 讓幾個控制項平等均勻分布的
      • 原生的autolayout了解嗎
  5. RunLoop (除非對方有寫,不然不建議問!!)
    • 介紹下主執行緒的 RunLoop
    • RunLoop有幾種mode
    • 為什麼 ScrollView 滾動的時候圖片輪播器會停止
      • 如果面試者項目中有這個情況
  6. 記憶體管理可以問一問(如果他有寫)
    • 定時器target的記憶體泄漏
    • autorelease的原理
    • weak 和 assign 的原理
    • 引用計數器的存儲

高級

沒有?(本人水平有限,距離高級距離太遠,就不嫌丑了)


閑聊

溝通能力,理解能力其實都算軟實力,在面試過程中如果對面試官的問題理解不過來的,可以多和面試官多溝通,一定要等真正get到考點的時候再答,不要亂答一氣。(其實很多題目就是讓你回答不上來的,面試官有時候並不是真的要考你某個很深的知識點,是想看你思維能力,能否在他引導之下給出他想要的答案,哪怕是錯的,有很多時候其實也過了~)

有沒有開源精神其實在面試中也是很加分的。不過確實很多面試者沒有寫部落格的習慣,也不少人不了解 GitHub 是啥。如果是大廠,對這方面要求會比較高,然後問下

當然和team風格是否合拍也特別重要,如果你在面試過程中覺得特別不舒服,一般這個團隊就不適合你,畢竟面試也算雙向選擇(雖然企業相對來說處於領先的位置)。

老實說,一個人面試者過來合不合適,聊個510分鐘其實在面試官心裡就能看個七七八八了。一個人還沒來面試前,從他的簡歷上其實也很多時候能看個五五六六了?,所以簡歷和第一印象真的非常重要哈

總的來說,今年的大環境確實不太好,但是還是希望大家可以找到一個心儀的工作~

打個廣告,如果是廈門地區的,有打算換工作的,Ringcentral了解一下,955榜上有名的,簡歷可以發我內推,成功之後請你吃大餐? (2020年Q1前能入職的,送air pod pro!!)