- 博客(17)
- 收藏
- 关注
转载 Leaf:美团分布式ID生成服务开源
Leaf是美团基础研发平台推出的一个分布式ID生成服务,名字取自德国哲学家、数学家莱布尼茨的一句话:“There are no two identical leaves in the world.”Leaf具备高可靠、低延迟、全局唯一等特点。目前已经广泛应用于美团金融、美团外卖、美团酒旅等多个部门。具体的技术细节,可参考此前美团技术博客的一篇文章:《Leaf美团分布式ID生成服务》。近日,Leaf...
2019-05-15 19:39:26
185
转载 Java - 深入理解String实现原理
在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种:直接使用双引号声明出来的String对象会直接存储在常量池中。 如果不是用双引号声明的String对象,可...
2019-05-15 14:22:16
1096
转载 Java - Integer缓存机制
当使用自动装箱的时候,也就是将基本数据类型传递给对象类的时候触发自动装箱。这个时候java虚拟机会创建一系列的整数并且缓存到一个数组中以便直接使用,这就是缓存策略。自动装箱机制Java 编译器把原始类型自动转换为封装类的过程称为自动装箱(autoboxing),这相当于调用 valueOf 方法Integer a = 10; //this is autoboxingInteg...
2019-05-15 14:14:57
142
转载 Java 8 中的 Streams API 详解
为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合...
2019-05-14 10:25:54
181
转载 Apache Dubbo - 服务调用过程(九)
1. 简介在前面的文章中,我们分析了 Dubbo SPI、服务导出与引入、以及集群容错方面的代码。经过前文的铺垫,本篇文章我们终于可以分析服务调用过程了。Dubbo 服务调用过程比较复杂,包含众多步骤,比如发送请求、编解码、服务降级、过滤器链处理、序列化、线程派发以及响应请求等步骤。限于篇幅原因,本篇文章无法对所有的步骤一一进行分析。本篇文章将会重点分析请求的发送与接收、编解码、线程派发以及响...
2019-05-13 16:49:17
493
转载 Apache Dubbo - 负载均衡(八)
1.简介LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载“均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况。通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。在为高负载服务器分流的同时,还可以避免资源浪费,一举两得。负载均衡可分为软件负载均衡和硬件负载均衡。在我们日常开发中,一般很难接触到硬件负载均衡。但软件负载均衡...
2019-05-13 16:47:58
168
转载 Apache Dubbo - 集群(七)
1.简介为了避免单点故障,现在的应用通常至少会部署在两台服务器上。对于一些负载比较高的服务,会部署更多的服务器。这样,在同一环境下的服务提供者数量会大于1。对于服务消费者来说,同一环境下出现了多个服务提供者。这时会出现一个问题,服务消费者需要决定选择哪个服务提供者进行调用。另外服务调用失败时的处理措施也是需要考虑的,是重试呢,还是抛出异常,亦或是只打印异常等。为了处理这些问题,Dubbo 定义...
2019-05-13 16:46:51
154
转载 Apache Dubbo - 服务路由(六)
1. 简介上一篇文章分析了集群容错的第一部分 — 服务目录 Directory。服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由,筛选出符合路由规则的服务提供者。在详细分析服务路由的源码之前,先来介绍一下服务路由是什么。服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者。Dubbo 目前提供了三种服务路由实现,分...
2019-05-13 16:44:59
132
转载 Apache Dubbo - 字典(五)
1. 简介本篇文章,将开始分析 Dubbo 集群容错方面的源码。集群容错源码包含四个部分,分别是服务目录 Directory、服务路由 Router、集群 Cluster 和负载均衡 LoadBalance。这几个部分的源码逻辑相对比较独立,我们将会分四篇文章进行分析。本篇文章作为集群容错的开篇文章,将和大家一起分析服务目录相关的源码。在进行深入分析之前,我们先来了解一下服务目录是什么。服务目...
2019-05-13 16:43:56
210
转载 Apache Dubbo - 服务引用(四)
1. 简介上一篇文章详细分析了服务导出的过程,本篇文章我们趁热打铁,继续分析服务引用过程。在 Dubbo 中,我们可以通过两种方式引用远程服务。第一种是使用服务直连的方式引用服务,第二种方式是基于注册中心进行引用。服务直连的方式仅适合在调试或测试服务的场景下使用,不适合在线上环境使用。因此,本文我将重点分析通过注册中心引用服务的过程。从注册中心中获取服务配置只是服务引用过程中的一环,除此之外,...
2019-05-13 16:42:40
1505
1
转载 Apache Dubbo - 服务导出(三)
1.简介本篇文章,我们来研究一下 Dubbo 导出服务的过程。Dubbo 服务导出过程始于 Spring 容器发布刷新事件,Dubbo 在接收到事件后,会立即执行服务导出逻辑。整个逻辑大致可分为三个部分,第一部分是前置工作,主要用于检查参数,组装 URL。第二部分是导出服务,包含导出服务到本地 (JVM),和导出服务到远程两个过程。第三部分是向注册中心注册服务,用于服务发现。本篇文章将会对这三...
2019-05-13 16:40:54
382
转载 Apache Dubbo - Dubbo SPI(一)
1.简介SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI 机制在第三方框架中也有所应用,比如 Dubbo 就是通过 SPI 机制加载所有的组件。...
2019-05-13 16:38:41
202
转载 Apache Dubbo - SPI自适应扩展(二)
1.原理在 Dubbo 中,很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等。有时,有些拓展并不想在框架启动阶段被加载,而是希望在拓展方法被调用时,根据运行时参数进行加载。这听起来有些矛盾。拓展未被加载,那么拓展方法就无法被调用(静态方法除外)。拓展方法未被调用,拓展就无法被加载。对于这个矛盾的问题,Dubbo 通过自适应拓展机制很好...
2019-05-13 16:35:01
247
原创 蚂蚁金服微贷事业群电话面试分享
偶然机会拿到蚂蚁金服的内推,最终止步二面,在这和大家分享一下面试过程。一面过程一面电话打过来的时候,对方使用公司座机电话。像是使用的网络呼叫,存在的问题是声音不清楚,整个交流过程经常会有声音中断的现象出现,还好最终没算影响到整体面试。开始首先进行了一些自我介绍,然后讲了最近做的项目,使用的技术栈。项目这部分就不再详细介绍,大概是支付整体系统中在交易层面做的改造过程。因为前面项目经验已经交...
2019-05-10 14:40:54
873
1
原创 Redis数据结构 - 字典(三)
概述字典,实质就是一个K-V数据库,经常使用Java语言开发者可以直接理解为集合中的Map。字典中的每一个键都是独一无二的,可以在程序中根据键来进行查找、更新、插入操作。同样因为C中并没有这种数据结构,Redis构建了自己对字典的实现。字典的在Redis中的应用非常广泛,Redis数据库就是使用字典来实现的,对数据进行CURD也是构建在对字典的操作之上。定义Redis字典底层使用的是哈希表,...
2019-05-09 20:27:22
130
原创 Redis数据结构 - 链表(二)
概述因为C语言中没有内置类似于链表的数据结构,Redis同样构建了自己链表的实现。Redis链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以增删节点来灵活的调整链表的长度。如列表键的底层实现就是一个链表,除此之外,发布订阅、慢查询、监视器等功能也用到了链表。定义下面我们看一下链表list和链表节点listnode的数据结构:首先链表节点内部有三个属性,前置节点、后置节点 、...
2019-05-08 16:18:44
101
原创 Redis数据结构 - 简单动态字符串(一)
概述众所周知,Redis是使用C实现,那么Redis中字符串是否直接使用C语言字符串呢?答案是:否。Redis构建了一种简单动态字符串(Simple Dynamic String, SDS),并使用SDS作为内部默认字符串类型(下文提到Redis动态字符串都用SDS表示),同时Redis也会在对字符串无需修改的地方使用C字符串,例如:打日志。定义图中展示了一个SDS实例,包含了三个属性值:...
2019-05-08 15:48:20
162
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人