招聘一個(gè)靠譜的 iOS及答案

題目原地址:http://blog.sunnyxx.com/2015/07/04/ios-interview/?

招聘一個(gè)靠譜的 iOS

近一年內(nèi)陸續(xù)面試了不少人了,從面試者到面試官的轉(zhuǎn)變讓我對(duì) iOS 招聘有了更多的感受。經(jīng)過(guò)了前段時(shí)間的一大波面試,我們終于找到了志同道合的小伙伴,面試也暫時(shí)告一段落了。總結(jié)下面試人過(guò)程中的感受,你也可以讀到我們對(duì)簡(jiǎn)歷、算法、性格、iOS 基礎(chǔ)、底層知識(shí)的看法和一些常問(wèn)的面試題。

一個(gè)靠譜的簡(jiǎn)歷

簡(jiǎn)歷非常能反映一個(gè)人的性格和水平,相比于你在學(xué)校獲得多少獎(jiǎng)項(xiàng),工作經(jīng)歷、項(xiàng)目經(jīng)歷、熟悉的技術(shù)等更加關(guān)鍵,如果還有博客和一些 Github 上的項(xiàng)目,好感度++,但記得在去面試前收拾下,我們真的會(huì)挨個(gè)文件 review 你的開(kāi)源代碼的。我們還喜歡關(guān)注一些細(xì)節(jié),比如簡(jiǎn)歷里關(guān)鍵字的拼寫(xiě),看似無(wú)關(guān)緊要但很能反映出對(duì)自己的要求,經(jīng)常見(jiàn)一個(gè)簡(jiǎn)歷中 **iOS** 這三個(gè)字母的拼寫(xiě)就出現(xiàn) IOS、iOS、ios 三種的,非常不能忍,再列舉幾個(gè)常見(jiàn)問(wèn)題:

iPhone -> IPHONE IPhone

Xcode -> XCode xcode

Objective-C -> Object-C

JSON -> JsonHTTP -> Http

還有,注意中英文間用一個(gè)半角空格隔開(kāi),排版會(huì)漂亮很多,簡(jiǎn)歷承載的不僅是內(nèi)容,還有細(xì)節(jié)和態(tài)度,上面這些點(diǎn)往往都反映著面試者的代碼風(fēng)格、做事的認(rèn)真程度。當(dāng)然,簡(jiǎn)歷寫(xiě)的很漂亮但面聊之后發(fā)現(xiàn)啥都不會(huì)的也有,甚至見(jiàn)過(guò)來(lái)面試上來(lái)就跟我說(shuō)簡(jiǎn)歷是假的,就想求個(gè)面試機(jī)會(huì)這種

面試

別遲到,別遲到,別遲到,重要的事說(shuō)三遍。有變動(dòng)提前通知 HR,碰到過(guò)臨時(shí)有事沒(méi)來(lái),和誰(shuí)都不說(shuō)一聲,打電話過(guò)去還要求改個(gè)時(shí)間的,這種直接拜拜。面試時(shí)最好準(zhǔn)備紙、筆、簡(jiǎn)歷,可能用不上,但很能體現(xiàn)認(rèn)真程度。有條件的話帶著 Mac 和源碼,手機(jī)中裝好所有在簡(jiǎn)歷中出現(xiàn)的 App。

關(guān)于算法

我們是實(shí)用主義,iOS 開(kāi)發(fā)中很少需要自己寫(xiě)復(fù)雜的算法,所以不在面試考核標(biāo)準(zhǔn)中。

代碼規(guī)范

1.這是一個(gè)重點(diǎn)考察項(xiàng),曾經(jīng)在微博上發(fā)過(guò)一個(gè)風(fēng)格糾錯(cuò)題:

也曾在面試時(shí)讓人當(dāng)場(chǎng)改過(guò),槽點(diǎn)不少,能夠有 10 處以上修改的就基本達(dá)到標(biāo)準(zhǔn)了(處女座的人在這方面表現(xiàn)都很優(yōu)秀

)

一個(gè)區(qū)分度很大的面試題

考察一個(gè)面試者基礎(chǔ)咋樣,基本上問(wèn)一個(gè) @property 就夠了:

. @property 后面可以有哪些修飾符?

2.什么情況使用 weak 關(guān)鍵字,相比 assign 有什么不同?

3.怎么用 copy 關(guān)鍵字?

4.這個(gè)寫(xiě)法會(huì)出什么問(wèn)題:@property (copy) NSMutableArray *array;

5.如何讓自己的類(lèi)用 copy 修飾符?如何重寫(xiě)帶 copy 關(guān)鍵字的 setter?

6.這一套問(wèn)題區(qū)分度比較大,如果上面的問(wèn)題都能回答正確,可以延伸問(wèn)更深入點(diǎn)的:

7.@property 的本質(zhì)是什么?ivar、getter、setter 是如何生成并添加到這個(gè)類(lèi)中的

@protocol 和 category 中如何使用 @property

8.runtime 如何實(shí)現(xiàn) weak 屬性

每個(gè)人擅長(zhǎng)的領(lǐng)域不一樣,我們一般會(huì)從簡(jiǎn)歷上找自己寫(xiě)擅長(zhǎng)的技術(shù)聊,假如自己并不是很熟,最好別寫(xiě)出來(lái)或扯出來(lái),萬(wàn)一面試官剛好非常精通這里就露餡了。

Checklist

總結(jié)過(guò)些面試題,沒(méi)堅(jiān)持下去,后來(lái)把這些當(dāng) checklist,面試的時(shí)候?qū)嵲跊](méi)話聊的時(shí)候做個(gè)提醒,語(yǔ)言、框架、運(yùn)行機(jī)制性質(zhì)的:

9.@property中有哪些屬性關(guān)鍵字?

10.weak屬性需要在dealloc中置nil么?

11.@synthesize和@dynamic分別有什么作用?

12.ARC下,不顯式指定任何屬性關(guān)鍵字時(shí),默認(rèn)的關(guān)鍵字都有哪些?

13.用@property聲明的NSString(或NSArray,NSDictionary)經(jīng)常使用copy關(guān)鍵字,為什么?如果改用strong關(guān)鍵字,可能造成什么問(wèn)題?

14.@synthesize合成實(shí)例變量的規(guī)則是什么?假如property名為foo,存在一個(gè)名為_(kāi)foo的實(shí)例變量,那么還會(huì)自動(dòng)合成新變量么?

15.在有了自動(dòng)合成屬性實(shí)例變量之后,@synthesize還有哪些使用場(chǎng)景?

16.objc中向一個(gè)nil對(duì)象發(fā)送消息將會(huì)發(fā)生什么?

17.objc中向一個(gè)對(duì)象發(fā)送消息[obj foo]和objc_msgSend()函數(shù)之間有什么關(guān)系?

18.什么時(shí)候會(huì)報(bào)unrecognized selector的異常?

19.一個(gè)objc對(duì)象如何進(jìn)行內(nèi)存布局?(考慮有父類(lèi)的情況)

20.一個(gè)objc對(duì)象的isa的指針指向什么?有什么作用?

21.下面的代碼輸出什么?

@implementation Son : Father

- (id)init

{

self = [super init];

if (self) {

NSLog(@"%@", NSStringFromClass([self class]));

NSLog(@"%@", NSStringFromClass([super class]));

}

return self;

}

@end

22.runtime如何通過(guò)selector找到對(duì)應(yīng)的IMP地址?(分別考慮類(lèi)方法和實(shí)例方法)

23.使用runtime Associate方法關(guān)聯(lián)的對(duì)象,需要在主對(duì)象dealloc的時(shí)候釋放么?

24.objc中的類(lèi)方法和實(shí)例方法有什么本質(zhì)區(qū)別和聯(lián)系?

25._objc_msgForward函數(shù)是做什么的,直接調(diào)用它將會(huì)發(fā)生什么?

26.runtime如何實(shí)現(xiàn)weak變量的自動(dòng)置nil?

27.能否向編譯后得到的類(lèi)中增加實(shí)例變量?能否向運(yùn)行時(shí)創(chuàng)建的類(lèi)中添加實(shí)例變量?為什么?

28.runloop和線程有什么關(guān)系?

29.runloop的mode作用是什么?

30.以+ scheduledTimerWithTimeInterval...的方式觸發(fā)的timer,在滑動(dòng)頁(yè)面上的列表時(shí),timer會(huì)暫定回調(diào),為什么?如何解決?

31.猜想runloop內(nèi)部是如何實(shí)現(xiàn)的?

32.objc使用什么機(jī)制管理對(duì)象內(nèi)存?

33.ARC通過(guò)什么方式幫助開(kāi)發(fā)者管理內(nèi)存?

34.不手動(dòng)指定autoreleasepool的前提下,一個(gè)autorealese對(duì)象在什么時(shí)刻釋放?(比如在一個(gè)vc的viewDidLoad中創(chuàng)建)

35.BAD_ACCESS在什么情況下出現(xiàn)?

36.蘋(píng)果是如何實(shí)現(xiàn)autoreleasepool的?

37.使用block時(shí)什么情況會(huì)發(fā)生引用循環(huán),如何解決?

38.在block內(nèi)如何修改block外部變量?

39.使用系統(tǒng)的某些block api(如UIView的block版本寫(xiě)動(dòng)畫(huà)時(shí)),是否也考慮引用循環(huán)問(wèn)題?

40.GCD的隊(duì)列(dispatch_queue_t)分哪兩種類(lèi)型?

41.如何用GCD同步若干個(gè)異步調(diào)用?(如根據(jù)若干個(gè)url異步加載多張圖片,然后在都下載完成后合成一張整圖)

42.dispatch_barrier_async的作用是什么?

43.蘋(píng)果為什么要廢棄dispatch_get_current_queue?

44.以下代碼運(yùn)行結(jié)果如何?

- (void)viewDidLoad

{

[super viewDidLoad];

NSLog(@"1");

dispatch_sync(dispatch_get_main_queue(), ^{

NSLog(@"2");

});

NSLog(@"3");

}

45.addObserver:forKeyPath:options:context:各個(gè)參數(shù)的作用分別是什么,observer中需要實(shí)現(xiàn)哪個(gè)方法才能獲得KVO回調(diào)?

46.如何手動(dòng)觸發(fā)一個(gè)value的KVO

47.若一個(gè)類(lèi)有實(shí)例變量NSString *_foo,調(diào)用setValue:forKey:時(shí),可以以foo還是_foo

作為key?

48.KVC的keyPath中的集合運(yùn)算符如何使用?

49.KVC和KVO的keyPath一定是屬性么?

50.如何關(guān)閉默認(rèn)的KVO的默認(rèn)實(shí)現(xiàn),并進(jìn)入自定義的KVO實(shí)現(xiàn)?

51.apple用什么方式實(shí)現(xiàn)對(duì)一個(gè)對(duì)象的KVO?

52.IBOutlet連出來(lái)的視圖屬性為什么可以被設(shè)置成weak?

53.IB中User Defined Runtime Attributes如何使用?

54.如何調(diào)試BAD_ACCESS錯(cuò)誤

55.lldb(gdb)常用的調(diào)試命令?

這些小題可以做為討論的入口,根據(jù)面試者的回答再繼續(xù)聊下去。其中一些題比較底層,是留給屌屌的面試者或者試探評(píng)級(jí)用的,一般情況并不是重點(diǎn)的考察內(nèi)容。

業(yè)務(wù)能力

畢竟平常的工作內(nèi)容不是 runtime、runloop,不怎么會(huì)用到底層的黑魔法,80% 的時(shí)間都是和搭建頁(yè)面、寫(xiě)業(yè)務(wù)邏輯、網(wǎng)絡(luò)請(qǐng)求打交道。要求面試者能夠熟練構(gòu)建 UI,我會(huì)找一個(gè)面試者做過(guò)的頁(yè)面讓他分析下頁(yè)面結(jié)構(gòu)、約束或者 frame 布局的連法和計(jì)算方法;有時(shí)也會(huì)讓面試者說(shuō)說(shuō) UITableView 常用的幾個(gè) delegate 和 data source 代理方法,動(dòng)態(tài) Cell 高度計(jì)算什么的;接下來(lái),在手機(jī)里隨便找一個(gè) App 的頁(yè)面,讓面試者當(dāng)場(chǎng)說(shuō)說(shuō)如果是他寫(xiě)應(yīng)該用哪些 UI 組件和布局方式等。問(wèn)幾個(gè)問(wèn)題后就能大概了解業(yè)務(wù)能力了,我們這邊重度使用 IB 和 AutoLayout,假如面試者依然使用代碼碼 UI 也到?jīng)]關(guān)系,有“從良”意愿就很好~

程序架構(gòu)和一些設(shè)計(jì)模式如果面試者自己覺(jué)得還不錯(cuò)的話也會(huì)聊聊,但跪求別說(shuō) Singleton 了,用的越多對(duì)水平就越表示懷疑。對(duì)設(shè)計(jì)模式自信的我一般問(wèn)一個(gè)問(wèn)題,抽象工廠模式在 Cocoa SDK 中哪些類(lèi)中體現(xiàn)?架構(gòu)上 MVC 還是 MVVM 還是 MVP 神馬的到是可以聊聊各自的見(jiàn)解,反正也沒(méi)有正確答案,只要?jiǎng)e搞的太離譜就行,比如有的人說(shuō)網(wǎng)絡(luò)請(qǐng)求和數(shù)據(jù)庫(kù)的操作最好放到 UIView 的子類(lèi)里面干。

網(wǎng)絡(luò)請(qǐng)求、數(shù)據(jù)庫(kù)等各家都有成熟的封裝,基本知道咋用就行。除此之外,我們還會(huì)順帶的問(wèn)下除了 iOS 開(kāi)發(fā)外,還會(huì)什么其他編程語(yǔ)言、或者熟悉哪種腳本語(yǔ)言和 Terminal 操作等,甚至還問(wèn)問(wèn)是如何翻墻- -,相信這些技能都是很重要的。

性格

大家都是寫(xiě)程序的,沒(méi)啥必要用奇怪的、很難的問(wèn)題難為對(duì)方,更關(guān)鍵的還是性格,和 Team 的風(fēng)格是不是和的來(lái)。一個(gè)心態(tài)良好的面試者需要有個(gè)平常心,不傲嬌也不跪舔,表達(dá)要正常,經(jīng)常遇到問(wèn)一個(gè)問(wèn)題后一兩分鐘一直處于沉思狀態(tài),一句話不說(shuō),交流像擠牙膏一樣,很是憋屈;還有非常屌屌的,明明不懂仍然強(qiáng)行據(jù)理力爭(zhēng),鎮(zhèn)得住面試官也罷,撞槍口上就別怪不客氣了- - 。決定要不要一個(gè)人基本上聊 5 分鐘就可以確定了,喜歡水到渠成的感覺(jué),看對(duì)眼了擋都擋不住。


《招聘一個(gè)靠譜的iOS》面試題參考答案(上)

《招聘一個(gè)靠譜的iOS》面試題參考答案(下)?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,687評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,640評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,957評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,682評(píng)論 6 413
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 56,011評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評(píng)論 3 449
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,183評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,714評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,435評(píng)論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,665評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,838評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,251評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,588評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,379評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,627評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容