学习计划
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。
后端怎样才能进入顶尖的大公司?
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等等。
java后端学习重点:
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-awesome
书籍:
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详解 卷一、二、三》、《网络是怎样连接的》、《图解Tcp/ip》
数据库:《mysql必知必会》、《MySQL技术内幕 InnoDB存储引擎》、《高性能MySQL》
操作系统:《linux鸟哥的私房菜》
计算机组成原理:《深入理解计算机系统》、
代码规范:《阿里巴巴java开发手册》、《代码整洁之道》、《重构 改善既有代码的设计 》
其他:《程序员修炼之道》、《码农翻身》、《代码大全》、《人月神话》、《黑客与画家》
学习方法:
0.每周完成一个 ARTS。
每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tip、Share 简称 ARTS)坚持至少一年。阅读英文技术文章,这个我经常忘记。感觉可以读读官方的文档。
1.项目驱动型学习。
项目经验!!以战养战!动手做项目!
做Side Project。或者参与开源的项目。
Learning By Doing。编程是一门需要大量实践的技能。
只有亲自动手做,才能掌握技术。没有动手做,就算看十遍也不一定会理解的。
先模仿后创新。模仿优秀的代码。积累代码块。
写十万行代码,积累常用的可复用的代码块。刻意学习,不断纠错提高。
将学习到的新技术,运用到实际项目中。
将项目放到GitHub,坚持commit。。
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.别给自己太大压力,先保住发际线再说。
学习记录:
10月--10月15号
1.分布式事务解决方案。
2.《重构 改善既有代码的设计》
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服务熔断和降级。