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服务熔断和降级。算法