一個生物專業學生的內心獨白:我為什麼能去網際網路大廠?
阿新 • • 發佈:2020-06-12
這回,考慮到近期關注了許多新朋友,並且大多都是學生黨,可能對我還不是特別熟悉。因此我決定重新把我從非科班如何通過自學(狗屎運)進入大廠的經歷分享出來,希望能夠給予一些將要面臨秋招,或者將要準備進入網際網路行業的同學一丟丟的幫助。
早期關注我的讀者可能都約莫著記得,我是在華科讀的本碩,專業是生物醫學工程。雖說專業的的確確是帶了生物二字,但是我老實交代,實際上並不是純粹的生物技術方向上的專業。簡單科普一下:
> 生物醫學工程是屬於交叉程度非常高,主要面向生物醫學領域的工程學科。我們在學校的主要課程包含硬體設計、軟體設計、生化基礎以及儀器科學等。
所以呢,原諒本文的些許標題黨。但是說實話,由於學科高度交叉,我們實際上所習得的技能就是一團漿糊。在電腦科學方面的系統知識積累,與純生物專業相比,也不過是五十步笑百步。
## 一 啟智階段
雖說大學期間學的都不是計算機,但是我對計算機的興趣萌芽卻是十分的早。那估計都得有二十年前了,嗯誇張了點。不過應該是在小學時候了。
我是在老家鄉下上的小學,你們可能想象不到,那個時候的鄉下小學竟然都有電腦課。不過那時候不叫電腦課,叫做“微機課”。
微機課是幹嘛的呢?就是一群小朋友排排隊,拖鞋進到一個乾淨的房間裡,然後幾個人圍著一臺那種屁股又大又方的電腦,玩紙牌。沒錯,就是windows上流行多年的紙牌遊戲。
**怎麼說呢。我玩紙牌賊溜。** 大概天生對這一類東西的接受能力比較強,所以上手很快,並且除了紙牌,還有空當接龍,掃雷,3D彈球。這麼說可能有點暴露年齡了。
最早windows系統普及的這一批遊戲真的讓我對“微機”這麼個東西產生了懵懂的概念和持續的嚮往。
## 二 本科階段
之後的成長道路中,一直對計算機耍的挺溜。但是有點尷尬的是,沒人領進門。所以一直都是在娛樂,並沒有真正意義上接觸到計算機內部或者程式碼程式設計的世界。
#### 初識程式碼
所以在上大學之前,基本上對程式設計一無所知,但是卻有一種強烈的對計算機的熱愛。不過那時對於計算機的理解僅限於【裝系統】,【裝軟體】和【拆洗主機風扇】。不要問我為什麼沒有去學計算機,要怪就只能怪考試時坐在我旁邊的那位,大概天生就得了瘋狂抖腿病的二貨。氣!
一不小心,還進了生科院。但是緣分這種東西,真的妙不可言。這一切的開始源於一場面試。
所在的大學是一所以工科著稱的高校,其中創業氣氛十分濃厚。學校因此有許多小有名氣的科創團隊,基本上是由老師主導,各專業學生組成的小團體。可不要小看這些小團隊,世界級程式設計大賽的獎牌獲得者經常就出於此類團隊。剛上大學的我們單純稚嫩,自然會被被這些團隊的大幅宣傳報和滿目的獎牌稱號所吸引膜拜。我也不例外。
當時我便懷著澎湃的心情申請了一家曾多次在微軟創新杯奪得金獎的團隊。一個從鄉下來的小夥,第一次參加面試,第一次單獨和碼農小姐姐夜晚座談,第一次參加所謂的通宵測試。
**也就是在那一個晚上,開啟了我新世界的大門。**
那天晚上給我一群程式設計小白的任務,是模仿百度首頁,實現整個網頁的設計、佈局和基本連結。提前給出的提示是w3c的教程網址。
從來沒有接觸過程式設計的我在此之前,連程式設計的流程都不清楚,更不必說編譯環境、編譯語言甚至是原始碼閱讀(當然這個任務也涉及不到這些)。
但是也就是那一個晚上,讓我真正意義上的接觸了敲程式碼這個事兒。
沒錯,我的程式設計起點是HTML+CSS。可惜的是,我並沒有通過那個團隊最終的面試。不過從那以後,我就開始了網站開發的自學之路。
個人自學的堅持很大程度上基於興趣,源於在室友面前一頓裝逼後的成就感。但這就是一個生科院的學生在課後的最大樂趣所在。
#### 小試牛刀
在接觸到網站開發之後,從最初的HTML+CSS到後來的HTML5+CSS3+JS+ASP,從靜態頁面的佈局到動態網頁的請求。
雖然感覺技術的成長也就是從部落格的複製貼上走向了文件的複製貼上。但是終於迎來了小試牛刀的機會。
學校某大型學校組織需要做一個展示網站,朋友拉上了我和幾個人承擔了這個事情。這算是第一次真正意義上的專案開發,不過整個網站的功能不多,主要還是展示為主,後臺也直接通過學校網路平臺整合就行了。所以整體下來做的事情並不多。
#### 迷茫困惑
一直以來,都是自己通過部落格自學,東拼西湊的建立起知識架構。但是其實技術基礎十分不牢固,不懂計算機基礎、計算機網路,更別說編譯原理、作業系統等基本的知識。因此在很長一段時間內,覺得好像也沒有會什麼,一直對自己的能力保持懷疑。
在這段時間內,有過跑去搞嵌入式,硬體開發,甚至是產品設計、介面設計,視訊製作。但都不一而終。
一段迷茫,一段頹廢。一不小心就成為校園裡的學長,於是開始緊緊茫茫的尋找實驗室。
#### 新的方向
好在我們專業與生科院其它專業相比,還是帶有工科氣質的。醫學影像學本身就是這個專業最為重要的一個方向。因此懷著對程式設計的興趣,加入了一個專門做醫學影像的實驗室。
進入實驗室,不再是之前的漫無目的,隨處拾荒,但卻也並不會接觸到前沿新興的技術。畢竟在實驗室裡,工程技術更多的只是工具。
不過值得一提的是,在實驗室裡,我接觸到了演算法思想。醫學影象本來就是影象處理領域的一大分支,因此影象處理演算法的瞭解同樣也是至關重要。
從這個時候開始,我已經不再搞網站開發那一套東西,專心使用C++寫我的演算法。那時候深度學習還沒那麼熱門,大多數的影象處理方式還是基於傳統的演算法進行。雖然演算法能力薄弱,但是倒也是我所求。
同時,為了獲得資料,還接觸到Linux系統以及一些指令碼,在做研究的過程中也大大增加自己的技術面。
與此同時,為了鞏固自己的一些技術基礎,也為了督促自己的學習,我報考了計算機等級考試和國家軟考。可能對於計算機專業的學生來說,沒有什麼含金量,輕而易舉。但是對於一個非科班的學生而言,這樣的考試可以很大程度上幫助自己去重新組織零碎的知識。畢竟不是所有人都有足夠的精力去跟著計算機系的人上課。
本科階段的經歷讓我知道自己與計算機系的差距,雖然接觸了許多東西,但是也都不夠精,甚至沒有底氣去獨立承擔一個小的開發任務。
因此最終選擇了讀研。希望讓自己的技術都夠在某一個點上精進,能夠獨立的做出點東西來。當然最終的結果可能並不是自己當初所想,但是說到底還是得感謝在研究生期間所做出的努力。
## 三 碩士階段
我研究生的生活是從大四就開始的。因為是本校保研生,所以在大三下確定好實驗室後,基本就直接開始搬磚的苦逼生活了。當然舍友和同學在為畢業而慶祝歡快的時候,我就開始在實驗室早出晚歸。
#### **讀研的開始**
進入實驗室之後,剛開始一段時間也是沒有人帶。這能靠自己去多多實驗室專業方向的文章,然後學一點基本技能。更重要的其實是為了在實驗室混個臉熟。
實驗室的研究方向主要是核醫學成像系統,整個系統的搭建涉及到核科學研究、物理數學模型的建立、電子資訊的資料獲取、自動化控制設計、機械結構設計、軟體和演算法處理以及醫學實驗驗證等一系列的過程。
但對我們個人來說,主要是做某一個方向即可。當時我還是自認有一些程式設計基礎,於是計劃去做軟體開發或者資料處理的方向。但是最初期是沒有人帶的,所以就花三天時間自學了`python3`,把廖雪峰的python教程從頭到尾走了一遍。
可惜的是,學完之後也並沒有派上用場。
之後實驗室新專案確立,我被導師安排到了一個新專案組裡。在專案組中,主要負責的是影象重建的部分。影象重建是醫學影像領域非常重要的一個研究方向,目的是將影像系統採集到的多維多尺度的資訊根據成像原理,依照不同演算法還原成二維或三維的斷層影象。所以本質上來說,影象重建的重點也是在於演算法設計和優化。
#### **方向的多變**
開始所在的專案組內,主要的工作還是基於軟體程式設計和演算法開發,涉及到的技術棧主要還是以C++為主,然後加上一些圖型庫,如`Qt`,`openGL`,`VTK`等等。不過都是處於呼叫函式調包的階段,也沒有很深入的研究演算法原理和實現機制。實話說其實個人提升不大。
過了一段時間後,實驗室師兄拉我去幫他做事。師兄本身能力非常出眾,科研水平不容置疑,所以當時就過去了。之後在他手下做的事就很多變了,不只是軟體開發,還涉及到數位電路程式設計,PCB制板,系統模擬等。
那個時候還來實驗室沒多久,沒有仔細的想過自己之後的就業方向,只想著能夠在研究生期間多做些成果,多發文章。因此,跟著師兄搬磚的時候也沒有過多考慮對之後的求職是否有幫助,只是想把事情做好,做出有意義的成果。
不過幸運的是,在大四暑假前,也就是研究生入學之前。根據師兄的指導,將一個軟體開發的工作給擴充,投了一篇領域內的頂會。雖然覺得所作的工作沒什麼特別的,但是最終文章被錄還是非常開心的。也正因為這個事,之後更想著能夠多發文章多出成果。同時,師兄也比較會熬雞湯,各種說辭讓我放佛感覺到即將成為科研巨人,登上學校官網,走上人生巔峰。
#### **綜合能力鍛鍊**
在實驗室,除了完成自己的科研任務,還有很重要的一部分,就是寫本子。也就是申請專案基金等等文字工作。
我估計有參與過的專案申請或結題工作不下十餘項,每次都會涉及到大量文字的整理、表達、排版等工作。一般的學生對於這樣的工作都是極度排斥的,覺得很煩又沒什麼用。當然我也是這樣覺得的。
只不過在寫了大量的本子後會發現,其實這也是綜合能力的鍛鍊。我們導師常說,博士生一定要會寫專案,碩士生的話儘量寫。說明他把這也是當作一種能力的培養。在師兄手下,我也經常性的寫本子,甚至於超過了敲的程式碼。那時候也沒有很明確的技術培養規劃,所以倒也覺得還行。
#### **獨自前行**
只不過好景不長。帶我的師兄由於過於優秀,將要離開實驗室去其它高校就職。這對當時的我來說,處境有些許尷尬。因為我的研究方向是與師兄的工作有交叉的,同時一些裝置和材料也需要師兄的支援。
實驗室本身的氛圍是以博士帶頭,碩士輔助進行專案開展的,而我的研究方向是我自己獨立出來的一個題目。說白了就是實驗室就我一個人在搞這個,但是這個方向不是導師關注的方向。
因此,在這之後,我又迴歸到了一個人做事的階段。大概是研一下開始,我就只能自己一個人去想自己的研究課題,偶爾會跟老師討論,但是也沒有很確定的工作路線。具體的工作內容也只能靠自己去思索。
在這段期間,我寫過`verilog`,調過`FPGA`,畫過板子,畫過工程圖,當然也寫過軟體做過演算法。一個人做事的話,可以說是很自由,沒有老師管,也沒有報告的壓力。只是很多時候發現有一些想法沒辦法實現,也無法對前沿領域有很深的洞察。空有一腔發文章報效實驗室的熱血,卻發現像是站在水中的浮木上,搖搖欲墜。當然這其中,個人的問題佔有很大比重。
#### **摸魚的日子**
不敢說自己的有多麼自律,多麼出色。可能世上大多人都是芸芸眾生,我也不過一個普通人。在自己做研究的同時,每次到臨近頂會收集文章摘要之時,我都會很積極的熬個一兩個月,將自己的想法和結果寫成一到兩篇的會議文章。我自己也大概知道其實工作沒有太大的突破點,但也是希望能夠賭一把。
只不過兩年來,一共整理出數篇會議摘要,都沒有被同意投稿。每一次還是會有些灰心,也有些不服。會時刻回想起導師的反饋,而後想到一堆反駁的理由。只不過都沒用。
每一次之後,都會有一段時間的消沉。不太想去實驗室,不太想看論文,在實驗室可能也就是摸摸魚罷了。很多時候覺得鬥志滿滿,又會瞬間像洩了氣的皮球,沒有精力去完成任何事。
#### **職業方向**
到如今,算是大四的時光,在實驗室已經呆了快四年。平心而論,沒有做過什麼突出的成果,也沒有練就什麼出色的技術。研究生活高開低走,一度以為自己是什麼科研巨星,後來僅剩的一絲熱情也在導師的「也沒看出你有什麼天分」中黯然消逝。不過還好,在這之前,我找到了自己的職業方向。
我本身就是一個比較後知後覺的人,一方面是懶,另一方面又對自己有一種迷之自信。我真正意義上開始準備校招還是在去年六月底七月初的時候,也就是研二下學期快結束的時候吧。我們實驗室的碩士生出去基本就是兩個方向,軟體或者硬體。搞電路的基本都選擇去做硬體開發,其它的大部分都會選擇做軟體。我也沒啥可想的,雖然做過硬體,但是技術水平根本不敢出手。所以求職的方向直接就定在了軟體開發相關。
當時還不知道應聘網際網路還要刷題,還要複習,以為上去介紹下自己,講講自己做的跟網際網路沒有半毛錢關係的專案就可以顯得很有想法的樣子。後來真正開始準備的時候才發現,自己原來還差得有點遠。
老實說在研究生期間,主要使用`C++`和`Matlab`,主要的專案就是用`Qt`寫了一個客戶端,裡面有網路通訊的模組可以對資料做一些處理,並且能夠顯示圖譜。用`Matlab`主要就是做了一些比較基礎的影象處理和機器學習的演算法。光這專案再加上非科班帶「生物」二字的專業,的確讓不清楚的人會十動然拒。
不過其實也沒得選擇。生醫專業對口的公司都是做醫療器械,比如聯影、邁瑞等。但是其實去這些公司也是做軟體開發工程師。相對來說,網際網路公司技術好,待遇好,發展好,自然就成為大部分的選擇去向。
說是跨行,但是其實也沒有別的更好的選擇。我們老師常說希望我們學生以後能夠在我們這個領域發光發熱。這倒是真的,國家的發展還是離不開這些能夠在某個領域深耕的人,而不是為了一昧追求熱點和高薪而忘記了初心。
## 四 求職經歷
講講我的秋招經歷吧。我的秋招雖然準備的晚,但是其實還是挺順利的。從19年8月開始接到面試,2個月內已經拿到了15+的offer,基本平均薪資都在30w+。包括抖音美團華為小米等等。那段時間真的是狀態上來了,就是佛擋殺佛,神擋殺神。
不過剛開始的時候,由於實驗室的原因,沒有辦法出去實習。甚至由於一些原因,一直拖到暑期前才開始準備複習。
那時已經快七月初了。急匆匆的登上各種學習網站,發現這也太多要看了的吧,還得刷題。關鍵一看面經,這都啥呀。還要手撕程式碼的嗎?
這一看當時不要緊,關鍵晚上就焦慮的快睡不著了。每天都在想應該怎樣複習,怎麼寫簡歷,沒有專案該怎麼辦。
剛開始的時候連簡歷都不敢投,因為老覺得簡歷一過去就會安排面試。後來發現這完全就是多慮了。大概從七月初我就開始投簡歷,因為七八月是一些公司提前批招聘的階段。
許多非科班的學生,在投遞簡歷的時候才能發現自己的無助。我在簡歷投遞初期,基本沒有任何反饋。提前批階段,許多公司都會去爭奪更優秀的簡歷候選者,對於生物專業的學生真的沒有什麼優勢。
但是沒有關係,既然選擇了這條路,那麼就要堅持下去。投一家無人應答,那麼就投十家,投五十家。我在整個秋招階段,總共投遞過近一百家公司。許多在提前批沒有給予反饋的公司,後期大部分都有電話聯絡重新開啟面試流程。所以,就算認為自己的簡歷再不夠出色,也要相信總會有瞎了眼的HR(誤)。
我當時一直在堅持投簡歷,只要看到的招聘資訊都會去投遞。還記得第一次做測評題的時候都非常緊張,以為這就是筆試題。非常認真的拿紙筆在計算,慌的不行。
後來直到八月初才收到第一份面試邀請,多益網路。當時約了面試之後簡直怕死了,雖然說複習了一個月大部分的 C++ 基礎知識都看得差不多了,但是肯定是不夠的。面試的時候面試小哥全程就低頭照著題庫念,也不看我。我這邊的音訊訊號也不太行,他那邊說話都聽不清楚。兩個人就在無數次的重複和確認。關鍵是面試完之後我自我感覺還非常良好。
最終結果還是掛了,說實話打擊挺大的,感覺因此對面試產生了恐懼。不過後來試著自己跟自己講解,慢慢的也習慣了面試的感覺。
隨後在八月底的時候,終於收穫了第一家 ihandy 的 offer。並且在進行總管面的時候,跟面試官進行了深入的交談。面完之後讓我有一種都不好意思拒絕這家公司的念頭。這也是第一次感受到了面試官的認可。
隨後,便一發不可收拾。這個時候,已經準備了大概兩個月,基本的技術知識我都看完了,劍指 offer 上的66題以及 leetcode 上基本的題也大概刷了兩次。同時獲得了一個 offer 之後,對自己的認可度非常高,使得面試的狀態非常好。
後來給了面試機會的公司基本都拿到了 offer。像位元組跳動、美團、虎牙等等公司,面完的感覺就是基本穩了。不過可惜的是阿里簡歷面後,內推人開始說通過了,後來不知道什麼情況流程就拖到結束了。
騰訊也一直沒有撈過我面試。感覺如果在狀態頂峰的情況下能有面試機會的話,還是很有希望的。不過也說明簡歷依然不夠出色,非科班沒有實習經歷,專案也比較水,導致AT大廠連面試機會都沒給。這也是秋招比較遺憾的地方。
另外,記住面試過程,跟投遞簡歷一樣,一定要多面多總結。
如果你的表達能力不好,沒有別的好的辦法,只能多練。自己在面試前問自己問題,然後用自己的話陳述出來。甚至是錄音自己聽,感覺一下面試官聽到你的回答是做何感想。
心態要好。面試官也是人,不可能所有人都能夠絕對公平的跟你面試,所以遇到人品不好的面試官,做好自己就行了。
要善於總結。每一次的面試都可以做好記錄,錄音或者筆記都可以。面試完之後需要多回顧,發現自己的錯誤,感受面試官對你的引導,然後下次面試注意。我一般喜歡用印象筆記記錄東西,每一次的面試記錄我都記錄在印象筆記上。電腦手機都可以看,即使是出門現場面試也不怕。
最後就是一定要堅持下去。金九銀十,金三銀四。**把握好機會,要善於規劃自己的成功。**
## 五 複習準備
想進網際網路的技術崗,基本都是要提前準備的。當然某些大佬及大大佬除外。無論是校招還是社招,都需要針對自己的求職崗位進行必要的理論知識複習、專案經歷反思和演算法能力訓練。只不過校招會偏向於基礎和演算法能力,社招可能都會重點考察。
除專案經歷外,複習的階段主要分為語言基礎、資料結構和演算法、計算機網路、作業系統、資料庫以及演算法刷題。
**語言基礎:**
以 C++ 為主。我不喜歡看又厚又重的語言書,因此複習全程是以部落格、開發文件和實踐相結合的方式進行技術點複習。C++ 的技術點相對於其它語言來說,不算多,也不算難。技術重點的篩選可以從面經中提取而來。當然每一屆都差不多,所以找找別人總結好的資料看就行。(想要我複習資料的,可關注公眾號後臺回覆秋招領取)
**資料結構和演算法:**
這應該是程式設計的基礎,重要需要了解的資料結構不出10種。花點時間弄清楚它們的原理、結構和使用方法,常用的操作也需要掌握。最難不過紅黑樹。
這裡的演算法指的是常用的演算法,比如排序、遍歷,與資料結構相結合的資料操作方式。需要保證手寫才行。
**計算機網路:**
網路部分的內容其實可以算是最重要的,無論是前端後端都需要掌握網路通訊過程中的操作和機制。技術點可參考網路伺服器的請求和響應過程。將其中所有涉及到的協議、機制瞭解清楚,就可以掌握大部分了。
**作業系統:**
如果有`Linux`使用經歷和指令碼程式設計基礎在面試中會很加分。對於作業系統的理解建議按照`Linux`和`windos`系統的區分進行。
**資料庫:**
`SQL`基本操作必須要掌握,還包括一些關係型資料庫的基本原理和機制,內容不多,多看看就可以掌握。
`Redis`同樣也是加分項,有能力的可去研究下原始碼。
**演算法刷題**
這一部分不多說,普通人只能勤能補拙。無論是劍指offer66題還是leetcode都可以,劍指刷兩遍,leetcode兩百題,基本沒有問題了。刷題時不要死刷,可以根據型別刷,比如連結串列操作、二叉樹操作、動態規劃等。相同型別重複做,能夠更好的培養演算法思想。
## 六 感想體會
說起求職的過程,其實真要我來評價的話,估計運氣是佔了一大部分,連我這樣都行,你們也可以的。不過最終能夠獲得一些網際網路公司認可的原因,我認為主要有以下幾點原因吧:
> 1.本科階段接觸網際網路行業比較早,對於這個行業有自己的見解。
>
> 2.本科階段有考過一些計算機水平的證書,大概系統的學了一下計算機相關的基礎知識。
>
> 3.用C++比較多,對語言基礎的理解比較好。
>
> 4.面試狀態比較好,比較會表達自己的想法。
>
> 5.學習能力還行,能夠在面試官的引導下找到他想問的技術點。
>
> 6.準備過程比較有規劃,能夠快速的掌握面試的重點。
>
> 7.人長得老實,比較容易獲得信任感。(這個你們可能學不了^_^)
>
> 8.比較幸運。
前天剛碩士答辯完,這兩天也把學位申請的各種材料提交上去了。一不小心,七年的大學校園時光真的要結束了,兜兜轉轉感覺好像依舊是一無是處,一事無成。但是依舊希望以後能夠:
> 二龍騰飛、三羊開泰、四季平安、 五福臨門、六六大順、七星高照、八方來財、九九同心、十全十美、百事亨通、千事吉祥、萬事如意
人生無常,活在當下,且行且