iOS考題整理

長久以來,我們就常看到一些徵才的文章,告訴我們國外團隊是怎麼找人的。像是pair programming、on-site coding、白板考演算法、看github contribute。

上個月面試了幾家公司,其中幾家是上市公司,最少也是100個人的大小,每個都說自己是行動開發知名團隊。加上之前找工作時有找過幾家,差不多也寫過20家公司的考卷了。有些公司是剛成立mobile team,寫最久的工程師不超過一年,那demo幾個作品聊兩句就會結束了。

至於那些大公司嘛,大概會有這兩個特色:

1.筆試

絕對不會上機考,也就是說,讓應徵者使用進來工作後完全不一樣的工具、完全不一樣的環境、也完全不提供任何語法reference。

考觀念或演算法就算了,大部分竟然是要手寫程式碼,iOS每年更新幾百隻甚至上千支api,誰背得起來啊!就算是常用的api,有些長度已經是不用autocomplete就打不出來的程度。我同事有次autocomplete壞掉,連NSDictionary都差點拼不出來。

我看到這現象,都會對這間公司扣20分。不過大家都一樣,所以應該說有考live coding的直接加20分。

2.不考ObjC

看到這一步,我已經想謝謝再聯絡了。大概遇到一半都是這樣,比例高得驚人阿!

這家公司又準備要讓應徵者使用進來工作後用完全不一樣的工具、完全不一樣的環境、寫完全不一樣的語言、難道也是完全不一樣的職缺嗎?
(我還真的聽過某知名外商考java進來寫javascript)

這在越大型的公司越常發生,原本寫C的公司想要發展iOS app,就拿C的考卷來考。還遇過要我寫java或者php考卷。反而是新創公司或者接案公司就不會發生這種問題。

比較神奇的是有公司考sql query,還很鎮定的說這可以同時審核iOS跟Android工程師。

第一次遇到的時候可以說是驚訝、第三次遇到的時候是憤怒:你是在羞辱我嗎?後來再遇到的時候心情已經很平淡了,「喔!又來了喔」

以上句句屬實,有人想要那些公司的名字可以私下問我。

至於考的題目嘛(嘆)

第一次開始找工作的時候,我很緊張的把國外論壇上的面試題目作一遍,像是oDesk上面有幾份細的要命的考題、Codility上面也有演算法題。後來寫了幾家的題目....我才發現這根本是想太多,會考到這種程度的公司台灣不存在。

常常在怨歎找不到好人才的技術主管,到底有沒有想過要怎麼找人!


面試到目前為止,我只遇過一家,Splashtop,有拿筆電出來考coding能力、我也是後來才知道有同事透過遠端監控看我畫面上在幹嘛,算是藏起來的pair progrmming。早知道我應該開記事本跟他對話。當初的題目是要我做一個NavigationController 包tableView +custom cell +旋轉後元件不能歪+所有button點了要有alert。要求一個半小時完成我一小時就做好了。

這篇文章到目前為止都是抱怨文,下面是我看過比較正常的題目,原文都是英文,以下順便翻譯:

1.什麼是MVC、MVC的好處?

2.什麼是delegate?舉例?

3.什麼是KVO?寫個範例

4.實作callback的時候怎麼決定要用block還是delegate

5.thread之間要怎麼溝通?NSOperationQueue跟GCD的差別是?

6.objc裡面可不可以用try catch?為什麼不常看到?

7.請問HIG裡面說一個button最小的大小是多少?

8.在iOS6跟iOS7分別要怎麼樣客製化UIAlertView

9.MapView裡面要怎樣customized pin,有哪幾種作法? 除了原生mapKit還用過哪些圖資?

10.請實作singleton 

11.請實作一個factory 物件

12.請寫出view lifecycle

13. arc的壞處?

14.演算法題:都差不多,寫個小function或者給function要寫出output。
  • 給一串string吐回inverse
  • 把河內塔用push pop代替recursive寫一遍。
  • 或者ACM抄來的。
下面這幾題跟objC無關,但是寫iOS一定要知道,筆試不會考,都是我在面試時被問或問對方的:

1.有一天推播突然不能用了,有哪幾種可能?

2.要怎麼看 dsym

3.xib要怎麼和storyboard混用

4.storyboard上要怎麼用用客製化的view,xib上要怎麼用用客製化的view。

5.什麼是hash什麼是加密?各舉兩個例子。


以上應該是寫過一年到兩年的iOS developer可以答出的題目,有些問題甚至寫過一兩個案子就可以答出來了。

如果有公司想拿去面試不用徵求我的意見,可以直接拿。另一方面,如果自認是專業行動開發團隊,團隊內的工程師卻不能回答這些問題的話,那就要好好檢討了。