zoukankan      html  css  js  c++  java
  • java后端学习记录

    学习计划

    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。分布式存储。分布式锁。
    边实战边理解原理。最重要的是理解原理。用过很多框架,但是不懂原理,那也是无用的。(★★★★)
    学习技术时,多问几个为什么。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权威指南》
    微服务:《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.刻意学习。

    思维

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

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

    心理

    1.焦虑是没有用的。只会影响学习效率。Enjoy Coding。知之者不如好之者,好之者不如乐之者。
    2.别给自己太大压力,先保住发际线再说。哈哈

    学习记录:

    2020年4月-7月:
    1.坚持LeetCode刷题。
    刷题先刷重点: https://blog.csdn.net/weixin_38118016/article/details/90761111

    2020年5--6月:
    1.Tcp、Http、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,参数能够成功解析吗? (可以的。)
    2.条件断点:比如,当for循环比较次数比较多,想让for循环停在指定的第几次循环处。。可以使用条件断点。
    3.异常断点?
    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服务熔断和降级。

  • 相关阅读:
    性能测试工具LoadRunner11-LR之Virtual User Generator 移动app录制
    性能测试工具LoadRunner10-LR之Virtual User Generator 错误处理函数
    性能测试工具LoadRunner09-LR之Virtual User Generator 日志
    解决粘包-简单版本
    关于三级菜单
    Python学习的第二天
    CSS选择器的权重与优先规则
    keydown/keypress/keyup
    APICloud 实现 使用openFrameGroup引入页面后禁止上下滑动
    WampServer 3.0.6 服务器端配置
  • 原文地址:https://www.cnblogs.com/expiator/p/10484064.html
Copyright © 2011-2022 走看看