碼個蛋(codeegg) 第 1113 次推文
作者:程式員囧輝
連結:https://juejin.cn/post/6902768061313449991
前言
這是我17年的經曆,覺得還挺勵志的,希望能幫助到一些正在迷茫的同學。
是去美團送外賣了?有配電瓶車嗎?
答:親,有配的哦,開起來賊順滑。啊呸,說啥了,咱進的是正兒八經的技術部門
鹹魚的現狀
時光回到2017年2月初,當時剛過完年回到上海,此時的我已經畢業一年半了,和大多數鹹魚一樣,上班就是CRUD,下班就是看劇、玩遊戲(英雄聯盟、手遊都玩)。
當時我的工資一個月到手就5k出頭,但是因為在甲方駐場開發,加上差補餐補有接近8k,還包住。每到周末幾個小夥伴一起打牌、一起搞情、一起洗腳,日子過得很是滋潤,當時其實挺滿足的。
鹹魚的自我救贖
讓我萌生想跳槽的根本原因已經忘了,想了很久沒想起來,可能是受其他小夥伴的影響吧,有了這種想法後就開始準備起來了。
剛開始隻是每天下班後躺在床上看别人的部落格學習一些東西,一般是22:30看一小時左右,當時最先看的是線程相關知識,就是類似于:建立線程的幾種方式、Future 的使用、線程池的使用,等等這類比較基礎的知識。
想跳槽的想法有了之後便一發不可收拾,如果說剛開始每天晚上看1小時隻是在試探,那麼半個月之後我便全力投入面試準備了。
當時工作上的事情不是很多,每天花個兩三個小時基本就能應付了,是以其餘的上班時間我都拿來準備面試了。準備面試的方式主要通過看别人的部落格、看源碼,内容主要是 Java 核心知識和 Java 面試題。
從二月初準備到了三月底,這期間我主要幹了以下幾件事。
1.看面試題
這期間我看了很多套 Java 面試題,還記得的有:
- Java面試題全集(上)(作者:駱昊)
- 各大公司Java後端開發面試題總結(作者:qinjianhuang)
- 面試心得與總結---BAT、網易、蘑菇街(作者:Xoper.ducky)
- 關于Java面試,你應該準備這些知識點(作者:占小狼)
很重要的一點,看題要帶着了解、帶着思考去看,将題目與實際開發的内容結合去了解,這樣很容易就記下來了,死記硬背效果不好。還有看面試題不能隻看一次,需要反複看,就像你高中準備考試那樣。看完這些面試題後,我能很自信的在我履歷寫上了:
- 具有紮實的Java基礎,對面向對象程式設計有深刻的了解,熟練掌握IO流、集合、多線程、反射機制等。
- 對Java虛拟機、垃圾收集機制、CAS樂觀鎖技術有一定的了解,對Volatile關鍵字有一定的見解。
對于JVM這聽着就高大上的東西,當時我能做的就是帶着了解把下面這幾道題目背的滾瓜爛熟,在此之前我壓根就不知道JVM。
- 介紹下垃圾收集機制(在什麼時候,對什麼,做了什麼)。
- 垃圾收集有哪些算法,各自的特點。
- 類加載的過程。
- 雙親委派模型。
- 有哪些類加載器。
就這5道題目,不能再多了。在當時的面試中無數次被問到,我都能很自信的答出來,幫我在面試官心中加了無數的分,估計面試官還以為我對JVM有所研究,整個人的逼格頓時就上去了。
對于背面試題,我隻能說兩個字。
2.源碼初探
在看完上面的面試題後,已經能應付很多問題了,但是好像還缺了點什麼?沒錯,就是能讓你裝逼的源碼。當時我選擇了常用集合的源碼,當時我這菜比也隻能選這個了:ArrayList、LinkedList、HashMap 等等,基本都是邊看源碼、邊對着别人的博文跟着一行行的學。在學習 Java 集合源碼時,對我很有幫助一些文章是:
- zhangshixi 的 Core Java 系列文章
- 五月的倉颉 的 Java集合架構 系列文章
看完這些源碼後,我把它們全寫到履歷裡去了,因為這是當時我覺得自己為數不多的亮點了。
- 深入學習過HashMap、ArrayList、LinkedList、ConcurrentHashMap、LinkedHashMap等常用集合的源碼。
這些源碼的準備也基本全用上了,類似于“ArrayList 和 LinkedList 的差別/比較”這類問題,我都忘了被問過多少次了。
在回答這個問題的時候,我最初的回答比較中規中矩:
1)ArrayList底層基于動态數組實作,LinkedList底層基于連結清單實作
2)對于随機通路(get/set方法),ArrayList通過index直接定位到數組對應位置的節點,而LinkedList需要從頭結點或尾節點開始周遊,直到尋找到目标節點,是以在效率上ArrayList優于LinkedList。
3)對于插入和删除(add/remove方法),ArrayList需要移動目标節點後面的節點(使用System.arraycopy方法移動節點),而LinkedList隻需修改目标節點前後節點的next或prev屬性即可,是以在效率上LinkedList優于ArrayList。
後面被問多了,就會加一些自己的思考。例如:
當 ArrayList 是順序插入的時候,由于不需要移動節點,是以在效率上并不會比 LinkedList 差。
自己深挖過(例如看過源碼)的知識點被問到時,一定要抓住機會表現,讓面試官感受到自己的深度,這些都是加分的點。
3.項目準備
除了技術知識外,項目也是必不可少的一環,但是不需要準備很多,隻需要挑2-3個你最牛逼的需求點準備就行了。我當時找了很久,就找了這麼幾個很 low 的點:
- 定時将百萬行級别的檔案進行下載下傳、讀取資料、插入資料庫,并進行一些業務操作。(其實就是NIO讀取,多線程都沒開,整個處理要一兩個小時...)
- 使用多線程處理通過Excel導入的資料。(就開了個線程異步處理...)
- 批量處理通過Excel導入的資料。(好像就是個批量插入資料庫...)
第2和第3點其實就是來湊數的,打擾了。
面試過程中主要幫我扛過項目這一關的主要還是第1點,畢竟也是涉及到了百萬級别的資料,哈哈。其實當時我對于NIO也是一知半解,也就是看了一些博文,會基本的使用。
還記得當時做這個需求的時候還挺痛苦的,做了好久。但是真正到了需要用的時候。
這也是我很想傳達的一點,項目中遇到難題時千萬不要總想着退縮,這些解決難題的過程、解決的難題,都會讓你快速成長和受用終身。
這些内容就是我開始面試前的全部準備了,從2月初到3月底,差不多準備了1個半月,當時的履歷是這麼寫的。現在看起來有點 low,但是當時已經是我的極限了。
鹹魚修煉出山
準備好了之後就是瘋狂投遞履歷了,各種知名的招聘網站都要去投,也沒有什麼挑選的說法(唯一可能就是盡量選網際網路公司,還有就是像阿裡騰訊這種大公司,咱是不敢投的),隻要是招2年 Java 的投就完事了。隻要能給個面試機會,咱就得謝天謝地了。
很多很多的投遞都石沉大海,但慶幸的是在海投之下,還是拿到了不少面試機會,當然大多都是聽都沒聽過的公司。
偶爾收到一些稍微有點名氣的公司面試邀請時,心裡真的樂開了花,可以對着這封郵件反複看好幾遍。
面試之前給自己定了個目标——13k,每次hr問我時我也就講13k-15k,高了不敢喊,心虛,覺得自己就是個垃圾,根本不值這個錢...
從3月底面試到了4月底,總共面了20來個公司。基本是每天2個面試,上午下午各一個。早上室友還沒起床,我就已經出門了。早餐都是在三林東地鐵站附近的巴比饅頭解決的;午餐就在面試公司的附近找家麥當勞解決。那段時間每天在路上奔波的時間至少四五個小時,但是完全不覺得累,整個人對未來充滿了希望。
也多虧了這一個月的面試時光,我走過了上海的很多地方:漕河泾、張江高科、唐鎮、人民廣場、陸家嘴、中山公園,之前在上海呆了2年去過的地方還沒我面試期間去的多。
差點FirstBlood
第一天下午面了鍊家網,當時面了兩輪技術面,每輪兩個人,除了一些技術問題外,問了很多場景題,比如:使用者來鍊家網看房,怎麼推薦合适的房子?伺服器突然CPU飙高怎麼排查?
這些都是我沒準備過的問題,當時隻能随機應變了。還好我靠着自己的聰明才智(一頓瞎扯)混了過去。現場兩輪技術面應該是過了(至少也應該是個備胎),當時通知我總監不在,晚上進行電話面。
我還記得當時出來時心裡賊高興,總監面不就是吹吹牛逼嗎,感覺就要起飛了。
總監面一開始也如我所想,就問些:“平時工作之外都幹些啥啊?”,“有在學習什麼技術嗎?”這類的,結果我自己作死提了個在學 ConcurrentHashMap,當時我确實在看這個,但是還是一知半解,結果被問了幾個問題就涼了。當時覺得自己是個傻吊,想喂自己吃屎,可能錯過了自己最好的機會。
如果當時鍊家發offer,隻要不是侮辱性薪水,我是必去的。其實就算是侮辱性薪水,隻要不是太過分,我估計還是會舔着去的...
幾次尴尬的經曆
面試有時候就跟碰運氣一樣,運氣好點,問的全是會的,運氣差點,兩句話就被轟出來。
有一次和三個同僚去陸家嘴參加招聘會(當時還是蹭的他們的面試邀請),來回兩三個小時的車程,面試2分鐘就結束了,真是充電5小時,通話2分鐘。當時我們還互相調侃說,見識了繁華的陸家嘴(下圖就是當時拍攝的),也不枉此行了。從此以後,我再也沒參加過招聘會。别問,問就是記仇。
還有一次去面一家地産公司,當時面試官正在小房間裡面另一個人,看到我到了就把我也叫進去了,我當時心想:還有這種操作。然後面試官就問了我兩個問題:1)ajax 的 a 是什麼意思?2)XML 是什麼意思?當時我沒答上來,然後就被轟出來了。
冥冥中注定
運氣總是守恒的,有一些運氣不好被秒殺的經曆,必然也會有一些運氣好拿到 offer 的。現在回想起來,當時能進美團真是冥冥中注定的,有無數次我都已經差點入職其他公司了,但是最終因為各種陰差陽錯,最終都擦身而過。
谷米實業:1輪筆試,2輪技術面試。技術負責人比較看重邏輯思維能力,讓手寫代碼,還問一些智力題。給的稅後11k,由于五險一金的問題沒去。
飛牛網:背靠大潤發,當時覺得很高大上,給的稅前13k,我當時都在看房子了,最後由于一些原因沒去成,具體啥原因我自己也忘了...年紀大了,記憶力差的很。
1藥網:創始人是1号店的創始人,當時也很想去的一家,給的稅前13k,當時已經接了offer準備去了,結果通知面的部門沒有hc了,臨時要我去加面另一個部門。
當時加面了兩輪,第一輪是部門技術老大面,可能是由于之前已經通過了其他部門的面試,有些問題沒答出來,老大也很耐心的引導我,看得出來還是比較喜歡我的。
第二輪的直屬上級看起來比較忙,就随意的問了一題。沒錯,就是那道我還專門水了一篇文章的題目:mybatis 中的 DAO 接口和 XML 檔案裡的 SQL 是如何建立關系的?
顯而易見的,這道題目對于當時的我來說太難了,而且也沒法瞎掰,我裝模作樣的思考了一會後,尴尬的說了不會,老大還安慰我說沒關系。盡管加面發揮的一般,但是最終還是給我發了offer(我一度懷疑是不是那個老大對我有什麼企圖)。不過由于自己覺得在直屬上級面時發揮的太差了,最終決定不去。
現在看來自己當時不僅菜,還作死。
幸運女神的眷顧
拒了1藥網後,選擇已經不多了,就剩2個未面試的:平安醫療和美團,并且上海自己能投的基本都投完了,當時決定如果最後這2個沒滿意的就到深圳去(都跟父母和深圳的同學打好招呼了)。我不是一個相信運氣的人,但是這次幸運女神确實眷顧了我,讓我抓住了最後一根稻草。
進美團并不是一帆風順的,拿到面試資格都費了好大勁,當時自己的履歷太普通了,大機率入不了美團hr的法眼,但是我還是厚着臉皮投了很多部門,有些部門還投了很多次。終于,在我的死纏爛打下,有一位善良的hr給了我一次機會,這是我進美團的第一位貴人。
可能有同學有疑問,為什麼要重複投一家公司,甚至是同一個部門?
答:每個公司都有很多部門,每個部門的hc數和招人标準都不一樣,即便是同個部門,如果hr不同,标準肯定也不一樣。重複投相當于是在碰運氣,努力讓更多的hr看到我們,努力讓hr在不同的日子裡看到我們,興許hr今天心情好就給我們個面試機會了。
3月底開始面試的,到面試美團的時候已經4月底了,這面試的時間裡,我們不能荒廢了學習,還是要持續不斷的複習和學習。當時我就在這1個月的時間裡學了:AQS、ReentrantLock、MySql 進階教程,而且在面試美團就用上了...,你敢信。
美團1面的小哥是我的第二個貴人,這個老哥賊實在,就對着我履歷寫的專業技能一個個的問,真的把我寫的每一個點都問了...
讓我寫個冒泡排序,我不僅寫了冒泡排序,還跟他講了快速排序的思路(這是一個加分點)。還問了我很多 Mysql 知識,我把剛學的 Explain 的每個字段都吹了一波(這是另一個加分點)。
咱這麼老實的人,寫在履歷上的都是比較有把握的,是以這個小哥的問題我基本全答上了。不僅過了1面,而且可以确認小哥給我的評價很高(因為後面入職發現我比其他同學的定級高一級)。
美團2面就是主要問項目了,我又把我那蹩腳的項目拿出來講了一遍,面試官問的很細,把整個項目從頭到尾細聊了一遍,如果沒準備好可能會扛不住,最後還給出了一些他的建議(其實就是裝一波逼)。
還有就是簡單的問了幾個技術問題:“JDK 動态代理的原理”、“JDK 動态代理為什麼隻能針對接口”、“ajax 全稱是什麼”,你敢信,我又被問到了這個,好在上次被問過後,我後面還特地看了一下:ajax 就是 “異步的 JavaScript 和 XML”。
Hr 面就比較簡單了,一般是介紹目前的業務,問我對業務是否感興趣啊,平時有沒有在學習等等。對于這些問題,舔就完事了,把握好舔的尺度,不要舔的過于浮誇一般都莫得問題。
不過也會有一些送命題,例如:能接受的底線薪資,如果低于該薪資會放棄本公司的機會。
我當時是這麼回答的:“底線薪資:無,由于對貴公司的前景比較看好及相信貴公司會給出一個合理的薪資,本人将考慮貴公司給出的任何薪資”。現在回頭來看這個回答,舔的還算湊合,有一些細節在裡面。
就這樣,我不可思議的拿到了美團的offer,薪水也超過了我的預期。
進大廠的訣竅
經過這幾年的摸爬滾打,我發現進大廠确實有一些訣竅,對于和我一樣背景一般的同學,隻要你抓住了訣竅,進大廠不是夢。
1)一定要提前準備,至少準備個一個月,網上的面試題多看看,對于那些高頻題目,帶着了解去學習,實在不能了解的就背下來,大家聯考的時候不都是背過來的。
2)大廠通常有很多部門,每個部門的hc數和招人标準都不一樣,即便是同個部門,如果hr不同,标準肯定也不一樣,重複投履歷可以增大我們拿到面試機會的機率。同理,重複面試不同的部門,也可以增大我們進大廠的機率。
3)大廠經常會布局新業務,新業務需要快速啟動入場,hc通常會有很多,是以招人的标準會稍微降低,這個時候是個絕佳的機會。我當時進的就是個新的業務部門。
寫在最後
可能有人會覺得我進入美團太幸運了,是小機率事件,不值得參考。
答:進入美團确實有運氣成分,我自己也是這麼覺得的。但是在大廠混了幾年後,我發現這真不是小機率事件,很多人都是這麼過來的,好多同學都是面了N次才進的大廠。
有時候,選擇比努力更加重要,機遇比奮鬥更加重要。但是,機會隻留給有準備的人。我們隻有時刻準備着,才能在機會到來的時候,去抓住它。
我很幸運的是,當我準備好的時候,機會來了。從此以後,我變成了一個相信運氣的人。
我相信,越努力,越幸運。