# Javatv | 本站知识导航 🔥

知识导航

# 计算机基础

如果找出各大学计算机系的培养计划,你会发现,它们都有差不多十来门核心课程。其中,计算机组成原理是入门和底层层面的第一课。

这是为什么呢?我们直接用肉眼来看,计算机是由 CPU、内存、显示器这些设备组成的硬件,但是,计算机系的学生毕业之后,大部分却都是从事各种软件开发工作。显然,在硬件和软件之间需要一座桥梁,而计算机组成原理就扮演了这样一个角色,它既隔离了软件和硬件,也提供了让软件无需关心硬件,就能直接操作硬件的接口。

也就是说,你只需要对硬件有原理性的理解,就可以信赖硬件的可靠性,安安心心用高级语言来写程序。无论是写操作系统和编译器这样的硬核代码,还是写 Web 应用和手机 App 这样的应用层代码,你都可以做到心里有底。

除此之外,组成原理是计算机其他核心课程的一个导引。学习组成原理之后,向下,你可以学习数字电路相关的课程,向上,你可以学习编译原理、操作系统这些核心课程。如果想要深入理解,甚至设计一台自己的计算机,体系结构是必不可少的一门课,而组成原理是计算机体系结构的一个入门版本。

# Java (opens new window)

本职工作,由前期的 CRUD 进阶,如 JDK 常用类的源码学习,再到 JVM,并发编程等等。

# Spring (opens new window)

为什么使用

面向 Spring 编程,目前市面大部分系统都是基于 Spring 搭建的,由 Spring MVC 到 Spring Boot 再到 Spring Cloud,都有一套成熟的解决方案。如下:

  1. 方便解耦,便于开发(Spring 就是一个大工厂,可以将所有对象的创建和依赖关系维护都交给它管理);
  2. 支持 AOP 编程(spring提供面向切面编程,可以很方便的实现对程序进行权限拦截和运行监控等功能);
  3. 声明式事务的支持(通过配置就完成对事务的支持,不需要手动编程);
  4. 方便程序的测试,Spring 对 junit4 支持,可以通过注解方便的测试Spring 程序;
  5. 方便集成各种优秀的框架;
  6. 降低 JavaEE API 的使用难度(Spring 对 JavaEE 开发中非常难用的一些 API,例如 JDBC,javaMail,远程调用等,都提供了封装,使这些 API 应用难度大大降低)。

为什么要阅读源码

《Java编程思想》中说道:编程语言是程序员的表达的方式,而架构是程序员对世界的认知。

因此读源码有三问:

  1. 为什么要有这样的架构
  2. 他是什么样子的
  3. 他是怎么工作的

我们知道源码都是一些大师级的人写的,无论是他们对问题的抽象,代码的规范,设计模式的运用等都是教科书级的,我们可以从源码中学到他们是怎么思考问题,怎么去抽象,怎么去设计接口等等,然后我们试着的学以致用。

# 中间件 (opens new window)

中间件是什么

中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。

执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或 OS 环境。

中间件是介于操作系统和应用软件之间,为应用软件提供服务功能的软件,有消息中间件,交易中间件,应用服务器等。由于介于两种软件之间,所以,称为中间件。

为什么使用中间件

具体地说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。

中间件带给应用系统的,不只是开发的简便、开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。

常用基础中间件

  • 路由与 Web 服务器:处理和转发其他服务器通信数据的服务器。 如被业界广泛使用的阿里基于 Nginx 研发的 Tengine、阿里内部的集中式路由服务 VipServer。
  • RPC 框架:微服务时代的远程服务调用框架。如 grpc,Thrift,阿里的 HSF,Dubbo。
  • 消息中间件:支持在分布式系统之间发送和接收消息的软件。 如 Apache kafka,Apache RabbitMQ,RocketMQ
  • 缓存服务:分布式的高速数据存储层,一般是内存存储。如 Redis,Memcached,Ehcache
  • 配置中心:用来统一管理各个项目中所有配置的系统。如阿里 Nacos、携程 Apollo
  • 分布式事务:事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。 如阿里 seata
  • 任务调度:分布式环境下提供定时、任务编排、分布式跑批等功能的系统。如 xxl-job、当当 elastic-job
  • 数据库层:用于支持弹性扩容和分库分表的 TDDL,数据库连接池 Driud,Binlog 同步的 Canal 等。

# 网络协议 (opens new window)

计算机网络学习的核心内容就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集是不同的,两者需要进行通信,必须要在一定的标准上进行。

# 微服务

微服务架构 4 个核心问题:

  • 服务很多,客户端该怎么访问?
  • 这么多服务,服务之间如何通信?
  • 这么多服务,如何治理?
  • 某个服务挂了怎么办?

解决方案

Spring Coud,它是一种生态!它是基于 SpringBoot 构建的它落地的流行实现有以下三个:

  1. Spring Cloud NetFlix 一站式解决方案!(但目前 NetFlix 停更但不停用)

    API 网关:zuul 组件

    Feign:它是基于HttpClient的,也就是基于Http的通信方式:同步阻塞的

    Eureka:服务注册与发现,就是来服务治理的

    Hystrix:熔断机制,某个服务挂了采用的机制

  2. Apache Dubbo Zookeeper 半自动,需要整合别人的东西!

    API 网关:没有,需要找第三方组件,或者自己实现

    Dubbo:RPC 框架,用于服务间通信(很专业)

    Zookeeper:服务注册与发现

    熔断机制:没有,可以借助Hystrix组件

    可以得出个结论:Dubbo这个方案并不完善,但一般使用 Dubbo 作为 RPC 通信,即对内 RPC

  3. Spring Cloud Alibaba 最新的一站式解决方案! 更简单

万变不离其宗:

  • API 网关解决服务路由
  • HTTP,RPC 解决服务通信
  • 服务注册与发现,实现高可用
  • 熔断机制,解决服务挂了的问题,也就是服务降级

本质原因:网络不可靠

# 分布式解决方案 (opens new window)