- 博客(18)
- 收藏
- 关注
原创 java多线程与并发
java多线程与并发问题:1、多线程的出现的出现是为了解决什么问题的?2、多线程不安全是指什么?3、并发出现线程不安全的本质是什么?可见性,原子性和有序性?4、Java是怎么解决并发问题的? 3个关键字,JMM和8个Happens-Before5、线程安全是不是非真即假? 不是6、线程安全有哪些实现思路?7、如何理解并发和并行的区别?一、并发的三个重要特性——可见性、原子性和有序性可见性:CPU缓存引起,由于CPU进行运算时,都会将数据读入CPU的高速缓存中,多个CPU的高速缓存数据不同
2021-12-13 11:06:45
213
原创 ConcurrentHashMap学习
ConcurrentHashMap学习主要针对JDK1.8的ConcurrentHashMap进行分析,同时对比HashMap还是从get、put、remove方法入手进行分析对于get方法首先了解CAS和UnSafe类1、CAS和UnSafecas操作简单来说就是在写入值的时候,会记录旧值,插入前对比现有的值和旧值,如果旧值和现在的值相同则直接更新,否则不更新cas操作存在一些问题:1、ABA问题:简单来说就是有操作更新了A为B,然后又更新为A,此时cas操作会认为当前的值没有发生改变。当然
2021-12-13 11:05:38
331
原创 HashMap学习
HashMap的源码主要包含三个重要的方法(get、put、remove)get方法解析public V get(Object key) { //e:查找到的节点 Node<K,V> e; //如果节点为空则返回null,否则返回该节点的value值 return (e = getNode(hash(key), key)) == null ? null : e.value; }补充说明:①、在大部分源码中,都会将接口方法写的简单,而将具体的处理交给其
2021-12-13 11:05:07
334
原创 TreeMap学习
树节点——TreeMap的节点结构static final class Entry<K,V> implements Map.Entry<K,V> { K key; V value; Entry<K,V> left; Entry<K,V> right; Entry<K,V> parent; boolean color = BLACK; Entry(K key, V value, En
2021-12-13 11:04:34
575
原创 spring源码学习
=Spring源码分析(基于4.3.16反编译代码)一、容器基础spring源码分析,主要从xmlBeanFactory入手。创建测试bean,写死其name属性public class TestBean { private String name = "test"; public String getName() { return name; } public void setName(String name) { this.na
2021-12-13 11:03:54
290
原创 注解入门学习
在介绍注解之前,提出几个问题,后面的内容也会围绕着这几个问题解答。1、什么是注解?注解是类or接口?注解主要分为哪几类?2、注解可以干什么?注解是如何生效的?3、什么是注解处理器?如何实现自定义注解?一、什么是注解?1、Java1.5中对注解的定义 注解在Java的1.5版本引入,其定义为提供一种元数据中的元素关联任何信息和任何元数据的途径和方法,简而言之就是为类、方法、字段等Java结构提供额外信息的一种机制。2、注解是类or接口?在编辑器中,可以创建类、接口、枚举和注解等类型的
2021-12-13 11:02:12
493
原创 12-学完dubbo补充知识
补充知识1、自定义标签1.1、自定义标签的使用1、定义一个Beanpackage com.example.custom;public class User { private String userName; private String email; public String getUserName() { return userName; } public void setUserName(String userName) {
2021-12-13 11:00:51
331
原创 11-Dubbo初学-服务调用
服务调用学完了所有的基础知识,终于可以看服务调用的过程了,可以说是对之前学习的各个部分知识的一个串联。Dubbo 服务调用过程比较复杂,包含众多步骤,比如发送请求、编解码、服务降级、过滤器链处理、序列化、线程派发以及响应请求等步骤。通过一张图了解 Dubbo 服务调用过程首先服务消费者通过代理对象 Proxy 发起远程调用,接着通过网络客户端 Client 将编码后的请求发送给服务提供方的网络层上,也就是 Server。Server 在收到请求后,首先要做的事情是对数据包进行解码。然后将解码后的请
2021-12-13 11:00:19
754
原创 10-Dubbo初学-负载均衡
负载均衡LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载“均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况。通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。在为高负载服务器分流的同时,还可以避免资源浪费,一举两得。负载均衡可分为软件负载均衡和硬件负载均衡。在我们日常开发中,一般很难接触到硬件负载均衡。但软件负载均衡还是可以接触到的,比如 Nginx。在 Dubbo 中,也有负载均衡的概念和相应的实现。Dubbo 需要对服
2021-12-10 15:57:51
154
原创 9-Dubbo初学-集群
服务集群为了避免单点故障,现在的应用通常至少会部署在两台服务器上。对于一些负载比较高的服务,会部署更多的服务器。这样,在同一环境下的服务提供者数量会大于1。对于服务消费者来说,同一环境下出现了多个服务提供者。这时会出现一个问题,服务消费者需要决定选择哪个服务提供者进行调用。另外服务调用失败时的处理措施也是需要考虑的,是重试呢,还是抛出异常,亦或是只打印异常等。为了处理这些问题,Dubbo 定义了集群接口 Cluster 以及 Cluster Invoker。集群 Cluster 用途是将多个服务提供者合
2021-12-10 15:57:14
162
原创 8-Dubbo初学-路由
服务路由上一篇文章分析了集群容错的第一部分 — 服务目录 Directory。服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由,筛选出符合路由规则的服务提供者。服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者。Dubbo 目前提供了三种服务路由实现,分别为条件路由 ConditionRouter、脚本路由 ScriptRouter 和标签路由 TagRouter。主要分析条件路由条件路由规则由两个条件组成,分别用于对服
2021-12-10 15:56:34
343
原创 7-Dubbo初学-服务目录
服务目录在进行深入分析之前,我们先来了解一下服务目录是什么。服务目录中存储了一些和服务提供者有关的信息,通过服务目录,服务消费者可获取到服务提供者的信息,比如 ip、端口、服务协议等。通过这些信息,服务消费者就可通过 Netty 等客户端进行远程调用。在一个服务集群中,服务提供者数量并不是一成不变的,如果集群中新增了一台机器,相应地在服务目录中就要新增一条服务提供者记录。或者,如果服务提供者的配置修改了,服务目录中的记录也要做相应的更新。如果这样说,服务目录和注册中心的功能不就雷同了吗?确实如此,这里这么
2021-12-10 15:56:03
235
原创 6-Dubbo初学-consumer
服务引用上面说完服务导出,接下来说下服务引用,位于consumer侧,在 Dubbo 中,我们可以通过两种方式引用远程服务。第一种是使用服务直连的方式引用服务,第二种方式是基于注册中心进行引用。服务直连的方式仅适合在调试或测试服务的场景下使用,不适合在线上环境使用。因此,本文我将重点分析通过注册中心引用服务的过程。从注册中心中获取服务配置只是服务引用过程中的一环,除此之外,服务消费者还需要经历 Invoker 创建、代理类创建等步骤。这些步骤,将在后续章节中一一进行分析。1、服务引用原理Dubbo 服
2021-12-10 15:55:30
863
原创 5-Dubbo初学-provider
服务导出Dubbo 服务导出过程始于 Spring 容器发布刷新事件,Dubbo 在接收到事件后,会立即执行服务导出逻辑。整个逻辑大致可分为三个部分,第一部分是前置工作,主要用于检查参数,组装 URL。第二部分是导出服务,包含导出服务到本地 (JVM),和导出服务到远程两个过程。第三部分是向注册中心注册服务,用于服务发现。本篇文章将会对这三个部分代码进行详细的分析。服务导出的入口方法是 ServiceBean 的 onApplicationEvent。onApplicationEvent 是一个事件响应
2021-12-10 15:54:54
1375
原创 4-Dubbo初学-SPI
Dubbo SPISPI(Service Provider Interface)简单来说就是对一个接口进行扩展。可以通过服务加载的方式,获取到所有配置的实现类一、java SPI机制创建一个接口public interface ILog { void warn(String msg);}两个接口实现public class ConsoleLogImpl implements ILog { public void warn(String msg) { Syste
2021-12-10 15:54:16
343
原创 3-Dubbo初学-配置
Dubbo源码初学一、XML文件配置和spring一样,了解dubbo的第一步就是了解配置文件(以xml文件为例)服务提供者provider.xml<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns="http://www.springframework.org/schema/bean
2021-12-10 15:53:35
342
原创 2-Dubbo初学-主干
Dubbo主干1、Dubbo SPI2、SPI自适应拓展3、集群容错——服务目录 Directory、服务路由 Router、集群 Cluster 和负载均衡 LoadBalance3.1、服务目录3.1.1、StaticDirectory3.1.2、RegistryDirectory3.1.2.1、列举 Invoker3.1.2.2、接收服务变更通知3.1.2.3、刷新 Invoker 列表3.2、服务路由...
2021-12-10 15:53:02
1142
原创 1-Dubbo初学-框架
Dubbo1、dubbo文件核心目录1.1、dubbo-common Dubbo通用模块,定义了业务无关的工具类例如io处理、日志处理、配置处理、类处理等等操作,以及对于线程池的扩展,二进制编码处理,class编译处理,json数据处理,数据持久化接口处理等等。1.2、dubbo-rpc-api 分布式服务调用框架RPC的核心基本实现,可以看到其中提供了很多的RPC抽象类、接口和实现类,包括服务发布,服务调用,远程调用,RPC调用网络协议,RPC条用监听和过滤器等功能。提供了默认的基于Dubb
2021-12-10 15:52:14
1628
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人