寫在最前
我寫過很多篇秋招總結,這篇文章應該是最后一篇總結,當然也是最完整,最詳細的一篇總結。秋招是我人生中一段寶貴的經歷,不僅是我研究生生涯交出的一份答卷,也是未來職業(yè)生涯的開端。僅以此文,獻給自己,以及各位在求職路上的,或者是已經經歷過校招的朋友們。不忘初心,方得始終。
前言
在下本是跨專業(yè)渣考研的985渣碩一枚,經歷研究生兩年的學習積累,有幸于2019秋季招聘中拿到幾個公司的研發(fā)崗offer,包括百度,阿里,騰訊,今日頭條,網易,華為等。
(在秋招末期,有幸又拿到了滴滴和亞馬遜的offer,那時已經11月份了,所以之前的文章里都沒有提到過)
一路走來也遇到很多困難,也踩了很多坑,同時我自己也探索了很多的學習方法,總結了很多心得體會,并且,我對校園招聘也做了一些研究和相應的準備。在今年的秋季招聘結束以后,我也決定把這些東西全部都寫成文字,做成專題,以便分享給更多未來將要參加校招的同學。
大學時期的迷茫與堅定
我的本科專業(yè)是電子信息工程,基本沒有接觸過計算機專業(yè)的課程,只學過c語言,然后在大三的時候接觸過java,Android,以及前端開發(fā)。這時候我只是一個剛剛入門的菜鳥,還不知道軟件開發(fā)的水有多深,抱著試一試的態(tài)度去應聘了很多公司。結果可想而知,連簡歷篩選都沒有通過。
當年我對游戲開發(fā)很有興趣,特別是對網易游戲情有獨鐘,但是當我看到網易游戲研發(fā)工程師的招聘要求時,我只能望而卻步,因為它要求學歷至少是985的碩士。
也因為這個契機,我在大三的暑假開始準備考研,花了一個月的時間深思熟慮之后,選擇了華科作為我的目標院校。
于是,2016年的下半年,我成為了“兩耳不聞窗外事,一心只讀圣賢書”的考研黨,回想起來那確實是玩命學習的半年時間,每天穩(wěn)定泡在圖書館8個小時以上,有時候學到宿舍都能學到晚上12點,那時候感覺自己完全變了一個人似的,可能當一個人為了某個目標而努力時,真的會變得不一樣。最終我順利地考上了,令我意外的是,成績還挺不錯。
研究生時期的方向選擇
對于即將讀研的同學來說,一般有兩件事很重要,一件事是選擇導師,一件事是選擇方向。
我在剛讀研的時候最頭疼的也是這兩件事情。首先說明一下,我讀的是專碩,所以實驗室一般不搞科研,有部分導師會帶項目,由于我不打算在實驗室做項目(因為我更希望去大公司里鍛煉幾年),所以我當時本著想要找實習的想法選擇了導師,事實證明我的選擇還是很正確的,我在研二有大段時間去參加實習,讓我在大廠里有足夠的時間去鍛煉和學習。
而選擇方向這件事,我倒是折騰了好久。研一期間我做的最多的事情就是看書了,當時自己的方向還不明確,所以找了很多書來看。當別人都在專研數(shù)據(jù)挖掘和機器學習時,我還在各種方向之間搖擺不定。
我在讀研之前想做游戲開發(fā)和Android開發(fā),但我以前也學過Java Web開發(fā)。于是我在網上了解對應方向的資訊,發(fā)現(xiàn)游戲研發(fā)的就業(yè)面比較窄。
最后,我綜合公司的崗位情況,個人興趣,以及我之前的學習經歷等因素,選定了Java開發(fā)方向。
于是,我在學校的實訓項目中選擇了Java Web項目,從此也真正意義上地踏上了Java的學習之路。
笨鳥先飛,勤能補拙
盡管我的入學成績是全學院的top3,但是,我發(fā)現(xiàn),作為非科班出身的我,和很多科班同學相比,還是有一定差距的。
大部分同學本科都上過計算機專業(yè)的相關課程,比如計算機網絡,操作系統(tǒng),數(shù)據(jù)結構等等,而我以前連聽都沒聽過,除此之外,他們一般都會幾段比較完整的項目經驗,至少在Java Web方面已經算是比較熟悉了。而我在當時,只學了數(shù)據(jù)結構,另外接觸過一些Java基礎,有一部分項目經驗,基本上就是入門水平。
于是我痛定思痛,決定好好彌補我的不足,平時一有空就去圖書館找些書來看,不論是操作系統(tǒng),計算機網絡,還是數(shù)據(jù)庫等本科課程,我都會找一些對應的書籍來看,當時不太清楚其實有些課程其實不需要特地去補,以至于我連計算機組成原理,編譯原理,軟件測試等方面的書都特地找來看,現(xiàn)在想想也是挺逗比的。
由于我們上的課比較水,所以上課時間反而變成了我自學基礎課程的大好時光了。所以我平時上課的時候都會帶兩三本書,一到兩周內看完一本,雖然可能吸收的不是特別好,但是對當時的我來說還是有很大幫助的。
除此之外,有時候我還會偷偷去旁聽有一些本科生的課程,這也是因為我在自學一些課程的時候遇到了困難,比如《操作系統(tǒng)》,《數(shù)據(jù)庫原理》等等。于是我花時間研究了一下本科生的課表,趁著自己沒課的時候趕緊去旁聽課程。有時候感覺自己在課堂中顯得非常突兀,尷尬地想要逃跑,但總算是堅持地聽完了一門數(shù)據(jù)庫的課程。
此外,我還在各種視頻網站上看網課,比亦或是看中國MOOC的計算機基礎課程,里面的操作系統(tǒng),數(shù)據(jù)庫等課程也讓我印象深刻。
就這樣,每天我都把自己的時間填滿,愣是在研一上學期看了好幾本書,當時書的版本現(xiàn)在有的記不清了,主要是計算機網絡,操作系統(tǒng),計算機組成原理,另外還有軟件工程,軟件測試,設計模式,等書籍。就這樣,我靠著這段時間的堅持把計算機基礎課程補上來了一些。
歷盡艱辛,終得實習
時間來到研一下半頁,這時候我剛剛結束了學校的Java Web的項目實訓課程,在做這個項目期間,我發(fā)現(xiàn)自己暴露出了很多問題,技術實踐能力不足,Java基礎不扎實。這件事情也給我自己敲響了警鐘,因為我計劃在春招期間找一份大廠的實習,但是目前看來我的水平還遠遠不夠。
壓力之下,只有努力一條出路。于是,從那時候起,我開始了“留守“實驗室的學習生活。為什么要在實驗室學習,一是因為學習氣氛好,二是因為平時大家也可以互相交流問題。
每天早上9點到實驗室打開電腦,晚上9點背電腦回寢室。大部分時間我會花在看書上,這段時間主要看的都是Java相關的書籍,借鑒的是江南白衣大佬的“Java后端書架”,比如《深入理解JVM虛擬機》,《Java并發(fā)編程藝術》,《深入分析Java Web技術內幕》,《深入剖析Spring源碼》等等。
另外一部分時間我會用來看一些技術博客,我主要是根據(jù)面經上的知識點按圖索驥,找到對應講解該知識點的文章,那時候主要還是通過搜索引擎來找文章,當然有時候看到一些重點難點也會自己寫一些博客。不過這個時期并不是我大量寫博客的階段,主要還是看一些講解面試知識點的技術博客為主。
除此之外在面試前幾天我會花時間去看這家公司的面經,搞懂每一個面經上的知識點,并且記錄在我的筆記上,光是面經相關的筆記我就記了100多篇,這樣的學習習慣我一直堅持到了秋招,確保每個面試知識點都能被我記住,消化,直至完全理解。
慢慢的,筆記越來越多,我參加面試的公司也越來越多,于是我開始不斷完善自己的簡歷,總結自己的面試技巧,選擇合適的網申時機。從頭到尾我大概花了3個月的時間在找實習上,期間大大小小參加了20多次面試,我也從一開始面試一問三不知的菜鳥,逐漸變成了面霸,到復習末期,我對Java常見面試知識點已經了然于胸,同時也越來越自信,不管面什么大廠都不慌不忙。
這樣的日子持續(xù)了好幾個月,所謂世上無難事,只怕有心人。到最后,實驗室里每個人都拿到了心儀的實習offer。
實習路上,我明白了很多
踏出學校大門,我的實習之路才剛剛開始。8個月左右的實習時間,說長也長,說短也短。但經歷過這段實習之后,我才明白了很多事情。
在豬場實習的日子里,我第一次了解大公司的開發(fā)流程,親自參與項目代碼的開發(fā),我的導師會和我提需求,會指導我怎么做得更好。在這里的成長無疑是非常快速的,但我很快意識到我的問題所在,不熟悉部門技術棧,對很多Java Web的技術原理都不太熟悉,這段時間我意識到了自己的知識深度和廣度都可能都有待提高。
不過由于家里的一些事情。我提前離職了,所以在豬場呆的時間很短,以致于我沒來得及搞懂部門項目的技術架構就走了,這也讓我在離開以后感覺很遺憾,所以我下定決心在下個實習單位要好好做。
離開豬場后我來到了熊廠。部門給我提的需求不算太難,大部分都是一些CURD的工作,但是這次很快就意識到了問題所在,就是我不太熟悉部門的整體技術棧,所以在需要借鑒別人代碼時偶爾會看不懂。后來部門又給了新的重構需求,此時的我開始焦慮起來,是不是應該做出一些改變呢。
終于,我找到了新的目標,我要搞懂部門的項目架構,了解相關技術棧(我們部門做的是私有云),一開始,我會請教我的導師,盡量去了解項目的架構設計,除此之外,我還會利用一些時間去看其他同事負責的代碼,并且通過一些文檔和PPT去了解這些代碼的功能和意義。結合代碼和文檔,再加上和同時的交流,我對部門項目的架構逐漸熟悉起來,為了更好地理解每一塊代碼的作用,我還為一些模塊的代碼寫了注釋。
當然,光看代碼和文檔還不能解決所有問題,因為這個項目的重點難點不在Web應用,而是在底層技術,這個項目中包含了兩套架構,分別是一套OpenStack集群和一套docker集群。為了學習這兩塊內容,我先是看了很多博客,然后在平臺上跑虛擬機和容器來做實踐,最后又看了這方面的一些書籍,主要是《OpenStack設計與實現(xiàn)》,《docker技術入門實戰(zhàn)》。
但是這還不夠,虛擬化技術與Linux內核息息相關,又需要學習者對操作系統(tǒng)和計算網絡非常熟悉,我自知這些內容我學得還不夠深入,于是我花大量時間看這方面的書,當時也遇到了幾本確實不錯的書,分別是《深入理解計算機系統(tǒng)》,《計算機網絡:自頂向下方法》,還有一本沒來得及看完的《Linux內核設計與實現(xiàn)》。雖然以后不一定會作云計算方向的開發(fā),但是學完這些東西我還是非常開心的。
到后來,我工位上的書越來越多,我對部門的技術棧也越來越熟悉,有時候我還會去聽公司內各個團隊組織的技術分享,有空的時候看看內網的技術課程,真正地實現(xiàn)了自己在技術廣度上的拓展。
有時候我覺得,實習生活是會騙人的,你佩戴著和正式員工一樣的工牌,和他們做著類似的事情,會讓你覺得你的水平已經和他們差不多了,但事實上是,在轉正之前,你和他們還差得遠,所以不要停下自己前進的腳步,抓緊時間學習吧,把握好你在公司里的機會,合理利用公司給你提供的資源。
秋招前的積累與沉淀
研究生期間我有一件事情一直在堅持,那就是做筆記和寫博客。
做筆記,就是記錄學習中大大小小的事情,可能是面試問題,可能是一周的學習計劃,也可能知識一個知識點,總歸都是值得記錄的東西,對我來說,就是一種積累。而對于博客,我從一開始只用于記錄項目,到后來做轉載,再到后來寫原創(chuàng),整理系列文章,則更像是一種沉淀。
但是在春招剛剛結束的這段時間,我發(fā)現(xiàn)一個問題,之前學過的東西忘記了很多,特別是那些理解的不夠深的知識點,總是特別容易忘記。另外我發(fā)現(xiàn),雖然我在筆記中記錄了很多的知識點和面試題,但是往往我只看過一次,不會再去看第二次。
這也意味著,雖然記錄的內容很多,但是真正消化吸收的內容很少,腦子里充斥著總是那些零碎的知識點和面試問題,對于完整的知識體系知之甚少。這些問題在春招期間也不斷地暴露出來,讓我思考了很久。
面對如此窘境,我想做出改變,趁著現(xiàn)在時間充裕,我想要為這些內容做一次減法,并且借此機會,推翻自己原有的知識體系,重建新的知識框架。簡單說來,就是重新開始學習Java后端,這次我要用一種更高效的方式,避免走之前走的彎路,要用最高效,最合理的方式去復習。由于我之前已經有基礎,所以我對完成這一目標有信心,相應地我也為此做出了明確且詳細的學習計劃。
我打算用幾個關鍵詞來形容這三個月的秋招復習。
“具體可靠的學習計劃”
在三個月的時間里,我首先按照Java后端路線圖安排好復習計劃,每個知識點都會對應安排一段時間,比如我可能花一天時間復習“Java反射”,兩天時間復習“設計模式”,一周的時間用于復習"JVM虛擬機”。我一般會在月初做好整個月的計劃,然后根據(jù)進度做一些微調,但是基本上我都可以跟上進度,并且是在復習到位的前提下。
所以我覺得,對于秋招這一場苦戰(zhàn),指定計劃尤為重要,一旦計劃定下來,戰(zhàn)略目標清晰,對應的戰(zhàn)術制定也會變得清晰,執(zhí)行力也會隨之變強。
“寫博客整合知識點”
至于復習方法,我主要通過看高質量博客,并且結合代碼實踐的方式鞏固這部分知識點,比如今天學習“concurrenthashmap”,我會去找兩三篇比較好的博客先看看,主要是源碼解讀方面的,然后我會把它們進行整合,如果有遺漏的知識點我會再進行補充,有時候我還會自己去看看JDK源碼,以便更好地理解博客內容,完成知識整合之后,我就會對應地整理出一篇博客出來,發(fā)在我的個人博客上。
除此之外,當我完成了一整個專題的復習之后,我會把這些文章整理成一個專題,比如上面說的“concurrenthashmap”,實際上屬于Java并發(fā)包,所以我會專門做一個博客專欄,用來完成Java并發(fā)系列的文章專題。對于每一個文章專題,我都會先理清這個專題一共有哪些內容,然后再開始整理。比如對于Java并發(fā)包,我會先寫Java多線程基礎的文章,再寫JMM內存模型的文章,接著一步步著手寫Java線程池,阻塞隊列,工具類,原子類等等。這樣一來這部分內容就復習完畢了,寫系列文章的好處就在于,我可以從頭到尾理清脈絡,并且對于每一部分的知識點都做了比較好的總結。
對于博客的選擇,我吸取了之前的教訓,寧愿花半小時看一篇高質量文章,也不花10分鐘看5篇爛文章。深度閱讀的好處,就是可以讓這部分內容更好地融入你腦內的知識體系,而不是像其他快餐文章一樣轉瞬即逝。
“做項目鞏固實踐能力”
由于之前在實習期間參加的項目都比較大,我接觸的模塊也比較單一,沒有對整體項目有一個很好的把握,所以我決定趁這段時間再鞏固一下我的項目實踐能力,這里的能力主要是指的是對項目架構的把握能力,以及對業(yè)務開發(fā)的熟練度,當然也包括對各種常用后端技術的熟悉程度。
我花了大概一個月的時間完成了兩個項目的開發(fā),當然主要也是模仿兩個開源項目做了,這兩個項目都使用SpringBoot快速開發(fā),并且用到一些常用的后端技術比如redis,云存儲,以及一些常見Web框架,除此之外還涉及到了solr,爬蟲等技術。雖然項目不算很難,但是我在這段時間里很快地熟悉了完整項目開發(fā)的流程,并且每天做迭代,通過Git來跟進版本,每個版本都會寫清所做的內容,這也讓我對項目的架構非常熟悉。
在項目之余,我也找一些常用的后端組件來跑一跑demo,以便讓我對這些技術有一個直觀的了解,比如面試常問的dubbo,zookeeper,消息隊列等組件。這些嘗試也讓我在理解它們的原理時更加得心應手了。
“堅持刷題,注重方法”
算法題是秋招筆試面試中的重頭戲,每個研發(fā)同學都免不了經歷算法題的摧殘,對我這么一個非科班同學來說,更是讓人頭大。正因為如此,我放棄了刷大量LeetCode題目的方法,選擇了更加行之有效的刷題方式。
首先我重新刷了一遍劍指offer,并且對每道題目進行總結,盡量保證每一道題都可以記在腦子里,眾所周知劍指offer中的題是面試時非常喜歡考的,所以先搞定這部分題目是最為關鍵的。
搞定劍指offer之后,當然還要刷LeetCode了,LeetCode題目這么多,怎么選擇呢,我沒有按照tag刷,也沒有按照順序刷,而是參考當時一個大佬的LeetCode刷題指南來進行刷題的,他把每個類型的題目都做了歸納,每部分只放一些比較經典的題目。所以我前后大概刷了100多道LeetCode的題目,并且在第二遍刷題復習的時候,我也對這些題目做了一份總結。
除了上面兩個經典題庫,我還著重刷了大廠的歷年真題,這部分我主要是通過牛客網的歷年真題題庫來完成刷題的。說實話,真題是非常重要的,因為公司出的題目不像平時的那些算法題,可能會出得非常奇葩,所以你如果不提前適應的話會比較吃虧。完成這部分題目之后,我對算法題的復習也基本告一段落了。
當我完成所有內容的復習時,提前批已經開始了。終于要上戰(zhàn)場了,因為戰(zhàn)前準備比較充分,所以我對秋招還是比較樂觀的,但事實上,秋招不僅是攻堅戰(zhàn),而且是持久戰(zhàn),要笑到最后,確實也不是那么容易的事情。
重建知識體系,對學過的東西做減法
前面提到我在秋招前完成了知識體系重建,那在這里我也想跟大家分享一下我當時大致的知識體系構成。就跟我前面說的一樣,我選擇重新再學一遍Java后端相關的技術內容,因為我知道大致的學習方向,并且有一定的基礎,所以看很多文章變得更加得心應手,寫文章和做總結也更加有底氣了。
首先在Java基礎方面,我寫了20多篇原創(chuàng)博客,主要是對Java核心技術的解析,比如“Java反射”,“Java序列化和反序列化”,“Java異常體系”等等。
在Java集合類方面,我原創(chuàng)了部分文章,另外整合了一些比較好的技術文章,其中最主要的就是關于hashmap的文章,當時我整合的文章幾乎沒有遺漏任何一個知識點。
在Java并發(fā)編程方面,我主要參考了并發(fā)編程網以及一些優(yōu)質博客的文章,先搞懂了Java并發(fā)原理,再一步步學習JUC并發(fā)包的組件,其中重點看了chm,并發(fā)工具類以及阻塞隊列等JDK源碼的解析文章,除此之外,我還會在IDE中跑JUC相關的emo,畢竟這方面的內容非常需要實踐。
在Java網絡編程方面,我先從最基礎的socket入手,再講到NIO,AIO,并且加入了幾篇對Linux IO模型解析的文章,讓整個知識體系更加完整(因為NIO是基于Linux Epoll實現(xiàn)的),接著我又加入了對Netty的探討,以及Tomcat中對NIO的應用,可以說是把Java網絡編程一些比較重要的部分都囊括進來了。為了更好理解這部分內容,我也在網上參考了很多客戶端和服務端通信的demo,最后我分別用Socket,NIO,AIO以及Netty把C/S 通信的demo都寫了一遍。
在JVM虛擬機方面,我則按照《深入理解JVM虛擬機》這本書的行文脈絡進行文章的整理。在搞定JVM基本原理以后,我著重了解了JVM調優(yōu)和實踐中常遇到的問題,并且整理了常用的JVM調優(yōu)工具,場景問題以及調優(yōu)實踐的案例,這也是因為面試中對JVM調優(yōu)實踐越來越重視了。
在JavaWeb方面,我從Java Web相關技術的發(fā)展入手,一步步了解了每種技術存在的意義,比如JSP,Servlet,JDBC,Spring等等,然后對每種技術進行了比較全面的了解,并且著重地看了Spring和SpringMVC的源碼分析文章,另外一方面,我花了很多時間去研究Tomcat的工作原理。除此之外,JavaWeb項目中常用的maven,日志組件,甚至是單測試組件,也納入了我的系列文章里。
在數(shù)據(jù)庫和緩存方面,我主要學習了MySQL和Redis這兩種最常用的數(shù)據(jù)庫。對于Mysql,我從簡單的sql開始了解,然后開始了解sql優(yōu)化,MySQL的存儲引擎和索引,事務及鎖,還有更復雜的主從復制,分庫分表等內容。對于Redis,我也是從簡單的api入手,然后去了解每一種數(shù)據(jù)結構的底層實現(xiàn)原理,接著嘗試去學習Redis的持久化方式,以及作為緩存常需要考慮的技術點,當然,也包括Redis的分布式鎖實現(xiàn),以及它的分布式集群方案。
最后一部分就是分布式相關的理論和技術了,這個也是困擾我很久的一塊內容,我主要把這塊內容分為兩個部分,分別是分布式理論和分布式技術,理論方面,我先了解CAP,BASE等基本知識,然后開始學習一致性協(xié)議和算法,接著探討分布式事務。對于分布式技術,涉及的東西就更多了,例如分布式session,負載均衡,分布式鎖等內容,這些知識點我都會用一到兩篇文章去總結,對于分布式緩存,消息隊列,以及分布式服務等內容,我會花比較多的時間去全面學習,然后總結出一個系列的文章出來。當然,對于這些技術的學習主要還是停留在理論方面,在自己的項目中能用到的比較少。
至此,我的知識體系基本構建完成,這也是我在秋招中能夠成功闖過那么多面試的原因。
秋招之路,砥礪前行
不管前期做了多少準備,到秋招的時候也不能掉以輕心,從七月底第一次面試到9月基本佛系,中間經歷了大大小小的面試。
在完成知識體系重建以后,我把重點轉向了另外幾件事,一是完善和熟悉我的簡歷,以便在面試中能夠比較好地發(fā)揮,二是持續(xù)刷題,保持對算法題和筆試真題的手感和熟練度,三則是看面經查缺補漏,我一直認為看面經是很重要的一項復習內容。
就這樣,我一邊繼續(xù)復習,以便開始了一場接一場的面試接力。
起初,我面了幾家小公司練手,接著阿里的提前批接踵而至,我戰(zhàn)戰(zhàn)兢兢地參加了阿里中間件部門的面試,面難難度還算適中,一共四輪面試,當時我的表現(xiàn)也還不錯,問題基本都答上來了。面完不到一周以后我就收到了通過的消息,當時還有點懵。沒想到第一個offer這么快就來了。
這段時間內,螞蟻金服的兩個部門也給了我面試機會,我都參加了它們的面試,并且順利地拿到了其中一個部門的offer。由于我對螞蟻這邊的業(yè)務比較感興趣,最終選擇了螞蟻金服的offer。
阿里提前批的勝利確實是意外之喜,但也大大地鼓舞了我,于是我又參加了百度和騰訊的提前批面試,由于百度的提前批不走流程,一共有四個部門面試了我,每個部門都有2到3輪面試,總計約為12次面試,到后來我已經快暈了,看到百度的電話就害怕,由于面試次數(shù)太多,有時候發(fā)揮確實也不是很好,我也沒有特別在意,只當是在鍛煉自己了。
百度的面試難度每個部門不一樣,但是每次面試必寫算法題,一寫算法題,時間至少就是一個小時以上,每次面試完都有一種身體被掏空的感覺。
經歷了百度面試的摧殘以后,我手寫算法的速度也變快了,很多坑也被我填上了。接下來面對騰訊的面試,我也是既激動又擔心,騰訊的面試難度比較大,對于操作系統(tǒng)和網絡的知識喜歡深挖,問的東西也很有深度,面完前三面以后,第四面拖了3周才進行。當時三面面試官對我的評價比較好,也讓我信心爆棚了好久。
在等待騰訊終面的期間,我參加了今日頭條的面試,當時有幸拿到了一個白金碼,免去筆試,事實證明白金碼作用真的很大。頭條的面試難度和騰訊差不多,三輪面試,同樣需要寫各種算法,由于是視頻面試,我可以清楚地看到,頭條的面試官真的非常高冷啊。面完頭條我的第一感覺就是應該掛了吧。沒想到最后還是給了offer。
結束這幾家大廠的面試之后,我覺得我的秋招已經接近尾聲了,不過由于之前投的比較多,所以我又面了幾家大公司,如網易,華為,快手等。到9月上旬的時候,我接連收到了bat和頭條,網易的意向書,阿里最早,騰訊最晚,每收到一封意向書我都很開心,沒想到最后我真的可以集齊bat等大廠的offer。
9月以后,除了偶爾和同學做幾場大廠的筆試,我基本就佛系了。直到后來一些外企例如亞馬遜,大摩開始筆試面試,我才又重新回到了狀態(tài)。
截止目前,我基本上把該拒絕的offer都拒絕了,綜合各方面因素的考慮,最后應該會簽阿里,原因是部門是我自己喜歡的,同時給的評級也比較高。雖然騰訊也給了sp,但是最后還是忍痛割愛啦。至于百度和頭條,給的offer并不是很令人滿意,所以就沒有考慮了。
至此,我的秋招之旅總算圓滿結束。
面經分享
具體的面經都比較長,這里大概介紹一下面試的情況,具體的面經請大家關注我的公眾號并回復“面經”即可查看。
?
1 阿里面經??
阿里中間件研發(fā)面經
螞蟻金服研發(fā)面經
崗位是研發(fā)工程師,直接找螞蟻金服的大佬進行內推。
我參與了阿里巴巴中間件部門的提前批面試,一共經歷了四次面試,拿到了口頭offer。
然后我也參加了螞蟻金服中間件部門的面試,經歷了三次面試,但是沒有走流程,所以面試中止了。
最后我走的是螞蟻金服財富事業(yè)群的流程,經歷了四次面試,包括一次交叉面,最終拿到了螞蟻金服的意向書,評級為A。
阿里的面試體驗還是比較好的,至少不要求手寫算法,但是非常注重Java基礎,中間件部門還會特別安排Java基礎筆試。
2 騰訊面經??
騰訊研發(fā)面經
崗位是后臺開發(fā)工程師,我沒有選擇意向事業(yè)群。
SNG的部門撈了我的簡歷,開始了面試,他們的技術棧主要是Java,所以比較有的聊。
一共經歷了四次技術面試和一次HR面試,目前正在等待結果。
騰訊的面試一如既往地注重考查網絡和操作系統(tǒng),并且喜歡問Linux底層的一些知識,在這方面我還是有很多不足的。
3 百度面經??
百度研發(fā)面經
百度研發(fā)面經整合版
崗位是研發(fā)工程師崗位,部門包括百度智能云的三個分部門以及大搜索部門。
百度的提前批面試不走流程,所以可以同時面試好多個部門,所以我參加百度面試的次數(shù)大概有12次左右,最終應該是拿了兩個部門的offer。
百度的面試風格非常統(tǒng)一,每次面試基本都要到電腦上寫算法,所以那段時間寫算法寫的頭皮發(fā)麻。
4 網易面經??
網易研發(fā)面經
面試部門是網易云音樂,崗位是Java開發(fā)工程師。
網易是唯一一家我去外地面試的公司,也是我最早去實習的老東家。
一共三輪面試,耗時一個下午。
網易的面試比我想象中的要難,面試官會問的問題都比較深,并且會讓你寫一些結合實踐的代碼。
5 頭條面經??
今日頭條研發(fā)面經
崗位是后臺研發(fā)工程師,地點選擇了上海。
我參加的是字節(jié)跳動的內推面試,當時找了一個牛友要到了白金碼,再次感謝這位頭條大佬。
然后就開始了一下午的視頻面試,一共三輪技術面試,每一輪都要寫代碼,問問題的風格有點像騰訊,也喜歡問一些底層知識,讓我有點懵逼。
更多面經請點擊閱讀原文進行查看。
筆試經驗
提前批的筆試其實不是很多,我參加了網易,網易游戲,拼多多等公司的筆試,應該都是低分飄過。
我的算法基礎比較一般,讀研之前0基礎,所以這方面學的比較艱辛,分享一些我的筆試準備經驗。
1 打好數(shù)據(jù)結構和算法基礎
2 先易后難,看一些基礎的算法書籍,比如《圖結算法》,《啊哈算法》等等。
3 劍指offer刷起來,兩到三遍,做到胸有成竹
4 LeetCode刷個200題左右,記得二刷,做好總結。
5 到牛客網做公司的歷年真題,熟悉題型,保持手感。
劍指offer指南和LeetCode刷題指南可以在我的博客里找到。?
其中LeetCode指南是參考@CyC2018大佬的文章。
面試經驗
面試主要考的還是你的基礎知識,需要你對Java后端技術棧有一個全局上的把握,具體說起來就太多了,具體復習方案可以參考文章后面的內容。
我個人也總結了一些面試方面的經驗,主要是一些技巧。
1 做好自我介紹和項目總結,把握你發(fā)言的主動權
2 搞清楚簡歷上的技術點,兵來將擋水來土掩
3 注意分點答題,思路清晰,也更容易講清楚原理。
4 壓力面下保持冷靜,不要回懟面試官
5 HR面試注意常用技巧,可以提前準備。
Java后端技術專欄
對于校園招聘來說,最重要的還是基礎知識。下面的博客專欄出自我的技術博客 https://blog.csdn.net/a724888 ? ?
? ?
這些專欄中有一些文章是我自己原創(chuàng)的,也有一些文章是轉載自技術大牛的,基本都是是我在學習Java后端的兩年時間內陸續(xù)完成的。
總的來說算是比較全面了,做后端方向的同學可以參考一下。
? ?
深入淺出Java核心技術 ? ?
本專欄主要介紹Java基礎,并且會結合實現(xiàn)原理以及具體實例來講解。同時還介紹了Java集合類,設計模式以及Java8的相關知識。
? ?
深入理解JVM虛擬機 ? ?
帶你走進JVM的世界,整合高質量文章以闡述虛擬機的原理及相關技術,讓開發(fā)者更好地了解Java的底層運行原理以及相應的調優(yōu)方法。
? ?
Java并發(fā)指南 ? ?
本專欄主要介紹Java并發(fā)編程相關的基本原理以及進階知識。主要包括Java多線程基礎,Java并發(fā)編程基本原理以及JUC并發(fā)包的使用和源碼解析。
? ?
Java網絡編程與NIO ? ?
Java網絡編程一直是很重要的一部分內容,其中涉及了socket的使用,以及Java網絡編程的IO模型,譬如BIO,NIO,AIO,當然也包括Linux的網絡編程模型。
了解這部分知識對于理解網絡編程有很多幫助。另外還補充了兩個涉及NIO的重要技術:Tomcat和Netty。
? ?
JavaWeb技術世界 ? ?
從這里開始打開去往JavaWeb世界的大門。什么是J2EE,什么是JavaWeb,以及這個生態(tài)中常用的一些技術:Maven,Spring,Tomcat,Junit,log4j等等。
我們不僅要了解怎么使用它們,更要去了解它們?yōu)槭裁闯霈F(xiàn),其中一些技術的實現(xiàn)原理是什么。
? ?
Spring與SpringMVC源碼解析 ? ?
本專欄主要講解Spring和SpringMVC的實現(xiàn)原理。
Spring是最流行的Java框架之一。
本專欄文章主要包括IOC的實現(xiàn)原理分析,AOP的實現(xiàn)原理分析,事務的實現(xiàn)源碼分析等,當然也有SpringMVC的源碼解析文章。
? ?
重新學習MySQL與Redis ? ?
本專欄介紹MySQL的基本知識,比如基本架構,存儲引擎,索引原理,主從復制,事務等內容。當然也會講解一些和sql語句優(yōu)化有關的知識。
同時本專欄里也介紹了Redis的基本實現(xiàn)原理,包括數(shù)據(jù)結構,主從復制,集群方案,分布式鎖等實現(xiàn)。
? ?
分布式系統(tǒng)理論與實踐 ? ?
本專欄介紹分布式的基本理論和相關技術,比如CAP和BASE理論,一致性算法,以及ZooKeeper這類的分布式協(xié)調服務。
在分布式實踐方面,我們會講到負載均衡,緩存,分布式事務,分布式鎖,以及Dubbo這樣的微服務,也包括消息隊列,數(shù)據(jù)庫中間件等等。
? ?
后端開技術雜談 ? ?
本專欄涵蓋了大后端的眾多技術文章,當你在Java后端方面有一定基礎以后,再多了解一些相關技術總是有好處的。
除了Java后端的文章以外,還會涉及Hadoop生態(tài),云計算技術,搜索引擎,甚至包括一些數(shù)據(jù)挖掘和AI的文章。
總的來說選取了一些不錯的基礎類文章,能讓你對大后端有一個更直觀的認識。
? ?
Java工程師必備書單
我之前專門寫了一篇文章介紹了Java工程師的書單,可以這里重點列舉一些好書,推薦給大家。
? ?
完整內容可以參考這篇文章:
《計算機網絡:自頂向下》這本從應用層講到物理層,感覺這種方式學起來更輕松。
? ?
《圖解算法》《啊哈算法》
這兩部書籍非常適合學習算法的入門,前者主要用圖解的形式覆蓋了大部分常用算法,包括dp,貪心等等,可以作為入門書,后者則把很多常用算法都進行了實現(xiàn),包括搜索,圖,樹等一些比較高級的常用算法。
? ?
《劍指offer》這本書還是要強烈推薦的,畢竟是面試題經常參考的書籍,當然最好有前面基本的鋪墊再看,可能收獲更大,這本書在面試之前一般都要嚼爛。如果想看Java版本的代碼,可以到我的Github倉庫中查看。
? ?
《Java編程思想》這本書也是被譽為Java神書的存在了,但是對新手不友好,適合有些基礎再看,當然要選擇性地看。我當時大概只看了1/3
? ?
《Java核心技術卷一》
這本書還是比較適合入門的,當然,這種厚皮書要看完還是很有難度的,不過比起上面那本要簡單一些
? ?
《深入理解JVM虛擬機》 ? ?
這本書是Java開發(fā)者必須看的書,很多jvm的文章都是提取這本書的內容。JVM是Java虛擬機,賦予了Java程序生命,所以好好看看把,我自己就已經看了三遍了。 ? ?
? ?
《Java并發(fā)編程藝術》
這本書是國內作者寫的Java并發(fā)書籍,比上面那一本更簡單易懂,適合作為并發(fā)編程的入門書籍,當然,學習并發(fā)原理之前,還是先把Java的多線程搞懂吧。
? ?
《深入JavaWeb技術內幕》 ? ?
這本書是Java Web的集大成之作,涵蓋了大部分Java Web開發(fā)的知識點,不過一本書顯然無法把所有細節(jié)都講完,但是作為Java Web的入門或者進階書籍來看的話還是很不錯的。 ??
?
? ?
《Redis設計與實現(xiàn)》
該書全面而完整地講解了 Redis 的內部運行機制,對 Redis 的大多數(shù)單機功能以及所有多機功能的實現(xiàn)原理進行了介紹。這本書把Redis的基本原理講的一清二楚,包括數(shù)據(jù)結構,持久化,集群等內容,有空應該看看。
? ?
《大型網站技術架構》 ? ?
這本淘寶系技術指南還是非常值得推崇的,可以說是把大型網站的現(xiàn)代架構進行了一次簡單的總結,內容涵蓋了各方面,主要講的是概念,很適合沒接觸過架構的同學入門。看完以后你會覺得后端技術原來這么博大精深。 ? ?
? ?
《分布式服務框架原理與實踐》
上面那本書講的是分布式架構的實踐,而這本書更專注于分布式服務的原理講解和對應實踐,很好地講述了分布式服務的基本概念,相關技術,以及解決方案等,對于想要學習分布式服務框架的同學來說是本好書。
? ?
《從Paxos到Zookeeper分布式一致性原理與實踐》
說起分布式系統(tǒng),我們需要了解它的原理,相關理論及技術,這本書也是從這個角度出發(fā),講解了分布式系統(tǒng)的一些常用概念,并且?guī)С隽朔植际揭桓鐉ookeeper,可以說是想學分布式技術的同學必看的書籍。
? ?
《大數(shù)據(jù)技術原理與應用》
作為大數(shù)據(jù)方面的一本教材,廈大教授寫的這本書還是非常贊的,從最基礎的原理方面講解了Hadoop的生態(tài)系統(tǒng),并且把每個組件的原理都講得比較清楚,另外也加入了spark,storm等內容,可以說是大數(shù)據(jù)入門非常好的一本書了。
? ? ?
技術大牛推薦
1 江南白衣
? ?
這位大大絕對是我的Java啟蒙導師,他推薦的Java后端書架讓我受益匪淺。 ? ?
? ?
2 碼農翻身 ? ?
劉欣,一位工作15年的IBM架構師,用最淺顯易懂的文章講解技術的那些事,力薦,他的文章幫我解決了很多困惑。 ? ?
? ?
3 CoolShell
陳皓老師的博客相信大家都看過,干貨很多,酷殼應該算是國內最有影響力的個人博客了。
? ?
4 廖雪峰
學習Git和Python,看它的博客就夠了。
? ?
5 HollisChuang
阿里一位研發(fā)大佬的博客,主要分享Java技術文章,內容還不錯。
? ??
6 梁桂釗
阿里另一位研發(fā)大佬,博客里的后端技術文章非常豐富。
? ?
7 chenssy
這位大佬分享的Java技術文章也很多,并且有很多基礎方面的文章,新手可以多看看。
? ?
8 Java Doop
一位魔都Java開發(fā)者的技術博客,里面有一些不錯的講解源碼的文章,數(shù)量不是很多,但是質量都挺不錯的。
? ?
學習資源分享
?
學習Java后端兩年的時間里,接觸過很多的資料,網站和課程,也走了不少彎路,所以這里也總結一些比較好的資源推薦給大家。
? ?
0 CSDN和博客園,主流的技術交流平臺,雖然廣告越打越多了,但是還是有很多不錯的博文的。
? ?
1 importnew 專注Java學習資源分享,適合Java初學者。
? ?
2 并發(fā)編程網,主要分享Java相關進階內容,適合Java提高。
? ?
3 推酷 一個不錯的技術分享社區(qū)。
? ?
4 segmentfault,有點像國內的Stack Overflow,適合交流代碼問題的地方。
? ?
5 掘金,一個很有極客范的技術社區(qū),強推,有很多技術大牛分享優(yōu)質文章。
? ?
6 開發(fā)者頭條,一個整合優(yōu)質技術博客的社區(qū),里面基本上都是精選的高質量博文,適合技術學習提升。
? ?
7 v2ex,一個極客社區(qū),除了交流技術以外還會有很多和程序員生活相關的話題分享。
? ?
8 知乎
這個就不必多說了。
? ?
9 簡書
簡書上有些技術文章也很不錯,有空大家也可以去看看。
? ?
10 Github
有一些GitHub的項目還是非常不錯的,其中也有倉庫會分享技術文章。
后記
秋招結束以后,我就把主要精力花在做這個公眾號上了。當然,剩下要處理的事情還有很多,畢業(yè)論文,畢業(yè)旅行,還有工作前的知識儲備等等。果然,人的一生需要不斷的修行,剛剛闖過了一關又馬上要迎接下一輪挑戰(zhàn),你不能停下腳步,畢竟大家都在往前走。
希望還在求職路上的各位少俠好好加油,在未來也能夠順利地拿到自己想要的offer!
本文中涉及到的幾個鏈接我匯總在這里,方便大家查看。
1、CSDN技術博客:blog.csdn.net/a724888(Java后端技術站點,整理很多Java后端技術文章,推薦Java方向的同學看看)
2、知乎:www.zhihu.com/people/h2pl(知乎活躍用戶,希望未來能成為大V)
3、牛客網:www.nowcoder.com/profile/3539721(牛客網活躍粉,分享過一些面經和心得)
4、GitHub:https://github.com/h2pl(用于自己做項目,以及刷劍指offer、LeetCode、歷年筆試題)
往期精彩回顧
限時免費 | 程序員校招指南(BAT校招老司機出品)
從零基礎到拿到網易Java實習offer,我做對了哪些事
校招前幾個月,如何高效地進行復習?
刷完500道BAT面試題,我能去面試大廠了嗎?
2017春招實習面試回顧:從面試連跪到收割offer