前言
相信很多同学在学习Java技术体系的过程中,总会被以下几个问题困惑住:
-
Java技术体系这么庞大,我该学什么呢?
-
学完之后很多都不会用到,然后过不了多久就忘记了,该怎么去学呢?
-
即使CRUD写的非常溜,而且也学过一些技术的底层,但是就是不会做架构,达不到架构师的水准
-
随着年龄不断的增长,技术并没有得到正相关的增长,那年纪大了之后会越来越没有竞争力,自身也越来越焦虑,怎么办呢?
针对这些问题怎么去解决呢?其实最开始我们要树立起自己最终的目标:情商高,有管理能力,有协调能力,有非常好的沟通能力,当然也有一些关系的可以选择往管理这条路发展。
但是如果没有以上这些才能的同学就要知道,你要不然在35岁之后选择转行,要不然就老老实实的扎根技术这条路走到黑,技术这条路也有岔路口的,一条就是架构师,一条就是技术专家。在这里先讲一下个人对这两条岔路的理解,架构师的基础技能就是对Java技术体系有一个整体的把控,自己有建立起自己的技术体系,能明确在某个模块中用到什么技术,且可以独立搭建架构,不存在过多的知识断层。而技术专家更多的是深耕某一块技术,比如你对MQ掌握的非常透彻,针对MQ的出现的极端情况,你都能解决,那也不错。
-
OK,路选好了,接下来就是明确该学什么了?下面我给了一副图,这大体的涵盖了我们的java技术体系,分为6个步骤去学,后面我也会针对不同的级别学什么做详细介绍。
-
知道要学什么了之后,那怎么去学呢?按照我自己的经验来说,因为我也做过多年的开发了,有丰富的CRUD经验,对各种技术的应用还是得心应手的,这是我的个人基础;那我在学习过程中整体实际上是花了4个月时间的,每天晚上抽出3个小时去逼着自己将整体技术过了一遍,在这个过程中不需要你跟着敲代码,也不需要你去记住各种API,因为这些网上都是能查到的。那在这4个月时间里面,我只明确3点:
-
这个技术是干什么的?
-
知道它大体是怎么用的?
-
明确它在解决某个问题的时候又会出现什么问题?
说白了就是将技术串成一根线,每个技术的出现都是为了解决某个问题的:它是什么——>它解决了什么问题——>在解决问题的过程中又会引出什么问题——>然后又是怎么解决的,不断的问题自己问题。
在这4个月时间里,虽然学的一些东西后面又忘记了,但是我养成了一个好习惯,学会不断的问自己问题了,而且在学的过程中通过思维导图将所有的技术点又串了一遍,所以即使忘记了,再回过头来看,很容易又能回想起来。
-
-
接下来再要往更高层次走,如果你有3年以上的工作经验,且也花了4个月时间去过了整个技术体系,那接下来再通过2个月时间去理清楚几个比较重要的模块的核心思想,例如spring、springboot、SpringCloud、MySQL、Redis、MQ、Netty、JVM、设计模式、Dubbo。这些内容的核心思想其实都来源于生活,你能用最通俗的概念去理解,那才是真正学会了。
-
后面两个问题其实在你技术很牛的时候都很容易解决,当你成为一个不可或缺的人,那自然而然不存在35坎这一说法。
接下来本文将详细描述一下不同级别的程序员该学哪些知识。同时也会预告作者后面将会分享哪些技术的文档。
第1章 基础篇——零基础必须学会
-
JavaSE是基础(推荐学千锋教育的java基础,作者之前是学的别的机构的,但是千锋教育的java基础还是不错的)
-
掌握Java的基本语法
-
掌握Java的数据类型
-
熟练使用循环、条件等语句
-
明确final、abstract、static三个关键字
-
明确封装、多态、继承的概念
-
懂java的反射机制(这个不懂,后面很多代码你都看不懂)
-
文件io
-
第2章 进阶篇——初中级开发必须达到
工作1到3年的小伙伴要会的内容
-
MySQL——(这一阶段你只要会用,面试的时候能背一些概念就好了)
-
会写常用的SQL语句
-
知道java怎么去操作连接MySQL,并执行SQL语句(jdbc完成的)
-
掌握在java里面直接写SQL,然后MySQL去执行(Mybatis框架完成)(MyBatis也是走入职场的必备知识,网上也有教程)
-
会安装MySQL,也会使用客户端去连接(作者用的客户端是Navicat)
-
-
熟练使用Spring+SpringMVC+Mybatis框架
-
说白了,知道三层思想就完事了
-
视图层:就理解成前端页面就好了
-
业务层:就是前端页面发请求过来,后台接收到这个请求,然后执行自己的业务
-
持久层:跟数据库打交道的
-
-
这个过程中有个非常重要的内容——spring(这是整个java体系中最最最重要的东西,没有之一,但是这个东西里面的内容非常之多,扩张性非常之强,要真正能吃透他,处于中级阶段的开发者根本不太可能,这快内容,作者后面也会分享文章帮助大家理解)
-
-
因为spring太笨重,springboot现在用的越来越多,所以要会用springboot(这块内容见四篇文章玩转springboot系列)
-
使用就简单了,只要引包,就能拿到对象去使用
-
当然这个过程中要明确springboot在spring的基础之上到底作了什么
-
-
Redis+MQ+Tomcat+Nginx
这些内容在初期,你会用就好了,无非就是你们公司的架构师已经将这些组件集成到你们框架里面来了,然后你会使用api,api的使用自己百度
第3章 高级篇——高级和架构适用
当你已经工作三年或者以上的时候,如果不想再一天到晚写CRUD了,也想走架构或者技术专家这条路的时候,可以来看看
-
设计模式(后面也会发表文章,尽请期待)
-
这是架构师必备技能,这个都不会,那你设计的框架其实也不值钱
-
不需要去背,只要掌握常用设计模式的思想就好,知道不同的设计模式该用在什么场景下
-
-
spring的核心原理(后面也会发表文章,尽请期待)
-
常用注解
-
IoC的工作流程
-
DI的核心思想
-
AOP的重要功能及思想
-
bean的一生走过哪些阶段
-
存在哪些扩展机制
-
-
springboot的核心原理(这块内容见四篇文章玩转springboot系列)
-
核心解决两个问题——外部化配置的统一管理,简化Bean对象注入IoC容器的过程
-
-
SpringCloud(这块内容很多,alibaba和Netflix我都会分享文章,尽请期待)
-
知道springcloud到底是什么
-
它是如何实现服务之间的通信的——Openfeign或者Dubbo
-
如何实现负载均衡的——Ribbon、Dubbo
-
如何实现服务注册的——Nacos、Eureka
-
如何实现配置中心的——Nacos、config(这个模块功能不强,还需要依赖Kafka等组件,所以最终肯定会淘汰,所以不分享这块)
-
如何实现限流熔断的——Hystrix、Sentinel
-
如何实现分布式事务的——Seata
-
如何实现网关的——Gateway
-
如何实现鉴权的——OAuth2
-
如何实现链路追踪的——Sleuth+twitter zipkin
-
-
Redis——分布式缓存(后面也会发表文章,尽请期待)
-
知道如何使用
-
理解Redis的5种常见数据类型及使用场景
-
明确Redis如何持久化数据的,为什么快
-
过期策略有哪些,淘汰策略有哪些
-
如何应对极端场景——缓存雪崩、缓存击穿、缓存穿透
-
-
MQ——掌握一种就好,例如RabbitMQ(后面也会发表文章,尽请期待)
-
理解AMQP协议是什么
-
RabbitMQ的作用是什么
-
串成一根线,数据从生产者到消费者流通过程中,如何保证数据可靠的、如何保证数据一致的、如何保证数据不重复的
-
数据的走向一清二楚时,MQ就没问题
-
-
MySQL(后面也会发表文章,尽请期待)
-
MySQL的架构是怎么样的
-
存储引擎是什么?有哪些
-
索引是什么?底层数据结构是什么
-
三大日志是干什么的
-
事务及隔离级别有哪些
-
如何进行优化
-
-
网络通信Netty(这块内容作者也没学,后面学完再分享
-
JVM(后面也会发表文章,尽请期待)
-
八股文的内容要理解
-
知道如何进行调优
-
总结
这篇文章主要是提供一个学习的路径,各位同学也可以跟着作者一起来学习,后面也会陆陆续续将作者自己学习过程中总结的文章分享出来,知识是死的,现在网上免费资源遍地都是,关键是要明确自己的目标,掌握自己的学习方法,用最直白的思想去理解复杂的技术;学完这些,架构师该掌握的能力就差不多了,接下来就是实战环节。后面作者也准备了一个云商城的实战项目,会从最开始的需求文档到最后的落地都整理成文档进行分享。