若是你是在校學生,務必要在學好得基礎(好比計算機系統,算法)的前提下,再考慮去進行下面的學習,當我在網上看了那麼多評論,我想說,大家不要誤人子弟,不要讓一個滿懷熱情的學生去直接學習什麼源碼,架構之類知識,讓別人失望而歸,能夠看看個人分享,爲了增長本身的說服力,本人分享一份來自本身的學習經歷。javascript
清華大學碩士畢業,在北京寫過兩年Java,在杭州寫過三年Python,深刻定製過Python虛擬機,如今從事arm上的javascript虛機機的開發。雖然仍然不是什麼牛人,但我以爲個人經驗能對大多數新入門的從業人員提供參考。html
若是你是有Java基礎的,那你應該去找一個Java的基礎教程鞏固本身的Java基礎,在鞏固基礎的同時多實踐,多敲代碼,不少時候你以爲你寫完了,運行出來的結果和本身的想法應該如出一轍,可是有時候你發現結果和你的想法大相徑庭的時候,而且去思考的時候,這個時候你纔算剛剛入門了,起碼你如今對本身的代碼有思考了。每當學完一天的內容後本身要有總結,不要急於進入下部分,留下幾天好好寫一些基礎的程序,鞏固本身印象。java
這三門當中,首推Java。真的,Python固然是好,可是對於一個新入門的人,最重要的是先找到工做不是嗎?而找工做的話,Java無疑是最容易的。對於跨行業的人而言,最困難的實際上是第一步,那就是如何進入這個行業。若是你連進都進不來,第一份工做遲遲沒法開始,那麼好好努力,補上數據結構,設計模式,算法設計這些差距就根本無從提及,不是嗎?不要被什麼科班出身之類的說法嚇壞了。雖然我是科班出身,但我始終以爲,只要你肯努力,這裏面並無什麼沒法逾越的鴻溝,最重要的是不要好高騖遠,也不要急於求成。學習和積累是有一個過程的,在程序員這個行當,你一分付出,就會有一分回報。尊重學習的內在規律,按部就班,終有一天,你會成爲你想成爲的那我的的。程序員
瞭解Java的運行環境。搞清楚path和classpath是幹什麼的,怎麼在命令行進行編譯,執行。知道IDE的各個按鈕後面真正發生了什麼事情。面試
掌握Java的語法。搞清楚包,接口,類,繼承這些基本概念。掌握多態,overwrite,死背下IO的接口,包括InputStream/OutputStream和Writer/Reader,死背下網絡編程和GUI編程的接口,死背JDBC接口。這一步,推薦的書是《Thinking in Java》。算法
掌握多線程編程。弄明白ConcurrencyHashMap是怎麼實現的,搞清楚synchronized是怎麼回事,弄明白爲何要有Runnable接口。在第二步和第三步掌握到80%的時候,你就能夠考慮找工做了。spring
在工做中體會一下設計模式。推薦《Java與模式》這本書。看完裏面的Decorator,IO接口你不再會去死記硬背了。用的時候,根據Adaptor和Decorator的命名規則,本身臨時推都推得出來。編程
惡補數據結構。搞清楚LinkedList和ArrayList的實現機制,瞭解它們的每個接口的時間複雜度。一樣的還有其餘容器,Map啊,Setl啊,都是同樣的。棧,隊列,二叉樹,圖貫穿編程始終,若是這一步你邁不過去,那就只能在低階程序員裏打轉。設計模式
若是有可能,最好對一些算法設計也有所涉獵。好比動態規則的思路,貪心算法,諸如KMP這種奇妙的算法等。這一步沒有數據結構那麼重要,學得好固然好,學很差也不用太挫敗。到了這一步,你和科班程序員之間的差距就不大了。能夠在工做中獨立承擔開發任務了。網絡
進階,這時候就能夠有本身的思考了。Java發展到如今,被用在各類各樣的情景之中,說它是應用最普遍的編程語言並不過度。你在打好基礎之後,就能夠考慮應該向哪一個方向發展了。好比服務端的架構,最好能學習一下JavaEE。JEE一直以來,都是讓人以爲門檻過高。這個其實能夠從Spring入手,搞清楚反射,控制反轉,依賴注射都是什麼鬼(這些神叨叨的名詞其實都是爲了解決Java自己不夠動態這個缺陷而出現的,這裏不展開,我只想提醒的是,這些概念沒有什麼大不了的東西,不要被愛裝逼的傢伙嚇住了)。還有消息這個東西,還有ORM這個東西,都去搞搞清楚。想一下它們要解決什麼問題,再猜一下他們是怎麼實現的。我面試的時候發現,其實大多數優秀的開發者,即便之前沒思考過這個問題,讓他現場設計一下Hibernate,都能設計得差很少。這說明,這些框架性的東沒有什麼大不了的。有了基礎,你也能設計出來。關鍵是要去動腦筋想。以上是以服務端開發舉例,那麼對於客戶端,你就去思考事件響應機制是如何工做的(這個我不熟悉,就再也不多說了)。還能夠深刻研究一下JVM的源代碼,以及其實現機制,瞭解一下垃圾回收算法等等。到了這一步,你就能夠應聘Java高級開發了。若是運氣好,年薪30萬是有可能的。保底也要20萬了。
架構。到了這一步,你就算是登堂入室,真正邁入高級開發人員了。這一步,你要思考更多的東西,好比,如何處理高併發,如何應對分佈式系統,如何提供更健壯的數據服務。到了這一步,那就沒有什麼能夠參考的,現成的東西了。全靠本身的悟性了。那最後能達到什麼高度,就不是我這個層次能點評的了。
文章到這裏就結束了!
小編這裏總結了【免費領取 MySQL筆記500多頁資料集錦+1000道互聯網大廠Java工程師面試題、spring、mybatis、jvm,Zookeeper,spring】 關注公衆號:麒麟改bug ,編程的世界永遠向全部熱愛編程的人開放,這是一個自由,平等,共享的世界,我始終是這樣堅信的。