這篇文章是結合了《iOS 面試之道》的第一章“iOS 工程師的面試”部分以及自己的所掌握的知識內容所得,主要用於提醒自己和幫助其它同學。注意:本文章不保證資訊準確性,僅供參考!
簡歷的準備
頁數
簡歷通常最好是兩頁,一頁的簡歷會顯得過於簡潔,正常來說不管一個人在某個行業做得好與壞,都能夠把自己的所掌握的東西轉換到兩張 A4 紙上。
精簡簡歷
-
刪除不必要的自我介紹:不要寫上任何與課程有關的東西,作業系統、計算機網路、資料結構等等這些計算機專業核心課程或知識,是我們必須要掌握的,沒有必要突出你上過這些課,這些課只要是國內高校相關專業都會上。這就好像應聘一個環衛工人,你要跟僱主說我會用芭蕉葉掃把、竹子葉掃把以及會使用大剪刀修建枝芽,這些東西都是一名合格環衛工人必須要掌握的,完全沒必要突出。
-
刪除不必要的工作或實習、實踐經歷:這點我深有感觸,我的第一份實習實在一家外包公司,幹了兩個月,在這兩個月中,我沒有做多麼深入的效能調優,也不允許我去做(兩個月的時間上了兩個 app),這段時間給我的最大感觸就是我對 iOS 的相關需求有了非常大的熟練度,也就是說,我在這兩個月的時間中存粹就是去練程式碼熟練度的。所以,這段實習經歷完全沒必要擺出來。
而且要注意分類!如果我們找的是一家 社會企業,社會企業可能會要求我們有“奉獻精神”,這就可以把我們的各種志願者經歷放到簡歷中;如果我們要找的是一家 網際網路企業,志願者經歷等等的類似的資訊就不要放上去了。
-
刪除不必要的證照:我覺得四六級都沒必要放上去,計算機是變化最快的行業之一,沒人保證你拿了什麼證就能夠做什麼事情,也沒人能保證沒有這個證你就不會做什麼事情。如果我們自己都覺得這個證照沒什麼技術含量,那就不要放上去。
- 刪除不必要的細節:簡歷上寫自己做過的專案時,不要連這個專案用到的環境都上去,比如,xxx專案的環境為 macOS ,裝置為 Macbook pro 等等。
重要的資訊寫在簡歷的最前面
最開始的時候我的簡歷十分尷尬,我居然是按照時間順序排序的,隔了大半年的外包實習經歷我居然放在了最前面,這就導致了每次面試官都從第一個專案開始問起,而我自己已經記不起太多細節了(也沒多少細節可說),所以最後我決定在簡歷中刪掉了這段實習經歷。
所以,最好的做法是先把重要的資訊放在簡歷的相對靠前的位置。比如個人的一些基本資訊,寫清楚自己的名字、郵箱、院校、部落格地址、GitHub 等等即可,接下來就要重點“渲染”自己最厲害的經歷放出來,可以是名氣較大的公司實習,也可以是比賽獎項等。
最好不要去網上下模版,最佳的做法是直接 markdown 搞起,讓面試官專注你的內容而不是那些酷炫的排版。
不要簡單的羅列工作經歷
不要在簡歷上寫太多關於某個專案的事情,也不要一筆帶過。個人推薦最好的做法是分版本描述,在每個版本的描述中概括性的描述出自己做了哪些事情即可,如果面試官對你做的這個專案中的某個版本中的某個功能點感興趣,他是會問我們的。這有個例子:
- v1.5.0 :資料快取、網路監控
- v1.6.0 :弱網體驗提升、資料異常中介軟體
- ......
需要注意的是,必須要保證只要我們寫在簡歷上的東西就是自己做過、摸過的,要不然如果只是為了充數好看,被問到而答不上來就十分尷尬了。
不要寫任何虛假或誇大的資訊
千萬千萬不要出現“精通”二字,甚至也不要出現“熟練”,摸著自己的良心說話,你真的精通,真的熟悉了嗎?我始終不認為少於 10000 個小時或者少於 10 萬行程式碼量的鍛鍊就能夠稱得上精通 or 熟悉。但是如果你對自己非常有自信,確實在某些方面有自己的心得,那可以這麼說:
主攻 iOS 開發,正在學習以 python 為主的後端開發技術棧。
短短的一句話涵蓋了非常多的東西,“主攻”二字沒有自狂但很實在。但如果你的情況是真的沒什麼專案可寫,自己參加的又是一些“邊角料”的工作,可以把面試官引導到自己比較穩妥的方向上來,比如說可以讓面試官問你演算法和資料結構。
留下更多的資訊
我推薦大家留下:
- github
- 掘金/簡書或者自己的 blog
- 郵箱
- 社交賬號,如微博等
需要注意的是,要確保我們留下的這些賬號是真實有效的,其中的資訊都是可考證的。比如說,如果你留下了 github 地址,我是一定會去看的,而且會去思考哪部分程式碼是你寫的,寫的怎麼樣,甚至會去觀察你的 contributes, 還會去看你程式碼中的命名等等,如果發現了你只是因為兩個月或者一個月要找工作而開始“瘋狂”的 commit ,那麼你還不如不放,我知道大部分同學的 github 上沒有多少優秀的 repo (我也一樣),但是一旦你放到 github 上了,並且還把你的 github 地址放在簡歷上了,這就表明了你是有內容的,想給面試官去檢視。
不要附加任何帶來負面影響的訊息
- 不要放個人照片。(我曾經犯過這個錯,現在想起來真是太傻了)這是你的簡歷!不是你的相親!工作就是創造價值,你的性格如何,人品如何,會有專門的面試去考量,只要你能保質保量的完成任務,單臂程式設計也沒問題。
- 如果你沒有出色愛好證明,比如國家二級運動員等等榮譽,那請也不要把你的個人愛好放到簡歷上來。等你入職了,會有專門的自我介紹環節,這個時候請你多多表現,不要啞口無言。
- 如果要求電子簡歷,請轉成 PDF!
- 如果我們要留郵箱,最好留一個能夠及時收到訊息提醒的郵箱,唐巧在書中說的是不要留 QQ 郵箱,但是我明確知道在國內 QQ 郵箱的體驗還算不錯,很多時候我之所以留 QQ 郵箱是因為我繫結了 QQ 和微信的收件提醒,而 QQ 和微信是我幾乎不會關閉的 app 。
- 不要寫上任何職業培訓資訊。我一點都不反對培訓出來的程式設計師同學,因為他們至少證明了一點,他們想做這個事情,然後有所付出。至於培訓出來的程式設計師質量如何,這裡不做考究。從我自身來說,我是 mooc 的常客,coursera 和 edX 是我經常活躍的地方。但是你沒必要把參加這些課程或者培訓寫到簡歷上,因為參加這些課程或者培訓是我們應該做的,這是提升我們自己的手段,換種方式,如果連這種事情都要放在簡歷上,是不是也要把自己看過什麼書也放到簡歷上呢?
尋找機會
網上流傳這麼一句話,大部分的工作都不是面試來的。
尋找內推機會
- 找師兄師姐(也可以找我 ?)。
- 微博、知乎等社交平臺。
- github。這是一個極好的平臺,曾經我開源了 PLook ,兩天後就有人找到了我。
你要相信,只要是個人才,誰都喜歡,更何況還有豐厚的內推獎金等著呢。
其它常見的招聘渠道
實習僧(找實習非常靠譜)、拉鉤、100 offer 、Boss 直聘(不是很推薦)、智聯招聘等
面試流程
自我介紹
在這個環節中我們千萬要把握好時間和要闡述的內容,時間把握在 3 ~ 5 分鐘。這個環節我跟唐巧老師的看法是一致的,非常重要。我記得去年的暑期實習面試中,我臨時採取了一種方法,就是按照簡歷上的內容一個一個介紹,但是這個介紹不是細緻無比的介紹,而是籠統的大概介紹自己都做了什麼,用到了哪些技術,這個專案是服務於誰,用於做什麼的。
我反而不推薦大家去背自我介紹,只要我們的簡歷寫得足夠清晰明瞭,錯落有致,那我們就先在自我介紹環節引導面試官去看我們的簡歷,讓面試官把注意力放到我們的簡歷上,而不是讓他把注意力集中到自己之前準備好的問題上(雖然也有一定機率轉移注意力失敗)。在這個環節中,其實我覺得自我介紹根本沒啥用,與我相關的內容早都已經寫在簡歷上了,讓我做個自我介紹不就代表著簡歷你都沒看就來面試我?當然,我覺得面試官們讓我們做的應該不是自我介紹,應該是給我們一個梳理自己思路,讓自己進入面試狀態的階段。
需要注意的是,不要在這個環節表現得自己無話可說,磕磕碰碰,支支吾吾。適當停頓是好的,但是不要停頓了很久,然後才接著說,如果真的在面試過程中出現了這個情況,我們需要用一些“自我調侃”的語氣來勻一下,比如:“之前的做這個的時候,我想著是學習一個產品怎麼從 0 到 1 ,但是沒想到最後 xxxxx”,這部分因為是我們緩解自我介紹過程中斷片用的,不要一直都在“調侃”,適當抓住時機回到正軌上。
如果我是面試官的話,我會非常喜歡聽面試者談論他當初為什麼要做/加入這個產品/專案。用唐巧老師的話來說:“優秀的應聘者會通過自我介紹“引導”面試官問到自己擅長的領域知識”,用我自己的話來說,就是忽悠面試官到我們自己擅長的領域或者專案中來,最後別讓面試官上來就問,“會手寫快排麼?來一個”,說真的,如果你沒啥說的,我是會問的,但是如果你已經做過很多東西了,我要問的會往架構和設計方面的更多一些,因為之所以問我們演算法和資料結構,是因為這是面對一個與自己毫不相干的人時最直接的方法,因為這更能省事,如果你已經做了很多東西了,並且也能夠給我看到,那麼我當然會認為你已經會寫程式碼了。
專案介紹
這裡有一個我自己認為是禁忌的地方,當面試官問到你 xxx 專案時,千萬不要表現出這個專案簡單啊、沒什麼說的等等,因為這會讓面試官覺得,既然你自己都覺得沒什麼可說的,那你為什麼要寫在簡歷上呢?並且當我們確定要把一個專案放在簡歷上時,千萬要記得這就是你身上的一塊肉,如果這塊肉是你身上的,點一下都會有感覺,更不要說這塊肉被割了一下,所以我的意思是,這個專案是你做的,那就要事無鉅細的從零到一的所有細節你都要知道,因為比如說我,我就會抓住其中一個點問下去,反正也是你做/參與其中的,這其中肯定有你構思了很久的地方,所以我是一定會問下去的。
需要注意的地方有:
- 這個工作具體的產品需求是什麼樣的?
- 大概做了多長的時間?
- 整體的軟體架構師什麼樣的?(劃重點)
- 涉及哪些人合作?幾個開發幾個測試?(這問題我不會問,只要是個專案肯定不只一個人,更別說在公司中了)
- 專案的時間排期是怎麼定的?
- 你主要負責的部分有哪些?(劃重點)
- 專案進行中有沒有遇到什麼問題?(劃重點,會被面試官問:“那你有沒有想過其它方案?”,然後就開始了......)
- 這個專案最大的收穫是什麼?遺憾是什麼?
- 專案中最難實現的一個需求是什麼?具體是怎麼實現的?
寫程式碼
這個環節是一場面試中重中之重的環節,如果這個環節表現得好了,可以覆蓋掉之前所有的表現,因為招一個程式設計師進來,最終的目的就是寫程式碼。當然考察程式碼寫得如何有非常多的方法,其中最基本的就是從資料結構、演算法一直到系統架構,我個人把這個環節分成了兩部分——電面和麵試。
電面中千萬不要讓人給你做題,我自己就被這麼玩過,簡直痛不欲生,一是訊號不號,無法想象在跟你通電話的面試官是在一個什麼樣的環境下跟你溝通,更何況有些走的還是 IP 電話,不想罵人;二是講不明白,這點可以理解為雙方都不知道對方在說什麼,如果“隔空能力”表達不好,需要藉助紙筆來輔助回答,那就別問讓面試者需要紙筆輔助回答的問題,這樣會讓雙方都很尷尬;三是溝通費勁,這點不用多說。之前我在給團隊面試 iOS 實習生時出了一份電面題,基本上都是基礎知識,答對這份電面題只能說明能夠具備面試的要求,不是說就具備了入職的要求,千萬別搞錯了,連結在此
面試過程中因人而異,需要顧及的問題很多,不可隨便網上找份題直接肝,這樣體現不出面試者的差異性。個人推薦做法還是就事論事,簡歷上寫了哪些東西就問哪些東西,然後結合團隊本身產品及業務進行擴充,別上來就讓人“手寫快排”、“翻轉二叉樹”......這些東西需要時間去準備,更何況真正的大佬根本不會去準備面試的,因為他沒時間。但是這些知識不可能不問,因為工作中真的會用到,那怎麼辦?給個業務例子或造一個場景,讓面試者自己去發散思維,說不定面試者還能給我們長長見識呢,如果我們出的業務例子或場景只能用某個資料結構去完成,那符合要求的面試者是一定會想到的,他也應該知道怎麼去調優,去實現,反而是根本想不出來或者就是錯誤方向的面試者才值得我們斟酌,如果出現了這種情況,十有八九是個幌子。
說到底,我還是推薦如果面試官們真的要考面試者的資料結構和演算法能力(純粹),直接讓它現場上機擼碼吧。
系統設計
這部分內容不一定會單獨拎出來,可能會跟寫程式碼環節有重疊,但現在問的最多的基本是這個套路:
“有看過 xxx 庫麼?”
如果你看過,“能說說看這其中的設計麼?”
如果你沒看過,“如果要你設計,你要怎麼做呢?”
這是個大坑!如果你真的認認真真的研究過了,鑽研過了,那你大可放心的說,“我看過!”,可問題是不是每個人都有時間去鑽,我唯一重頭到尾每一行程式碼都認認真真的看完是這個庫:DOFavoriteButton,因為我覺得他寫的很爛,如果我們給的是一個鏤空圖,它依舊會在點選狀態完後給你填充,當時把我氣得不行,怎麼會有這麼 zz 的庫,把程式碼全部翻完後,加了個屬性(當然,可能現在已經改過來了)。
由此可見,如果用到的庫完全能夠滿足自己的需求,我還真的不一定會有時間去看原始碼,除非用到的庫質量不高或者設計上有問題,但是其中有些地方導致了沒法捨棄,只能去看原始碼改程式碼。所以,就算看過 xxx 庫的原始碼,我也會說沒看過,如果你說看過了,有些神奇的面試官還真的會問你一些犄角旮旯的問題,但如果我們說了沒看過,然後自己設計一套出來,就算某些地方說的不好,也會有加分的地方。
提問
這個環節可以認為是我們全場面試中唯一一個主動出擊的機會了,如果整場面試下來覺得這家公司不錯,那麼我會問如果我進來的話,主要負責的產品是什麼?業務是什麼樣的?誰帶我?(這個問題慎重)現在團隊有多少人在負責這個產品?千萬不要問:
- 我剛才的面試情況如何?
- 剛才 xxx 面試題的答案應該是什麼?
- 大概能有多少錢?
其它
筆試、程式碼考察準備
首先要明確一點,如果我們非常喜歡、期待進入某家公司,一定一定要記得用盡自己的一切手段去獲取這家公司的所有細節,包括面試官都會問哪些問題、面試題/筆試題大概都有哪些、多看一些面經等等,並且如果我們真的確定了自己非這家公司不去,那就一定要記得去刷題!我十分推薦去刷 leetcode ,前段時間本想著每天一道題持續到明年春招,但是沒想到自己可以轉正,而且轉正三面全過了,就把重心偏移到其它方面去了。
關於系統設計的準備,我個人推薦大家在平常擼碼的過程中多跟後臺溝通溝通,或者在業餘時間做一些自己的全棧 side-project ,這樣有助於從大局考慮系統設計,當然,最重要的還是對日常需求的思考,還是那句話“再簡單的事情也能過做到完美!”
Offer 的比較和選擇
這部分內容我跟巧哥的思路不太一樣,也有可能是因為我個人經歷的原因,我始終認為時間是最寶貴的,我每天都必須給自己留下一定量的時間放空自己。在這段放空的時間內,玩遊戲是非常非常小的一部分,甚至可以忽略不計,大部分的時間我會選擇去看書,各種書都看,可以是技術書籍也可以是人文書籍,不要小看用這些時間去閱讀取得的效果,看書真的能夠使人進步和加深思考,初中的時候因為還是走讀生,每天回到家都有時間給自己一本一本的去看書,導致一次作文滿分,好幾次只扣了三四分,甚至一兩分。
當然,我說這些原因主要還是想突出一點,如果我們現階段不是特別的缺錢,當然,錢多少都不嫌多,我的意思是說,在保證自己各項開支都均衡的情況下,儘量選擇能夠給自己留下空餘時間的 offer ,如果真的能夠可以少拿錢,然後提前下班(強制性趕人),我真的願意這麼做!
至於多出來的時間要怎麼消費,這就看個人的需求了,如果是我的話,我會先學做飯,把小時候媽媽逼我學的幾道菜再精進一番。如果還有更多的時間,我會用自己所學的知識做一些傳承的事情,比如做一些遊戲化程式設計的事情等等,每天都有多餘的時間真的很重要,因為這至少能夠保證我們的熱情不減,還是當初那個一腔熱血的少年。
這有一張當時寫下的轉正面經圖片: