一場讓我決定棄 iOS 從產品經理的面試
離職的時候,公司領導問我接下來是否是繼續從事 iOS 行業,我略帶羞澀地回答“接下來估計會找產品經理專案經理這樣的職位,去從事工作中包含更多與人溝通內容的職業”。領導點點頭,還給了我一些不錯的建議。
近兩年,在業界周知的是移動端 iOS、Android 的開發每況愈下,這不單單是因為跨平臺的開發越來越出色,更主要的原因是在於移動端的開發相對簡單,不需要程式設計師動很多的腦子,只要搭建漂亮的介面,而所需的控制元件大部分都已經被官方寫好了。
在與老同事依依惜別之後,我終於來到了上海,投簡歷的時候依然是“iOS 開發工程師”,原因很簡單,雖然我以前做過產品經理的活,但我主要還是個 iOS 開發,而直接去投產品經理的崗位估計會無人問津。
但事實是,我在51、智聯、獵聘上投了幾家招聘 iOS 的公司,幾天過去——無人問津。
離職之前,我設想的是:第二家公司要麼去大廠,可以學習到先進的技術和團隊管理經驗;要麼去小的公司,可以擔任更多的職責,從而磨鍊自己的能力。我個人更傾向於後者。
從長遠來看,一直當個程式設計師寫程式碼不是長久之計,哪怕三年五載之後自己變成行業的大神,可那個時候的iOS行業估計不會比現在好。
幾天過去,我的簡歷除了被幾個提供海外東南亞國家工作的獵頭看上,其他公司的人事基本上都是看過之後就直接放進人才庫。我因此非常焦慮,想著自己就要在上海當一個無業遊民,整日無所事事了。無所事事令我焦慮,焦慮令我無法靜下心來學點東西,無所學便無所進步,接著有一種人生開始變得灰暗了的感覺。
後來我改變了策略,調整了簡歷內容,主要是讓HR可以看到簡歷上的關鍵字與他們的招聘對應,接著一口氣投了50家公司,沒想到這下效果立竿見影,當天就收到面試邀請,隔天又收到兩家面試邀請。
我逐一去查了邀請面試的公司,都是初創公司和外包公司,看過他們的產品也差強人意,於是簡單地溫習了一下面試題後便面試去了。
2019年4月4日,星期五。
今天有兩場面試。接下來是清明3天小長假,公司都放假了,自然也就不會有面試了。前一家面試公司的聘用電話已經打來了,我暫時壓下了,說想考慮一段時間,主要也是想對比各個公司的情況。
今天第一場面試非常順利,第二次是臨時安排的,在趕去的路上簡單 Google 了下這家公司,也是家外包公司,做金融產品的,這樣的公司在上海估計一抓一大把,因此心裡想跟前面的公司區別不大。
可實際的情況是——區別很大!!!
面試我的是一個看起來完全不太像程式設計師的程式小哥,濃密的頭髮,娃娃臉,個子不算高,看起來很乾練的樣子,眼神犀利卻無凶氣。
首先是自我介紹,我說了一下大學以來的經歷,對我來說很輕鬆。
然後問我以前做的產品中用到了哪些技術,這個倒有點令我不知從何開始了,因為我覺得自己寫過的程式碼都挺簡單的,要是說一些控制元件和第三方是不是顯得很 low?於是我說了推送的整合,其中運用了通知和訊息兩種方式(我的回答:通知可以在前臺與後臺都收到,但是得走蘋果的APNS,處理起來相對麻煩;而訊息只能在前臺收到,是通過 App 內的長連結實現的,整合簡單;而在我的產品中把兩者都實現了,且可以根據場景互相切換)。但我萬萬沒想到接下來開始了我非常尷尬的“表演”,而此時的我還不知道坐在我面前的是一個8年開發經驗的大神。
當我把回答中的訊息說完時,小哥馬上問道:那麼訊息是怎麼實現的呢?
這時我吃了一驚,一般 iOS 面試說到推送不都是講蘋果APNS那套流程嗎?而訊息是不走APNS的,可我只知道它是應用內長連結啊。為了避免完全答不上來,我謹慎地問了下:你指的是訊息實現原理嗎?小哥點點頭:嗯,就是訊息具體是怎麼實現的。
這時我確定自己回答不了該問題了,便坦誠地說自己只是經常使用訊息,但是對其的實現方式沒有深入的瞭解過。
小哥說好的,補充說:訊息需要長連結,長連結是怎麼實現的呢,使用的是socket、TCP還是TDP,問的就是這個了。接著再問我:談談你對多執行緒的瞭解。
我回答多執行緒有3種實現方式NSThread、OperationQueue、GCD,個人平時開發主要用GCD,這個比較底層,功能也更強大。於是小哥問我GCD有哪些具體方法和我實際的應用,這個我回答得不錯。然後小哥再分別問了NSThread和OperationQueue,我說只是知道這些,但是實際沒有應用過,也就無法回答了。
小哥點點頭,瞭解了,談談你對Runloop的理解吧。
由於剛剛的回答不好,我開始有點緊張,竟然把Runloop聽成了Runtime,於是開始說起了Runtime,小哥喊停,提醒我是Runloop,然後我就懵逼了,準備面試的時候我重點複習了Runtime,而Runloop給忘了,自己支支吾吾了幾句,我再次說道抱歉,表示自己可能開發中用過Runloop,但是一點印象都沒有了。
小哥說好的,很有耐心,也沒露出絲毫鄙視的神情。接著讓我說說Runtime,我先說了Runtime的訊息機制,小哥讓我解釋Runtime的訊息轉發的兩個引數並詳細說說其中的SEL,SEL我只知道它對應的是方法;然後我說了Runtime的應用,說到給分類實現新增屬性的時候,小哥問我具體如何實現,這裡我只有印象,但具體實現和其方法沒記。
小哥還問了KVO,想必大家都覺得KVO嘛,一種不同類之間的通訊方式,觀察物件的屬性,適合一對多的情況下使用。但小哥完全不落俗套,問的是如何實現一個KVO。我又懵逼了,他考得全都是很底層的問題啊!或者說,他的這些問題,我根本就沒準備到位!
當我又打算再一次說抱歉的時候,小哥卻鼓勵我繼續回答,讓我再想想,其實我想到了重寫 set 方法,我當時沒想通的是:雖然在 set 方法裡可以知道屬性被修改了,但該用什麼方式如何告訴外界呢?總不能用 delegate 或notification 吧?接著小哥還跟我稍微討論了一下這個問題:重寫 set 方法的思路是對的,接著使用回撥就可以告訴外界了。
技術的面試大概進行了25分鐘,我答得不好,但小哥始終敬而無失,也讓我在內心感謝和敬佩他的職業素養。
面試後半部分就聊得比較輕鬆了,這時我才知道小哥已經做程式設計師8年了——真是“其貌不揚”,他各種語言都會寫,平時主要寫的是 iOS,如果按照 iOS 編年史去算的話,小哥在2011年(當時的系統是 iOS 4,iPhone 4才上市一年)就已經開始從事 iOS 開發,可以算得上國內 iOS 開發的大佬了吧。而他是前飛信團隊的。他們公司是專門做即時通訊第三方SDK開發的,專門為各大金融、銀行提供軟體服務,是一家非常專業的即時通訊軟體供應商。公司很少需要加班,且週末必定雙休(因為週末股市休市),而上海這邊只有他一個 iOS 開發,因此公司決定再招一個。
當我放鬆下來之後,我腦子轉得也快多了。這麼一個活大佬坐在我面前,為何不跟他聊聊對我職業生涯有利的話題呢?所以我問小哥:你從事 iOS 開發這麼久,現在對 iOS 的看法是怎樣的呢?小哥很實在的回答我說:其實我目前也不怎麼看好 iOS,但是不能只會 iOS,像React Native、Flutter都要了解的......
最後從這家面試公司走出來的時候,我感覺興奮極了。這就是我想要的面試,真的暴露我自己不足的面試,可以和厲害的人直接對話,還能為自己指明方向。
再總結和對比這兩天的面試,小公司的面試主要談專案經驗,加上幾個基礎題,另外再提出幾個業務需求讓你給出簡單的實現方案;而小哥的面試內容則是緊扣公司的業務需求,更多的涉及底層知識,環環相扣,而專業的基礎功底在回答這些問題的時候則暴露無遺,而這樣的技術面試則必須要有“精通”的工程師方能設計出來了。
公司福利到位,週末雙休,沒有犧牲身體健康的加班,有牛逼的技術團隊,不出1年我的專業功力必然大漲,三年五載後,我也會成為這位小哥一樣對自己專業非常自信的程式設計師。不論是公司待遇,還是對我的 iOS 技術提升,這家公司就是我找 iOS 開發的理想單位。然而,當我見識了自己心中理想的單位,並設想自己進入其中工作和未來幾年前景時,我心中豁然開朗:這很好,但這並不是我想要的。
於是,我接受了一家規模較小的公司提供的產品經理的職位。
如果說,當年畢業時選擇從事 iOS 開發是為了不錯的收入,那現在選擇產品經理的崗位則是為了讓我的天性和工作相結合。我這個人比較擅長和別人打交道,也熱衷於協調和整理資源,雖然沒有哪樣特別精,但什麼都會一點,更重要的一點是,我也覺得懷有匠心精神去做一名工程師挺好,我更想做一名創作者。
我和愛人一起來的上海,兩人都在找工作,我面試的這幾天,她一直陪著我,支援我,文末表示對摯愛的感謝。
// //清風明月時常有 //Created by Cry on 2019/4/8. //Copyright © 2019年 FuGui. All rights reserved. //