终于下决心来写一套大型的Java 笔记,不为别的,就是为了强迫自己将整个Java体系梳理清楚,让自己成为内功扎实的Java高级架构师。牛已经吹出来了,不做对不起网友!
经过一个多月的持续规划,现在终于定好了整体的方案。我们来看一下吧:
?这一套博客计划分为十个阶段,每个阶段的内容是如下:
也就是现在这个阶段,最近阅读了很多材料、代码、方案等等,在持续的优化我的内容大纲。这里写的只是整体的,每个专题里还有少则十来个,多则三个多个具体的内容,做这个的目的就是要从整体上梳理清楚Java工程师到底该会哪些,并且哪些必须深入掌握,哪些会用 即可,哪些了解即可等等。
另外,这段时间要将前后端分离的培训系统的基本系统先做出来,只有这个之后,我们后面研究高级专题才有了基础。这个也在进行中。
因此这段时间,写的博客会比较零散,不成体系,这个是在为后面打基础的,欢迎持续关注。
基础不牢,地动山摇,我打算首先用几周时间将Java工程师的必知必会的重要专题进行透彻的梳理,具体内容如下:
专题一:深入理解JVM原理与核心机制
我们首先来征服Java生态的根基——JVM虚拟机。JVM虚拟机(Java Virtual Machine)是Java运行环境的核心组件。这是整个Java生态的核心基础,对其理解深度直接决定了我们能达到的高度。我们主要学习虚拟机的核心原理,包括内存结构、几种垃圾回收器,包括分代、G1和ZGC等垃圾回收器的工作原理。之后一起探讨内存泄露、内存溢出,亿级流量场景设计等重要案例。
专题二:深入多线程与高并发重要机制
多线程(Multithreading)允许多个线程同时执行,从而提高程序的并发性和响应速度。多线程在Java服务和各类组件里几乎无处不在。多线程技术可以用于实现各种并发任务,如数据库访问、网络通信、文件处理等。通过多线程技术,可以充分利用计算机系统的资源,提高程序的性能和效率。我们从多线程的核心原理、JUC、JUC核心工具、多线程四个专题来透彻掌握相关内容。
专题三:深入掌握数据库底层原理与性能优化
内容介绍:MySQL数据库是应用广泛的关系型数据库,它提供了高效的数据存储和查询功能。MySQL数据库具有高性能、高可用性和易用性等特点,广泛应用于各种Web应用中。用好数据库是提高系统性能的重要手段,也是Java程序员必备的技能。我们从索引、优化案例和数据库事务底层原理等多个方面来深入掌握数据库的核心问题。
专题四:http与Tomcat服务器原理进阶
内容介绍:这里我们从无连接的http和有连接的tcp连接两个方面来深入探讨网络相关的问题。HTTP是互联网的基础,它们提供了客户端和服务器之间的通信协议和接口。HTTP是一种应用层协议,它定义了客户端和服务器之间进行数据传输的格式和过程。Web服务则是基于HTTP协议构建的分布式应用程序,它们提供了跨平台的数据交换和协作能力。在Java领域,应用最广泛的Web服务是Tomcat ,我们会深入研究Tomcat的原理与优化策略等核心问题。
专题五:tcp与Netty框架高性能实现
http最大的不足是性能比较差,为了提高性能,在很多框架和方案中都使用tcp方式来进行通信,并通过零拷贝等方式进一步优化其性能,而netty则是这些优化工作的集大成者,因此netty在Dubbo、kafka以及大数据组件等有广泛应用。这里我们也会深入研究tcp的原理、netty的原理与高性能优化策略等问题。
专题六:深入SpringBoot框架原理
SpringBoot为Spring框架提供了便捷的集成和配置,使得开发者能够更快速地构建和部署基于Spring的应用程序,在帮助开发者简化配置、快速开发、快速集成其他技术等方面作用巨大。SpringBoot是Java微服务生态繁荣的重要基础,这里我们一起来研究SpringBoot自动装配的工作原理、运行机制,并以封装tomcat、Mybatis和Dubbo等为例带领大家进行封装实战。
专题七:微服务架构体系与常用组件选型对比
Java微服务生态庞大,相关技术也非常多,本专题我们第二个任务是详细介绍微服务系统的内部结构、常见技术和方案,之后我们按照类别来分析不同方案和技术之间的区别、联系以及选型建议。帮助大家理清微服务架构,并为后面的学习理清学习目标。
上面七大主题是我总结的,不管你做的业务是什么,作为Java工程师都必须要会的。还有什么需要补充的,欢迎评论区评论。
本阶段,我们从零开始实现几个前后端分离的在线培训系统,之所以选择在线培训系统,是因为我主要从事的就是这方面的工作,而且我们大部分人理解相关的业务也比较容易。
我们首先介绍代码绘图的利器plantUML,并在线培训系统设计为例介绍如何将一个复杂的系统逐步落地。
?之后以从零开发线上培训系统为例一起梳理程序员应该熟练掌握的基础技术,最后一部分是设计模式,这是是面向对象编程的精髓,是软件开发中应对复杂问题的一种有效方法。设计模式提供了解决常见问题的现成解决方案,能够帮助开发人员提高代码的可重用性,降低代码的复杂度,提高软件的质量和可维护性。很多同学在学习过程中面临的一大问题是不知道众多模式具体怎么用的,我们不仅学习这些模式的思想,更会介绍在培训系统中是如何使用的,以及在Mybatis开源框架中是如何使用的,带你“理论与实践结合”,真正掌握设计模式。
具体安排如下:
第一步:掌握前后端框架搭建和玩转plantUML流程设计
内容介绍:如何承担一个功能复杂、面向实际应用大型系统,如何从零开始逐步实现?在本阶段,我们就以前后端分离的在线培训系统为例,来介绍如何分析、如何设计、如何一步步实现这样的一个系统。在工作中,我们在分析过程,绘制结构图、流程图是非常有效的手段,但是绘图会耗费我们大量时间,如果采用代码来自动绘图可以大大提高我们的工作效率。这一周,我们首先介绍代码绘图的利器plantUML,并在线培训系统设计为例介绍如何将一个复杂的系统逐步落地。
之后,我们从零开始,为线上培训系统手把手搭一个基本的讲师服务,这个过程中,我们的重点是如何搭建一个功能完备的后台脚手架工程。
第二步:掌握前后端分离项目搭建实战 & MybatisPlus应用能力
这一步,我们主要学习Java程序员必知必会的前端技术、ORM框架Mybatis的集成与使用等等。掌握前后端技术(全栈工程师)是大部分公司对程序员的基础要求,也助于提升我们的就业竞争能力。同时我们还会学习经典的ORM框架—Mybatis,在这个过程中我们以讲师服务为例,手把手从零带领大家实现一个完备的前后端分离的基本web系统。
第三步:课程功能复杂业务剖析和落地
在实际项目中,一个看似简单的服务可能会关联大量的规则、参数以及冗长的流程等等,业务的复杂性经常会远远超出我们的最初的规划,为了满足扩展性、灵活性要求,我们需要做大量的设计,也会花费大量的时间才能完全落地。本章我们就以培训系统中的课时、课程以及两者之间的级联关系等为例讲解如何处理复杂的业务。
第四步:快速掌握设计模式精髓和课程模块优化实战
内容介绍:设计模式是面向对象编程的精髓,是软件开发中应对复杂问题的一种有效方法。设计模式提供了解决常见问题的现成解决方案,能够帮助开发人员提高代码的可重用性,降低代码的复杂度,提高软件的质量和可维护性。很多同学在学习过程中面临的一大问题是不知道众多模式具体怎么用的,我们不仅学习这些模式的思想,更会介绍在培训系统中是如何使用的,以及在Mybatis开源框架中是如何使用的,让你“理论与实践结合”,真正掌握设计模式。
高并发、高可用、高扩展的系统设计是现代互联网应用中非常重要的问题,也是线上培训系统的重要要求。本阶段我们从多级缓存方案、多层网关方案、RPC高性能通信(Dubbo)方案,以及sentinel熔断与限流方案等方面进行深入讨论,并以此为基础详细分析如何实现满足“三高”要求的大型线上培训系统。
第一步:掌握多级缓存优化方案实战
多级缓存是提高系统性能的有效手段,多级缓存主要是本地缓存、redis缓存以及Nginx缓存。本地缓存就是将数据存放在本地的JVM堆中,具体又有自定义、guava、caffeine、SpringCache等方式,这部分我们首先会分析这几种方式的优缺点以及应用方法。
redis缓存是分布式缓存架构的核心,我们会一起学习如何用好redis,包括redis和数据库缓存一致性方案等问题。
第二步:掌握nginx、Spring Cloud Gateway网关及高性能应用开发
如果一个服务只部署在一台机器上,其承载力终有上限。如果要抗住更高的并发量,可以在多个机器同时部署一个服务,此时如何对响应进行协调就是非常重要的问题,这就是网关的核心作用。一般的大型系统会使用至少两层网关,Nginx层负责基本的请求分发,而服务网关则可以进行更复杂,更细致的功能。这一步我们就来分别学习这两种网关技术的原理以及实战等方面的问题。
第三、四步: 掌握Spring Cloud Alibaba组件 - Dubbo原理与应用、sentinel保障高可用的原理与高阶应用
在SpringCloud Alibaba家族中有两个非常重要的成员——Dubbo和sentinel,前者主要用于微服务之间更高性能的通信,sentinel则采取熔断和限流等措施保证服务的稳定性。这两个技术是我们建设高性能微服务架构的重要组成部分, 我们就一起来深入研究相关问题和实战方法。
如果一个服务只部署在一台机器上,其承载力终有上限,如果要抗住更高的并发量,可以在多个机器同时部署一个服务。在前面我们介绍了网关可以完成该工作,但是前面的内容只针对http方式,而对于微服务之间的高性能通信、协同、选择主结点等问题,我们还需要更合适的技术方案,这就是服务治理要做的事情,本阶段我们重点学习以nacos、Zookeeper为核心的服务治理方案设计。
另外,redis本身就支持集群化部署与协同,因此本阶段我们也会深入学习redis集群的问题。
最后,由于我们搭建集群需要部署和启动多个相同的服务,为了方便实战,我们使用docker来进行,因此本阶段,我们会首先学习docker技术以及服务编排方法,之后学习redis集群的问题,最后学习以nacos和Zookeeper为核心的服务治理方案设计。
第一步:Docker集群
由于我们搭建集群需要部署和启动多个相同的服务,大部分同学会想到使用vmware等来启动多个虚拟机,但是这种方式对内存要求非常高,一般电脑难易进行。为了方便实战,我们使用更轻量的docker来进行,因此我们会首先学习docker技术以及docker-compose服务编排方法。为后续学习集群打好基础。
第二步:redis集群
redis可以不依赖外部组件,自己来组合成集群,能够处理大量的数据。集群中的每个节点可以独立工作,当集群中有新的请求时,会自动分配到相应的节点上处理。这种集群方式提高了系统的性能和稳定性。在 Redis 集群的实现上,也存在着不同的方案。例如,Redis Cluster 是一种基于 hash 算法的分布式解决方案,它通过节点之间的通信和数据分片,实现了数据的分布式存储和访问。此外,还有一些第三方工具和解决方案,如 Redis-Proxy、Redis-HA 等,也提供了 Redis 集群的实现方式。
既然redis功能如此强大,那它是如何管理集群的,如何解决例如数据分片、节点之间的通信、数据同步,以及结点故障等问题的等等,这些都是我们要学习的重点。
第三、四步: 掌握服务治理架构核心机制
我们将深入学习微服务场景面临的治理方面的问题。在Java领域解决服务治理,多采用Nacos或者Zookeeper来实现,那服务治理具体要解决哪些问题,如何解决,nacos和Zookeeper分别适合什么场景,以及两者的实现原理、如何设计灵活且合理的服务治理方案扥扥的都是我们关心的问题。
这里,我们就分别从nacos和Zookeeper两个方面来学习和实战。
第五步:亿级场景下集群协作的核心问题 - 分布式锁的原理与使用
分布式锁是一种用于协调分布式系统中的多个节点之间的操作的技术,它能够保证在多个进程或线程之间对共享资源的互斥访问,避免出现竞态条件和数据不一致的问题。这里我们分别从分布式重入锁、公平锁、读写锁、以及并发工具Semaphore和CountDownLatch几个需求来讲解如何设计和使用分布式锁。目前实现分布式锁基本都需要借助redis或者Zookeeper,这里我们也会必要的时候分别介绍如何使用这两种工具来完成同一个锁方案。
在众多Java后台系统,经常要存储大量的信息,例如用户行为记录信息、各种状态信息等等,这些信息对于处理故障、分析业务发展趋势、用户行为具有很高的价值。如何有效存储和使用这些数据也是需要解决的重要问题,由于在数据库中单表存储数量有限,针对海量数据的场景,一般采取分库分表的方案。为了实现分库分表管理,我们需要解决主键的唯一ID生成、水平切分、垂直切分等问题,这些都是本阶段我们学习的重点。
另外,在海量场景下往往对应着海量的请求,而服务处理的速度也是有上限的,为此经常采用异步方式先缓存部分消息,之后逐步处理,这就是异步系统架构设计的基本原理。采用异步方式也可以实现“削峰填谷”等功能,目前应用最广的异步组件有RocketMQ和Kafka,这一部分我们也一起来学习这两个组件的原理以及应用方面的问题。
第一步:海量数据处理方案 - 分库分表方案设计与落地
在众多Java后台系统,经常要存储大量的信息,例如用户行为记录信息、各种状态信息等等,这些信息对于处理故障、分析业务发展趋势、用户行为具有很高的价值。如何有效存储和使用这些数据也是需要解决的重要问题,由于在数据库中单表存储数量有限,针对海量数据的场景,一般采取分库分表的方案。为了实现分库分表管理,我们需要解决主键的唯一ID生成、水平切分、垂直切分等问题,这一部分我们就重点来学习如何实现一个完备的分库分表方案。
第二、三步:异步处理方案 - RocketMQ从搭建到在线系统落地,Kafka从入门到应用
在海量场景下往往对应着海量的请求,而服务处理的速度也是有上限的,为此经常采用异步方式先缓存部分消息,之后逐步处理,这就是异步系统架构设计的基本原理。采用异步方式也可以实现“削峰填谷”等功能,目前应用最广的异步组件有RocketMQ和Kafka,这部分我们也一起来学习这两个组件的原理以及应用方面的问题。
第四步:XXL-Job任务调度在线培训实战开发
分布式任务调度平台是一种用于管理和调度分布式系统中的任务的工具。它提供了一系列的功能和工具,用于解决大规模分布式系统中的任务调度问题,如任务的分布式部署、任务间的依赖关系、任务的监控和告警等。目前XXL-Job是应用广泛的轻量级分布式调度平台。其使用也非常简单,这里我们一起来学习并用到培训系统中。
?
第五步:ElasticSearch从入门到高性能搜索落地
对于课程类别等数据量大、结构复杂,并且请求频繁的数据,如果我们每次都从数据库获得,性能会非常差,也会大大增加数据库的负担,为此我们可以采用更适合的方案——Elasticsearch 。这是基于 Lucene 构建的开源、分布式、RESTful 搜索引擎。它提供了搜索和分析功能,可以快速、准确地查询大量数据。Elasticsearch 还提供了丰富的查询语言和聚合功能,可以轻松地处理大规模数据并生成高质量的搜索结果。Elasticsearch 还支持与其他系统集成,如 Apache Kafka、Kubernetes、Logstash 等,以满足不同场景的需求,这里我们一起来学习和使用。
本阶段我们重点学习如何实现一个功能完备、安全可靠的订单系统。首先我们会学习如何实现一个基本的购物车和订单服务,之后从异步方案、异常处理等方面详细介绍如何设计安全可靠的订单系统;之后我们一起学习如何实现微信支付和支付宝支付。
在微服务环境下,分布式事务是需要考虑的问题。由于分布式事务会影响系统的性能 ,因此对于大部分场景,我们会通过无状态设计等避免使用分布式事务,但是在支付场景,我们必须保证金额等关键数据的高度准确 ,因此我们本解决也会详细讨论分布式事务的设计与落地方案等问题。
第一步:订单服务模块从设计到复杂业务开发落地
内容介绍:本阶段我们重点学习如何实现一个功能完备、安全可靠的订单系统。首先我们会学习如何实现一个基本的购物车和订单服务,之后从异步方案、异常处理等方面详细介绍如何设计安全可靠的订单系统。
第二步:玩转微信支付和支付宝支付
在国内,购物时支持微信支付和支付宝支付几乎是所有系统的必备功能,这部分我们首先来讲解接入这两家平台的原理和协议,之后详细介绍如何实现。
第三步:Spring、Seata分布式事务进阶实战
在微服务环境下,分布式事务是需要考虑的问题。由于分布式事务会影响系统的性能 ,因此对于大部分场景,我们会通过无状态设计等避免使用分布式事务,但是在支付场景,我们必须保证金额等关键数据的高度准确 ,因此我们本解决也会详细讨论分布式事务的设计与落地方案等问题。
在线视频是线上培训系统的必备功能之一。不过视频系统技术难度非常高,而且对实时性等要求也非常高,如果出现视频花屏、音视频不同步等问题会极大影响学员的学习体验,为此很多公司会首先采用云厂商提供的服务,之后再考虑是否自建。不管哪种 ,作为研发工程师,我们都应该对视频和视频服务的架构有比较好的理解。这部分我们首先用比较多的篇幅详细介绍数字图像的基本原理,然后介绍图像如何通过编码变成视频的,之后是视频如何进行传输和存储的。这里还包含了视频编码标准、视频封装、ffmpeg使用、摄像机推流、视频播放等相关问题。
之后我们分别讲解视频的点播和直播两类系统分别是如何进行设计和实现的。
作为研发工程师,我们都应该对视频和视频服务的架构有比较好的理解。这部分我们首先用比较多的篇幅详细介绍数字图像的基本原理,然后介绍图像如何通过编码变成视频的,之后是视频如何进行传输和存储的。我们重点学习数字图像原理、视频编码标准、视频封装、ffmpeg使用、摄像机推流、视频播放等大量基础问题。
之后,我们一起学习如何建立功能完备的视频点播系统。最后,我们一起来研究直播系统是如何搭建的。
我们前面的内容都是在讲培训系统如何为用户提供丰富并且可靠的服务,在实际工作中,我们还要为系统提供很多基础支撑,例如持续发布方案、请求链路追踪方案、实时报警系统、实时监控系统,日志管理系统等等。这些系统可以大大提供我们的开发效率和解决问题的速度,本阶段我们重点看持续发布方案,我们从建设K8s集群、Jenkins持续发布系统和服务上云等三个方面来学习。
K8s是一个开源的容器管理平台,用于部署、扩展和管理容器化的应用程序。它提供了一个分布式系统,用于部署、管理和调度容器化的应用,并支持自动化部署、扩展和管理集群中的容器化应用。Kubernetes还提供了许多功能,如资源管理、服务发现、负载均衡、故障恢复等,以提高应用的性能和可靠性。
Jenkins是一个开源的持续集成工具,用于自动化构建、测试和部署软件应用程序。它提供了一个易于使用的界面,用于创建和管理构建、测试和部署作业。Jenkins可以通过Kubernetes集群进行部署和管理,以便在集群中自动化地执行构建、测试和部署任务。
服务上云在线系统实战是指将传统的后台服务迁移到云端,并在云端实现自动化的部署和管理。通过Kubernetes和Jenkins等工具,可以实现服务的快速部署、扩展和优化,同时也可以降低运维成本和提高服务质量。此外,还可以通过Kubernetes实现微服务架构,将应用程序拆分为多个独立的微服务,并使用Kubernetes对每个微服务进行容器化管理,从而实现更灵活、可扩展的应用程序部署和管理。
这里我们首先学习K8S集群相关的问题,K8S是强大的构建集群的工具,掌握之后对学习其他类型的集群以及云原生都有很大的作用,之后我们介绍如何搭建Jenkins集群。最后我们介绍如何在阿里云发布我们的系统。
随着以大模型为代表的人工智能技术蓬勃发展,AI技术也在逐步丰富线上培训系统的功能和学习效果。例如可以对学生的考试成绩和作业进行数据分析,找出学生的薄弱环节,进而调整教学方案;可以自动生成适合学生的在线课程材料,减少人工编辑的时间和成本;还可以利用AI技术进行个性化推荐,根据学生的学习历史和兴趣爱好,推荐相关的学习资源和学习路径,提高学生的学习积极性和学习效果等等。总之,AI技术在培训系统中的应用与实战,可以提高教学的个性化、精准性和效率,为教育行业带来更多的创新和变革。在最后一个阶段,我们就来看一下如何将ChatGPT集成到培训系统中,并且使用ChatGPT来完成生成题目解析等功能。
可以看到这个博客体系之庞大、内容之丰富超过我的预期。如果能完全实现,可以说,能够极大提高我的架构能力,
目前计划在2024年6月前后将前五个阶段必须完成 ,第六个阶段尽量完成。在2024年11月之前,将所有内容完成。
为了不被别人卷倒,那就只能拼命卷别人!
各位,跟我一起卷起来吧!