阿里面試回來军拟,想和Java程序員談一談

引言

其實本來真的沒打算寫這篇文章,主要是LZ得記憶力不是很好誓禁,不像一些記憶力強的人懈息,面試完以后,幾乎能把自己和面試官的對話都給記下來摹恰。LZ自己當(dāng)初面試完以后辫继,除了記住一些聊過的知識點以外,具體的內(nèi)容基本上忘得一干二凈俗慈,所以寫這篇文章其實是很有難度的姑宽。

但是,最近問LZ的人實在是太多了闺阱,為了避免重復(fù)回答低千,給自己省點力氣,干脆就在這里統(tǒng)一回復(fù)了馏颂。

其實之前LZ寫過一篇文章,但是那篇文章更多的是在討論“面試前該不該刷題”這個話題棋傍,而這篇文章將會更加聚焦在面試前如何準(zhǔn)備救拉,以及工作當(dāng)中如何學(xué)習(xí)這個話題上,而且會盡量寫出一些干貨瘫拣。

第一個問題:阿里面試都問什么亿絮?

這個是讓LZ最頭疼的一個問題,也是群里的猿友們問的最多的一個問題麸拄。

說實話派昧,LZ只能隱約想起并發(fā)、JVM拢切、分布式蒂萎、TCP/IP協(xié)議這些個關(guān)鍵字,具體的問題真的是幾乎都沒記住淮椰。而且就算LZ記住了五慈,也告訴你了纳寂,你也背會了,但LZ覺得泻拦,在面試中毙芜,你被問到一模一樣問題的可能性依然很小。

甚至争拐,就算你運氣好被問到了腋粥,你也照著背下來了,也不一定就能對你的面試起到正面的作用架曹,因為面試官萬一多問一句隘冲,你可能就露餡了,那還不如干脆點說不會更好音瓷。

LZ參加的是阿里的社招面試对嚼,而社招不同于校招,問題的范圍其實是很隨機的绳慎。因為能參加一些比較知名的互聯(lián)網(wǎng)公司社招的人纵竖,70%以上都會有個3-5年的經(jīng)驗。這倒不是說一兩年經(jīng)驗的同學(xué)沒有機會進(jìn)這些公司杏愤,而是因為這種公司靡砌,大部分情況下只招一些比較資深的開發(fā)和應(yīng)屆生,而不招那些處于中間階段的人珊楼。而1-2年經(jīng)驗的同學(xué)通殃,往往就剛好處于這個尷尬的階段。

對于能有3-5年經(jīng)驗的這部分人中厕宗,每個人的經(jīng)歷又都不同画舌,所擅長的點也不一樣,因此這就會導(dǎo)致每個人的問題和范圍都不太一樣已慢。

很少說有哪個知名的互聯(lián)網(wǎng)公司曲聂,比如BAT、京東佑惠、360朋腋、搜狐、網(wǎng)易等這些公司膜楷,其社招面試還有固定的問題和模式旭咽,讓你可以像應(yīng)屆生面試一樣,在面試前靠臨時抱佛腳度過這一關(guān)赌厅。

大部分公司在社招的時候穷绵,不光是阿里,其它公司也都一樣(因為LZ在一年多前也參加過很多其它知名互聯(lián)網(wǎng)公司的面試察蹲,詳情見《記錄2015年年初跳槽的經(jīng)歷请垛!》)催训,基本上都分為兩個階段的提問。

第一個階段是主語言本身以及它的高級特性宗收,第二個階段是講述自己的項目漫拭,并在中間穿插著問題。

所以混稽,LZ不妨就這兩個階段采驻,談?wù)勆缯忻嬖嚨臏?zhǔn)備,而不是去把阿里面試的過程背一遍匈勋。說實話礼旅,LZ也確實記不住,所以不要再問LZ阿里面試都會問哪些問題了洽洁,你看看上面那個連接里的文章痘系,也會發(fā)現(xiàn),LZ里面也基本上沒有寫具體的問題饿自,原因是一樣的汰翠,真的記不住啊。(就是因為記憶力的問題昭雌,導(dǎo)致LZ從小偏科复唤,文科成績一直堪憂,-_-)

社招面試如何準(zhǔn)備

LZ會分為四個部分來談?wù)撨@個問題烛卧,由于LZ本身是Java出身佛纫,因此關(guān)于主語言的問題,都是與Java相關(guān)总放,其它語言的同學(xué)可以選擇性忽略呈宇。此外,面試的時候一般面試官的問題都是環(huán)環(huán)相扣局雄,逐漸深入的攒盈,這點在下面大家可以更明顯的感受出來。

1哎榴、主語言本身以及它的高級特性。

主語言當(dāng)然就是你平日里拿來賺錢的家伙僵蛛。不要告訴LZ你沒有主語言尚蝌,你會N多種語言,或者是你精通N多種語言充尉,你要非這么說的話飘言,你可以來杭州試試,LZ保證不打死你驼侠,最多打殘姿鸿。

LZ的主語言很顯然是Java谆吴,那么對于Java來說,它的語言本身以及它的高級特性苛预,都有哪些比較容易在面試中問到呢句狼?

一般情況下,主要有以下知識點很容易被問到热某。(PS:以下所列舉的腻菇,都是一些Java相對而言比較高級一點的知識點,因為這里談的是社招昔馋,而不是校招)

1)Java的數(shù)據(jù)結(jié)構(gòu)相關(guān)的類實現(xiàn)原理筹吐,比如LinkedList,ArrayList秘遏,HashMap丘薛,TreeMap這一類的。以下簡單模擬一個數(shù)據(jù)結(jié)構(gòu)的連環(huán)炮邦危。

比如洋侨,面試官先問你HashMap是不是有序的?

你肯定回答說铡俐,不是有序的凰兑。那面試官就會繼續(xù)問你,有沒有有順序的Map實現(xiàn)類审丘?

你如果這個時候說不知道的話吏够,那這個問題就到此結(jié)束了。如果你說有TreeMap和LinkedHashMap滩报。

那么面試官接下來就可能會問你锅知,TreeMap和LinkedHashMap是如何保證它的順序的?

如果你回答不上來脓钾,那么到此為止售睹。如果你依然回答上來了,那么面試官還會繼續(xù)問你可训,你覺得它們兩個哪個的有序?qū)崿F(xiàn)比較好昌妹?

如果你依然可以回答的話,那么面試官會繼續(xù)問你握截,你覺得還有沒有比它更好或者更高效的實現(xiàn)方式飞崖?

如果你還能說出來的話,那么就你所說的實現(xiàn)方式肯定依然可以問你很多問題谨胞。

以上就是一個面試官一步一步提問的例子固歪。所以,如果你了解的不多胯努,千萬不要敷衍牢裳,因為可能下一個問題你就暴露了逢防,還不如直接說不會,把這個問題結(jié)束掉蒲讯,趕緊切換到你熟悉的領(lǐng)域忘朝。

2)Java并發(fā)包當(dāng)中的類,它們都有哪些作用伶椿,以及它們的實現(xiàn)原理辜伟,這些類就是java.concurrent包下面的。與上面一樣脊另,咱們也簡單的模擬一個并發(fā)包的連環(huán)炮导狡。

比如面試官可能會先問你,如果想實現(xiàn)所有的線程一起等待某個事件的發(fā)生偎痛,當(dāng)某個事件發(fā)生時旱捧,所有線程一起開始往下執(zhí)行的話,有什么好的辦法嗎踩麦?

這個時候你可能會說可以用柵欄(Java的并發(fā)包中的CyclicBarrier)枚赡,那么面試官就會繼續(xù)問你,你知道它的實現(xiàn)原理嗎谓谦?

如果你繼續(xù)回答的話贫橙,面試官可能會繼續(xù)問你,你還知道其它的實現(xiàn)方式嗎反粥?

如果你還能說出很多種實現(xiàn)方式的話卢肃,那么繼續(xù)問你,你覺得這些方式里哪個方式更好才顿?

如果你說出來某一個方式比較好的話莫湘,面試官依然可以繼續(xù)問你,那如果讓你來寫的話郑气,你覺得還有比它更好的實現(xiàn)方式嗎幅垮?

如果你這個時候依然可以說出來你自己更好的實現(xiàn)方式,那么面試官肯定還會揪著這個繼續(xù)問你尾组。

為什么說面試的時候要引導(dǎo)面試官忙芒,原因就在這了。因為面試官的提問很多時候都是有跡可循的讳侨,你如果抓住了他的軌跡匕争,能夠猜到他下面很可能會問什么,那你在回答的時候就可以往你想要談的方向去說爷耀。這樣面試時就會顯得更加從容,更加的游刃有余拍皮。

3)IO包和NIO包中的內(nèi)容歹叮。這部分里面NIO會是重點跑杭,IO包大部分都會比較熟悉,因此可能會直接略過咆耿,直接問你NIO的內(nèi)容德谅。

IO包和NIO包的內(nèi)容相對來說不是很多,首先NIO模型要熟悉萨螺,特別是其中的selector一定要非常清楚它的職責(zé)和實現(xiàn)原理窄做。其實NIO的核心是IO線程池,一定要記住這個關(guān)鍵點慰技。有的時候椭盏,面試官可能也會問你IO包的設(shè)計模式(裝飾器模式),為什么要這樣設(shè)計吻商?

有的面試官還會問你有沒有更好的設(shè)計掏颊,這個時候如果你不知道請果斷說自己現(xiàn)在的水平有限,想不出來更好的設(shè)計艾帐,千萬不要信口開河乌叶,隨意YY。

4)Java的虛擬機的內(nèi)容柒爸。這部分主要包括三部分准浴,GC、類加載機制捎稚,以及內(nèi)存乐横。

一個GC部分簡單的連環(huán)炮。

面試官可以先問你什么時候一個對象會被GC阳藻?

接著繼續(xù)問你為什么要在這種時候?qū)ο蟛艜籊C晰奖?

接著繼續(xù)問你GC策略都有哪些分類?

你如果說出來了腥泥,繼續(xù)問你這些策略分別都有什么優(yōu)劣勢匾南?都適用于什么場景?

你繼續(xù)說出來了以后蛔外,給你舉個實際的場景蛆楞,讓你選擇一個GC策略泪漂?

你如果選出來了监婶,繼續(xù)問你赃绊,為什么要選擇這個策略囱井?

下面是關(guān)于類加載機制的簡單連環(huán)炮嘉抓。

首先肯定是先問你Java的類加載器都有哪些话原?

回答了這些以后告材,可能會問你每個類加載器都加載哪些類齿拂?

說完以后,可能會問你這些類加載之間的父子關(guān)系是怎樣的孩等?

你在回答的時候可能會提到雙親委派模型艾君,那么可以繼續(xù)問你什么是雙親委派模型?

你解釋完了以后肄方,可能會繼續(xù)問你冰垄,為什么Java的類加載器要使用雙親委派模型?

你回答完以后权她,可能會繼續(xù)問你如何自定義自己的類加載器虹茶,自己的類加載器和Java自帶的類加載器關(guān)系如何處理?

再來一個關(guān)于內(nèi)存的連環(huán)炮隅要。

首先肯定就是問你內(nèi)存分為哪幾部分蝴罪,這些部分分別都存儲哪些數(shù)據(jù)?

然后繼續(xù)問你一個對象從創(chuàng)建到銷毀都是怎么在這些部分里存活和轉(zhuǎn)移的拾徙?

接著可能會問你洲炊,內(nèi)存的哪些部分會參與GC的回收?

完事以后尼啡,可能還會問你Java的內(nèi)存模型是怎么設(shè)計的暂衡?

你回答了以后,還會繼續(xù)問你為什么要這么設(shè)計崖瞭?

問完以后狂巢,還可能會讓你結(jié)合內(nèi)存模型的設(shè)計談?wù)?a target="_blank" rel="nofollow">Volatile關(guān)鍵字的作用?

你在談的時候书聚,肯定會提到可見性唧领,那么接著可見性這三個字,還可以繼續(xù)問你并發(fā)的內(nèi)容雌续。

基本上Java語言本身以及語言稍微高級點的內(nèi)容就是以上部分斩个,如果你能把以上四部分了解的非常透徹,那基本上Java這部分就沒啥問題了驯杜,因為光以上的內(nèi)容就夠你跟面試官聊很久了受啥。你聊這些聊得久了,自然問你其它問題的時間就會短點鸽心。

你從LZ寫這些問題的過程也應(yīng)該能感受出來滚局,很多時候,面試官都是順著一條線一路問下去的顽频,如果你覺得這條線你不熟悉的話藤肢,就要及時拐彎,引導(dǎo)面試官去問其它方面的問題糯景。千萬不要一直往下深入嘁圈,直到自己跳不出來為止省骂,那就尷了個尬了。

2最住、講述自己的項目冀宴,并在中間穿插著問題

這一部分是面試過程中必問,也是聊得最久的一個階段温学。除非你前面的語言部分非常扎實,扎實到面試官問了一兩個小時甚疟,依舊沒有探出你對語言本身的了解到底有多深仗岖。否則的話,你一定逃不過自己的項目這一關(guān)览妖,而且一般情況下聊得時間不會太短轧拄。

這一部分內(nèi)容,一般的模式就是你自己去講你做過的項目讽膏,然后面試官會冷不丁的讓你去解釋其中某一部分檩电,比如讓你解釋當(dāng)時為什么要這么做,或者問你現(xiàn)在覺得有沒有更好的辦法府树。而這些穿插的問題俐末,大部分與你的項目所用到的技術(shù)有關(guān)。而你需要做的奄侠,就是充分卓箫、再充分的去總結(jié)自己做過的項目(尤其是最近的一兩個項目),挖掘出一個甚至N個亮點垄潮,以備于到時候可以讓面試官產(chǎn)生眼前一亮的感覺烹卒。如果你能達(dá)到這種效果的話,基本上離你成功就不遠(yuǎn)了弯洗。

這部分內(nèi)容由于和每個人自己的經(jīng)歷息息相關(guān)旅急,因此這里也沒法列舉可能問到的問題。這篇文章《程序員面經(jīng):面試前到底該不該刷題以及面試前該如何準(zhǔn)備》是LZ之前寫的牡整,里面大概討論了下如何在面試前總結(jié)藐吮,有興趣的可以去了解一下。

3果正、額外的加分項

上面兩個階段基本上是必問的炎码,還有一些加分項。這些加分項中秋泳,有些內(nèi)容面試官也會問你(比如TCP/IP協(xié)議潦闲、算法),但更多的是會先問你了解不了解迫皱,你了解的話再繼續(xù)聊歉闰,不了解的話就直接略過了辖众,不至于因為這種問題而直接把你打入地獄。

下面LZ列舉一下這些加分項和敬,如果可以的話凹炸,這些加分項還是要爭取一下的。

(1)昼弟、計算機系統(tǒng)原理啤它。

(2)、網(wǎng)絡(luò)通信協(xié)議(TCP/IP舱痘,HTTP等)变骡。

(3)、數(shù)據(jù)結(jié)構(gòu)與算法芭逝。

(4)塌碌、著名開源項目的源碼。

(5)旬盯、你自己有很棒的開源項目台妆。

(6)、你的個人博客胖翰。

(7)接剩、待評論區(qū)補充。

這幾項當(dāng)中泡态,對于前1-3項搂漠,如果你之前就比較了解,只是由于時間問題忘記了的話某弦,還是可以臨時抱佛腳一下的桐汤。至于后面4-6項,就需要你日常的積累了靶壮,不是一時半會兒能做到的怔毛。如果你平日里沒有積累,那么后面這三個加分項只能拋棄了腾降。

4拣度、與你職位相關(guān)的內(nèi)容

其實這最后一項是對前面三項的補充,你應(yīng)該盡量去主攻和你面試的職位相關(guān)的內(nèi)容螃壤。比如你面試一個實時計算的職位抗果,那么你的算法最好要厲害,對于著名的實時計算開源項目要熟悉奸晴,最好閱讀過源碼冤馏,而且還要對分布式系統(tǒng)有一定的見解。

因此寄啼,這個第4部分沒有具體的內(nèi)容逮光,只是提醒你代箭,如果你很明確自己的面試職位,最好在面試前準(zhǔn)備的時候涕刚,盡量朝職位的需求方向靠攏嗡综,這樣成功的可能性更大。

對于Java程序猿學(xué)習(xí)的建議

這一部分其實也算是今天的重點杜漠,這一部分用來回答很多群里的朋友所問過的問題极景,那就是LZ你是如何學(xué)習(xí)Java的,能不能給點建議驾茴?

今天LZ是打算來點干貨戴陡,因此咱們就不說一些學(xué)習(xí)方法和技巧了,直接來談每個階段要學(xué)習(xí)的內(nèi)容甚至是一些書籍沟涨。這一部分的內(nèi)容,同樣適用于一些希望轉(zhuǎn)行到Java的同學(xué)异吻。

在大家看之前裹赴,LZ要先聲明兩點。

1诀浪、由于LZ本人是Java后端開發(fā)出身棋返,因此所推薦的學(xué)習(xí)內(nèi)容是Java Web和Java后端開發(fā)的路線,非Java Web和Java后端開發(fā)的同學(xué)請適當(dāng)參考其學(xué)習(xí)思想即可雷猪,切勿照搬睛竣。

2、下面對于【第一部分】的推薦內(nèi)容求摇,目的是讓你盡快成為一個可以參加工作的Java開發(fā)者射沟,更適用于處于待業(yè)狀態(tài),準(zhǔn)備轉(zhuǎn)行Java的同學(xué)与境。如果你是在校學(xué)生验夯,務(wù)必要在學(xué)好基礎(chǔ)(比如計算機系統(tǒng)、算法摔刁、編譯原理等等)的前提下挥转,再考慮去進(jìn)行下面的學(xué)習(xí)。

第一部分:對于尚未做過Java工作的同學(xué)共屈,包括一些在校生以及剛準(zhǔn)備轉(zhuǎn)行Java的同學(xué)绑谣。

一、Java基礎(chǔ)

首先去找一個Java的基礎(chǔ)教程學(xué)一下拗引,這里可以推薦一個地址借宵,或者你也可以參照這個地址上去找相應(yīng)的視頻,地址為http://www.runoob.com/java/java-tutorial.html寺擂。

學(xué)習(xí)Java基礎(chǔ)的時候暇务,應(yīng)該盡量多動手泼掠,很多時候,你想當(dāng)然的事情垦细,等你寫出來運行一下择镇,你就會發(fā)現(xiàn)不是這么回事兒,不信你就試試括改。

學(xué)完以上內(nèi)容以后腻豌,你應(yīng)該對Java有一個基本的了解了,你可以用Java語言寫出一些簡單的程序嘱能,并且你用的是最簡單的編輯器吝梅,比如記事本。

這個時候惹骂,不要急于進(jìn)入下一部分苏携,留下幾天好好寫一些程序,盡可能熟悉這些基礎(chǔ)內(nèi)容对粪。

二右冻、Web開發(fā)

等你寫上幾天程序以后,你往往會比較迷茫著拭,因為你寫的東西似乎看起來毫無用處纱扭,比如實現(xiàn)一個簡單的計算器,讀取一個文件等儡遮。這個時候你就應(yīng)該去學(xué)著寫一些讓你覺得有意思的東西了乳蛾,所以你應(yīng)該學(xué)習(xí)更多的知識。

這些內(nèi)容主要是Web開發(fā)相關(guān)的內(nèi)容鄙币,包括HTML/CSS/JS(前端頁面)肃叶、Servlet/JSP(J2EE)以及Mysql(數(shù)據(jù)庫)相關(guān)的知識。

它們的學(xué)習(xí)順序應(yīng)該是從前到后十嘿,因此最先學(xué)習(xí)的應(yīng)該是HTML/CSS/JS(前端頁面)被环,這部分內(nèi)容你可以去上面的那個runoob網(wǎng)站上找。你可以試著自己寫一些頁面详幽,當(dāng)然筛欢,你可以盡你最大的努力讓它變得最漂亮。這部分內(nèi)容對于后端Java來說唇聘,理論上不是特別重要版姑,但至少要達(dá)到可以自己寫出一些簡單頁面的水平。

接下來迟郎,你需要學(xué)習(xí)的是Servlet/JSP(J2EE)部分剥险,這部分是Java后端開發(fā)必須非常精通的部分,因此這部分是這三部分中最需要花精力的宪肖,而且這個時候表制,你要學(xué)會使用開發(fā)工具健爬,而不能再使用記事本了,可以選擇eclipse么介。

當(dāng)你下載安裝好eclipse以后娜遵,請視頻中的教程一步一步去學(xué)習(xí),一定要多動手壤短。關(guān)于Servlet/Jsp部分視頻的選擇设拟,業(yè)界比較認(rèn)可馬士兵的視頻,因此推薦給大家久脯。當(dāng)然了纳胧,LZ本人并沒有看過他的視頻,所以不好說的太絕對帘撰,如果大家自己有更好的選擇跑慕,可以堅持自己的,不要被LZ干擾摧找。

原本LZ也是打算出教學(xué)視頻的相赁,但是由于時間問題,還是決定放棄了慰于。但是如果你看視頻的過程中遇到了問題,歡迎來LZ的交流群提問唤衫,或者去斗魚觀看LZ的直播提出你的問題婆赠,直播地址和群號都在LZ的個人博客左側(cè)。

最后一步佳励,你需要學(xué)會使用數(shù)據(jù)庫休里,mysql是個不錯的入門選擇,而且Java領(lǐng)域里主流的關(guān)系型數(shù)據(jù)庫就是mysql赃承。這部分一般在你學(xué)習(xí)Servlet/Jsp的時候妙黍,就會接觸到的,其中的JDBC部分就是數(shù)據(jù)庫相關(guān)的部分瞧剖。你不僅要學(xué)會使用JDBC操作數(shù)據(jù)庫拭嫁,還要學(xué)會使用數(shù)據(jù)庫客戶端工具,比如navicat抓于,sqlyog做粤,二選一即可。

三捉撮、開發(fā)框架

當(dāng)你學(xué)會以上內(nèi)容以后怕品,這個時候你還不足以參加工作,你還需要繼續(xù)深造巾遭。公司里為了提高開發(fā)的效率肉康,會使用一些Java Web框架闯估,因此你還需要學(xué)習(xí)一些開發(fā)框架。

目前比較主流的是SSM框架吼和,即spring涨薪、springmvc、mybatis纹安。你需要學(xué)會這三個框架的搭建尤辱,并用它們做出一個簡單的增刪改查的Web項目。你可以不理解那些配置都是什么含義厢岂,以及為什么要這么做光督,這些留著后面你去了解。但你一定要可以快速的利用它們?nèi)齻€搭建出一個Web框架塔粒,你可以記錄下你第一次搭建的過程结借,相信我,你一定會用到的卒茬。

還要提一句的是船老,你在搭建SSM的過程中,可能會經(jīng)常接觸到一個叫maven的工具圃酵。這個工具也是你以后工作當(dāng)中幾乎是必須要使用的工具柳畔,所以你在搭建SSM的過程中,也可以順便了解一下maven的知識郭赐。在你目前這個階段薪韩,你只需要在網(wǎng)絡(luò)上了解一下maven基本的使用方法即可,一些高端的用法隨著你工作經(jīng)驗的增加捌锭,會逐漸接觸到的俘陷。

關(guān)于學(xué)習(xí)SSM框架的地址給大家推薦一個,這里面有視頻观谦,大家可以去觀看拉盾,地址是http://edu.51cto.com/lesson/id-76468.html

四豁状、找工作

當(dāng)你完成開發(fā)框架的學(xué)習(xí)以后捉偏,你就該找工作了,在校的找實習(xí)泻红,畢業(yè)的找全職告私。與此同時,在找工作的同時承桥,你不應(yīng)該停下你的學(xué)習(xí)驻粟,準(zhǔn)確的說,是你在以后都不能停下學(xué)習(xí)。

上面這些內(nèi)容你只是囫圇吞棗的學(xué)會了使用蜀撑,你可以逐步嘗試著去了解更多的東西挤巡,網(wǎng)絡(luò)是你最重要的老師。

第二部分:對于參加工作一年以內(nèi)的同學(xué)酷麦。

恭喜你矿卑,這個時候,你已經(jīng)擁有了一份Java的工作沃饶。這個階段是你成長極快的階段母廷,而且你可能會經(jīng)常加班。

但是加班不代表你就可以松懈了糊肤,永遠(yuǎn)記得LZ說的那句話琴昆,從你入行那一刻起,你就要不停的學(xué)習(xí)馆揉。在這一年里业舍,你至少需要看完《Java編程思想》這本書。這本書的內(nèi)容是幫助你對于Java有一個更加深入的了解升酣,是Java基礎(chǔ)的升級版舷暮。

這本書很厚,當(dāng)初看這本書噩茄,LZ花了整整三個月下面。正常速度的話,應(yīng)該可以在半年左右看完绩聘。LZ這里不要求過高沥割,只要你在一年以內(nèi)把這本書看完即可。當(dāng)然了君纫,LZ所說的看完,是充分吸收芹彬,而不是讀一遍就完事了蓄髓,因此有些內(nèi)容你可能會看不止一遍。

總而言之舒帮,這個階段的核心學(xué)習(xí)思想就是会喝,在工作中實踐,并且更加深入的了解Java基礎(chǔ)玩郊。

第三部分:對于參加工作1年到2年的同學(xué)肢执。

這部分時間段的同學(xué),已經(jīng)對Java有了一個更加深入的了解译红。但是對于面向?qū)ο蟮捏w會可能還不夠深刻预茄,編程的時候還停留在完成功能的層次,很少會去考慮設(shè)計的問題。

于是這個時候耻陕,設(shè)計模式就來了拙徽。LZ當(dāng)時看的是《大話設(shè)計模式》這本書,并且寫了完整版的設(shè)計模式博客诗宣。因此膘怕,LZ要求大家,最多在你工作一年的時候召庞,必須開始寫博客岛心,而設(shè)計模式就是你博客的開端。

請記住篮灼,LZ所提的基本都是最低要求忘古,因此不要有任何松懈的心理,否則五年后穿稳,你不要去羨慕別人高于你的工資存皂,也不要去羨慕別人進(jìn)入了某公司。

這一年逢艘,你必須對于設(shè)計模式了如指掌旦袋,《大話設(shè)計模式》可以作為你的開端污抬。當(dāng)然了酗宋,你也可以去看LZ的個人博客去學(xué)習(xí),地址是http://www.cnblogs.com/zuoxiaolong/p/pattern26.html距境。

此外央拖,設(shè)計模式并不是你這一年唯一的任務(wù)祭阀,你還需要看一些關(guān)于代碼編寫優(yōu)化的書。比如《重構(gòu) 改善既有代碼的設(shè)計》鲜戒,《effective java》专控。

總而言之,這個階段遏餐,你的核心任務(wù)就是提高你的代碼能力伦腐,要能寫出一手優(yōu)雅的代碼。

第四部分:對于參加工作2年到3年的同學(xué)

有的同學(xué)在這個時候覺得自己已經(jīng)很牛逼了失都,于是忍不住開始慢慢松懈柏蘑。請記住,你還嫩的多粹庞。

這個階段咳焚,有一本書是你必須看的,它叫做《深入理解Java虛擬機》庞溜。這本書絕對是Java開發(fā)者最重要的書革半,沒有之一。在LZ眼里,這本書的重要性還要高于《Java編程思想》督惰。

這本書的內(nèi)容是幫助你全面的了解Java虛擬機不傅,在這個階段,你一定已經(jīng)知道Java是運行在JVM之上的赏胚。所以访娶,對于JVM,你沒有任何理由不了解它觉阅。LZ之前有寫過JVM系列的知識崖疤,可以去看一下,地址是http://www.cnblogs.com/zuoxiaolong/category/508918.html典勇。

另外劫哼,在過去2年的工作當(dāng)中,你肯定或多或少接觸過并發(fā)割笙。這個時候权烧,你應(yīng)該去更加深入的了解并發(fā)相關(guān)的知識,而這部分內(nèi)容伤溉,LZ比較推薦《Java并發(fā)編程實戰(zhàn)》這本書般码。只要你把這本書啃下來了,并發(fā)的部分基本已經(jīng)了解了十之六七乱顾。

與此同時板祝,這個階段你要做的事情還遠(yuǎn)不止如此。這個時候走净,你應(yīng)該對于你所使用的框架應(yīng)該有了更深入的了解券时,對于Java的類庫也有了更深入的了解。因此伏伯,你需要去看一些JDK中的類的源碼橘洞,也包括你所使用的框架的源碼。

這些源碼能看懂的前提是说搅,你必須對設(shè)計模式非常了解炸枣。否則的話,你看源碼的過程中蜓堕,永遠(yuǎn)會有這樣那樣的疑問抛虏,這段代碼為什么要這么寫博其?為什么要定義這個接口套才,它看起來好像很多余?

由此也可以看出慕淡,這些學(xué)習(xí)的過程是環(huán)環(huán)相扣的背伴,如果你任何一個階段拉下來了,那么你就真的跟不上了,或者說是一步慢步步慢傻寂。而且LZ很負(fù)責(zé)的告訴你息尺,LZ在這個階段的時候,所學(xué)習(xí)的東西遠(yuǎn)多于這里所羅列出來的疾掰。因此千萬不要覺得你已經(jīng)學(xué)的很多了搂誉,LZ所說的這些都只是最低要求,不光是LZ静檬,很多人在這個時間段所學(xué)習(xí)的內(nèi)容都遠(yuǎn)超本文的范圍炭懊。

如果你不能跟上節(jié)奏的話,若干年后拂檩,如果不是程序猿市場還不錯的話侮腹,你很可能不僅僅是工資比別人低,公司沒別人好稻励,而是根本就找不到工作父阻。

總而言之,這個階段望抽,你需要做的是深入了解Java底層和Java類庫(比如并發(fā)那本書就是Java并發(fā)包java.concurrent的內(nèi)容)加矛,也就是JVM和JDK的相關(guān)內(nèi)容。而且還要更深入的去了解你所使用的框架糠聪,方式比較推薦看源碼或者看官方文檔荒椭。

另外,還有一種學(xué)習(xí)的方式舰蟆,在2年這個階段趣惠,也應(yīng)該啟用了,那就是造輪子身害。

不要聽信那套“不要重復(fù)造輪子”的論調(diào)味悄,那是公司為了節(jié)省時間成本編造出來的。重復(fù)造輪子或許對別人沒有價值塌鸯,因為你造的輪子可能早就有了侍瑟,而且一般情況下你造出來的輪子還沒有現(xiàn)存的好。但是對別人沒有價值丙猬,不代表對你自己沒有價值涨颜。

一個造輪子的過程,是一個從無到有的過程茧球。這個過程可以對你進(jìn)行系統(tǒng)的鍛煉庭瑰,它不僅考察你的編碼能力,還考察你的框架設(shè)計能力抢埋,你需要讓你的輪子擁有足夠好的擴展性弹灭、健壯性督暂。

而且在造輪子的過程中,你會遇到各種各樣的難題穷吮,這些難題往往又是你學(xué)習(xí)的契機逻翁。當(dāng)你把輪子造好的時候,你一定會發(fā)現(xiàn)捡鱼,其實你自己收獲了很多八回。

所以,這個階段驾诈,除了上面提到的了解JVM辽社、JDK和框架源碼以外,也請你根據(jù)別人優(yōu)秀的源碼翘鸭,去造一個任何你能夠想象出來的輪子滴铅。

第五部分:參加工作3年到4年的同學(xué)

這個階段的同學(xué),提升已經(jīng)是很難了就乓,而且這個階段的學(xué)習(xí)往往會比較多樣化汉匙。

因為在前3年的過程中,你肯定或多或少接觸過一些其它的技術(shù)生蚁,比如大數(shù)據(jù)噩翠、分布式緩存、分布式消息服務(wù)邦投、分布式計算伤锚、軟負(fù)載均衡等等。這些技術(shù)志衣,你能精通任何一項屯援,都將是你未來面試時巨大的優(yōu)勢,因此如果你對某一項技術(shù)感興趣的話念脯,這個時候可以深入去研究一下狞洋。這項技術(shù)不一定是你工作所用到的,但一定是相關(guān)的绿店。

而且在研究一門新技術(shù)時吉懊,切忌朝三暮四。有的同學(xué)今天去整整大數(shù)據(jù)假勿,搞搞Hadoop借嗽、hbase一類的東西。過不了一段時間转培,就覺得沒意思恶导,又去研究分布式緩存,比如redis堡距。然后又過不了一段時間甲锡,又去研究分布式計算,比如整整Mapreduce或者storm羽戒。

結(jié)果到最后缤沦,搞得自己好像什么都會一樣,在簡歷上大言不慚的寫上大數(shù)據(jù)易稠、分布式緩存缸废、分布式計算都了解,其實任何一個都只是浮于表面驶社。到時候面試官隨便一問企量,就把你給識破了。

一定要記住亡电,作為一個程序猿届巩,平日里所接觸的技術(shù)可能會很多,但是想要讓一門技術(shù)成為你的優(yōu)勢份乒,那么一定是你對這門技術(shù)的了解強過絕大多數(shù)人才行恕汇。

因此在這個階段,你就不能再簡單的去學(xué)習(xí)前3年的內(nèi)容了或辖,雖然前面的學(xué)習(xí)如果還不夠深入的話依舊要繼續(xù)瘾英,但這個時候你應(yīng)該更多的考慮建立你的優(yōu)勢,也可以稱為差異性颂暇。

差異性相信不難理解缺谴,就是讓你自己變得與眾不同。你前面三年的學(xué)習(xí)足夠你成為一名基本合格的Java開發(fā)者耳鸯,但你離成為一名優(yōu)秀的Java開發(fā)者還有很大的距離湿蛔。

所謂優(yōu)秀,即能別人所不能县爬。而你前三年所學(xué)習(xí)的內(nèi)容煌集,是很多做過幾年的Java開發(fā)都能夠掌握的。那么為了讓自己有差異性捌省,你就需要另辟蹊徑苫纤,找一個方向深入研究下去,以期在將來纲缓,你能夠成為這個領(lǐng)域的專家卷拘,比如分布式計算領(lǐng)域的專家,大數(shù)據(jù)領(lǐng)域的專家祝高,并發(fā)領(lǐng)域的專家等等栗弟。

此外,你除了建立你的差異性之外工闺,還要去彌補你基礎(chǔ)上的不足乍赫,直到現(xiàn)在瓣蛀,LZ都沒有提及基礎(chǔ)知識。原因是基礎(chǔ)是很枯燥無味的雷厂,學(xué)的太早不僅容易懵逼惋增,而且懵逼的同時還容易產(chǎn)生心理陰影,以至于以后再不想去研究這些基礎(chǔ)改鲫。但基礎(chǔ)又是你深入研究一些領(lǐng)域時所必須掌握的诈皿,比如你去研究分布式計算,你不懂算法你玩?zhèn)€毛毛像棘?比如你去做分布式緩存稽亏,你對計算機系統(tǒng)的內(nèi)存不了解,你如何去做緩存缕题?

如果你的基礎(chǔ)本來就非常強截歉,那么恭喜你,相信你在之前的工作中已經(jīng)充分體會到了這些基礎(chǔ)對你的幫助烟零。但LZ相信大部分人的基礎(chǔ)都很薄弱怎披,哪怕是科班畢業(yè)的人,很多人也不敢說自己當(dāng)初的基礎(chǔ)學(xué)的多么強大瓶摆,比如算法凉逛、計算機系統(tǒng)原理、編譯原理這些群井。

但是每個人時間都是有限的状飞,而且這些基礎(chǔ)的書籍每一本讀下來,沒個一年半載的书斜,還真拿不下來诬辈,因此還是要有所抉擇的。雖然藝多不壓身荐吉,但問題是藝多是有代價的焙糟,是需要你付出時間和精力的,而LZ個人更贊成在同等代價的情況下獲取最大的收獲样屠。

首先穿撮,LZ比較推崇的基礎(chǔ)書籍有三本,分別是《深入理解計算機系統(tǒng)》痪欲,《tcp/ip詳解 卷一悦穿、二、三》业踢,《數(shù)據(jù)結(jié)構(gòu)與算法》栗柒。其中TCP/IP有三本書,但我們這里把這三本看成是一本大書知举。

這三本分別適合三種人瞬沦,《深入理解計算機系統(tǒng)》比較適合一直從事Java Web開發(fā)和APP后端開發(fā)工作的人群太伊。《tcp/ip詳解 卷一逛钻、二僚焦、三》比較適合做網(wǎng)絡(luò)編程的人群,比如你使用netty去開發(fā)的話绣的,那么就要對TCP/IP有更深入的了解。而《數(shù)據(jù)結(jié)構(gòu)與算法》這本書欲账,則比較適合做計算研究工作的人屡江,比如剛才提到的分布式計算。

另外赛不,LZ要強調(diào)的是惩嘉,這里所說的適合,并不是其它兩本對你就沒有用踢故。比如你做Java Web和APP后端開發(fā)文黎,《tcp/ip詳解 卷一、二殿较、三》這本書對你的作用也是很大的耸峭。這里只是分出個主次關(guān)系而已,你要是時間足夠的話淋纲,能把三本都精讀那當(dāng)然最好不過了劳闹。但如果時間有限的話,那么就先挑對你幫助最大的書去讀洽瞬。

理論上來講本涕,這一年你能把這三本其中一本精讀下來,就已經(jīng)非常厲害了伙窃。有了基礎(chǔ)菩颖,有了前面的工作經(jīng)驗,你就可以去開拓屬于你的領(lǐng)域了为障。

在這一年里晦闰,一定要規(guī)劃好自己的領(lǐng)域,建立好自己的優(yōu)勢鳍怨,制造出差異性鹅髓。如果你對自己的領(lǐng)域不夠清晰的話,隨著你工作的時間日益增多京景,你接觸的技術(shù)會越來越多窿冯,這個時候,你很容易被淹死在技術(shù)的海洋里确徙,看似接觸的技術(shù)越來越多醒串,會用的也越來越多执桌,但你毫無優(yōu)勢。

有的同學(xué)可能會問芜赌,“LZ仰挣,我也不知道我的領(lǐng)域是什么啊缠沈?怎么辦呢膘壶?”

對于這種人,LZ只想說洲愤,“臥槽颓芭,這還問我?要不干脆我替你學(xué)習(xí)得了柬赐,好不好亡问?”

第六部分:參加工作4年到5年的同學(xué)

經(jīng)過前面一年的歷練,相信你在自己所鉆研的領(lǐng)域已經(jīng)有了自己一定的見解肛宋,這個時候州藕,技術(shù)上你應(yīng)該已經(jīng)遇到瓶頸了。

這個時候不要著急提高自己的技術(shù)酝陈,已經(jīng)是時候提高你的影響力了床玻,你可以嘗試去一些知名的公司去提高你的背景,你可以發(fā)表一些文章去影響更多的人沉帮。當(dāng)然笨枯,你也可以去Github創(chuàng)建一個屬于你的開源項目,去打造自己的產(chǎn)品遇西。這次的開源項目不同于之前的造輪子馅精,你這個時候是真的要去盡量嘗試造出來真正對別人有價值的輪子。

技術(shù)學(xué)到這個階段粱檀,很容易遇到瓶頸洲敢,而且往往達(dá)到一定程度后,你再深入下去的收效就真的微乎其微了茄蚯,除非你是專門搞學(xué)術(shù)研究的压彭。然而很可惜,大部分程序猿做不到這一步渗常,那是科學(xué)家做的事情壮不。

這個時候提高影響力不僅僅是因為技術(shù)上容易遇到瓶頸,更多的是影響力可以給你創(chuàng)造更多的機會皱碘。程序猿在某種程度上和明星很像询一,一個好的電視劇和電影就可以成就一批明星,程序猿有的時候也是,一個好的項目就可以成就一群程序猿健蕊。

比如國內(nèi)幾個膾炙人口的項目菱阵,像淘寶、支付寶缩功、QQ晴及、百度、微信等等嫡锌。這每一個項目虑稼,都成就了一批程序猿。LZ敢說势木,這里面任何一個項目蛛倦,如果你是它的核心開發(fā),光是這樣一個Title跟压,就已經(jīng)是你非常大的優(yōu)勢胰蝠。更何況還不止如此歼培,Title說到底也是個名頭震蒋,更重要的是,這種項目在做的時候躲庄,對你的歷練一定也是非常給力的查剖。

而你如果想要參與這樣的項目,除了靠運氣之外噪窘,影響力也是很重要的一個手段笋庄。比如你在分布式計算領(lǐng)域有一定的影響力,那么如果有什么好的關(guān)于分布式計算的項目倔监,對方就很可能會邀請你直砂。就算人家不邀請你,你自己主動去面試的時候浩习,對方如果知道你在這個領(lǐng)域的影響力静暂,也肯定會起到很大的作用,而這個作用谱秽,甚至可能會超過你現(xiàn)在的技術(shù)能力洽蛀。

所以,在這個階段疟赊,你最大的任務(wù)是提高自己的影響力郊供,為自己未來的十年工作生涯那一天做準(zhǔn)備。如果你能夠靠你的影響力和以前積累的技術(shù)近哟,參與到一個偉大的項目當(dāng)中驮审,那么你后面的五年也就有著落了。

當(dāng)然了,LZ現(xiàn)在滿打滿算头岔,做程序猿也就4年半不到塔拳,因此關(guān)于4年到5年這一部分,LZ的見解不一定是對的峡竣,就算是對的靠抑,也不一定是適合任何人的。所以适掰,希望大家自己有的判斷力颂碧,去決定到底該如何度過這一年。

結(jié)語

本文到此就基本結(jié)束了类浪,整篇文章很長载城,但其實主要就說了兩部分內(nèi)容,一個是社招面試的準(zhǔn)備费就,一個是Java生涯的學(xué)習(xí)诉瓦。

關(guān)于這兩部分,LZ已經(jīng)給出了自己的見解力细,但是還是那句話睬澡,每個人吸收知識的時候,都要有抽取精華眠蚂,去除糟粕的能力煞聪。LZ所說的,可能有些是對的逝慧,有些是錯的昔脯,有些是適合你的,有些是不太適合你的笛臣,你要自己能夠判斷云稚。

其實你在生活和工作當(dāng)中也是一樣的,你身邊的人形形色色沈堡,有的人你喜歡静陈,有的人你很討厭。但其實你喜歡的人也有缺點踱蛀,你討厭的人也有優(yōu)點窿给。你要學(xué)會從你討厭的人身上學(xué)會他的優(yōu)點,千萬不要一棒子打死率拒,這只會讓你失去很多學(xué)習(xí)成長的機會崩泡。

好了,說了這么多了猬膨,就到此為止吧角撞,希望本文可以幫助到作為程序猿或即將成為程序猿的你呛伴。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市谒所,隨后出現(xiàn)的幾起案子热康,更是在濱河造成了極大的恐慌,老刑警劉巖劣领,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姐军,死亡現(xiàn)場離奇詭異垃喊,居然都是意外死亡糕殉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門逞刷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來村生,“玉大人惊暴,你說我怎么就攤上這事〕锰遥” “怎么了辽话?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長卫病。 經(jīng)常有香客問我油啤,道長,這世上最難降的妖魔是什么忽肛? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任村砂,我火速辦了婚禮烂斋,結(jié)果婚禮上屹逛,老公的妹妹穿的比我還像新娘。我一直安慰自己汛骂,他們只是感情好罕模,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著帘瞭,像睡著了一般淑掌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蝶念,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天抛腕,我揣著相機與錄音,去河邊找鬼媒殉。 笑死担敌,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的廷蓉。 我是一名探鬼主播全封,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刹悴?” 一聲冷哼從身側(cè)響起行楞,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎土匀,沒想到半個月后子房,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡就轧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年池颈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钓丰。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡躯砰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出携丁,到底是詐尸還是另有隱情琢歇,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布梦鉴,位于F島的核電站李茫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏肥橙。R本人自食惡果不足惜魄宏,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望存筏。 院中可真熱鬧宠互,春花似錦、人聲如沸椭坚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽善茎。三九已至券册,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間垂涯,已是汗流浹背烁焙。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留耕赘,地道東北人骄蝇。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像鞠苟,于是被迫代替她去往敵國和親乞榨。 傳聞我的和親對象是個殘疾皇子秽之,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354