招聘一個靠譜的 iOS程式員

来源:http://www.cnblogs.com/jgCho/archive/2016/03/14/5276126.html
-Advertisement-
Play Games

簡歷非常能反映一個人的性格和水平,相比於你在學校獲得多少獎項,工作經歷、項目經 歷、熟悉的技術等更加關鍵,如果還有博客和一些 Github 上的項目,好感度++,但記得在去面試前收拾下,我們真的會挨個文件 review 你的開源代碼的。我們還喜歡關註一些細節,比如簡歷里關鍵字的拼寫,看似無關緊要但很


一個靠譜的簡歷

簡歷非常能反映一個人的性格和水平,相比於你在學校獲得多少獎項,工作經歷、項目經 歷、熟悉的技術等更加關鍵,如果還有博客和一些 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 分鐘就可以確定了,喜歡水到渠成的感覺,看對眼了擋都擋不住。

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 好像有一段時間沒有寫博客了……今天剛好總結一下rem的使用方法 首先,先說一個常識,瀏覽器的預設字體高都是16px。步入正題 〉 目前,IE9+,Firefox、Chrome、Safari、Opera 的主流版本都支持了rem。 就算對不支持的瀏覽器,應對方法也很簡單,就是多寫一個絕對單位的聲明。這
  •                                                   
  •   在工作中我們會收藏很多網址。以前一直都是用的chrome裡面的收藏夾。後面覺得一點都不方便。看一下Chrome插件開發挺容易入手的所以自己寫了一個Chrome插件.          基於:Angularjs + Bootstrap的.          主界面:      功能描述:     
  • 更換字體 這是第一個圖標(蜜蜂推薦)是擼主原來的圖標 這是UI給的效果圖的圖標,顯然預設的圖標不符合要求 查找圖標所在的樣式,在tabs.html文件中 icon off="ion ios star" icon on="ion iso sunny" ion ios star為實體,ion ios s
  • [1]定義 [2]標準樣式 [3]拓展樣式 [4]私有樣式 [5]自定義樣式 [6]常見應用
  • 絕對定位的元素,其父元素用position:absolute;也可以。 連接: http://www.zhihu.com/question/19926700  
  •   function person(name,age) { //局部變數 var name = name; var age = age; var addYear = function() { age++; alert(age); } return addYear; }//閉包:局部變數和函數運行完成
  • 有時候我們需要利用js來動態生成頁面上style標簽中的css代碼,方法很直接,就是直接創建一個style元素,然後設置style元素裡面的css代碼,最後把它插入到head元素中。 但有些相容性問題我們需要解決。首先在符合w3c標準的瀏覽器中我們只需要把要插入的css代碼作為一個文本節點插入到st
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...