招聘一個靠譜的 iOS程式員,靠譜ios程式員

來源:互聯網
上載者:User

招聘一個靠譜的 iOS程式員,靠譜ios程式員
一個靠譜的簡曆

簡曆非常能反映一個人的性格和水平,相比於你在學校獲得多少獎項,工作經曆、項目經 曆、熟悉的技術等更加關鍵,如果還有部落格和一些 Github 上的項目,好感度++,但記得在去面試前收拾下,我們真的會挨個檔案 review 你的開原始碼的。我們還喜歡關注一些細節,比如簡曆裡關鍵字的拼字,看似無關緊要但很能反映出對自己的要求,經常見一個簡曆中 iOS 這三個字母的拼字就出現 IOS、iOS、ios 三種的,非常不能忍,再列舉幾個常見問題:

iPhone -> IPHONE IPhone
Xcode -> XCode xcode
Objective-C -> Object-C
JSON -> Json
HTTP -> Http

還有,注意中英文間用一個半形空格隔開,排版會漂亮很多,簡曆承載的不僅是內容,還有細節和態度,上面這些點往往都反映著面試者的代碼風格、做事的認真程度。當然,簡曆寫的很漂亮但面聊之後發現啥都不會的也有,甚至見過來面試上來就跟我說簡曆是假的,就想求個面試機會這種 - -

面試

別遲到,別遲到,別遲到,重要的事說三遍。有變動提前通知 HR,碰到過臨時有事沒來,和誰都不說一聲,打電話過去還要求改個時間的,這種直接拜拜。
面試時最好準備紙、筆、簡曆,可能用不上,但很能體現認真程度。有條件的話帶著 Mac 和源碼,手機中裝好所有在簡曆中出現的 App。

關於演算法

我們是實用主義,iOS 開發中很少需要自己寫複雜的演算法,所以不在面試考核標準中。

代碼規範

這是一個重點考察項,曾經在微博上發過一個風格錯誤修正題:

也曾在面試時讓人當場改過,槽點不少,能夠有 10 處以上修改的就基本達到標準了(處女座的人在這方面表現都很優秀

一個區分度很大的面試題

考察一個面試者基礎咋樣,基本上問一個 @property 就夠了:

  • @property 後面可以有哪些修飾符?
  • 什麼情況使用 weak 關鍵字,相比 assign 有什麼不同?
  • 怎麼用 copy 關鍵字?
  • 這個寫法會出什麼問題: @property (copy) NSMutableArray *array;
  • 如何讓自己的類用 copy 修飾符?如何重寫帶 copy 關鍵字的 setter?

這一套問題區分度比較大,如果上面的問題都能回答正確,可以延伸問更深入點的:

  • @property 的本質是什嗎?ivar、getter、setter 是如何產生並添加到這個類中的
  • @protocol 和 category 中如何使用 @property
  • runtime 如何? weak 屬性

每個人擅長的領域不一樣,我們一般會從簡曆上找自己寫擅長的技術聊,假如自己並不是很熟,最好別寫出來或扯出來,萬一面試官剛好非常精通這裡就露餡了。

Checklist

總結過些面試題,沒堅持下去,後來把這些當 checklist,面試的時候實在沒話聊的時候做個提醒,語言、架構、運行機制性質的:

[※]@property中有哪些屬性關鍵字?
[※]weak屬性需要在dealloc中置nil嗎?
[※※]@synthesize和@dynamic分別有什麼作用?
[※※※]ARC下,不顯式指定任何屬性關鍵字時,預設的關鍵字都有哪些?
[※※※]用@property聲明的NSString(或NSArrayNSDictionary)經常使用copy關鍵字,為什嗎?如果改用strong關鍵字,可能造成什麼問題?
[※※※]@synthesize合成執行個體變數的規則是什嗎?假如property名為foo,存在一個名為_foo的執行個體變數,那麼還會自動合成新變數嗎?
[※※※※※]在有了自動合成屬性執行個體變數之後,@synthesize還有哪些使用情境?

[※※]objc中向一個nil對象發送訊息將會發生什嗎?
[※※※]objc中向一個對象發送訊息[obj foo]objc_msgSend()函數之間有什麼關係?
[※※※]什麼時候會報unrecognized selector的異常?
[※※※※]一個objc對象如何進行記憶體布局?(考慮有父類的情況)
[※※※※]一個objc對象的isa的指標指向什嗎?有什麼作用?
[※※※※]下面的代碼輸出什嗎?

1
2
3
4
5
6
7
8
9
10
11
@implementation Son : Father
- (id)init
{
self = [super init];
if (self) {
NSLog(@"%@", NSStringFromClass([self class]));
NSLog(@"%@", NSStringFromClass([super class]));
}
return self;
}
@end

[※※※※]runtime如何通過selector找到對應的IMP地址?(分別考慮類方法和執行個體方法)
[※※※※]使用runtime Associate方法關聯的對象,需要在主對象dealloc的時候釋放嗎?
[※※※※※]objc中的類方法和執行個體方法有什麼本質區別和聯絡?
[※※※※※]_objc_msgForward函數是做什麼的,直接調用它將會發生什嗎?
[※※※※※]runtime如何?weak變數的自動置nil?
[※※※※※]能否向編譯後得到的類中增加執行個體變數?能否向運行時建立的類中添加執行個體變數?為什嗎?

[※※※]runloop和線程有什麼關係?
[※※※]runloop的mode作用是什嗎?
[※※※※]以+ scheduledTimerWithTimeInterval...的方式觸發的timer,在滑動頁面上的列表時,timer會暫訂回調,為什嗎?如何解決?
[※※※※※]猜想runloop內部是如何?的?

[※]objc使用什麼機制管理對象記憶體?
[※※※※]ARC通過什麼方式協助開發人員管理記憶體?
[※※※※]不手動指定autoreleasepool的前提下,一個autorealese對象在什麼時刻釋放?(比如在一個vc的viewDidLoad中建立)
[※※※※]BAD_ACCESS在什麼情況下出現?
[※※※※※]蘋果是如何?autoreleasepool的?

[※※]使用block時什麼情況會發生引用迴圈,如何解決?
[※※]在block內如何修改block外部變數?
[※※※]使用系統的某些block api(如UIView的block版本寫動畫時),是否也考慮引用迴圈問題?

[※※]GCD的隊列(dispatch_queue_t)分哪兩種類型?
[※※※※]如何用GCD同步若干個非同步呼叫?(如根據若干個url非同步載入多張圖片,然後在都下載完成後合成一張整圖)
[※※※※]dispatch_barrier_async的作用是什嗎?
[※※※※※]蘋果為什麼要廢棄dispatch_get_current_queue?
[※※※※※]以下代碼運行結果如何?

1
2
3
4
5
6
7
8
9
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"1");
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"2");
});
NSLog(@"3");
}

[※※]addObserver:forKeyPath:options:context:各個參數的作用分別是什麼,observer中需要實現哪個方法才能獲得KVO回調?
[※※※]如何手動觸發一個value的KVO
[※※※]若一個類有執行個體變數NSString *_foo,調用setValue:forKey:時,可以以foo還是_foo作為key?
[※※※※]KVC的keyPath中的集合運算子如何使用?
[※※※※]KVC和KVO的keyPath一定是屬性嗎?
[※※※※※]如何關閉預設的KVO的預設實現,並進入自訂的KVO實現?
[※※※※※]apple用什麼方式實現對一個對象的KVO?

[※※]IBOutlet連出來的視圖屬性為什麼可以被設定成weak?
[※※※※※]IB中User Defined Runtime Attributes如何使用?

[※※※]如何調試BAD_ACCESS錯誤
[※※※]lldb(gdb)常用的調試命令?

這些小題可以做為討論的入口,根據面試者的回答再繼續聊下去。其中一些題比較底層,是留給屌屌的面試者或者試探評級用的,一般情況並不是重點的考察內容。

業務能力

畢竟平常的工作內容不是 runtime、runloop,不怎麼會用到底層的黑魔法,80% 的時間都是和搭建頁面、寫商務邏輯、網路請求打交道。
要求面試者能夠熟練構建 UI,我會找一個面試者做過的頁面讓他分析下頁面結構、約束或者 frame 布局的連法和計算方法;有時也會讓面試者說說 UITableView 常用的幾個 delegate 和 data source 代理方法,動態 Cell 高度計算什麼的;接下來,在手機裡隨便找一個 App 的頁面,讓面試者當場說說如果是他寫應該用哪些 UI 組件和布局方式等。問幾個問題後就能大概瞭解業務能力了,我們這邊重度使用 IB 和 AutoLayout,假如面試者依然使用代碼碼 UI 也到沒關係,有“從良”意願就很好~

程式架構和一些設計模式如果面試者自己覺得還不錯的話也會聊聊,但跪求別說 Singleton 了,用的越多對水平就越表示懷疑。對設計模式自信的我一般問一個問題,抽象原廠模式在 Cocoa SDK 中哪些類中體現?
架構上 MVC 還是 MVVM 還是 MVP 神馬的到是可以聊聊各自的見解,反正也沒有正確答案,只要別搞的太離譜就行,比如有的人說網路請求和資料庫的操作最好放到 UIView 的子類裡面幹。

網路請求、資料庫等各家都有成熟的封裝,基本知道咋用就行。除此之外,我們還會順帶的問下除了 iOS 開發外,還會什麼其他程式設計語言、或者熟悉哪種指令碼語言和 Terminal 操作等,甚至還問問是如何FQ- -,相信這些技能都是很重要的。

性格

大家都是寫程式的,沒啥必要用奇怪的、很難的問題難為對方,更關鍵的還是性格,和 Team 的風格是不是和的來。一個心態良好的面試者需要有個平常心,不傲嬌也不跪舔,表達要正常,經常遇到問一個問題後一兩分鐘一直處於沉思狀態,一句話不說,交流像擠牙膏一樣,很是憋屈;還有非常屌屌的,明明不懂仍然強行據理力爭,鎮得住面試官也罷,撞槍口上就別怪不客氣了- - 。決定要不要一個人基本上聊 5 分鐘就可以確定了,喜歡水到渠成的感覺,看對眼了擋都擋不住。

招聘告一段落,後面將會有更精彩的事情發生。最後,再次感謝大家的支援和對我的信任。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.