聽濤記
對于轉(zhuǎn)行互聯(lián)網(wǎng)的同學來說,最缺的是環(huán)境。周圍沒有戰(zhàn)友,所以很多信息需要自己去摸索,很容易走彎路。因此,我首先從整體的角度,按照時間軸說一說我的歷程。
研一期間自學了部分算法,主要用C++做一些信息學競賽的題目,靠這個,對后來的筆試,我基本可以拿到一個進面試的分數(shù)。
研二上我以最快速度發(fā)了小論文,從寒假開始系統(tǒng)地看書。由于我只會C++的基礎語法,所以首先看了C++的繼承派生、封裝、多態(tài)、模板等內(nèi)容。剛開始自學效率很低,很多知識看過就忘,因此后面開始做例題,記筆記。一本書看下來,做了20幾頁的筆記,大概花了3周時間。
轉(zhuǎn)眼到研二下,算法方向注重數(shù)理基礎,這對工科生來說是一個優(yōu)勢。周圍的同學大多選擇了算法,我因此也跟風看了一點機器學習相關的書籍,還在網(wǎng)絡上找各種實戰(zhàn)視頻對照練習。3月末各個大廠開始招暑期實習生,我嘗試投遞了螞蟻金服、字節(jié)跳動、百度等公司。由于準備并不充分,基本都是一面涼。原因在于我大大低估了暑期實習面試的難度,另一方面,暑期實習往往與轉(zhuǎn)正掛鉤,競爭非常激烈,而我對此毫無心理準備。暑期實習的失敗讓我一度想放棄轉(zhuǎn)行。
4月到6月一方面忙著畢設,一方面實驗室活也比較多,一直沒能靜下來看書,更沒有機會如室友一樣去找日常實習。6月初端午節(jié)回了趟家,好好地復了一下盤,覺得不能放棄?;匦:螅^續(xù)拿起書本。這時,我改變了之前讀書記筆記的做法,開始跟著視頻來走,速度和效率都提高了很多。
7月實驗室搬到沙河,我也進入暑假模式。每天除了下樓買點吃的,就宅在宿舍學習。在7月下旬終于把鄧俊輝的《數(shù)據(jù)結構與算法》學完,8月上開始刷《劍指offer》和Leetcode。雖然《劍指offer》只有66道題,但非常經(jīng)典,其中一些題目在面試中都考爛了。
原本按部就班往下應該看算法書了,但是看了牛客上提前批的大佬履歷,以及室友對今年算法崗的判斷,我覺得在人人深度學習的今年,自己既沒有專業(yè)背景,也沒有實習項目加持,總不能指望靠看幾本算法書就拿到offer。因此,我決定轉(zhuǎn)向后端開發(fā),既能發(fā)揮編程的優(yōu)勢,競爭又相對溫和。
于是,我從8月初開始看操作系統(tǒng)和計算機網(wǎng)絡。操作系統(tǒng)看“學堂在線”上向勇的公開課,計算機網(wǎng)絡看韓立剛的教學視頻。由于時間緊迫,這兩個都沒能好好地跟著做實驗,只能理解一下原理。8月底快面試的時候,看面經(jīng)發(fā)現(xiàn)對Linux和數(shù)據(jù)庫等方面知識考查的比較多。因此,利用一周的時間入門了數(shù)據(jù)庫,熟悉了Linux的基本操作。
9月開始面試。第一個面試是9月1號上午的網(wǎng)易游戲研發(fā)。那個時候我連OSI七層模型都說不全,但所幸C++相關的都回答出來了,過了一面。當天晚上騰訊視頻面試,面試官基本按照C++,計算機網(wǎng)絡,操作系統(tǒng)的順序提問。當問到poll和epoll的區(qū)別時,我坦言不會,面試官直接臉就沉了。果然,面試結束后我的校招進度條就灰了。
9月2號上午面美團。經(jīng)過昨天的兩場,我面試心態(tài)平和了許多。美團一面問得很全,但也很基礎。由于簡歷上沒什么可以聊的,于是開始考算法題。一共問了五道,前四道都是《劍指offer》上的,第五道是一道類似于整數(shù)拆分的動態(tài)規(guī)劃,順利寫完了代碼。面試官看時間還有剩余,于是問了一道概率題。當天下午,美團HR通知我一面通過,約了9月5號的現(xiàn)場二面。
9月5號的美團二面在望京。二面主要還是考察算法基本功,如手寫一個堆排序。不同的是,面試官問了項目:項目背景是什么;有哪些挑戰(zhàn);你在完成項目的過程中起了哪些作用,有哪些創(chuàng)新點;如果再給你一次機會,你會怎么做。這4個問題是關于項目的基本面試套路,因此簡歷里面有相關的項目一定要提前組織好語言。
9月中旬做了一些筆試,如滴滴、京東等,一直沒有消息。接著投了幾個外企,但外企招人很少,且競爭激烈,面試機會都沒拿到。那段時間有點沮喪,因為投一個掛一個,甚至對自己產(chǎn)生了懷疑。
9月21號字節(jié)跳動給了面試機會,可以選擇視頻和現(xiàn)場面。我選擇了現(xiàn)場面,而且特意選了9點的第一批。我覺得現(xiàn)場面的效果更好,而且面試官會對第一個面試者一般要仁慈一些。
字節(jié)跳動效率很高,一上午走完了三面。一面是廣告推薦的后端,帶著我寫了幾段Linux的指令,然后考了一道括號匹配,順利通過。二面是互娛直播,上來問了死鎖,然后考了一道鏈表排序。我先無腦用了哈希排序,面試官馬上問能不能原地,我表示要想想,后來在提示下寫完了代碼。結束后,面試官說待會兒加你微信,我心里竊喜。
三面是財經(jīng)部門,面試官看上去年紀較大,部門Leader的感覺。開始考設計題,分析紅包的提現(xiàn)過程,如何在不加密的前提下保證安全,提現(xiàn)的瞬間服務器崩潰怎么處理等。由于沒有經(jīng)驗,我只能硬著頭皮往數(shù)據(jù)庫相關的方向去靠;在說的過程中涉及一些知識點,面試官會順著往下問,最后問了發(fā)展規(guī)劃。有意思的是,當我表示想去一個技術強的部門時,面試官笑著說那你應該去藍翔啊。
面完后,HR讓我去吃了午飯,很豐盛。飯后,我當面問了HR結果,HR告訴我面試通過。這是我秋招第一個面試通過的公司,也是體驗最好的一次面試。
9月22號下午面百度。由于過了字節(jié),所以百度面得比較佛系。一面是基礎知識和難度較低的算法。面試官非常友好,在我回答完之后立即給予反饋,因此我越答越放松,順利過了一面。
二面面試官來自百度地圖,這是整個秋招最有壓力的一場面試。上來就問B+樹,然后讓我在紙上手寫B(tài)+樹,我直接懵了。他看我不動彈,說那寫一下二叉樹吧,包含增刪改差。我寫了半個小時,馬馬虎虎。寫完給面試官看,他淡淡地說了一句怎么沒有平衡啊?我心里想你之前也沒講啊。然后開始考設計,題目是不同的終端登錄微信時,數(shù)據(jù)庫怎么處理。比如PC端登錄需要手機確定,不同的端登錄會將其他端踢下線。這種題目我自然是陌生的,于是又是硬著頭皮上。整個過程中面試官不給我任何確定的反饋,比如會給你看似二選一的問題,最后告訴你其實兩種都選。因此面完十分心累,還好給過了。三面是部門主管,問了InnoDB和MyISAM的區(qū)別就結束了。
一周后,收到百度錄用的短信和美團的意向書。9月28號在北京面了網(wǎng)易的二面,當天晚上發(fā)了offer郵件。9月29號現(xiàn)場集中發(fā)帶薪offer,但是只給了初級游戲研發(fā)工程師,在我表示已經(jīng)被百度和字節(jié)錄取后仍不能調(diào)整職位,于是現(xiàn)場拒絕了offer。
至此,互聯(lián)網(wǎng)秋招結束。
下面細致地講講怎么準備。從個人經(jīng)驗出發(fā),可以分為語言、數(shù)據(jù)結構與算法、操作系統(tǒng)(包括Linux系統(tǒng))、計算機網(wǎng)絡、數(shù)據(jù)庫(關系型和非關系型)這幾塊基礎內(nèi)容。后續(xù)可以繼續(xù)看系統(tǒng)設計、工具等進階內(nèi)容,這個可以根據(jù)崗位的需要有針對性地看。前一部分的基礎內(nèi)容資料網(wǎng)絡上都很成熟,而后一部分的進階內(nèi)容則比較分散,我主要看博客或者GitHub上的總結。
語言,我選擇的是C++,原因有三,第一我本科學的C語言,C++的語法與C很像,學習成本低;第二我在做算法題的時候,官方語言是C++,所以一脈相承;第三個人覺得C++較為底層,對代碼的細節(jié)要求較高,對代碼基本功有好處。在刷Leetcode的時候,看到很多“高手”用Python一行代碼AC來顯示自己的水平,我覺得這樣雖然走了捷徑,卻耽誤了基本功的建設,這在面試的時候無疑是吃虧的。事實也正是如此,有的人Leetcode刷了不少題,但是面試的時候連快排都不會寫,自然一面就掛了。
C++的學習,我建議跟著“學堂在線”上鄭莉老師的課去學。鄭老師的課清晰易懂,例子充分,能很好地將容易混淆的概念講清楚。我不建議上來就抱著“C++Primer”啃。人都有畏難情緒,容易半途而廢。“C++Primer”把各方各面講得很全,但是過于厚重。我先跟著視頻學完了一遍,然后重點看了“C++Primer”關于多繼承和多態(tài)的內(nèi)容。由于時間比較充足,所以做了筆記,在面試前,復習非常有效。
數(shù)據(jù)結構和算法其實是兩塊內(nèi)容。我先學的算法,然后學數(shù)據(jù)結構。算法總結來看,包括分治、搜索、貪心、動態(tài)規(guī)劃等幾個大的方面。分治如二分、歸并、快排等;搜索包括深度優(yōu)先搜索、廣度優(yōu)先搜索,是算法題最基本的方法;貪心和動態(tài)規(guī)劃的題目都有一定難度,一般很難直接想到思路,所以必須要有一定量的題目積累。做題除了牛客網(wǎng)和Leetcode,洛谷網(wǎng)站也可以試試。
數(shù)據(jù)結構方面我是跟著“學堂在線”上鄧俊輝的課。鄧的課非常精巧,獲譽無數(shù)。數(shù)據(jù)結構總體來看,包括棧、隊列、鏈表、向量、堆、樹、圖、集合(并查集)、哈希表等。其中鏈表、堆、樹(重中之重)、哈希表是重點。圖雖然經(jīng)典,但是感覺考察的不多,知道最短路徑基本就可以了。這部分題目可以看《劍指offer》。但相比題目,面試官更喜歡考察某種數(shù)據(jù)結構的實現(xiàn),如用數(shù)組實現(xiàn)鏈表,寫二叉樹的接口,用數(shù)組實現(xiàn)堆,并查集等。比較有挑戰(zhàn)性的是實現(xiàn)紅黑樹、B+樹等,但屬于極少數(shù)。
操作系統(tǒng)我看了多個版本,最后還是覺得“學堂在線”的向勇講得好。課程包含講解和實驗,由于時間有限,我只學了講解的部分。操作系統(tǒng)的主要內(nèi)容有:進程與線程、死鎖和內(nèi)存管理。進程是重點,包括進程與線程的概念與區(qū)別,進程控制,進程同步,進程通信等問題;死鎖面試基本都會問,但是內(nèi)容不多,主要圍繞是什么,為什么,怎么辦三個方面;內(nèi)存管理主要是段頁式存儲、虛擬內(nèi)存、頁面置換等方面,這個找一篇總結性的博客看懂就基本可以了。
操作系統(tǒng)另一個方面是Linux系統(tǒng),是面試的一個重點。這方面我僅僅入門,所以面試的時候非常吃虧。Linux系統(tǒng)相關的實戰(zhàn)課網(wǎng)上很多,如果能夠?qū)W完,且有一些作品,即使是造輪子,面試也會非常加分。
計算機網(wǎng)路我看的是韓立剛老師的課。課程雖然久遠,但是非常經(jīng)典,B站和六緯上都有資源。韓擅長用畫圖的方式來講網(wǎng)絡關系。內(nèi)容基本按照TCP/IP五層模型展開,即物理層、數(shù)據(jù)鏈路層、網(wǎng)絡層、傳輸層、應用層。前兩層了解即可,網(wǎng)絡層必須要掌握IP協(xié)議,傳輸層包括TCP和UDP,幾乎面試必問,考得也比較細致,比如TCP的可靠傳輸、流量控制、擁塞避免等。因此必須理解工作原理。應用層主要是HTTP,問得較多的是get與post的區(qū)別。
韓的課由于比較老,沒有講Socket和I/O模型,這部分可以看B站上的黑馬程序員。I/O模型主要考阻塞/非阻塞、同步/異步五種I/O模型,尤其是I/O多路復用中poll、select和epoll的區(qū)別。
數(shù)據(jù)庫看得較匆忙,主要分為關系型數(shù)據(jù)庫(MySQL)和非關系型數(shù)據(jù)庫(Redis),個人覺得MySQL是重點。關系型數(shù)據(jù)庫的基本內(nèi)容包括:ACID屬性,數(shù)據(jù)庫的基本概念(如范式)和基本操作指令(雖然一般不會直接考察寫指令)、隔離級別、鎖和并發(fā)一致性問題、存儲引擎InnoDB和MyISAM、索引(重點)、切分、主從復制和讀寫分離等??偟膩砜?,數(shù)據(jù)庫需要花充分的時間去學習。這部分我為了快,直接看的Github上的總結。非關系數(shù)據(jù)庫看的較少,重點看了持久化(RDB持久化和AOF持久化),同樣也是基于Github。在此,我建議還是跟著視頻課程走,多做點題,這樣學比較扎實。
最后,我看了一點緩存、集群、分布式方面的總結,便匆匆忙忙投入秋招了??吹竭@里大家會發(fā)現(xiàn),上面的幾塊其實就是計算機考研的課程。大家學完了這些基礎知識,根據(jù)面試經(jīng)驗實時調(diào)整和補充一些知識點,基本就可以去面試了。如果想要拿到SP,需要再做更多的積累。
2019屆秋招接近尾聲時,我在互聯(lián)網(wǎng)方向拿到的offer有百度、字節(jié)跳動、美團和網(wǎng)易,崗位均為后端開發(fā)方向。我給今年正在求職的同學,講講我的互聯(lián)網(wǎng)轉(zhuǎn)行之路。
先介紹一下自己的背景,北航本碩,保研,專業(yè)方向是航空宇航科學與技術,學習成績中上,有兩個學科競賽獎項,一篇SCI。
秋招就像一場考試。招聘企業(yè)有上市公司,有獨角獸,也有初創(chuàng)企業(yè)和國企外企;時間跨度長,從7月提前批就開始;變數(shù)多,企業(yè)和個人都是雙向選擇。因此,經(jīng)歷過秋招的人都會脫一層皮。未來方向的迷茫,被拒絕的沮喪,等待結果的焦慮,拿到offer的喜悅和選擇的糾結,未來發(fā)展的擔憂,這些大部分人都或多或少會經(jīng)歷。也正因為如此,我才決定詳細地寫下我的歷程,為后來者,特別是那些迷茫的轉(zhuǎn)行者,提供一個真實的案例。
計算機方面,沒有實習,只有一個略微相關的項目能寫到簡歷里面。專業(yè)知識全靠自學,所以過程也異常痛苦。準備時間從2018年寒假開始,到2019年8月底結束,前后跨度不到兩年。
秋招期間,包括互聯(lián)網(wǎng)和航天院所,總共投遞20多份簡歷,筆試8次,面試9次,5家單位給出明確錄用意向,最終的結果比自己的預期理想。
秋招就像一場考試。招聘企業(yè)有上市公司,有獨角獸,也有初創(chuàng)企業(yè)和國企外企;時間跨度長,從7月提前批就開始;變數(shù)多,企業(yè)和個人都是雙向選擇。因此,經(jīng)歷過秋招的人都會脫一層皮。未來方向的迷茫,被拒絕的沮喪,等待結果的焦慮,拿到offer的喜悅和選擇的糾結,未來發(fā)展的擔憂,這些大部分人都或多或少會經(jīng)歷。也正因為如此,我才決定詳細地寫下我的歷程,為后來者,特別是那些迷茫的轉(zhuǎn)行者,提供一個真實的案例。
責任編輯:王新偉