前言
2019年7月,和實習公司的老闆提出辭職。他以為我要跳槽,想要挽留,我說我考上了專升本,要回去讀書,老闆表示理解。當時打算八月中旬再走,這段時間,主要是和新同事交接一下工作內容。自己實習的這家公司規模不大,是杭州的一家初創公司。初出社會,遇到一個好老闆也是難得。當時實習工資到手7000,作為一個專科生,已經相當滿足了。
9月份,本科學校開學了。最初的兩個月相當不適應,因為已經習慣了在外面的生活。最主要的是當時的心態已經完全變了,專科三年級,在外面全職實習近一年,早就沒了學生心態,再加上對未來的憧憬和現實的迷茫,搞得心情非常抑鬱。為了緩解這種狀態,當時選擇了住在寢室。因為我家離學校非常近,騎自行車只要十幾分鍾。事實證明住在寢室是對的,認識一些同學後,慢慢的也融入了校園生活。
學習路線
我的經歷
正文開始。實習的時候,做的是.NET後端,之前讀專科時也學過Java,語法上和C#非常類似。大概花了一週的時間,複習了下Java的語法。接下來大概兩個月的時間開始琢磨Spring。當時也沒什麼經驗,自學起來相當費勁。最後還是花了幾十塊在某寶買了個視訊教程,還順便做了個非常簡單的小專案。簡單熟悉了Spring和SpringMVC後直接上了SpringBoot。因為當時瞭解到,使用原生Spring已經非常少了,大部分都用SpringBoot。同樣的找教程+做專案,這是新手學習框架比較簡單、快速的方法。當時做了自己第一個比較大的個人專案,也就是爛大街的電商專案。雖然爛大街,但是這種專案對於一名新手來說,真的能學到很多東西,畢竟涉及到東西會比較多,程式碼量也可以,順便練練Java Coding能力也是不錯的。
電商專案剛開始做的時候,疫情在武漢爆發。當時每天就是重新整理聞、刷牛客、學習。也見識到了來自西方的偏見與虛偽。做電商專案期間,各種小問題也層出不窮,不過好在基本都解決了。做完電商專案之後,開始考慮起了春招的事。逛了一段時間的牛客之後,決定放棄春招了,差距真的太大了。萬一給秋招留個非常差的印象就不好了。當時看面經,80%+的都不會,技術棧也遠超出自己的現有水平。結合往年秋招的一些要求,給自己制定了一套大概的學習目標,如下圖。
如上圖,就是結合自己手頭上有的一些資料,制定的大概的學習目標。每天詳細的計劃,我用的是滴答清單。平時的學習筆記會記錄在有道雲筆記上,如果一篇筆記內容比較多也比較系統的話,就會發到部落格園上。在學習初期,有很多不懂的地方,歸結於一點其實就是基礎太差了。比如《深入理解Java虛擬機器》第一章說的位元組碼我就不知道是個啥。對於一些書籍、原始碼看不懂的問題,我也有了一點經驗,可以給零基礎的同學一點建議。Linux必須先學,起碼你得摸過Linux,用過一些命令。因為很多進階書上的演示都會基於Linux,如果你從沒了解過Linux,肯定會一臉懵逼的。對於Java相關的原始碼學習,一定要學好反射、泛型、代理等高階語法。因為這些功能在框架的原始碼中隨處可見,如果你只是在學習Java基礎語法書籍中一筆帶過,不著重練習的話,在學習到框架原始碼這一步時,肯定會遇到障礙。對於一些小問題,比如某個技術名詞你沒聽過,這種問題可以通過看相關部落格解決。比如前面的位元組碼,我當時就是看的幾篇部落格瞭解的。後來《深入理解Java虛擬機器》也有深入解釋位元組碼,再看這些內容時就會輕鬆很多。
基礎的學習終於走上了正軌,開始想著寫寫簡歷了,發現只有一個電商專案有點少,而且真的爛大街了。所以計劃做個個人網站,亮點的話就是用Netty做個聊天室功能,然後部署上線,前後端加功能設計都是自己做的。有了電商專案的經驗,專案的初始搭建非常快,主要問題都集中在前端,之前做.NET時,做過全棧,但是時間太久了,難免有點忘了。
技能總結
上面大概說了下自己的學習經歷,再總結一下應屆Java開發工程師該掌握哪些技能。
-
計算機基礎【計網、資料結構與演算法、作業系統、Linux】
-
Java語法基礎【可以看書,這裡推薦《Java核心技術卷1》,如果是純小白,連搭環境都費勁,建議看視訊】
-
Java進階【JVM、併發實戰、IO、集合容器+JUC+常用API原始碼】
-
基本框架【Spring全家桶】
-
資料庫【MySQL、Redis】
-
進階【Netty、訊息佇列、SpringCloud等】
上面的技術棧看起來雖然不是很多,但是想要進網際網路大中廠,光用是不夠的,都得達到了解原理的層面才比較穩妥。
秋招之路
接著上一部分,時間來到了6月底。學習目標完成的差不多了,第二個專案也部署上線。看到牛客有幾個企業已經開始秋招了,嘗試投了幾家簡歷。不出意外全都沒有回應。自己早就有了心理準備了,學歷不夠,海投來湊。之後的日子就是刷牛客、投簡歷了。到了這一步,就可以開始看面經,查漏補缺了。我是非常不建議一上來就背題的,面經是查漏補缺的資料,通過其他同學分享的問題,可以快速找到自己的問題。看面經這段時間,能明顯感受到自己的提升。之前都是整本整本的看書,自己哪裡不行,完全看不出來。通過面經就可以快速定位自己的問題,然後去解決。
7月初,收到了第一個面試電話,是阿里的。當時激動的不行,這放以前我可是想都不敢想的啊。面試前幾個小時整個人緊張的不行。不過好在整個面試也算順利,大部分問題都會回答。最後問了面試官評價,面試官說還可以,如果過了兩天內會打電話,如果沒過沒有反饋...。然後就沒了下文,過了幾天,百度約了面試。我這...,開局就玩這麼大的,真的遭不住啊。百度是視訊面試,還寫了幾個題。整體表現我感覺比阿里還要好,但是最後問面試官評價時,面試官說不太行。當時打擊還挺大的。
秋招開局就面了兩個大BOSS,還和群裡的小夥伴開玩笑說,人家拿小廠練手,我拿阿里百度練手...。時間來到了8月,我覺得對於網際網路來說,可以改成金8銀9了。8月份是最忙的一個月,幾乎每天都有筆試,多的時候一天4場筆試。面試預約也多了起來。過程就不再詳細描述了,戰績就是投了100+簡歷,筆試30+,面試14家,到了最終HR面的9家(京東、58、奇安信、多益、美團、騰訊、ThoughtWorks、CVTE、三七互娛),中途掛了3家(阿里、百度、有贊),推了兩家(滴滴一面和小米二面),截至國慶後收到意向書的有4家(騰訊、奇安信、58、三七互娛)。
結果看上去很美好,現實很殘酷。京東雖然不介意專升本,作為我第一個面完整個流程的大廠,剛開始內心還是抱有非常大的期望,現在看來估計是處於備胎海海底,不指望撈起來了。58,由於專升本問題,內部出現爭議,HR叫我等,估計也沒戲了。騰訊,由於簡歷沒寫專科教育經歷,撤回了我的意向書。美團直接拒絕專升本,明確只收高考那種統招的,還挺可惜的,因為我覺得美團是面的最好的一家了。其他幾家對於專升本倒是不介意,只要是全日制、有學位證就行,關於專升本的問題待會再說。關於撤回意向書這個事,也怪我,我的確沒在簡歷上寫專科教育經歷。我也沒蠢到故意去隱瞞這個事,但是我都是到HR的時候,跟HR說明的,希望我的表現能幫我扳回一點優勢。至於我為什麼不寫,也是想給自己爭取一點機會,對於騰訊這個事就像陷入了死鎖,寫了沒機會,沒寫又會被駁回。又沒什麼大廠實習經驗和出色的競賽成績,光憑簡歷,的確難以在眾多優秀的競爭者中脫穎而出。不過如果官網簡歷明確要求寫全的話,我還是會寫的,比如網易,要求寫高中以上的每一段教育經歷(後來才發現騰訊的官網簡歷也標明瞭需要寫上本科/大專以上的教育經歷)。騰訊校招組最終和我反饋時,說我提前批面試評價非常好,正式批會有優勢,叫我要自信,再去完善一下簡歷。然後....正式批沒被撈,校招進一線大廠的夢想沒戲了。
剛被騰訊撤回意向書時,心情可以說非常低落了,不過也是很快就調整過來了。網際網路校招競爭一年比一年大,雙一流碩士那麼多,自己除了過得去的技術的確沒什麼競爭力。校招進不了大廠,那就社招再來吧。道阻且長、行則將至。我最後選擇了去三七互娛,大家的第一反應可能是廣州四大坑,不過我瞭解了一些最近的評價,比前幾年的確好了很多。搬進了新大廈,福利環境啥的也非常不錯。至於說錢少事多,如果放在一兩年前,這應屆工資我可是想都不敢想,要知道放在我以前的條件,.NET+專科+ToB這種非酋組合,不知道要工作多少年才能達到這個水平。只是現在眼界高了,的確覺得有點少了,起碼比失之交臂的騰訊少。事多的話,雙休能保證就行了,平時加班,也不至於一天都在那敲工作,在公司學習,提升一下自己也是可以接受的。
和三七簽約後我的秋招就算結束了,大四上半年開始弄一些學校的事情,打算大四下學期,也就是過完年,提前去實習幾個月。這段時間內,最後複習一下和我崗位相關的技術棧,學習一些職場經驗和必備技能,比如Git、Shell等,相關資料早就買好,但是由於面試問的少,一直沒有開始學。
乾貨分享
學習途徑
學習的途徑無非就是看書、部落格、文字專欄、視訊教程、Github。
-
對於專案實戰,可以看視訊教程。推薦網站:慕課網。如果你是剛入門的小白,也可以看一些語言的入門視訊,這樣入門會更快一點。網上有很多網站的免費視訊可以看,比如騰訊課堂、網易雲課堂等,都有一百多級的Java基礎入門視訊可以免費看。
-
對於進階學習,可以看書。推薦網站:微信讀書。裡面正版書籍非常多,技術書籍的排版也還可以,可以白嫖N多無限卡。如果微信讀書裡面沒有你想要的書籍,可以去下載PDF版的,也可以去網上買實體書。最開始時,我也的確買了很多實體書,考慮到以後出去工作,不方便攜帶,現在基本只看PDF版或者在微信讀書上看。PDF版書籍可以去這裡下載:PDF書籍下載。下面再分享一些微信讀書上有的書籍,我自己也沒看完,不過都是非常不錯的書籍,以後可以慢慢看。大家可以根據自己的需求,選擇性的看一些。
- 《SpringCloud微服務:入門、實戰與進階》、《Netty進階之路》、《Java併發程式設計之美》、《Linux就該這麼學》、《SpringBoot技術內幕》、《深入淺出SpringBoot》、《MySQL技術內幕:InnoDB儲存引擎》、《Java核心技術》、《Java高併發程式設計》、《Spring實戰》、《Redis設計與實現》、《圖解HTTP》。
-
對於某個知識點的學習,比如我前面說到的位元組碼,可以看部落格。這個時候就需要善用搜尋引擎了,國內比較常見的部落格論壇有部落格園、CSDN、簡書等。
-
關於文字專欄,近兩年國內網際網路上非常流行的一種知識付費方式。比書籍的內容精簡、比視訊的價格便宜。常見網站有:極客時間、掘金小冊、慕課專欄等。但是這些文字教程大部分都不是零基礎入門的那種,可以說都是些經驗之談,可以省去很多你自己看書的時間。我差不多是從6月份開始,也就是基礎學習的差不多了,才看這些文字專欄的。
-
關於GitHub,這裡只推薦我經常看的兩個吧,JavaGuide、JavaFamily。JavaGuide相當於Java程式設計師的百科全書,內容乾貨非常多。同樣的,不建議零基礎一上來就看這個。它可以當作你求職時查漏補缺,從頭複習的工具。裡面的知識點基本都是面試經常問到的。JavaFamily相當於某個知識點的精講,雖然覆蓋的範圍也很廣,但是知識點不是很多,不過裡面的每個知識點也都是工作中或者面試中經常用到的。
以上就是我平時的學習途徑。最後總結一些總體路線:
- 先給自己制定學習目標,這個目標可以根據你的技術方向去部落格、知乎等地方找一些腦圖,結合你應聘崗位的要求,列出一系列技術棧清單。
- 然後去上面我推薦的學習網站找對應的學習資料,同樣的列出這些學習資料。
- 最後根據你自己的作息時間,做出詳細的計劃。這個計劃最好用一些軟體去記錄下來,比如我用的滴答清單,也有很多人喜歡用番茄,這個隨你的愛好,但是一定要記錄。每天完成當天計劃後,再寫出第二天的計劃。計劃可以是彈性的,比如某天出現一些意料之外的事情導致計劃耽擱了,可以往後挪一挪,切記不要自責。
面試經驗
一定要提早留意招聘資訊,比如這次秋招,我看很多人9月份才開始投遞簡歷,估計就是聽說了金9銀10。其實對於今年來說,9月份才開始投遞簡歷,已經錯過了最佳時間。招聘資訊可以看牛客網:校招日曆。裡面基本每家公司都有內推,能內推就儘量內推,很多公司內推可以免去簡歷篩選,對於學校不好的同學來說,這一點非常重要。關於簡歷怎麼寫我就不說了,網上大把教程,可以去牛客網搜一搜。
簡歷過關之後,一般就是筆試階段了。少部分公司提前批或者內推可以免筆試,不過隨著內推的普及,很少見什麼公司內推可以免筆試的。關於筆試,一般是按通過的case百分比給分的,所以演算法再難也一定要嘗試寫一寫,能多拿一點分是一點。筆試中的演算法,基本不會考察時間複雜度、空間複雜度。如果你和我一樣演算法能力有限,就暴力解法走起吧,DFS大法好。如果筆試中的演算法特別簡單,有選擇填空題的話,一定要重視選擇填空。你覺得簡單,別人也簡單。因為有些人很不重視選擇填空,以為所有筆試都是演算法題說了算,那麼選擇填空就是你拉開差距的好地方。
過了筆試就會預約面試了。大部分公司都是2輪技術面+1輪HR面,有些大廠也會是3輪技術+1輪HR,甚至更多。其實秋招之初,百度阿里一輪遊後我也反思了下,其實大部分問題都會。不通過的原因,其一就是提前批要求會更高,其二也許就是太緊張了。感覺整個過程就是一問一答,和麵試官沒有交流的過程。當然,面試別緊張誰都知道,關鍵在於怎麼去克服。如果你有小團體的話,可以組織一些模擬面試。或者多面幾家公司,後面基本就不會緊張了。關於面試準備,最好的方法就是去看面經,一個目標就是能查漏補缺,到了後期,面經裡面只要是學過的技術棧90%+的問題都會回答就非常不錯了。其二就是在看面經時,對於自己知道的問題,剛開始時可以對著螢幕,組織自己的語言去說出來。
面試中的一些小技巧。面對面試官的問題,肯定只有三種情況:會、不會、以前會但是忘了。對於不會的,直接說不會就行。但是自己要分清這個問題是不是你技術棧範圍內的。如果是,下去就得趕緊補上來。如果不是,也就是自己壓根就沒學過,也沒寫進簡歷,這種問題可以暫時放一放。對於會的問題,如果問題合適的話,一定要去引導面試官的問題,也可以時不時的展現出自己在哪學的,但是不要太頻繁,不要回答每一個問題都說自己是在哪學的,沒必要,反而顯得太突兀。怎麼樣的問題適合引導?問題範圍特別大的。比如:“說說你對Java多執行緒的瞭解”。有的人可能在那巴拉巴拉一大堆。但是我一般會這麼回答:先說說我對Java多執行緒的理解,然後說說Java多執行緒的常見問題、常用API也就是幾種建立方式。然後,我會說,一般使用Java多執行緒時可能會配合執行緒池來用,我之前看過《阿里巴巴Java開發手冊》,裡面建議我們在使用Java執行緒池的時候直接用ThreadPoolExecutor來建立執行緒池,那麼我們就必須充分了解這個建構函式的一些引數。以上就是我對Java多執行緒的一些瞭解吧。等你說完這些,面試官大概率會接著問你執行緒池相關的問題。還能不經意間透露出你看過一些技術書籍。而且面試官問的問題分解了,更像一個交流的過程。
最後,對於以前會但是忘了的問題,這個問題大概率是你簡歷上技術棧內的問題,如果直接回答不會,我覺得有點虧了。一般我會這麼回答:我以前在《XXX》上了解過相關知識,但是太久沒去碰了,所以有點忘了,我記得....。最後擠出你腦袋裡關於這個知識點最後一點記憶,如果你實在啥也不記得,只是覺得這個專業名詞有點耳熟,那還是說不會吧。
給低學歷的同學一點點建議
如果你是還沒畢業的專科生,一定要參加統招專升本。每個省份的叫法可能不一樣,有的叫普通專升本,有的叫3+2等等。不管叫法是啥,記住,只能由專科應屆生報名(也就是隻能參加一次,有的省份好像可以復讀,參加第二次?),升本後,是全日制的本科,有學位證,畢業後第一學歷也是本科。因為專升本的方式有很多種,但是這種含金量是最高的,大部分網際網路公司還是承認的。當然劣勢依然存在,這個時候可以用部落格、開源專案、競賽來彌補學歷的劣勢。
如果你是普通本科,其實看到這,我想你已經充滿信心了,我一個專升本的都行,你為啥不行?當初被騰訊取消錄用,可算是體驗到一把心拔涼拔涼是種什麼滋味了,非常後悔當初中學沒有好好讀書,但凡是個正常的本科都不會發生這種事了。