如今各大互聯網公司,對Java類的校招要求愈來愈高,致使不少小夥伴都很迷茫,今天分享一篇謝照東關於Java學習進階之路,但願能幫助到一些人css
佛說五蘊六毒是妄,將因果都念做業障,知乎搜索「謝照東」html
把看過的書羅列一下前端
《java核心技術:卷一》,這個是我入門java的時候看的,很是適合新手!java
《java設計模式》這本書雖然是個外國人寫的,可是感受不是很好。評價通常。學習設計模式的時候我通常都看大牛的博客。python
《深刻理解jvm虛擬機》 這本書不用多說,業界很是很是好的一本書!多看幾遍,每一遍都有不少收穫jquery
《深刻分析java web 技術內幕》不得不說,這本說在各個方面都很是優秀,不愧是偶像寫的書!還求山哥多多照顧。嘿嘿linux
《Spring技術內幕》在spring源碼講解方面,我的感受很是不錯。可以深刻理解內部機制,可是須要多看幾遍git
《編程之美》業界翹楚,在算法方面終結的很是好,題目也很是有表明性程序員
《劍指offer》不用多說,和上面同樣,能夠鍛鍊一些算法能力github
《java編程思想》傳說是java行業內的神書,可是目前表示還處於只知其一;不知其二狀態
《Hadoop技術內幕》這個能夠pass掉,學習hadoop的時候看的
《TCP/IP詳解,卷一:協議》能夠對tcp有更加深入的認識
《java網絡編程》,不是很好,將就能夠。學學api仍是能夠的
《分佈式java應用:基礎與實踐》這個是畢玄大大寫的書,很是不錯哦
《how tomcat works》在講解tomcat內部原理方面,我的以爲是很是不錯的書!等級又要上升一個檔次
《java併發編程實戰》對java併發方面,講得還算不錯的書籍
固然還有一些雜七雜八的書(走了很多彎路,你懂的!),我就不列出來了,上訴都是筆者認爲很是不錯的書籍。
最近正在看《算法導論》,和《算法》,md,其實我也想成爲算法狗
固然,上面這些書我表示只懂50%,慚愧。不能徹底吸取大牛的精髓啊!
數據結構不用多說,什麼B樹啊、紅黑樹啊、棧、隊列等等,至少保證可以清楚的說出來,說出他們的原理!具體的應用場景是什麼啊!,固然能寫出來更好(手寫btree會死人,其實還有一個數據結構叫skiplist,逃
算法的話,建議題目多看看算法題目,或者把leetcode上的算法題目刷一遍(目前本人只AC的幾道題,慚愧。知道該資源的時候已經晚了,如今在努力刷刷刷)。另外能夠看看july的博客,
數據庫就更多了,索引(結合B+tree,兩個引擎的不一樣之處)、存儲過程、引擎、觸發器, SQL必須是要熟練的,寫SQL的時候多考慮考慮效率,想一想還有沒有其餘的語句能完成這個任務,在哪方面提升了,爲什麼呢?數據庫引擎要了解一下,分佈式數據庫也是,什麼主從分離啊,分庫、分表、分區啊,這些常見的解決方案
操做系統我屬於渣渣,我的就知道一些進程、線程、一些調度算法之類的~~~~(逃
計算機網絡若是是研發崗位得話,TCP/IP這一張須要好好看看,HTTP協議不用多說,常見的狀態碼等等,一次http請求有哪些過程,這個要理解透徹
java:基礎很是重要,固然也要深刻理解原理,什麼JVM,JMM,Classloader,還有一些常見類的源碼,本身能夠試着分析一遍,如今讓你說出LinkedList的內部實現你能不能說出來,HashMap不用多說了,80%的面試都會問到。還有重要的,多線程,併發,網絡,IO。這些都是要看看看看的!本身多思考!還有樓主說的那些框架,說實話,你要是基礎好了,這些都是可以學得很快的,不少問題,看一下源碼什麼都就懂了!特別是spring的源碼要好好看看,裏面的架構設計得很是好!各類設計模式滿天飛!
另外,linux要了解一下,至少要回基本命令吧,腳本語言能夠學習一個。好比py!前端要了解一下.
關於如何看書:兩個字,思考!三個字,不要臉的思考!…………,書不在多,在於精,選書要慎重!反正題主一本叫作「王者歸來」的書,我看見名字我就不想看!
除了這些而後呢:天天刷幾遍CSDN,日常能夠上上oj刷刷題目,國內的牛客網(牛客網-專業IT筆試面試備考平臺,最全求職題庫,全面提高IT編程能力)很是不錯,也能夠去leetcode上面把題目刷一遍哦。關注一些好的社區(我通常混跡在CSDN高性能javaweb板塊),睡覺以前看微信公衆號,固然是技術方面的!推送的文章都挺不錯的!
作程序員我的以爲眼界很重要,就算這不是你的領域,可是你也要知道一點,因此常常關注其餘的新技術是很是重要的!日常多接觸一點開源技術,多上上github,爭取能在github上面貢獻一點本身的東西!
而後,多看看別人的技術博客。思考本身!
關於個人學習方法和麪試經驗的分享
主要看《java核心技術:卷一》的重點章節
掌握java經常使用技術,io、多線程、反射、經常使用集合框架
數據結構看一遍,做用至少要清楚。如hash衝突解決辦法,經常使用排序算法的應用場景和空間/時間複雜度等
數據庫,能看懂ER關係,熟悉數據庫三大範式,熟練經常使用SQL語句
能夠掌握一點java網絡編程方面的知識,對tcp/ip有初步的認識
課程不能落下,專業課程(計算機網絡,操做系統,數據結構,數據庫,計算機組成原理)要好好學。不要掛科
學習servlet/jsp,至少能寫簡單的圖書管理系統,熟悉核心api
瞭解先後端交互方式,ajax、json/xml至少知道,會使用jquery,html,css,js最好
學習後端框架,SpringMVC/Struts二、Mybatis、Spring,熟悉MVC模式,知道三層架構及每一層之間的關係
會用chrome/firefox瀏覽器分析http請求,解決、定位問題。知道經常使用http狀態碼,瞭解TCP/IP,知道一次http請求發生了哪些事情
學習設計模式,23種設計模式都須要瞭解一點,熟悉經常使用的如:單例,工廠,模板,適配器,代理,責任鏈,構造器,裝飾器,迭代器,策略,命令,觀察者,外觀,享元。理解他們的好處,能夠找找在其餘框架哪些用了這些設計模式。
能夠適當的看一些源碼,Spring的源碼能夠着重的看一下。tomcat能夠從源碼的角度看看tomcat的總體設計方案,一次請求tomcat如何處理,servlet在tomcat中的加載,編譯過程。tomcat自定義的ClassLoader有什麼做用。
會設計數據庫,多對多,一對多,迭代,會寫複雜的SQL,瞭解SQL調優,會寫存儲過程,觸發器。熟悉索引的使用,瞭解視圖。去了解一些經常使用NOSQL,好比Redis/mongodb
學習Linux,熟悉基本命令,學習一種腳本語言(shell/python)。會在linux下寫腳本開發
算法,能夠看看編程之美,算法導論。學習一些算法相關的知識
深刻java:理解JVM,JMM,Classloader,GC算法,GC收集器。學會定位OOM問題所在。
源碼分析,經常使用集合類如:Hashmap,Arraylist,linkedList,HashSet,ConcurrentHashmap等的源碼分析,要很是熟悉java集合框架設計。
最好可以分析一種框架源碼,好比Spring
深刻數據庫,理解至少兩種數據庫引擎(Inndb/Mysiam)的差別性,熟悉索引的內部數據結構,熟悉常見的索引方式(Btree,hash),和索引類型(unique,full text,normal),會使用explain分析SQL語句,會優化SQL語句,
熟悉一種NOSQL,知道內部實現原理(內部數據結構,在算法優化,內部機制),
掌握分佈式數據庫的知識,分表,分庫,分區,分佈式事務等,能夠學習一個數據庫中間件(TDDL/COBAR)
架構設計,看看大型高流量/高併發的網站設計(CDN,異步,前端優化),瞭解緩存(分佈式memcached/經常使用本地緩存),搜索引擎(lucene/solr/elasticSearch),分佈式(負載均衡/分佈式數據庫/分佈式應用集羣),消息隊列(ActiveMQ/Rabbitmq)在大型網站中的做用
還有一些其餘的知識,如RPC框架,分佈式服務架構,SOA,REST架構等等
能夠接觸一些雲計算方面的知識,如Hadoop/Storm/Spark等,要是再能接觸一點機器學習就更棒啦(反正我是沒有,聽着就嚇人,跑個kmeans算法都要弄死人,(
PS:本人的知識星球已經正式上線,3天加入人數已經140+,但願更過的小夥伴能加入到這個小圈子。
一、我會分享本身的一些學習心得,以及一些思考,包括技術路線的指導等。 二、能夠針對大家本身的一些特別的問題專門進行解答,作到因人而異。 三、爲你們營造構建一個和諧的環境,方便你們深刻學習交流,可讓你們認識更多的技術牛人等。 但願加入到這個星球的小夥伴,都能提早找到本身的方向,站在前輩的肩膀上,看的更遠,爬的更高。
本人公衆號