2020本科校招-從小白到拿到30k offer的學習經歷

mio4發表於2020-05-31

本文是個人的2020年年中總結

還有十幾天就要畢業,面臨著身份從學生到網際網路社畜的轉變,未來的一切捉摸不定,但凡心中萬千情緒,也只能「但行好事,莫問前程」。

介紹下博主背景:計算機本科大四,剛進大三時還是個沒有實習、沒有專案經歷的小白,
經過一年時間的刻意練習[deliberate practice],最後在校招中拿到了一些大廠offer,
標題中30k的offer已經拒掉了,有了更好的去處,只是用來舉例。

文章同步自 https://github.com/mio4/interview

0x0 前期調研

以下經驗根據個人的經驗來談,有一定的侷限性,僅供參考。

1. 為什麼不選擇演算法

計算機專業的就業方向很多,對於應屆生來說,工種大概可以分為移動端、前端、後端、演算法、運維、測試。

由於近年來ML和DL的快速發展,特別是16年AlphaGo以及視覺檢測、自然語言處理方向的進展,人工智慧方向成為了繼大資料之後的又一個學術熱點。

周圍接觸到的同學,大部分集中於演算法和後端方向。我最開始就是準備深入後端方向,並且決定本科直接就業。但是我有兩點糾結:

  1. 後端是否不如演算法?
  2. 對於後端,本科學歷是否適合職業發展預期?
1. 本科生以演算法作為工作目標難度太高,和位元組跳動的面試官交流,目前位元組AI Lab的成員組成是大部分碩博,以及少部分優秀的本科生(acm區域金作為參考)
2. 演算法需要的三點:實習、競賽和paper,我都沒有信心和諸多轉專業的工科碩士抗衡
3. 個人對於演算法沒有強烈興趣,發展空間不明朗,行業未來搭上5G的車,可能會有比較大的想象空間,風險和收益並存。

參考

2021 校招演算法崗, 勸退還是繼續

如何看待 2020 屆校招演算法工程師崗位求職人數遠大於招聘崗位的現象?

2. 為什麼選擇Java後端

如果認定了後端,後端語言這麼多,如何選擇適合自己的方向?

業界有一種說法:『語言只是工具,資料結構和演算法是解決問題的根本』。這種說法本身是沒有錯的,但是從普遍來看,本科生從有工作的想法到秋招,只有(或者不到)一年的時間,泛泛瞭解多個方向不如深入特定方向,更有助於求職。

後端主要的開發語言有JavaC++PythonPHPGo,PHP目前除了百度和騰訊部分部門之外,使用範圍不廣,不予討論。另外,Golang作為高併發場景的常見支援,在雲端計算領域使用比較廣泛。

網際網路和其他資本市場沒有本質區別,既然是市場,就存在供求關係。 對於演算法這種供遠遠大於求的情況,就是買方市場,賣方(求職者)需要更好的產品(技能)來獲得同等的價格。對於應屆生來說,找到一個良好的買方市場,更加有利。

調研基於兩個預設條件:

  1. 崗位數目越多,市場的需求越大。
  2. 高薪崗位越多,該方向的發展前景越大。

我們參考www.lagou.com,網際網路大部分獵頭或者對外招聘崗位都會發布在上面,有一定的參考價值。

地點選擇北京,薪資範圍選擇25~50k/month。

Java

(1)職位500+,可以看出需求缺口很大

(2)除此之外,Java生態系統最為完善,e.g. Spring全家桶。

(3)Java是電商網站的技術首選,阿里、京東、拼多多等電商公司的技術棧。

Python

Python主要是作為指令碼語言,適用於運維開發和演算法崗位,目前在位元組跳動使用比較廣泛,可以看出崗位相對較少。適合作為輔助開發語言,畢竟寫指令碼算得上是程式設計師的必備技能了。

C++

C++是遊戲開發(其次還有lua)和系統開發的首選語言,但是因為上手成本比較高(指標和記憶體管理)以及需要對作業系統深入瞭解,市場崗位需求也不如Java,所以不推薦。不過如果有acm或者資訊競賽基礎,也不成問題。

0x1 秋招準備

隨著網際網路從業人數越來越多,競爭也呈現白熱化。科班學生不僅要和同專業同學競爭,也會感受到轉專業同學(大部分是碩士)帶來的壓力。參考同系講師的資料,我航15年時6系本科同學比較容易就能去BAT,到了19年BAT頭條對於大部分同學不是想進就進了。

從巨集觀意義上來看招聘,企業需要找到適配崗位的員工,學生需要謀取職業生涯的第一份工作。對於學生來說,秋招和高考在本質上是相似的,都是一種選拔,需要證明自己的能力比別人更強。

在準備的時候,定量的標準往往更加具有說服力,『我守望先鋒玩的很厲害』遠遠不如『我守望先鋒全國天梯4000分』,『我學習Java花了很多時間』不如『我閱讀了《Java核心思想》和《Effective Java》以及...,並且復現了書中的程式碼,在github倉庫xxx』。

我是從2018.8月下旬(進入大三)開始準備,到找到工作總共花了一年的時間,基本上分為三個時期:

  1. 2018.8 - 2018.12 :基本素質培養
  2. 2019.1 - 2019.8 : 百度智慧雲實習
  3. 2019.7 - 2019.8 : 秋招提前批

整個秋招的核心思路 = 基礎+實習+專案

1. 基本素質

第一次認清自己的水平,是在大二下學期結束的暑假。當時投了百度暑期實習,毫無準備的前提下,只用了20分鐘就掛在了一面。

面試慘跪之後,我分析了自己的處境,當時的我GPA排名40%,沒有參加過ACM程式競賽,沒有實習經驗,除了OO課程,沒有寫過"大型"專案。從程式設計能力上看,大一資料結構60分醬油飄過,演算法課程也限於理論,只能說能夠應付考試不掛科,Java只會語法,web框架更是沒有專案經驗。

這時候的我深刻意識到自己在程式設計方面還是個在新手村找不到北的green hand,記得剛上大一的時候,哪位神仙說我校混的差躺著也能去BAT?夢想很美好,現實很骨感。

相對於隔壁北郵,我航更加註重學生的深造(校內讀研和出國留學),對於工作方面的指導甚少。我大部分的時間都是一個人準備,所以經常陷入迷茫orz,這期間主要的問題是:

  1. 選擇什麼方向? (前面已經對市場進行了就業分析)
  2. 要學習什麼內容?(演算法太高階了,玩玩可以,找工作水平不夠)
  3. 要學到什麼程度,才能找到實習/工作?

整個秋招的過程,就是我解決這三個問題的過程。

於是,首先我使用Hexo + Github.io 搭建了個人部落格:mio4

部落格有兩個作用:

  1. 能夠體系化自己的學習,方便複習
  2. 量化自己的學習成果,面試的時候,給面試官帶來好印象

其次開始有針對性的訓練自己的程式設計能力,

Java程式設計師的基本素質有:Java基礎(語法+JVM+多執行緒),Spring框架(SSM/SpringBoot,進階可以SpringCloud),演算法能力(刷題)

2. BAT實習

找工作本身就是一個經驗和需求矛盾的過程:

找實習,認準BAT TMD,其中BATT(頭條)基本屬於一個檔;外企的話,ms/hulu/airbnb認可度也很高。

拿周圍同學舉例,即使是小廠開了一個月8、9k的實習補助,也不要因此放棄BAT的實習機會。

雖然近幾年百度已經明顯掉隊於BAT,但是就我個人體驗來看,外界對於百度的技術還是很認可的。對於實習來說,鍍金的效果完全夠用。【2020.5 update:目前應屆不滿一年沒有晉升和普調資格,除非部門極好,否則不推薦轉正】

在2019.1月,託研二直系學長的福,內推經過三面通過了百度智慧雲端計算部的後端實習,面經:https://www.nowcoder.com/discuss/151829

到8月結束了實習,半年的實習時光對於工業屆有了更深入的瞭解。

3. 秋招面試

離開baidu主要有兩個原因:

  1. 工作內容不算滿意:在baidu的工作語言主要是php,大廠目前使用php的很少,不利於職業長期發展;另外實習負責的模組也不算核心。
  2. 薪資不夠預期:baidu本科白菜價15k*15,每個月的工資扣掉五險一金和稅,只剩下11k,再加上北京動輒3、4k的房租,過於艱難。

因為花了接近一年時間準備,所以在提前批就結束了秋招,9月大部分企業剛開通秋招正式批通道前,我就歇了,真正準備校招的時間不足兩個月。【2020.5 update: offer這種東西當然是越多越好,去年的我太佛繫了,騰訊、微軟、快手這些公司甚至沒投簡歷,現在覺得去年還是naive】

AI四小龍面過了兩家,都是sp | ssp,雲從當時沒聽說所以沒投,商湯提前批四道題A了三道解題報告,結果居然沒有不給面試機會Excuse me?

提前批收到了百度、位元組跳動等大廠和一些獨角獸的offer,網際網路薪資保密,已經簽約的就不談具體待遇了。

拿個去年8月已經拒掉的獨角獸offer舉例:

0x2 其他經驗

1. 書籍推薦

國內csdn以及各種類似菜鳥教程的部落格的知識系統往往支離破碎,不能深入學習。

看書能夠系統化學習知識,下面推薦我看過的一些書

  • 演算法:

    • 《劍指Offer》
  • Java:

    • 《Java核心技術》,當字典看,不需要整遍過

    • 《Java併發程式設計實戰》 ,熟悉多執行緒

    • 《深入理解Java 虛擬機器》,熟悉JVM必備

    • 《圖解Java多執行緒設計模式》,日本人寫的書,直觀易懂,強力推薦

    • 《Java 8實戰》

    • 《Effective Java》

  • Spring:

    • 《Spring實戰》
  • MySQL:

    • 《高效能MySQL》,主要是第五六章
    • 《Redis實戰》
  • 網路:

    • 《圖解HTTP》
    • 《計算機網路自頂向下方法》
  • 程式碼規範:

    • 《重構》

2. 準備專案

對於在校學生來說,準備專案可能會面臨著無法下手的問題。

首先專案一般不是自己憑空想出來的,可以通過實驗室等方式接手比較成熟的方案。

我的操作是直接使用網課,比如慕課

選擇一個感興趣的,從0到1復現一個專案,完善自己的技術棧。

當然,imooc上大部分乾貨需要付費,學生黨如果沒錢可以考慮下面的方式:

蒲公英論壇:ipv6,好處是下載視訊不走校園網流量,有部分從imooc搬運的資源。

當然對於買不起資料的窮孩子,還是有灰色路徑可以『曲徑通幽』的,比如dmz社群盜版的論壇,基本上涵蓋所有imooc的視訊程式碼資料,僅供參考。作為程式設計師,這裡儘量推薦支援正版。

3. 演算法能力

面試必備:《劍指offer》 + LeetCode

LeetCode題目比較多,參考Hot/Top 100:

到秋招結束,刷題量不多,總共100左右,但是對每道題使用思維導圖進行總結,儘可能舉一反三:

4. 實習投遞

投遞實習的方式一般有:

  • [x] 熟人內推:最靠譜最快的方式,投遞簡歷到百度實習面試邀約只花了不到半天。

  • [x] 牛客網:響應時間一般,1~7天

  • [x] 實習僧app :響應時間一般,一般一週

  • [x] 官方通道:比如騰訊的暑期實習官方線上投遞。

4. 面試技巧

分公司分崗位的面經可參考:www.nowcoder.com

我的個人面經總結:https://github.com/mio4/learn-java/blob/master/Note/interview.md ,總共250頁的PDF,綜合個人經歷的所有面試,題目覆蓋率至少有50%。根據研二轉專業的同學反饋來看,作用很大。

相關文章