2019年計劃
1.學習計算機基礎,並加以實踐。包括LeetCode刷題、數據庫原理(索引和鎖、Sql優化等)、網絡協議(Http、Tcp)、操做系統(加深Linux)。《Http權威指南》、《操做系統設計與實現 》(重點!)
2.鞏固java基礎。重點加深多線程、併發、Jvm、NIO。多溫習《深刻理解Java虛擬機》(重點!)
3.閱讀Spring源碼,Mybatis源碼,一邊讀源碼學英語,一邊體會設計模式,一舉三得。能夠配合博客、書籍去理解源碼。(重點!)
4.提升技術深度。包括微服務SpringCloud的熔斷、降級、網關等原理。
《Redis的設計與實現》,《Mysql技術內幕》(主從、分庫分表等)。
消息隊列Kafka的細節及原理。加深理解分佈式事務和分佈式一致性。
先學工做中用到的。多寫Demo,多記筆記。
5.拓展技術廣度。開始瞭解網絡通訊Netty,Web服務器Nginx,應用服務器Tomcat,搜索引擎ElasticSearch。java
1.每週刷幾道LeetCode。大公司對算法要求比較高。還能夠在牛客網刷《劍指offer》,重點學習常常考的題目。
刷題就跟之前中學時作數學題同樣,解出題目,獲得反饋,頗有成就感。
2.天天GitHub打卡commit,積累十萬行代碼,刻意學習,不斷糾錯。
3.想進大廠,基礎必定要很是紮實。包括java基礎,併發,JVM,網絡協議,操做系統,數據庫。
3.提升技術深度。
必定要對某個領域的技術很是精通,包括整套技術的知識圖譜、架構、組成、區別等。好比精通緩存、或者精通MQ、微服務、搜索引擎或者其餘的某一兩個技術領域等。
4.提升技術廣度。
包括分佈式架構。分佈式理論。集羣。分佈式緩存Redis。SOA架構Dubbo。遠程調用RPC。分佈式服務協調Zookeeper。消息隊列KafKa 。微服務架構SpringCloud。分佈式事務。
搜索引擎ElasticSearch。容器Docker。分佈式數據庫分庫分表Mycat 。分佈式Session。分佈式存儲。分佈式鎖。通訊框架Netty、Web服務器Nginx,應用服務器Tomcat等等。mysql
1.java語言特性: 基礎知識,集合,多線程,併發,JVM,NIO,網絡編程,設計模式。 (★★★★★)
jdk源碼中有大量的數據結構與java語言細節。jdk源碼着重看concurrent、collection、sort、nio、util。
2.計算機基礎知識: 數據庫(索引和鎖等基礎及sql優化)。網絡(http協議、tcp協議)。數據結構。算法。操做系統。計算機組成原理。 (★★★★★)
計算機基礎知識和java語言細節。是最最重要的。須要重點學習。五年甚至十年後都有用。
框架每隔幾年就會更新換代,可是基礎知識是永遠有用的。
80%的時間用來學習基礎知識,20%的時間學習框架。
3.Web框架。分佈式架構。
必備:Spring,Mybatis,SpringMVC,Mybatis-plus,SpringBoot
經常使用:分佈式架構。分佈式理論。集羣。分佈式緩存Redis。SOA架構Dubbo。遠程調用RPC。分佈式服務協調Zookeeper。消息隊列KafKa 。微服務架構SpringCloud。分佈式事務。
可選:搜索引擎ElasticSearch。容器Docker。分佈式數據庫分庫分表Mycat 。分佈式Session。分佈式存儲。分佈式鎖。
邊實戰邊理解原理。最重要的是理解原理。用過不少框架,可是不懂原理,那也是無用的。(★★★★)
好比學習Redis,就得知道Redis經常使用數據結構、Redis事務、備份方式、回收策略、主從同步、哨兵模式,Redis集羣。
閱讀spring、springMvc等框架源碼、或者是其餘第三方庫源碼。Spring源碼主要是體會設計模式的運用。
4.其餘進階知識:linux、mongodb、nginx、netty、tomcat、sql優化 (★★★★)
java後端架構師技術圖譜: https://github.com/xingshaocheng/architect-awesomelinux
java語言:《java編程思想》、《Effective Java》、《碼出高效》、《Java性能優化權威指南》、《java併發編程實戰》、《深刻理解Java虛擬機》、《Java 8實戰》
SSM:《Java EE互聯網輕量級框架整合開發 SSM框架》、《精通Spring企業應用開發實戰》、
設計模式:《Head First 設計模式》、《大話設計模式》
分佈式理論:《大型分佈式網站架構設計與實踐 》、《大型網站技術架構:核心原理與案例分析》、《大型網站系統與Java中間件實踐》
分佈式中間件:《從Paxos到Zookeeper 分佈式一致性原理與實踐》、《Redis設計與實現》、《Redis開發與運維》、《kafka實戰》、《kafka權威指南》
微服務:《SpringCloud微服務實戰》
網絡 :《圖解Http》、《HTTP權威指南》、《tcp/ip詳解 卷1、2、三》、《網絡是怎樣鏈接的》、《圖解Tcp/ip》
數據庫:《mysql必知必會》、《MySQL技術內幕 InnoDB存儲引擎》、《高性能MySQL》
操做系統:《linux鳥哥的私房菜》
計算機組成原理:《深刻理解計算機系統》、
代碼規範:《阿里巴巴java開發手冊》、《代碼整潔之道》、《重構 改善既有代碼的設計 》
其餘:《程序員修煉之道》、《碼農翻身》、《代碼大全》、《人月神話》、《黑客與畫家》nginx
0.每週完成一個 ARTS。
每週至少作一個 leetcode 的算法題、閱讀並點評至少一篇英文技術文章、學習至少一個技術技巧、分享一篇有觀點和思考的技術文章。(也就是 Algorithm、Review、Tip、Share 簡稱 ARTS)堅持至少一年。閱讀英文技術文章,這個我常常忘記。感受能夠讀讀官方的文檔。
1.項目驅動型學習。
項目經驗!!以戰養戰!動手作項目!
作Side Project。或者參與開源的項目。
Learning By Doing。編程是一門須要大量實踐的技能。
只有親自動手作,才能掌握技術。沒有動手作,就算看十遍也不必定會理解的。
先模仿後創新。模仿優秀的代碼。積累代碼塊。
寫十萬行代碼,積累經常使用的可複用的代碼塊。刻意學習,不斷糾錯提升。
將學習到的新技術,運用到實際項目中。
將項目放到GitHub,堅持commit。。git
2.問題驅動型的學習方法。
帶着問題去看書,去學習。若是功利一點,也能夠帶着面試題的疑問去看書。
好比當工做中或者面試時遇到問題均可以記錄下來,而後帶着這些問題去學習。
3.我的驅動型的學習方法。
明確的目標,什麼時候何地要完成什麼目標。好比,三年後,加入一家互聯網或者金融科技公司,非996,月薪20k。
4.常常進行CodeReview。
經過審覈,重構代碼,在反饋中不斷進步。
也能夠找優秀的人幫忙Review,不論是同事朋友同窗。
5.多讀源碼 ,理解技術原理。
要帶着疑問去讀源碼,不要爲了讀源碼而讀源碼。
讀源碼,對提升水平很是有幫助。
閱讀spring、springMvc等框架源碼、或者是其餘第三方庫源碼。Spring源碼主要是體會設計模式的運用。
也能夠去GitHub下載一些優秀的項目,閱讀源碼。
6.多看好書,並作讀書筆記,最好有圖有代碼。記了筆記,還要多看多複習。
書籍的知識是系統知識,而不是碎片化知識。
邊看書,邊實踐,再查閱相關博客,總結提升。
7.多寫博客。
內容不要留於表面,要往深處挖掘,寫深一點。
曾經有一位面試官跟我說,"你還寫博客喔,我特地去看了。"我一臉地自豪,而後面試官又說"你寫的內容太淺太表面了,要多往深處挖掘。"
8.csdn回答問題,收集疑問。還有瀏覽器的收藏夾。多整理並系統化知識.
9.牛客網看面試題,在線編程,作題目,包括《劍指offer》、《程序員面試金典》和《Sql實戰》。
Leetcode刷題。刷題能夠分Topic刷,好比鏈表、棧、隊列、樹、排序等。刷題經過筆試纔有機會進入比較好的公司。。
10.多看官方文檔,官方文檔的內容是最準確的。最好將官網的代碼敲一遍。
網絡上其餘的資料大可能是二手貨,並且還不必定是正確的。
11.每隔幾個月,查看招聘網站的 java開發/架構師 的工做要求,技術棧。
面向就業學習。若是學習的內容不是企業所須要的,那找工做會比較麻煩。
12.閱讀ImportNew、InfoQ等公衆號,拓展視野。閱讀微信公衆號等內容,要多摘錄,記錄到有道雲筆記。
13.多用Google,少用百度。Google的內容纔是最精準的。
14.分清哪些是最主要的技術。抓重點。下班後分配更多的時間學習。有些技術是很容易過期的。
15.使用網站或其餘產品的時候,多思考實現和原理。模仿其餘知名網站的。本身寫一下。
16.提升調試技巧。
17.多和他人交流。Learning By Teaching。Learning By Sharing。
18.番茄工做法。專一一個小時,休息五分鐘。更有益健康。
19.刻意學習。程序員
1.焦慮是沒有用的。只會影響學習效率。
2.別給本身太大壓力,先保住髮際線再說。github
11月1號--11月15號
. 消息隊列Kafka,對比其餘MQ的細節及原理。
.加深理解分佈式事務和分佈式一致性。面試
10月15號--11月
1.數據庫隔離級別致使的幻讀等問題的理解。
2.分佈式事務解決方案。
3.《重構 改善既有代碼的設計》
4.java8的Optional,Lambda,Stream,LocalDate。
9月15--9月30
1.《Mysql技術內幕》的索引,鎖,事務。
3月--9月
實戰類:《阿里巴巴java開發手冊》、《代碼整潔之道》、《Maven實戰》、《java8實戰》、《SpringCloud微服務實戰》
理論類:《Redis設計與實現》、《Http權威指南》、《高性能Mysql》
面試類:《劍指offer》
其餘:刷題,讀源碼。
6月1號--6月10
1.學習mybatis源碼。
2.溫習設計模式。
3.java8的Lambda表達式以及時間日期api,還有guaua包、HttpClient。
5月1號--5月10號
1.導出Idea配置到GitHub。
2.刷題。
3.閱讀《代碼整潔之道》
4.閱讀《程序員修煉之道》
4月21號-4月30號
1.統一異常處理。
2.HttpServeletRespon響應返回圖片及其餘內容。
3.SpringBoot配置多數據源。DataSourceBuilder建造者模式。
4月15號--4月20號
1.在服務提供者Feign的方法中使用@RequestBody,而後在服務消費者的方法中使用@RequestBody,參數可以成功解析嗎? (能夠的。)
2.條件斷點:好比,當for循環比較次數比較多,想讓for循環停在指定的第幾回循環處。。可使用條件斷點。
3.異常斷點?
4月1號-4月15號
1.深刻學習一下Http的請求頭、響應頭、狀態碼等參數。
3月20--3月31號
1.一週作一道算法題。仍是有點少。刪除有序鏈表的重複節點時,沒有審好題,覺得是無序的,作了半天沒作完。
2.看《SpringCloud微服務實戰》,並作筆記。
3月10號--3月16號
1.瞭解下getJSONObject()的apiDemo。進行JSONObject的處理。注意JSONObject和JsonObject的區別 。
2.學習一下jenkins怎麼用。
3.FeignClient進行聲明式服務消費。
4.添加Hystrix斷路由。
5.postMan發送測試接口。一直報異常信息。(暈死,方法參數爲json,前面忘了加@RequestBody)。
6.安裝mysql-8.0,出了一大堆問題。
3月6--3月10號
1.主要溫習一下工做中經常使用的基礎知識。
2.Mybatis多表查詢、手寫比較複雜的Sql、Mybatis-plus
3.linux安裝mysql、tomcat、nginx。
4.SpringCloud服務熔斷和降級。算法