expiator

java后端学习记录

学习计划

1.学习计算机基础,并加以实践。包括LeetCode刷题、数据库原理(索引和锁、Sql优化等)、网络协议(Http、Tcp)、操作系统(加深Linux)。《Http权威指南》、《操作系统设计与实现 》(重点!)

2.巩固java基础。重点加深多线程、并发、Jvm、NIO。多温习《深入理解Java虚拟机》(重点!)

3.阅读Spring源码,Mybatis源码,一边读源码学英语,一边体会设计模式,一举三得。可以配合博客、书籍去理解源码。(重点!)

4.提高技术深度。包括微服务SpringCloud的熔断、降级、网关等原理。

《Redis的设计与实现》,《Mysql技术内幕》(主从、分库分表等)。

消息队列Kafka的细节及原理。加深理解分布式事务和分布式一致性。

先学工作中用到的。多写Demo,多记笔记。

学习一门技术,一定要明白技术的应用场景(是为了解决什么问题?)以及技术的原理(如何解决问题?)

5.拓展技术广度。开始了解网络通信Netty,搜索引擎ElasticSearch。

后端怎样才能进入顶尖的大公司?

1.每周刷几道LeetCode。大公司对算法要求比较高。还可以在牛客网刷《剑指offer》,重点学习经常考的题目。

刷题就跟以前中学时做数学题一样,解出题目,得到反馈,很有成就感。

刷题的套路,也看算法文章。比如公众号: labuladong 。还有算法的pdf文章《labuladong的算法小抄》。

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。分布式存储。分布式锁。

边实战边理解原理。最重要的是理解原理。用过很多框架,但是不懂原理,那也是无用的。(★★★★)

学习技术时,多问几个为什么。What,When,Where,Why,How。

比如学习Redis,就得知道Redis常用数据结构、Redis事务、备份方式、回收策略、主从同步、哨兵模式,Redis集群。

阅读spring、springMvc等框架源码、或者是其他第三方库源码。Spring源码主要是体会设计模式的运用。

4.其他进阶知识:linux、mongodb、nginx、netty、tomcat、sql优化 (★★★★)

学习资料:

java后端架构师技术图谱

Java 工程师进阶知识完全扫盲

【Java学习+面试指南】

书籍:

java语言:《java编程思想》、《Effective Java》、《码出高效》、《Java性能优化权威指南》、《java并发编程实战》、《深入理解Java虚拟机》、《Java 8实战》

SSM:《Java EE互联网轻量级框架整合开发 SSM框架》、《精通Spring企业应用开发实战》、
设计模式:《Head First 设计模式》、《大话设计模式》

架构:《大型分布式网站架构设计与实践 》、《大型网站技术架构:核心原理与案例分析》、《大型网站系统与Java中间件实践》、《领域驱动设计:软件核心复杂性应对之道》

分布式中间件:《从Paxos到Zookeeper 分布式一致性原理与实践》、《Redis设计与实现》、《Redis开发与运维》、《kafka实战》、《kafka权威指南》、《Elasticsearch 权威指南》

微服务:《SpringCloud微服务实战》

网络 :《图解Http》、《HTTP权威指南》、《tcp/ip详解 卷一、二、三》、《网络是怎样连接的》、《图解Tcp/ip》

数据库:《mysql必知必会》、《MySQL技术内幕 InnoDB存储引擎》、《高性能MySQL》

操作系统:《linux鸟哥的私房菜》

计算机组成原理:《深入理解计算机系统》、

代码规范:《阿里巴巴java开发手册》、《代码整洁之道》、《重构 改善既有代码的设计 》、《软件调试修炼之道》

软件工程:《敏捷开发修炼之道》

其他:《程序员修炼之道》、《码农翻身》、《代码大全》、《人月神话》、《黑客与画家》

学习方法:

更多的学习方法见: 如何学习java
0.每周完成一个 ARTS。

每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tip、Share 简称 ARTS)坚持至少一年。阅读英文技术文章,这个我经常忘记。感觉可以读读官方的文档。

1.项目驱动型学习。

项目经验!!以战养战!动手做项目!

做Side Project。或者参与开源的项目。

Learning By Doing。编程是一门需要大量实践的技能。

只有亲自动手做,才能掌握技术。没有动手做,就算看十遍也不一定会理解的。

先模仿后创新。模仿优秀的代码。积累代码块。

写十万行代码,积累常用的可复用的代码块。刻意学习,不断纠错提高。

将学习到的新技术,运用到实际项目中。

将项目放到GitHub,坚持commit。。

2.问题驱动型的学习方法。

带着问题去看书,去学习。如果功利一点,也可以带着面试题的疑问去看书。

如果看书的时候,不懂得提出问题,没有思考,没有质疑,那看书就毫无意义。

比如当工作中或者面试时遇到问题都可以记录下来,然后带着这些问题去学习。

3.个人驱动型的学习方法。

明确的目标,何时何地要完成什么目标。比如,两年后,加入一家互联网大厂,专注后端。

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.刻意学习。

思维

  • 程序猿最重要的是解决问题的能力。

  • 发现(复现)问题--分析问题--查找资料--提出方案--尝试方案--解决问题。

目标

  • 30岁,P7,T10。

心理

  • 焦虑是没有用的。只会影响学习效率。Enjoy Coding。知之者不如好之者,好之者不如乐之者。

  • 别给自己太大压力,先保住发际线再说。哈哈

  • 以前没有好好学习,现在落后了很多,怎么办?

往者不可谏,来者犹可追~

人生是一场马拉松,现在开始还来得及。

  • 害怕挫折,一直失败,很难受,怎么办?

“尽人事,听天命”,只要拼尽自己的全力,哪怕最后失败也没关系。

学习记录:

刷题先刷重点: https://blog.csdn.net/weixin_38118016/article/details/90761111

2021/04--2021/06

  • ES官方文档

2020年9月15--2020年10月8号

  • Dubbo、Kafka、Es实践。

  • Linux实践。复习Git。

  • 牛客网sql。LeetCode。

  • 开源项目mall。

  • MapStruct。

2020年9月1号--9月15号

  • 排序算法

  • 面试错题。

2020年9月
1.复习一下DTO转DO。

2.复习一下Spring的Transactional。
2020年4月-7月:
1.坚持LeetCode刷题。

2020年7月

1.linux。问题定位与分析。cpu、io、进程、网络、端口。内存泄露等。

2.《图解TCP》、《图解HTTP》。

3.算法。回溯法?全排列?

2020年5--6月:

1.Jvm。

2.Kafka最佳实践。

2020年1月--3月:

1.Spring/SpringBoot、Jvm、Kafka面试题。《kafka权威指南》

2.理解面试错题。

2020年2月15号:

1.动态规划。刷题。

2019年12月:
1.AQS、线程池、ReentrantLock源码。

2.总结项目经验。

11月1号--11月15号

  1. 消息队列Kafka,对比其他MQ的细节及原理。

2.加深理解分布式事务和分布式一致性。

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,参数能够成功解析吗? (可以的。)

4月1号-4月15号
1.深入学习一下Http的请求头、响应头、状态码等参数。

3月20--3月31号
1.一周做一道算法题。还是有点少。删除有序链表的重复节点时。

2.看《SpringCloud微服务实战》,并做笔记。

3月10号--3月16号
2.学习一下jenkins怎么用。

3.FeignClient进行声明式服务消费。

4.添加Hystrix断路由。
3月6--3月10号
1.主要温习一下工作中常用的基础知识。

2.Mybatis多表查询、手写比较复杂的Sql、Mybatis-plus

3.linux安装mysql、tomcat、nginx。

4.SpringCloud服务熔断和降级。

分类:

技术点:

相关文章: