聊聊阿里社招面試,談談「野生」Java程式設計師學習的道路

引言

之前看過的朋友可能會有疑問,為什麼要再次撿起這篇文章,還把稱謂改成了筆者這麼高端的詞彙。

簡單的解釋一下,原因有三個,第一個原因,是說不得的原因,請各位看官自行YY。第二個原因,是兩年過去了,筆者在阿里也呆了700+天的時間,所以對這篇文章,又有了一些新的理解和想法,想回過頭來,再完善一下。最後一個原因,是因為最近筆者經常刷某音,根據玩某音的經驗,發兩次會火,哈哈,-_-。

所以,這篇文章,可以說是之前那篇文章的進階版,為了方便大家觀看,本文會引入很多原文章的內容,避免沒看過上一篇文章的同學,還需要回過頭去翻看。(好吧,我承認是為了偷懶,-_-)

阿里社招面試都問什麼?

和之前一樣,文章一上來,我們先來談談阿里的社招面試都問什麼,其實這個話題並不是什麼秘密,所有來阿里面試過的同學,都能回答一二。兩年前的時候,筆者在文章裡是這麼回答的。

看到當時自己的回答,筆者有種在review幾年前代碼的錯覺,不過好在,哪怕是現在來看,當時寫的雖然多了些廢話,但整體思路應該還是沒錯的。

只不過在這裡,筆者想要再補充下,如果把以上兩個階段再概括化一下,其實得到的答案,就基本適用於所有面試,而並非只是阿里的社招面試。

__那就是,第一階段是主語言,第二階段是項目__。

這點相信不少人在面試的過程中,已經深有體會,大部分面試就是分這麼兩個階段去問的,只不過針對不同的公司和職位,每個階段面試的難易程度會不同,所問的問題範圍,自然也會有所不同。

面試的難度,根據職位的不同(比如低級工程師還是高級),部門的不同(比如業務部門還是純研發部門),用人需求的不同(比如是急需還是人才儲備),面試官的喜好(比如是裝逼型還是溫和型)等等因素,就算是在同一家公司,難度也是會有差異的,所以不能簡單的對比兩家公司的面試難度。

到底難不難,只有來試了才知道!

阿里社招面試如何準備?

這個話題相信是大家比較關心的話題,之前筆者其實已經詳細談論過了,就這一部分內容來說,之前寫的還是比較詳細的,所以索性偷個懶,把原文搬上來了。

看完以後,關於連環炮的部分,筆者這裡還是想簡單再補充幾句,上面之所以舉了那麼多連環炮的例子,其實並不是想讓大家背下來,而是想讓各位看官體會一下社招面試的套路。

說到底,這些連環炮的例子,就是在考驗你對某一個知識點理解的有多深。就筆者的親身經歷而言,其實上面所提到的這些連環炮,你並不需要每個都理解的很深,只需要有那麼一兩個點比較深,甚至超過面試官的理解,就可以達到要求了。

很多時候,面試官並不需要你對每一個知識點都很深入,他只是在考察你的理解能力,以及平時有沒有一些技術積累。

如果一個面試官,只因為一兩個技術知識點而否決你的話,那麼只有兩種可能,第一種是這個點,可能確實是你所面試的職位中,非常重要的知識點,比如面試算法類崗位的話,算法不好是不行的,或者是面試偏運維類的技術崗位,Linux玩不好也是不行的。

第二種可能就是——他在裝逼,-_-。

“野生”Java程序猿學習的道路

這一部分筆者上篇文章談了很多,不過這一次,筆者在Java程序猿前面加了個限定詞——野生。

筆者一向自稱是“野生”程序員,所謂的“野生”,筆者這裡先簡單下一個定義,就是__在大學之前,從來沒想過會走程序猿這條路,而是在進入社會之後,才逐漸走上程序猿這條路的人,筆者稱之為“野生”程序猿__。

自學還是培訓機構?

“野生”程序猿有不少程序猿“正規軍”所不具備的共性,其中__最典型的一個共性,就是“野生”程序猿在進入社會之後,都會經歷一個學習入門的階段__。

也正是因此,社會上出現了大量的培訓機構,所以往往“野生”程序猿在入行初期,所面臨的第一個問題就是,到底是自學,還是選擇培訓機構?

筆者就收到過無數這類的問題,其實這個問題沒辦法一概而論,要具體情況具體分析,但如果簡單粗暴一些來說的話,假設你家裡不缺那個培訓費,就去培訓機構,反之就別去。

畢竟花了錢,總會多一些學習上的資源,最起碼聊勝於無。

所以,這個問題通俗點說,就是__有錢就去,沒錢就自學__。

就像那個經典的笑話一樣,說自己買東西有選擇恐懼症的同學,不是真的有選擇恐懼症,唯一的原因就是——窮,呵呵噠。

算法到底重不重要?

除了上述的共性之外,__“野生”程序員還有一個共性,就是學習曲線和程序員“正規軍”會有所不同,前者是從實踐到理論,後者是從理論到實踐__,這就會導致“野生”程序員的基本功一般不怎麼紮實,比如算法、計算機系統原理、計算機網絡等。

私底下,無數同學問過筆者同樣的一個問題,到底算法重不重要?阿里面試考不考算法?

其實第一個問題,關於算法到底重不重要,筆者這裡是有兩個答案的,如果來問的同學互相對質一下的話,可能會發現筆者給每個人的答案會略有不同。

如果是一個學生來問的話,筆者會告訴他,算法非常重要,一定要全力學習。

而如果是一個已經踏入職場多年的人來問的話,筆者一般會告訴他,按需學習即可,如果你做的工作和算法關係很大,那自然要好好學,比如你做算法工程師,你告訴我算法重不重要?

當然重要!

而如果你每天寫的是增刪改查,更注重業務,那還是別花那個精力了,省省吧,有學算法這個精力,多研究研究業務,多思考思考技術與業務結合這種問題,可能比你學習算法收效更高。

至於第二個問題,阿里面試考不考算法,筆者清晰記得,面試官問了這樣一個問題的,“你對算法的瞭解多不?”

而筆者當時的回答是,“不好意思,這個我不會。”

看到這裡,可能有的同學會有疑問了,“作者啊,你這樣做不太好,你這不等於告訴大家,算法不重要,不學算法一樣可以進阿里嗎?”

有這種疑問的同學,是沒有想明白這麼一件事,算法是否重要,和是否一定要花精力學習它,並沒有什麼直接的卵關係。

更何況,不會算法能進阿里也很正常,難道你覺得阿里萬千工程師,都是熟悉算法的嗎?我敢說,你敢信嗎?

還有不少人有一個誤區,那就是,“算法好的人,工資都高了不少。”

關於這個,筆者只想說,如果這個人本身就是搞算法類工作的,那無可厚非,但是如果他是搞增刪改查的,筆者可以很確定的說,他學算法這個時間去學點別的,工資可能會更高。

所以,不要被這個表象迷惑了,他高工資本質是因為他業餘時間學習了才高,而不是因為學習了算法才高。

__俗話說學以致用,不光花錢要花到刀刃上,學習也是要學到刀刃上的,因為時間比金錢更珍貴__。

當然,以上所說對於算法要按需學習的論調,僅適合於畢業多年,已經進入職場的同學,如果你是一個在校生,那麼對於算法這個東西,就只有一個字——學!往死裡學!

“野生”Java程序員如何學習

扯完了家常,咱們聊點正事,“野生”程序員,如何度過自己的學習和職場生涯。

關於這個話題,筆者會引用一下上一篇文章中的內容,但是兩年過去了,筆者會對其中再做一些補充。接下來,我們首先看一下之前筆者所寫的前奏。

其實這段前奏中,筆者第2點中所說的“處於待業狀態,準備轉行Java的同學”,就是今天一直提到的“野生”程序員。

筆者這裡專門提到這點,也是希望看官們可以明白,本文所有內容,都是圍繞著“野生”程序員展開的,如果你不屬於其中的一員,那麼一定要對文中提到的學習道路自行取捨。

哪怕是“野生”程序員,也不一定就非要完全照搬文中的學習,也要有自己的思考。

第一階段——未參加工作的同學

這個階段,其實就是上面筆者提到過的,是“野生”程序員學習入門的階段。大部分人在這個階段學習的時候,都是非常痛苦的,所謂萬事開頭難,是有一定道理的。

不過沒關係,誰讓你運氣好,看到了這篇文章呢(吹逼會不會遭雷劈?),你只需要保持學習的信念,然後按照下面的思路去學習就可以了。

強調一下,對於程序員來說,心中那股信念很重要,你要問筆者這股信念是什麼,筆者只能說只可意會不可言傳,自己在職場生涯中慢慢體會吧。

兩年過去了,其實這個學習路線,並沒有什麼太大的變化,唯一變化的點,就是spring-boot的普及,省去了之前很多框架整合的工作。

回想11年筆者培訓那會兒,想要搭建一個SSH框架,還要自己梳理jar包,整合一大堆配置,一不小心就各種報錯,而且那異常往往都不是簡單的NPE,甭提多苦逼了。

所以,同學們,珍惜你現在的生活吧,呵呵噠。

第二階段——工作0到1年的同學

這個階段是所有人都會經歷的一個階段,這個階段的程序員,心裡往往都是非常複雜的,剛找到工作,坐在明亮的辦公室裡,彷彿自己成為了電視劇中的主角,難免會感到意氣風發,但是同時心中又不免會有些恐懼,生怕自己一個不小心,再次被打回原形。

如果你有這樣的感覺,不用緊張,這是所有人都要經歷的,你要做的,就是讓自己徹底沉浸在工作和學習當中即可,原因很簡單,因為這個時候——你還是單身狗,-_-。

補充一下,看書的時候,不要只是看書,一定要經常思考,比如思考你所寫的代碼,和書中的內容是否有聯繫。

舉個實際的例子,當你看到static這一部分內容的時候,你是否會去翻一下你現在開發的項目裡,是否有地方使用static,它使用的目的是什麼,它使用的方式是否正確。

只有這樣看書,你才能真正的把書看進去,一定要注意,看書的最終目的是為了引發自己的思考,只看書不思考的話,那叫背書,不叫看書。

說到這裡,有不少同學問過筆者這樣的一個問題,“我看書看不進去怎麼辦呢?有沒有什麼好的辦法?”

筆者這裡可以很負責的告訴你,哪有什麼歲月靜好,只是有人替你負重前行而已。

所以,不要期望有什麼開開心心,快快樂樂就把書給看了的辦法,你想的倒還挺美,呵呵噠。

這玩意兒沒有什麼好辦法,就是靠著自己內心的一股信念,強迫自己去看,特別是剛開始的時候,是最困難的,熬過那一段時間,後面看起來相對來說會順暢很多。

萬事開頭難,用在看書學習上,也同樣適用。

第三階段——工作1到2年的同學

這個階段的你一般已經做了一年的增刪改查,與剛入職時的意氣風發不同,這個時候的你,會開始考慮你未來要走的路,但通常在這個時候,你很難看清前方的路,因此你或許會有些焦慮。

如果你存在這樣的焦慮,不必憂心,只需記得,在程序員的道路上,學習能使你變得更加充實,繼續沉浸在學習的海洋中吧。

這個階段筆者所建議的三本書,其實都是在教你如何更好的編寫和設計你的代碼,除此之外,設計模式這個系列,也是在鍛鍊你對問題的抽象能力。

使用Java這種面向對象的語言,抽象能力是非常重要的一項能力,和上面一樣,筆者建議,當你看完設計模式、重構和Effective Java這幾本書後,一定要結合自己的項目,做深入的思考。

不思考的人生是不完整的,只幹活兒不動腦子的人,看似勤奮,實際就是臺機器,既然是機器,那就早晚會被取代的。

只有不斷思考,總結過往,指導未來的人,才最終會成為這個社會的主導者。

第四階段——工作2到3年的同學

這個階段,對於程序員來說,是非常重要的一個階段。在筆者的學習道路規劃中,這個階段學習的目的,是為了讓你從初中級工程師邁入高級,實現質的提升,因此,這一部分的學習,難度會比之前兩年的要高。

但既然你已經踏上了這條路,就沒有迴旋的餘地,只能往前衝。

所以,做好心理準備,迎接挑戰吧。

可以看到,這個階段筆者列的任務非常之多,不僅要了解JVM、併發、JDK類庫,還要自己嘗試造輪子。

如果你仔細閱讀了本文的話,你會發現,阿里社招面試筆者所舉的連環炮中,有一大部分都是這個階段學習的,那些連環炮中,基本上都是JVM、併發和JDK一些類庫的內容。

而比較巧的是,阿里大部分招聘要求的年限,都是3年或以上。

這意味著什麼?

相信反應快的同學已經明白了,你如果可以在3年內,完成筆者的學習計劃的話,那麼在你滿3年的時候,剛好可以來阿里檢驗你的學習成果。

第五階段——工作3到4年的同學

這個階段的同學,很多已經碰到了天花板,在此之前,只要你按部就班的學習,智商又沒啥硬傷,90%以上的同學(有人問,剩下的10%呢?筆者只想說,我怎麼知道?/尷尬),在工作3年的時候,都可以達到年薪30W左右這個範圍(僅指2015年或以後北上深一線城市)。

而如果你的年薪想要更上一層樓(一般10W為一檔,比如40W、50W等),僅靠之前的積累是遠遠不夠的,你需要打造你的核心競爭力,在之前的文章裡,筆者把這個所謂的核心競爭力,稱之為差異性,其實想表達的意思都是一樣的。

具體如何在這個階段學習,還是先看看之前筆者是怎麼建議的吧。

可以看到,在這個階段,筆者提到了三本基礎書籍(操作系統原理、網絡協議、算法),這三本書,會讓你更加的接近底層。

如果你仔細品味本文所提到的學習路線,你會注意到,筆者一直在讓你由淺入深的學習,也就是__一直在讓你提高知識的深度,而不是知識的廣度__。

這就回答了不少同學問過筆者的那個問題,“到底是先有廣度後有深度好,還是先有深度後有廣度好?”

其實,這種討論已經本末倒置了,回答這個問題很簡單,看市場上需要哪一類,就是哪個好。

所以,把上面那個問題換一下,你就很容易得到答案了,“如果讓你來面試一個5年經驗以下的程序員,你喜歡在某個領域研究很深的人,還是每個都懂點的人?”

答案是顯而易見的,筆者相信大部分人,都會選擇在某個領域有深度鑽研的人,特別是一些一二線的互聯網公司。

或許有的同學在這個時候,會用“全棧工程師”這個概念來試圖反駁,畢竟全棧工程師這個概念,有一段時間被炒得很熱,很多公司的招聘上都加了這麼一條——全棧工程師優先。

全棧工程師這個概念,其實是小公司(或者是大公司的小部門)為了節省人力成本,想讓程序員幹雜活,卻又不好意思直說,因此所編造出來得美麗的謊言,可笑可悲的是,一些不知全棧真正含義的程序員,還以自己是全棧為榮,覺得自己跟上了潮流,真的是被人賣了還在幫人數錢。

筆者在這裡可以很負責的說,初入職場的頭幾年,一定是以提高深度為主才是正道,像全棧工程師這種潮流,就如同最近一些採用非常規手段出名的網紅一般,註定只是曇花一現,只有一技傍身,才是長久之計。

第六階段——工作4到5年的同學

4到5年其實也是一個比較重要的階段,咱們先來看看,兩年前,筆者是怎麼來討論這個階段的。

從引文中最後一段可以看出,筆者當初寫的時候,才工作不到4年半,所以當時筆者也是處於一個摸索的階段。

如今兩年過去了,其實現在來看,到了這個階段,筆者已經很難再提出有效的建議了。

如果你仔細閱讀了本文,會注意到,在前3年的時候,筆者建議的學習道路都是一樣的,因為筆者沒有給出任何選擇的餘地,就按照筆者所羅列的去學就可以了。

但是從第3年開始,也就是第3到4年的時候,筆者所給的建議當中,已經出現了選擇,比如操作系統原理、網絡協議、算法這三本書,再比如你準備鑽研的領域,都是在讓你自己選擇,而不是筆者直接告訴你,應該看哪本書,鑽研哪個領域。

這其實是符合常規的學習道路的,初中級工程師的時候,大家學的都一樣,3年過去,進階為高級工程師以後,自然每個人會走向不同的領域。

就和上學一樣,小的時候學的都差不多,高中就開始分文理班了,大學就開始選專業了,到了研究生......

額,忽然想起沒上過研究生,不太清楚,但學習的道路肯定更加細分了,對不對?

所以,在4到5年這個階段,其實同樣沒有固定的道路可走,之前之所以建議大家提高“影響力”,其實現在筆者自己回想起來,其中深層次的原因,是希望大家去一些知名的公司,比如......咳咳.......你懂的(這次完美的暗示,感覺要個4不過分)。

其實在第3-5年這段期間,最好的選擇,就是一邊提高自己的核心競爭力,一邊著手開始進入一家可以“洗白”的公司,或者說是可以提高“影響力”的公司。

什麼叫“洗白”?

作為一個“野生”程序員,你通常沒有華麗的學歷,你能仰仗的,只有自己的實力,這在你做程序員,包括做一些中低層技術管理者的時候,並不會特別阻礙你的發展。

但是當你想往上爬的時候,也就是做高層技術管理者的時候,你沒有一定的背景,就算你實力再牛逼,也是無濟於事的,這就是筆者所說的“影響力”,其實也可以叫“信服力”。

你聽說過哪個公司的CTO或者是技術總監,是沒什麼學歷,也沒進過任何大公司,一窮二白的野書生嗎?

可能有的人這個時候會舉手發言了,“作者你說的不對啊,我見過這樣的人啊!啥學歷沒有,啥大公司沒進過,但人家就是CTO,老厲害了呢。”

這隻有兩種情況,第一種,你說的這個人太厲害,不在本文討論範圍內,呵呵噠,第二種,這個CTO,是一個披著項目經理的皮,管著十人二十人的假CTO,因為公司一共就這麼點人,-_-。

總而言之,言而總之,說了這麼多,“洗白”的意思就是,在學歷不夠亮眼的情況下,就想辦法提高一下自己的公司背景吧。

最起碼,如果哪一天,你真的坐上了CTO的位置,你的簡介裡可以加這麼一句話,“曾就職於某著名XXXX公司,任XXX職位。”

是不是感覺多了一些信服力呢?

第七階段——工作5年以上的同學

這一部分之前的文章是沒有的,因為那時候筆者自己工作還不到5年。

對於這個階段的同學來說,與5年前初入職場相比,除了工作上的不同以外,最大的可能是來自於生活上的變化。

所以,這個階段,咱們不談工作,不談學習道路,咱們來談談生活。

5年前,你可能還是單身狗,你自由,你拼搏,你各種跳槽,你四處流浪,但是5年過去了,你恐怕已經結婚,甚至孩子都有了,這個時候的你,不得不考慮一些現實問題。

買車?買房?落戶?

這每一項,都像一座大山一樣,壓在奮鬥在一線城市的上班族身上。

特別是買房這件事,哪怕你此時已經年薪50W,在一線城市,買房依舊是非常困難。

因為50W扣掉各種亂七八糟,估計得縮水15W,等於是到手只有35W左右了,再加上你的花銷,一年能存20W算是非常不錯了,而一線的一套房子,首付基本上最少的都要上百萬(也就是總價300W,這已經是一線的白菜價了),這都要存5年才夠,更何況有多少人在這個時候,年薪還不到50W。

再者說,你敢保證這5年房價不漲?你敢保證這5年你一次都沒有大的花銷?

有的同學可能要舉手說話了,“我爸媽已經給我在北京2環買好房子了呀。”

那筆者只能說,“這位同學,請你出去!呵呵噠......”

咱們這裡討論的,主要是非二代同學,關於二代同學們,筆者給你的建議只有一個,吃好玩好就行,就別出來搶飯碗了,-_-。

好了,言歸正傳,買房其實只是第一大難關,其它城市筆者不知道,但是在北京,落戶比買房還要困難,基本可以說是無路可走,雖說最近出了個積分落戶,但怎麼看都是中看不中用。

當然,因為筆者早就逃離北京,所以對這個政策沒有細研究,有興趣的同學可以自行去這個地址研究下,看你有沒有落戶的希望,呵呵噠。

說到這裡,筆者不得不提到之前寫的一篇文章,題目叫做《程序員們,再不行動就來不及了!》,其實講的就是程序員的安家之道。

具體的這裡就不再具體詳述了,有興趣的同學可以自行去看,這裡只是引用一下文中的一句話——__一線城市奮鬥攢錢,二線城市安居樂業__。

一句話已經道出了程序員的最終歸宿,而在二線城市中,目前最合適的,杭州就是其中之一。

杭州的互聯網行業相當發達,工資不比一線的低多少,甚至還可能會更高,但是房子均價卻是一線的一半都不到,再加上杭州風景怡人,這樣的城市,絕對是最適合在外拼搏的“野生”程序員,安居樂業的好地方。

而從一線轉往杭州,總需要一個公司來過渡,那這個最合適的公司也自不用說,咳咳.......你懂的.......(毫無違和感的植入,-_-)

而其他知名互聯網公司,大部分都在北上深,就算工資高些,但是從生活壓力,和幸福感上來說,相信和杭州這樣的宜居城市,是沒辦法相提並論的。

5年了,5年的奮鬥是為了什麼?或許在你初入職場的時候,你意氣風發,你要改變世界,但是當你結婚生子以後,你會發現,在你改變世界之前,你要先安居樂業,-_-。

“野生”Java程序員學習道路小結

其實縱觀筆者今天所講的,就是“野生”Java程序員,如何通過學習和努力,進入阿里,並且在杭州買房落戶的道路。

是的,這個學習道路的終點,不是幫助你成為技術大牛,而是教你安居樂業。

畢竟咱們在外奮鬥,不就是想在大城市紮根安家嗎?

至於當初改變世界的夢想,等你把生活安頓好了以後,再去談改變世界也不晚。

但是,對於安家落戶的這一部分(也就是4年後),可能並不適用於所有人,比如有的人老家就是深圳這種一線城市的,那自然沒有必要來杭州了,畢竟深圳也有阿里中心嘛,-_-。

因此,在工作的前面幾年,你可以按照筆者的學習道路去走,但是當你工作到3-4年這個階段的時候(又或者是你討到老婆的時候,-_-),一邊工作學習,一邊你也要規劃一下,你未來要去哪個城市安家,進哪家公司。

認準目標以後,你就要好好研究一下這個城市的房價、購房政策、落戶政策等,也要研究一下這個公司面試,都傾向於哪方面(比如本文第一部分的內容,-_-),然後等錢存的差不多以後......

好了,之所以後面用省略號,是怕你們現在的老闆看到以後,來杭州找我拼命,但是我相信你們看懂了,-_-。


分享到:


相關文章: