一篇關於我春招的記錄
歷經 33 天,我終於找到了工作。這一個月對我來說可能是一次至關重要的一段時期,所以我有必要好好的記錄一下。當然,這裡也有很多幹貨,有關 Android 面試的一些細節問題我也將努力的通過回憶陳述出來。可能篇幅很大,廢話較多,但同樣細節也會很多,如果看這篇文章的人是最近要找工作的程式設計師,那麼我覺得這篇文章有你想知道的東西,特別是工作經驗不是很多的 Android 程式設計師。
因為我這一次是一次自作主張的裸辭,所以這一個月壓力還是非常大的。不過經過努力還是找到了自己比較滿意的工作,還有 3 個月的試用期,希望能再接再厲,通過自己的努力能在公司立足下去。具體我離職的前因後果和自己的想法請參考我之前的一篇博文:
一次特別的面試經歷
不過,在說到 3 月份這段找工作的經歷之前,我想先用這篇文章回顧一下另一件極其重要和有意義的事。
實際上在 12 月的時候,我已經接到過一次面試了,而且是一次很不一般的面試,一來是因為算上最後的終面,一共有 4 輪技術面試,難度非常大,技術範圍特別廣,我雖然被千虐萬虐,但更多的是收穫。但導致這次面試非常不一般的原因還有一個:
面試我的公司是 「小米」,面試我的人是我關注挺久的一個大牛**「Gityuan」**。
當時在無錫專案組,專案已經上線,事情也不是很多,所以我就把 「某聘」 下載下來,把自己的簡歷和一些資訊上傳了上去,但也沒有投簡歷,因為是我第一次用這個軟體,而且當時也沒有下定決心要換工作,所以填好資訊後就沒有管過了。
令人驚訝的是,過了兩天,小米那邊主動打電話了,希望能做一下進一步的溝通。我當時驚呆了,後來我才知道是因為那些網際網路招聘軟體是一個雙向選擇的軟體,如果有企業通過搜尋覺得你符合要求,也會主動聯絡你的。
不過怎麼說,當時知道訊息的我非常驚喜,但更多的是緊張,因為這完全出乎我的計劃,當初實際上我給自己定了一個比較具體的複習計劃,準備等自己準備好後再主動投遞簡歷,這下好了,人找上門了,而且是個大戶,自己卻一點準備都沒有,但也不能隨便就鴿了別人,畢竟這麼好的機會在臉上怎麼說都得嘗試下,而且打電話在週四,第一輪電話面試在下週一,臨時抱抱佛腳也不是不可以,所以後面幾天我就找了一些 Android 的常規面試題看了看,順便看了一些「資料結構」和「Java」相關的知識。
同時,我也具體的看了下這次「小米」招聘崗位的具體要求,發現崗位是做 「MIUI系統」的相關開發的,並且「演算法」和「資料結構」有比較高的要求。看來,有可能會問到一些「Framework」相關的知識,我不禁有點失落,老實說,那時候我對這方面完全沒有深入過,每天在趕專案,就算是學習也是學習了很多應用層的一些用法方面的知識。對於原始碼,一來我的能力還沒有達到;二來我的確是沒時間研究這些和專案關係不是很大的知識點了,試想當時每天加班到那麼晚,專案時間實在太緊,不允許我抽時間去學這些東西,一般只會在做專案過程中遇到問題才去現學現用。
一面
就這樣稀裡糊塗複習了幾天到了週一,因為約好了在下午 2 點的電話面試,我特意和經理請了假,然後中午吃完飯後就在寢室等待。為了讓自己保持專注,我特意帶了個耳機插在手機上,然後就這樣坐著等,那時候感覺每一秒都是那麼煎熬,因為那即將是我第一次技術面試。
2 點整,電話來了,一個擁有很成熟聲音的人打來的,一聽就是一個做了多年技術的老手,他先讓我自我介紹了下,然後問了下我現在在做的專案的業務,針對這個專案的一些具體功能提出了一些問題,比如框架怎麼搭建的,因為我說了用 MVP 模式,所以又問我了一下具體的搭建思路,我就把我對 MVP 的理解,和搭建過程中各種層之間的繫結操作說了下。總體來說感覺第一輪電話面試技術上具體的問的不是特別多,大多是針對當前專案的,或者是瞭解下你在專案中扮演的角色。
問完了技術上的,他又問了一些關於離職原因的問題,我大概說就是我比較希望能在南京穩定發展,外包公司沒有歸宿感,我不是很適應,隨後又隨便聊了一些有的沒的,總體的氛圍比較輕鬆自然,然後他就讓我等通知了。
看了下手機,通話時間 50 分鐘左右。
掛了電話後,我就去上班了,然後大概到了 4 點,我又接到了電話,電話裡說希望我做一份筆試題,筆試題待會發到我郵箱,時長 30 分鐘,做完直接把答案回覆到傳送郵箱即可。
能讓我做筆試題,至少證明我剛剛的電話面試應該算通過了。不過,這種筆試方式難道不怕做題人上網查資料作弊嗎?
我心中產生了疑問,我決定先看看題目做試試,如果做不出來再查查,可能對方會給出一個非常難的問題,就是想讓你不會,然後考驗一下你的應變能力和解決問題能力也說不定呢。
過了兩分鐘,郵箱收到了題目:
「請寫出程式碼計算二叉樹的最大深度,分別用『遞迴』和『非遞迴』的方式實現」
好吧,不是很難,主要就是定義二叉樹類和一些成員變數,遞迴的話比較簡單,非遞迴可以用層次遍歷思想,配合佇列進行迴圈操作即可。寫了 20 分鐘左右,最後小修小補了下,就把郵件發過去了。
到此,一面算結束了。
二面
筆試題發了後,大概過了 3 天,我才接到二輪面試的電話。當時因為過了好幾天都沒接到通知,我都以為已經沒希望了,所以後來都快淡忘這個事了,所以這次接到電話又是一個措手不及。當時還在工作呢,所以我趕緊跑到一個樓梯口來進行電話面試了。
這個時候大概是下午 1 點 40 左右。
打電話過來的聽起來是個非常有活力的小夥子,聲音非常嘹亮,充滿自信。一開始幾個問題和上次電話面試差不多,自我介紹以及專案上的一些架構問題。問完這些後,他可能也感覺這次問的可能問過了,所以他開始問一些純技術問題了。
首先是一個觸控問題,「如何實現多點觸控」,然後又設定了一個場景,「如果 3 個指頭同時向下滑動,3 個指頭的速度如果有偏差該怎麼辦,用什麼辦法來確定這個監聽事件」。因為當時我確實沒有接觸過這方面的知識,所以也實話實說我沒有研究過,沒想到的是,他好像反而更希望聽到我沒接觸過,接著問我
「那麼,你想想如果是你,可能會用什麼辦法來處理呢?」
聽到這個問題,我當時在電話那頭當真是一臉茫然,頭腦飛快的思索著,並說出了自己的想法,他也時不時的「嗯,嗯」兩聲作為回應,然後針對我的想法也提出了一些問題。整個過程非常緊湊,思考時間非常短暫,加上又是自己不熟悉的領域,所以回答的支支吾吾,同時胃部也因為緊張劇烈的翻湧著。
這不是面對面的面試,電話面試如果你一直沒聲音低頭思考,你自己都會覺得非常尷尬。所以這種高強度的電話技術面試考察的是你的解決問題以及應變問題的能力,同時也會考察出你的思維敏捷度。
這個問題結束後,後面還問了幾個非常有質量的問題,列舉下:
- String 為什麼要設計成不可變的?
- fragment 各種情況下的生命週期
- Activity 上有 Dialog 的時候按 home 鍵時的生命週期
- 橫豎屏切換的時候,Activity 各種情況下的生命週期
- Application 和 Activity 的 context 物件的區別
- 記憶體洩漏相關的問題,比如在專案中的一些記憶體洩漏案例,怎麼解決的,然後問了幾種記憶體洩漏的情況,問了下該怎麼預防,還問了平時用什麼工具檢測記憶體洩漏。針對你回答的,他會繼續深入問,直到你實在回答不了為止。比如我說到 Activity 和 弱引用了,他就針對這兩個問題深入了很多。
- 專案中遇到的重大問題以及當初是怎麼解決的。
最後他又問了兩個「資料結構」的演算法問題,一個是連結串列逆序,另一個是求二叉樹兩個節點最短路徑。特別是第二個問題,他給了非常多的限定條件,總感覺好像有意給我製造了難度,然後考察一下我的思維方式,這個問題上也探討了非常久。
通話總共用時 1 小時 30 分鐘,自我感覺回答的不是特別滿意。
第二輪感覺面試官更偏向於考察你解決問題的能力,以及一些思維活躍度和應變方面的能力。同時,還考察了一些平時開發時候是如何優化應用的,技術上,更偏重基礎,沒有問任何的第三方工具的使用。
後來和幾個同事討論了下,發現的確如此,做移動端的如果基礎好,應用層各方面的知識你將會學的很快,第三方工具或者程式碼庫的使用確實沒什麼值得問的。
三面
經過了一段緊張刺激的電話面試,我當時的心情是非常複雜的,還沒緩過來,正準備和同事分享一下剛剛的面試經歷,又一個電話來了,第三輪面試就這樣開始了。
好吧,還沒坐下來又去了小走廊,打來電話的是個女的,聲音聽起來比較嚴肅,問的問題沒有像剛剛第二輪那樣範圍那麼廣,探討的地方也很少,大多數是那種讀文件式的出題。不過感覺對方還是非常有氣場的,總是一而再的問我「是這樣嗎?」,「你確定?」,搞得我有時候自己本來確定後來都拿不定主意了。
幾個印象比較深的問題有:
- 序列化的作用,以及 Android 兩種序列化的區別。
- List 和 Map 的實現方式以及儲存方式。
- 靜態內部類的設計意圖。
- 執行緒如何關閉,以及如何防止執行緒的記憶體洩漏
- Linux 的一些常用指令
這輪面試雖然來的很突然,但節奏還是比較快的,你問我答,會的會,不會的就不會,心態可能因為經過了這麼多輪了,倒也比較平靜。
通話時間 40 分鐘左右,然後晚上吃飯的時候,給我打電話說下週會給我做終面。一切好像還算比較順利。
終面
終於,終面來了。依然是電話面試,但我這次做了準備,提前在一個沒人的小會議室等著了。
這次是兩個人同時面試,一個聲音有點像二輪那樣很自信的那種,一個比較沉穩,感覺是個非常厲害的人。
開始跟我聊的是那個很自信的那個人,聊了一些技術問題,但不是很多,可能是因為前面技術面試經過了 3 輪,差不多我啥水平也瞭解了,他主要問了一些我離職原因,然後職業規劃和技術上的發展規劃。
然後就到了第二個人,後來我才知道,他是 「Gityuan」,不過當時我沒想到,後來也是因為我去他部落格看到他第一篇文章就是分析ANR的,當時問我的一個技術問題也是這個,各種原因結合我才意識到是他。
他問了幾個很深的技術問題,都是跟 Framework 相關的,畢竟他就是研究這方面的真正大牛。然後就問了我幾個常規問題,但這幾個問題對當時的我來說並不常規:
- 你對能加入「小米」這樣的一個機會,你是怎麼看待的
- 你自我推薦下自己,講一下我們如果要你,你能給企業帶來什麼樣的價值,你有什麼樣的優勢
- 你的職業規劃是什麼
- 你對「小米」公司是怎麼看的
- 你有什麼問題需要問我的嗎
- 你對薪資的要求
這幾個問題質量非常之高,當時我就感覺到,到終面了,這幾個問題可能直接影響到我的成敗。
事實也證明了,我的失敗可能和這幾個問題有著極大的關係,正是我在其中問題答得非常不好。
自我價值那個問題,我就說的有點語無倫次,把自己一些性格上的優點列舉了下就草草了事,對方肯定不想聽到你這樣的回答的,這種話誰都可以說,但不一定就是你的價值。這樣的網際網路公司,更多看中的可能是「發展潛力」、「事業心」以及「態度」。
提問那個問題,我問了很多一些和自己切身利益有關的問題。後來我仔細的想了下,這些問題問了沒問題,但如果不問一些類似技術提升,技術發展這樣的有關自身提升有關的問題,可能不太好。要讓企業感受到你來這上班不一定是為了那點工資的。
然後,薪資問題我覺得我過於失敗了,我直接說了一個他招聘資訊上工資範圍的最低數額,但實際上他這個職位給的是工作經驗 3 年左右的人的,我卻天真的以為他這樣開,我就應該這樣報。後來我才越來越感覺到,我能通過那麼多輪,甚至最後有一些機會成功很大的原因正是因為我經驗不多,但幾次面試下來面試官感受到了我的學習能力,覺得我對技術有追求,有激情有衝勁,這才不斷的賦予我機會。
但我當時沒有察覺,自以為是自己能力強理所應當得到的待遇。的確,我當時沒有正確的認清自己。
小米麵試結果與總結
後來,我收到了面試未通過的通知。說不失落肯定是假的,面對這樣的一個企業,面對這樣的一個機會,我甚至已經快要達到了,卻在臨門一腳被踢回來,這種感覺著實不好受,當然,這次面試的難度和嚴格是最高的,甚至算上之後 3 月份的所有面試,這次「小米」的面試依然是質量最高的。
這次「小米」的面試經歷非常寶貴,讓我全方位的審視了自己,我認清了自己現在處於什麼階段,並瞭解到了自己技術上的不足也明確了自己以後努力的方向,也第一次的近距離接觸了大公司的面試,知道了大公司對於人才具體有哪些能力上的要求。
小米麵試結束後,工作了兩週左右就放假了,2 月 2 號回無錫上班。
整個 2 月份過的還是很舒服的,因為幾個小夥伴全住在公司提供的宿舍裡,專案又不太忙,所以每天下班回來和週末的時候,所有小夥伴都會聚集在一個屋子的客廳裡一起 LOL 。
我那會有時候陪他們玩遊戲,有時候躺床上看書。整個 2 月份我讀了 4 本「東野圭吾」的書,看了一本「唐史」,還有一本闡述生活理念的書「斷舍離」。
老實說,工作空閒能看書是我最大的奢望,所以當時在無錫可以看這麼多書,講真還是真的不錯的,實際上我對專案組本身還是非常滿意的。
但在外包公司,你永遠是被動的。月底,銀行轉變了對專案的購買模式,轉變為人月專案,原來十幾個人的專案只買了 5 個人,甚至 iOS 開發一個都不留,他們找了一個銀行內部技術人員完全接手了 iOS 程式碼。最後,我們幾個沒被買進去的人,就要各奔東西,去往別的城市的專案組了。
來無錫之前,領導承諾 12 月可以調回南京,最後拖到 2 月底,這次調整,又決定把我送往蘇州。所以,各種原因下,我就離職了。更多離職詳細資訊可以參考部落格「一次不妥協的離職決定」。
回到家,我列了一下計劃,複習兩週,然後找工作。考慮到 3 月是找工作的高峰期,所以計劃 3 月底前儘量能找到工作。前兩個月實際上進行的也不算太順利,心理上,執行力上都有一些波動,這也在部落格裡了,參考「還算充實的一週」,這裡就不多說了。
3 月 15號開始,我開始投簡歷,首先我把各大投簡歷平臺的 App 都下到手機裡了:「某直聘」、「某鉤」、「某無憂」、「某聯」、「某聘網」... 好像下載了有 6 ,7 個,不過最後感覺比較靠譜的是前三個。有幾個你投了簡歷,要不就沒回復,要不就回復的都是培訓機構,甚至還把你的個人資料洩漏了然後每天會有一大堆招聘廣告發到你手機上,不厭其煩。
簡歷上我寫的比較常規,自己懂什麼技術寫什麼技術,用過什麼寫什麼,專案經驗從什麼時間到什麼時間。沒有任何的誇張成分。這裡需要特別強調下,對某一項技術,描繪你的掌握程度一定要用詞妥當,仔細思考你真實掌握情況。比如,如果你平時只是用過「Retrofit」、「RxJava」,那你就別寫「精通」這類字眼,面試官會針對你的技能棧進行深入。我剛開始寫精通,後來一位面試官直接問我原始碼上的問題,我就直接懵逼了,後來才針對自己的掌握情況修改了描述方式。
3 月15 日 週五
我記得 15 號是週三,我的投遞模式是海投,就是把軟體上符合我搜尋條件的職位全部投遞。大概到週五的時候,只有一家通知我去面試,其他回覆無一例外,全是說我年限太低,不符合要求,所以不給面試機會,當時的壓力有點大,我高估了現在的大環境,實際上現在 Android 程式設計師的確有些飽和了,初級崗位魚龍混雜,企業就算需要人,可能也會把年限卡死,所以面對我這樣年限這麼短的人,能給面試機會的公司自然少之又少。但這就更需要我把握每一次珍貴的面試機會,儘量準備好,不留遺憾。
剛剛說到了週五有家公司通知我去面試,那家是國內某大型外包公司,過去後,發現會議室大概坐了有 30 來人,HR 給了我一份 Android 考卷,就讓我進去做題了,題目不是很難,不過考察的範圍挺廣的,有些我接觸的比較少的也的確不會,比如好像考到了「SurfaceView」、「OpenGL」,其他就是一些比較基礎的 Java 和 Android 問題,比如生命週期那些,四大元件那些。
交完卷子就在會議室等了,過了一會一個 HR 帶我去一個小會議室聊聊,她大概說,試卷做的不錯,你學歷也不錯,是 211 ,他們幫我看看公司有沒有專案需要 Android ,還給我說有沒有興趣轉 Java 開發,因為最近 Android 不是很火了。然後隨便聊了聊就讓我回去了。
本身也不可能去外包公司,只是需要面試一次看看狀態試試水,沒想到從頭到尾也沒技術面試,就連 HR 也知道 Android 最近環境不好,我內心真是急躁的不行,那段時間的壓力可想而知,甚至都有點後悔這麼草率就裸辭了。
3 月 18 日 週六
週末的話,企業休息,所以週六週日兩天都沒有訊息,實際上對於當時的我來說,雖然明白是這個道理,但這種毫無訊息,投遞無果卻只能白白乾等的感覺著實噁心,我記得那個週六,我學習的時候,每次看完一個部落格或者看完一段視訊,都會去用手機去一個個開啟招聘軟體,確定下有沒有公司回覆我,那時候心態的狀況可想而知,我的自我調整那幾天也非常不好,甚至睡覺都不太安穩。不過那段時間,我爸爸因為每隔兩天就來一趟南京辦事,晚上會住我那,她看我心態有點不穩重,那幾天一直在開導我,給我心理上帶來了很大幫助。他認為「每個人總有一段這樣的挫折需要你去克服,找工作不需要太急,只要你手上有本事,總會碰上伯樂的。」總而言之,如果不是萬不得已,在你上班的城市找工作的話,現在還是儘量不要裸辭。如果裸辭的話,也千萬不要急躁,急躁沒有任何用。
這個週末我作了一些針對性的複習,主要是「網路程式設計」方面的,之前 stormzhang 在小密圈回答一個圈友問題談到了網路這塊需要掌握的一些知識點,所以針對這些知識點,通過部落格和一些視訊(我全是用1.5倍速放,節省時間)來複習。又把 Android 端一些常用網路框架的基本使用用法和原理大概看了下,比如「OkHttp」、「HttpURLConnection」這些知識點。
這裡重點說一下複習相關的,我寫過一篇「短期複習計劃」,有具體我的複習思路和方向,當然每個人不同,不過我當時非常重視把平時學習過程中的總結、程式碼儘量的上傳到 CSDN 部落格和 GitHub 上,我總感覺技術面試應該最單純粗暴了,你如果平時天天寫技術部落格,GitHub 上的提交時間圖被填的滿滿的,面試的時候你把你的這些連結一貼,面試官進去看一看就大概知道你的學習能力、學習態度、技術棧範圍以及針對每種技術的深入程度,大概就把你啥情況搞清楚了。不僅如此,本身你經常寫部落格,玩 GitHub 本身就是一種優勢,不僅是一個好的 Coder 所必須有的習慣,而且也是對自己最好的能力展示,是公開的簡歷。
3月 20 日 週一 至 3月 23 日 週四
週一開始,我的手機就開始有聲音了,陸陸續續有非常多的電話打了過來,這裡面不乏有一些被我過濾掉的,比如一些培訓公司、外包公司,還有一些公司資訊都不是很全的那些,到後來,面試太多了,每個半天就得跑兩家,我甚至可能會因為有些公司離得太遠就鴿了。
實際上 18,19號兩天週末我還參加了兩個學校的校招,事實證明校招對於我這樣的非應屆生作用不是很大,有的公司對我特別滿意,但最後都沒通知我,最後參加了一個公司的筆試和一個公司的面試,但都考慮到我不是應屆生,也就沒聲音了。
我下面只把這周我印象比較深的幾次面試列舉下。
週一參加了剛剛說的兩個校招時候面試的公司,其中一個公司做的筆試,筆試內容範圍非常廣,不過如果你是計算機專業學生,這些倒是都學過,但可能會因為時間長記得不清了,或者像我這樣大學就知道玩從來不學的,總之做的不是特別好,涉及到 Java 基礎,資料結構,作業系統,計算機網路,Android 上考的不多,好像就兩道題,不過有一道題我看了我就一口老血噴出來了:「Android 系統的啟動過程」,老實說如果你平時沒有特別研究過,那這道題還是老老實實找個網上描述的比較清楚的背一下吧。
然後那個面試的公司,是個雲端計算相關的公司,做的最多的是嵌入式,當時面試 Android 的就我一個,我就被他們公司的一個 Android 開發帶到一邊面試了,面試內容大多是針對我做的應用來問的,說實話,技術含量不是很高,我都感覺對方技術也沒高到我哪去。面試完就是一個男 HR 來面我,特別嚴肅,問了一些很奇怪的問題,比如,問我之前在銀行工作時候銀行的專案主管叫什麼名字,他當場打電話過去給銀行問,可能是用來檢測我簡歷的真實性吧。後來他跟我說,其他人都是來面試實習的,你是來找工作的,老闆在開會,今天可能面不了你了,回去等訊息吧。反正大體意思就是沒戲了。所以後來我也就不考慮校招了。
週二那天一共面試了 4 家,早上有一家外包,大老遠跑過去後,他啥也沒問,扔給我個需求書,說你看看這個專案你能不能做,要多久。然後技術也沒問,估計對方都不是做 Android 的,稍微聊了會就讓我回去等通知了,還說不論過不過都會在軟體上通知我,實際上最後也沒給我說過沒過,哎,不靠譜。
下午去了一家初創的產品公司,這家工作環境很不錯,而且離我住的地方特別近,面試我的人特別厲害,技術水平非常強,氣場也強,聊的過程中也感覺到了他身上壓力也比較大,畢竟初創企業,身上擔子應該不小。這次的技術問題非常有質量,應該能排到我所有面試中僅次於「小米」和最後我去的那家公司的水平。技術上大多圍繞平時開發中最常見的問題,但這方面我瞭解的也不是很好,只是大致看過,不深入,比如:
- 圖片快取策略
- RxJava如何管理生命週期
- Okio原始碼
- OkHttp 中和 WebView 中Cookie是怎麼處理的
- Android 上Socket的使用
- 註解
- Android 上的程式通訊、共享記憶體問題
- Webp 格式
他還給出了一些場景問我怎麼解決,我聽著總感覺是他們自己開發的時候遇到的問題,順便問問我的思路,好像的確有的公司面試會把自己平時遇到的難解決問題拿出來問問。
後來收到面試沒通過的訊息,的確這次技術面試比較失敗,但他問的方面我的確掌握的不好,所以沒啥覺得遺憾的,回去把他問的知識點補了補也沒多想。
當天晚上去南大參加了一個宣講會,然後面試的時候一直在給我強調,「Android 專案不是很多,而且也不太缺人,你對轉型 Java有沒有興趣?」...
大概有 5,6 家勸我轉 Java,Android 沒崗位... 亞歷山大。
週二週三做了幾個線上筆試,也參加了幾次面試,比較值得說的是一家國企,這家國企做的石油方面的 App,公司離得特別遠,在南師大仙林那邊,我特麼坐地鐵倒來倒去都坐了 1 個半小時。過去後,去了個會議室,裡面已經來了 4,5 個人正在做題,有一個人在被兩個人面試,然後我去了後領了一份 Android 的題目就做了起來,題目就一張 A4 正反面,第一道題讓你論述你做過的專案,並說說這些專案的優缺點;第二道題是對他們現在做的 App 的一些看法和建議,來之前我已經下過他們 App 並體驗了,老實說不是很複雜,設計的也一般般,亮點不是很多,我也就老實說了。後面幾道題全是給你一個頁面圖或者一些效果問你怎麼實現。最後一道題是談談對 Android 的看法,說一下優缺點。
寫完後有個面試官就看起來了,另一個面試官就針對基礎情況問我了一些問題,比如我之前專案中的責任,用的技術,離職原因,期望薪資,我針對他們公司的問題這種。後來那個看我卷子的面試官問我,針對這卷子有沒有什麼想問的,我就問了幾個題目說我這種實現思路怎麼樣,我很多都是直接繼承 View 和 ViewGroup,然後重寫那些繪製方法,再把演算法寫在這些方法裡,我感覺這樣寫很突出自己的能力。
但他都說實現太複雜了,Android 原生有某某方法,可以直接呼叫。我有點無語,這種直接方法或者庫使用上的東西有啥好考察的,知道就知道不知道就去查唄,應用層正是因為有這種特性,所以現在初級工程師才這麼多,Android 應用層開發的可替代性才這麼強,所以當時我就沒有往那方面去答題。想不到人家還偏偏還就往這方面去考察了。
不過這家工作環境也是特別好,在一個創意園內,樓都設計的非常好,周邊環境也美滋滋的,樓裡面的設計也特別棒,這家公司同樓還有一家「騰訊眾創」在這,而且是國企,如果能在這,實際上也是不錯的。面試官說週五給訊息,也說,週五之前,不管成功與否,都會告訴我。
當然了,又沒通知我。
3 月 24 日 週五
週五下午 4 點我來到了這家公司,一家產品公司,做金融的,我上家說起來也算是金融網際網路公司。說來也巧,剛開始我在「某鉤」投遞的時候,沒多久就給我標記不合適了,但過了幾小時,又給我打電話了,說感覺簡歷特別匹配,還是希望能來聊聊。所以我仔細的看了下應聘要求:
崗位職責: 1、負責目前業內最火的移動網際網路金融 APP 的設計與研發。 2、持續優化業內最強產品,將您的研發專長,做到極致。 3、研究新技術,參與軟體架構設計。 4、堅持把自己當成產品主人,而不是純粹寫程式碼的碼農,對待產品如同初戀。 5、除此之外,做您最願意做,最爽的事!
職位要求: 1、1年以上 Android 平臺開發經驗,能根據產品設計獨立進行應用開發。 2、有社交、即時互動、UI/UE 等方面的開發能力。 3、對物件導向思想有深入的理解,瞭解常用的設計模式。 3、對待產品如同初戀,追求細節,追求極致。 4、有金融軟體經驗加分、有開源社群貢獻加分、有技術部落格加分、有自己的作品加分。
然後看了下福利:14薪、六險一金、週末雙休、午餐補貼、交通補助、一年不少於兩次旅遊、免費零食、下午茶、團隊活動、生日party。
OK,一看就是非常有活力的公司,而且對待產品的態度非常吸引我,感覺很滿意,當時就有一種強烈的預感,很有可能就是它了!
去了公司,HR 非常熱情,讓我進去會議室做了張筆試,並且把我手機很友好的收了。題目質量還可以,考察了幾個比較不錯的問題,列舉出來其中幾個:
- 記憶體洩漏的根本原因
- 舉出幾種 HashMap 的迭代方式
- 資料庫 SQLite 的一些操作。
- 靜態內部類和內部類的區別
後來交了卷,等了一會,來了一位非常帥的帥哥,文質彬彬的,介紹了下,他是公司的 Android 負責人,然後他就開始問我一些問題了,先自我介紹,然後針對我做的專案和剛剛做的題目問了一些問題。然後他又問了幾個質量比較高的問題,比如 Java 中堆記憶體和棧記憶體的區別,弱引用軟引用區別,Serializable 和 Parcelable 的區別,ListView 的實現原理,Java 中同步方法。還問我看過什麼原始碼,我就說了個事件分發和 Handler ,還說了一個在非主執行緒更新 UI 的可能性的問題,然後他就問了一些系統優化的問題,問了我做過什麼系統優化,我就說了一些記憶體優化還有快取和流量上面的優化,然後還說用 Freeline 外掛提升編譯速度,他說他們現在也在用,感覺還不錯。
技術聊了很久,大概有 3,40 分鐘,然後就開始說一些職業上面的問題了,比如問了我的職業規劃,和技術上有什麼樣的追求,問了我一些大學的時候的事情,說到這個地方的時候我還說了我大學那段電競時光,他表現的挺感興趣,這方面問了我很多問題,所以我就把我當時訓練、打比賽、當會長辦活動那些事和他聊了聊,他對我辦過一些活動的具體細節問了一些,並且還非常驚訝我當時竟然能大包大攬的一個人承擔一個協會。
他又問我對團隊有什麼要求,或者說我期望什麼樣的團隊,我就說我比較喜歡沒有那種明確上下級關係的那種團隊,並且有充分的學習機會,團隊之間各成員能夠經常交流學習,最好還可以多一些能增進下團隊成員之間感情的團隊活動。
我們聊得很開心,後來他還問我對工作有什麼要求,我表示我對薪資這些不是很有要求,主要是渴望得到一個工作機會,同時希望能在一個企業文化很棒的公司工作,這對我來說比較重要。
他提問的差不多,就問我有沒有什麼問題,我就問了一些作息、福利、晉升以及個人和公司協同發展方面的問題。問完後,他針對我剛剛說的一些期望做了一些解釋,比如他會給我說公司的團隊正是像我期待的那樣,氛圍很棒,並對他們公司情況做了一些概述,告訴我他們是一個產品公司,對待產品態度很認真,對技術也會要求嚴格,現在公司的發展情況也是正處於高速上升期,並闡述了一些企業文化方面的東西。
最後他表示,他做 Android 也有 5,6 年了,在北京這些城市也工作過,他覺得,工作這麼多年,走過不少公司,覺得這家公司是他經歷的所有公司中最「酷」的,在南京,也算得上非常「酷」的,在這工作,真的很棒。
我喜歡「酷」這個詞,與我的期待不謀而合。
後來我們談到了一些關於南京的東西,我表達了我對南京的喜愛,之前在南京工作的時候每週都會騎單車在南京到處逛,他說之前很多離職的人都是因為不想在南京,不知道為什麼我這麼喜歡。我想了一會,回答了一句很裝逼的話:
我感覺,南京有一種憂鬱的氣質。
Android 負責人大概和我聊了一個多小時,然後就讓我稍等片刻,因為 CTO 在開會,可能不能立刻過來面試我,所以之前接待我那位特別活潑的 HR姑娘就來先陪我聊了會,她非常興奮的給我講述了在這家公司是多麼開心,這裡全是 85 後,這裡福利多好多好,1 月份的時候還集體去越南旅遊,下午茶非常豐盛,蛋糕,麵包,咖啡,飲料,披薩每次都不帶重樣的,看她美滋滋的那個樣子,我肯定是信了,至少證明,這家公司的確是非常有活力的,而且非常注重團隊文化的建設,有這樣的保證就夠了。
過了大概 10 分鐘,CTO 來了,非常年輕,大概就 88,89 年這樣,很厲害。拿了紙筆,邊問邊寫。問的節奏很快,總結起來就是考察我有沒有主動解決問題和探索新技術的能力,還問了我的 GitHub 和 CSDN的情況,總之感覺他更關心的是我對待技術的態度。
最後他問了下期望薪資,我說了一個和上家一樣的數字,因為我很渴望能在這工作,所以待遇上反而真的沒有要求了。
他說讓我回去等通知,他和 HR 明天要出差,可能週一才會給我答覆,我就先回去了。
回家後,HR 加了我 QQ,跟我說實際上明天應該就會告訴我結果,讓我耐心等待。第二天,我看她在空間發了一個說說,我就有意點了個贊,然後她立馬 QQ 給我訊息:「哎呀,忘了跟你說了,恭喜你,面試通過了!」
3 月 29 日
27 日週一我拿到的 Offer 郵件,然後29號正式入職,辦理了一些手續。HR 帶我到各個部門熟悉了下,然後就把我交給了之前面試我的 Android 負責人,我叫他嘉哥。公司給我新配了一整套電腦,處理器是 i5-7500 的,簡直是飛一般的感覺,我把一些基本環境配好後,嘉哥把我和其他 Android 程式設計師叫到辦公室,讓我們互相認識了下。有兩位實習生和兩位和我一屆的,但感覺他們技術都非常棒,看來以後要多多加油了啊!
嘉哥下午的時候把我帶到會議室,把公司的開發流程和專案的程式碼大概的順了一遍,然後讓我自己這段時間先熟悉熟悉,第二天,讓我多看看某個方面的內容,因為現在這個模組程式碼有點耦合,希望我可以研究研究,然後想辦法抽離出來。
這個任務對我來說還是很有挑戰性的,因為專案的程式碼體量特別大,我還得熟悉一段時間,抽離模組的任務實際上就是封裝一個模組,並且和業務解耦,是程式碼優化和框架優化上的工作,比起以前那些寫寫頁面這樣的工作來說,當真非常有挑戰性,我不僅有壓力,而且也很興奮。
然後週三下午茶是披薩,清明放假前一天,舉辦了 3 月的生日會,大家一起唱生日歌分蛋糕的情形甚至讓我想到了大學生活。
新公司感悟
在公司才待了 3 天,但感觸很多,總結下。
因為以前在外包公司,程式碼都是自己弄,所以程式碼規範很不理想,在產品公司,感覺他們的程式碼非常嚴格,文件非常全面,所有模組和功能的文件都寫的很清楚,並且有專門的程式碼規範文件,細節到每個類和方法的命名,某個元件呼叫的方法,甚至強制規定某些程式碼必須怎樣寫。而且,團隊還規定每次程式碼提交後需要互相之間 review 程式碼,有問題直接 fixme 指出來。並且,很多工作都是程式碼優化上的,有時候是模組抽離,有時候是元件化統一。總而言之,在這工作我的程式碼規範和工程能力一定會極大提高。
然後,以前工作上我用的版本管理是 SVN,只在 GitHub 上用 Git,平時提交程式碼的時候,主要也用的 AS 自帶的 Git 外掛。嘉哥跟我說最好要用指令,我一開始不理解,認為用外掛不是更方面嗎,後來才發現,專案中因為模組分離,很多專案會統一用一個子模組,所以如果不用指令,專案和子模組指標管理就會出問題,而且 Git 指令操作更清晰明確,所以這 3 天我也花了不少功夫學習了指令。
我現在還在看程式碼,因為還沒正式上手工作,所以還是有一些茫然在裡面,希望自己能更加努力,多溝通,儘快融入到這個大家庭中。
3 月找工作過程的感悟
經過這一個月充滿壓力的裸辭找工作這段經歷,我收穫了很多感悟。
- 如果工作經驗不是很多,儘量還是不要裸辭,老實說環境不好,壓力太大。
- **「學習能力」、「解決問題的能力」、「激情與衝動」和「對技術的追求」**是每個公司非常看重的。能進這家公司我感覺不一定是因為我的技術水平,因為我工作經驗少,當時技術面試也不是說完美髮揮,技術肯定高不到哪去,但我給嘉哥展現出來的一些東西,讓他看到了我身上的可能性。有點類似 stormzhang 那位剛剛離職的同事當初入職薄荷的時候的情況吧。不過這只是我自己的想法,我也沒問過嘉哥,等以後有機會一定要問問他。
- 學歷還是比較重要的。我明顯感覺到我作為一個 211 畢業生的確面試過程中有一定的優勢,能得到的面試機會也多一點。不過這並不是很重要,因為我這只是在南京,南京公司真的不多,如果去上海、杭州、北京這樣的城市,機會特別多,只要有機會面試,歸根究底是看能力。只不過學歷高的人得到面試的機會會多一點,能不能通過,大家的標準都一樣
- 找工作切不可操之過急,有一些挫折時必然需要經歷的。不如老老實實的好好多看幾行程式碼來的實際。
- 在這種關鍵時刻,每天保持一定的運動量對整個人各方面狀態的保持非常有幫助!
- 如果找到工作了,也不能大意,後面的試用期,你得花更大的努力才能徹底穩定。
- 如果可以,技術面可以適當拓寬點,對 Android 來說,還是需要多看看 Framework 的。
- 最重要的一點,「Read the fucking code」,原始碼看起來!!
歡迎關注我的公眾號
我最近在維護的一個開源專案,歡迎 star:WeaponApp 徵文連結:https://juejin.im/post/59af60acf265da24701ee7da