2019-09-09 11:53
终于在这周内写了一篇源码解析,每周一篇即使再忙也不能打破
Sentinel源码解析系列:
1.Sentinel源码分析—FlowRuleManager加载规则做了什么?
2. Sentinel源码分析—Sentinel是如何进行流量统计的?
上回我们用基于并发数来讲了一下Sentinel的整个流程,这篇文章我们来讲一下Sentinel的QPS流量控制是如何实现的。
先上一个极简的demo,我们的代码就从这个demo入手:
public static void main(String[] args) {
...
2019-09-06 16:34
前言
当共享变量被声明为volatile后,对这个变量的读/写操作都会很特别,下面我们就揭开volatile的神秘面纱。
1.volatile的内存语义
1.1 volatile的特性
一个volatile变量自身具有以下三个特性:
可见性:即当一个线程修改了声明为volatile变量的值,新值对于其他要读该变量的线程来说是立即可见的。而普通变量是不能做到这一点的,普通变量的值在线程间传递需要通过主内存来完成。
有序性:volatile变量的所谓有序性也就是被声明为volatile的变量的临界区代码的执行是有顺序的,即禁止指令重排序。
...
2019-09-06 16:25
一、Storm核心概念#
1.1 Topologies(拓扑)#
一个完整的 Storm 流处理程序被称为 Storm topology(拓扑)。它是一个是由 Spouts 和 Bolts 通过 Stream 连接起来的有向无环图,Storm 会保持每个提交到集群的 topology 持续地运行,从而处理源源不断的数据流,直到你将主动其杀死 (kill) 为止。
1.2 Streams(流)#
Stream 是 Storm 中的核心概念。一个 Stream 是一个无界的、以分布式方式并行创建和处理的 Tuple 序列。Tuple 可以包含大多数基本类型以及自定义类型的数据。简单来说,Tuple 就是流数据的实际载体,而 Stream 就是一系列 Tuple。
...
2019-09-06 11:50
这是一篇包含较少数学推导的NN入门文章
上篇文章中简单介绍了如何手撕一个NN,但其中仍有可以改进的地方,将在这篇文章中进行完善。
之前的NN计算梯度是利用数值微分法,虽容易实现,但是计算速度慢,这里介绍的误差反向传播法能够高效计算权重参数的梯度的方法。
这里将通过计算图的方法来讲解反向传播
问题一:
小明在超市买了2个100元一个的苹果,消费税是10%,请计算支付金额
问题二:
小明在超市买了2个苹果、3个橘子。其中,苹果每个100元, 橘子每个150元。消费税是10%,请计算支付金额。
...
2019-09-05 11:25
该篇内容由个人博客点击跳转同步更新!转载请注明出处!...
2019-09-05 11:44
笔者:@拿着保温瓶的年轻人
目录:
一、前言
二、发布流程
三、环境准备
四、部署思路梳理
五、三台机器上操作
六、Git机器上操作
七、Docker机器上操作
八、Jenkins机器上操作
九、上传JAVA项目代码到Git仓库
十、Jenkins发布测试
十一、后面再废话两句
正文:
一、前言
Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。
Jenkins是一个广泛用于持续构建的可视化Web工具,持续构建就是将项目自动化编译、打包、部署。通过规范化来完成,简单,繁琐,浪费时间的重复工作。
...
2019-09-04 16:35
Leader在集群中是一个非常重要的角色,负责了整个事务的处理和调度,保证分布式数据一致性的关键所在。既然Leader在ZooKeeper集群中这么重要所以一定要保证集群在任何时候都有且仅有一个Leader存在。
概念
Zookeeper Server三种角色:Leader,Follower,Observer。
Leader是Zookeeper 集群工作机制的核心,主要工作:
a.调度者:集群内部各个服务节点的调度者
b.事务请求:事务请求的唯一调度和处理者,保证集群事务处理的顺序性
Follower主要职责:
...
2019-08-22 14:54
在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完成类的初始化。在类初始化过程中或初始化完毕后,根据具体情况才会去对类进行实例化。本文试图对JVM执行类初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个Java对象的创建过程。
一个Java对象的创建过程往往包括 类初始化 和 类实例化 两个阶段。本文的是在上一篇《JVM类生命周期概述:加载时机与加载过程》主要介绍了类的初始化时机和初始化过程,本文在此基础上,进一步阐述了一个Java对象创建的真实过程。
...
2019-08-19 15:08
这里使用了一个ScrollProgressProvider.cs,我们这篇文章先解析一下整体的动画思路,以后再详细解释这个Provider的实现方式。
结构
整个页面大致结构是
...
2019-08-09 11:36
随着.NET Core 3.0 Preview 7的发布,C#8.0已被认为是“功能完整”的。这意味着它们的最大亮点Nullable Reference Types,在行为方面也被锁定在.NET Core版本中。它将在C#8.0之后继续改进,但现在可以认为它与C#8.0的其余部分一样是稳定的。
目前,我们的目标是尽可能多地收集关于可空性使用过程中的反馈以发现问题,同时收集有关在.NET Core 3.0之后我们可以做的功能的进一步改进的反馈。这是有史以来为C#构建的最大功能之一,尽管我们已尽力做好它,但我们仍然需要您的帮助!
...
2019-08-07 10:34
系列目录
在进行单元测试的时候,很多时候,很多时候我们都是在单元测试方法内部提供特定的值,但是这样测试往往造成样本数不足从而导致覆盖的结果不够全面,很多时候我们更想提供来自外部的,满足条件的一组值来进行测试.其实Nunit框架本身提供了为测试用例提供值的能力.我们可以对它进行扩展来实现导入外部的值来填充到测试方法内部.很多朋友也自己写了不少按照一定规则生成值的方法.但是往往都是在方法内部直接调用,这样就会和单元测试的逻辑混杂在一块,导致测试方法本身不够简洁.其实可以根本测试框架本身的能力改造成为注解的方式,这样参数生成逻辑和测试逻辑一目了然.后面我们还会讲解基于Autofixture框架来生成填充数据,autofixture相比我们自己写的值填充方法,往往功能更加强大.后面我们将见证其强大之处.
...