<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[weiythi的Blog]]></title><description><![CDATA[在信息时代，客观障碍已不存在，所谓障碍都是在主观上的]]></description><link>https://blog.youkuaiyun.com/weiythi</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; weiythi]]></copyright><item><title><![CDATA[dubbo源码分析（二）：超时原理以及应用场景]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78874077</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78874077</guid><author>weiythi</author><pubDate>Fri, 22 Dec 2017 15:51:09 +0800</pubDate><description><![CDATA[dubbo源码分析（二）：超时原理以及应用场景


本篇主要记录dubbo中关于超时的常见问题，实现原理，解决的问题以及如何在服务降级中体现作用等。
超时问题

为了检查对dubbo超时的理解，尝试回答如下几个问题，如果回答不上来或者不确定那么说明此处需要再多研究研究。


我只是针对个人的理解提问题，并不代表我理解的就是全面深入的，但我的问题如果也回答不了，那至少说明理解的确是]]></description><category></category></item><item><title><![CDATA[TBSchedule源码学习笔记-任务处理]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78773977</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78773977</guid><author>weiythi</author><pubDate>Mon, 11 Dec 2017 16:27:45 +0800</pubDate><description><![CDATA[上回说到每个线程组会创建自己的com.taobao.pamirs.schedule.taskmanager.TBScheduleManager实例来管理线程组，一个JVM中该实例的个数与结合调度机数目分配給JVM的数目一致。TBScheduleManager实例中会计算调度任务的启动时机（与控制台界面设置保持一致）。实际开发一个调度任务按框架要求需要实现com.taobao.pamirs.sched]]></description><category></category></item><item><title><![CDATA[TBSchedule源码学习笔记-线程组任务调度]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78752420</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78752420</guid><author>weiythi</author><pubDate>Fri, 08 Dec 2017 16:01:30 +0800</pubDate><description><![CDATA[根据上文的启动过程，找到了线程组的实现。com.taobao.pamirs.schedule.taskmanager.TBScheduleManager/**
 * 1、任务调度分配器的目标：    让所有的任务不重复，不遗漏的被快速处理。
 * 2、一个Manager只管理一种任务类型的一组工作线程。
 * 3、在一个JVM里面可能存在多个处理相同任务类型的Manager，也可能存在处理不同任务类]]></description><category></category></item><item><title><![CDATA[TBSchedule源码学习笔记-启动过程]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78742651</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78742651</guid><author>weiythi</author><pubDate>Thu, 07 Dec 2017 16:13:13 +0800</pubDate><description><![CDATA[TBSchedule源码学习笔记-启动过程TBSchedule基本概念及原理概念介绍TBSchedule是一个支持分布式的调度框架，能让一种批量任务或者不断变化的任务，被动态的分配到多个主机的JVM中，不同的线程组中并行执行。基于ZooKeeper的纯Java实现，由Alibaba开源。代码实现起步配置/* (non-Javadoc)
     * @see org.springframework.]]></description><category></category></item><item><title><![CDATA[Java并发---- Executor并发框架--ThreadToolExecutor类详解(execute方法，关闭方法)]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78732776</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78732776</guid><author>weiythi</author><pubDate>Wed, 06 Dec 2017 17:15:47 +0800</pubDate><description><![CDATA[1、构造方法


请参考上篇文章：http://blog.youkuaiyun.com/ochangwen/article/details/53044733


2、源码详解






线程池能够复用线程，减少线程创建，销毁，恢复等状态切换的开销，提高程序的性能。一个线程池管理了一组工作线程，同时它还包括了一个用于放置等待执行的任务的队列。

ThreadPoolExecuto]]></description><category></category></item><item><title><![CDATA[JDK1.8 AbstractQueuedSynchronizer的实现分析（学习笔记）]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78722006</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78722006</guid><author>weiythi</author><pubDate>Tue, 05 Dec 2017 16:41:40 +0800</pubDate><description><![CDATA[lock方法会调用acquire方法，该方法在AQS中实现 public final void acquire(int arg) {
        if (!tryAcquire(arg) &&
            acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
            selfInterrupt();
    }正常使用一个Ree]]></description><category></category></item><item><title><![CDATA[深度解析Java 8：AbstractQueuedSynchronizer的实现分析（下）]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78663127</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78663127</guid><author>weiythi</author><pubDate>Wed, 29 Nov 2017 11:26:15 +0800</pubDate><description><![CDATA[前言

经过本系列的上半部分JDK1.8 AbstractQueuedSynchronizer的实现分析（上）的解读，相信很多读者已经对AbstractQueuedSynchronizer(下文简称AQS)的独占功能了然于胸,那么这次我们通过对另一个工具类:CountDownLatch的分析来解读AQS的另外一个功能：共享功能。

AQS共享功能的实现

在开始解读AQS的共享功能前，]]></description><category></category></item><item><title><![CDATA[深度解析Java 8：JDK1.8 AbstractQueuedSynchronizer的实现分析（上）]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78663099</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78663099</guid><author>weiythi</author><pubDate>Wed, 29 Nov 2017 11:09:37 +0800</pubDate><description><![CDATA[前言

Java中的FutureTask作为可异步执行任务并可获取执行结果而被大家所熟知。通常可以使用future.get()来获取线程的执行结果，在线程执行结束之前，get方法会一直阻塞状态，直到call()返回，其优点是使用线程异步执行任务的情况下还可以获取到线程的执行结果，但是FutureTask的以上功能却是依靠通过一个叫AbstractQueuedSynchronizer的类来实现，]]></description><category></category></item><item><title><![CDATA[Dubbo/Dubbox的dubbo协议实现（一）-服务端启动]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78656982</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78656982</guid><author>weiythi</author><pubDate>Tue, 28 Nov 2017 17:03:17 +0800</pubDate><description><![CDATA[之前已经分析的dubbo的服务的发现和注册，这里先看一下dubbo协议是如何实现的，之前已经知道了，调用DubboProtocol类的export来暴露服务的,协议实现比较复杂，这里只关系主体实现即排除一些特性功能的处理代码本章主要处理服务端对应的暴露流程,继续回到···com.alibaba.dubbo.config.ServiceConfig···的doExportUrlsFor1Protoco]]></description><category></category></item><item><title><![CDATA[Dubbo架构设计详解]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78654454</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78654454</guid><author>weiythi</author><pubDate>Tue, 28 Nov 2017 14:09:35 +0800</pubDate><description><![CDATA[Dubbo是Alibaba开源的分布式服务框架，它最大的特点是按照分层的方式来架构，使用这种方式可以使各个层之间解耦合（或者最大限度地松耦合）。从服务模型的角度来看，Dubbo采用的是一种非常简单的模型，要么是提供方提供服务，要么是消费方消费服务，所以基于这一点可以抽象出服务提供方（Provider）和服务消费方（Consumer）两个角色。关于注册中心、协议支持、服务监控等内容，详见后面描述。]]></description><category></category></item><item><title><![CDATA[Dubbo/Dubbox的服务消费（二）- 服务发现]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78615044</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78615044</guid><author>weiythi</author><pubDate>Thu, 23 Nov 2017 15:15:33 +0800</pubDate><description><![CDATA[上文书整理了dubbo是如何生成服务代理的，并且留了个尾巴，这一文主要介绍dubbo是如何实现服务发现的，继续前文的脚步，看一下dubbo如何完成传说中的服务自动发现 
打开com.alibaba.dubbo.config.ReferenceConfig 类，只关注@SuppressWarnings({ "unchecked", "rawtypes", "deprecation" })
    pr]]></description><category></category></item><item><title><![CDATA[Dubbo/Dubbox的服务消费（一）- 服务代理的创建]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78582978</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78582978</guid><author>weiythi</author><pubDate>Mon, 20 Nov 2017 15:50:24 +0800</pubDate><description><![CDATA[dubbo的consumer的初始过程一个常见的consumer配置是这样的<dubbo:reference id="dubboDemo" interface="com.company.dsp.adcenter.protocol.dubbo.DubboDemo"
                 protocol="dubbo"/>这样spring会创建一个beanName为dubboDemo的be]]></description><category></category></item><item><title><![CDATA[Dubbo/Dubbox的服务暴露（三）- 服务的注册]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78523486</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78523486</guid><author>weiythi</author><pubDate>Tue, 14 Nov 2017 10:31:42 +0800</pubDate><description><![CDATA[接上《 Dubbo/Dubbox的服务暴露（二）-扩展点机制》上文书依旧疑留的疑问，这两句到底在干啥Invoker<?> invoker = proxyFactory.getInvoker(ref, (Class) interfaceClass, registryURL.addParameterAndEncoded(Constants.EXPORT_KEY, url.toFullString()))]]></description><category></category></item><item><title><![CDATA[Dubbo/Dubbox的服务暴露（二）-扩展点机制]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78501158</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78501158</guid><author>weiythi</author><pubDate>Mon, 13 Nov 2017 16:03:20 +0800</pubDate><description><![CDATA[接上《 Dubbo/Dubbox的服务暴露（一）》上文书留的疑问，这两句到底在干啥                        Invoker<?> invoker = proxyFactory.getInvoker(ref, (Class) interfaceClass, registryURL.addParameterAndEncoded(Constants.EXPORT_KEY, url.t]]></description><category></category></item><item><title><![CDATA[Dubbo/Dubbox的服务暴露（一）]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78467094</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78467094</guid><author>weiythi</author><pubDate>Tue, 07 Nov 2017 16:10:15 +0800</pubDate><description><![CDATA[前言源码入手平时我要了解一个框架，基本会去从他的Listener入手，如果web.xml中没有配置listener可能还会有 filter，这是spring给我们的启示，可是当要去了解dubbo的时候，发现dubbo并没有自己的listener监听器。已知dubbo是一款和spring结合较好的rpc框架，那么其不使用web容器相关的方式，必然遵循spring的方式。依据平时开发经验，我们知道要想在]]></description><category></category></item><item><title><![CDATA[Java spi机制浅谈]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78331374</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78331374</guid><author>weiythi</author><pubDate>Tue, 24 Oct 2017 16:43:30 +0800</pubDate><description><![CDATA[最近看到公司的一些框架和之前看到的开源的一些框架的一些服务发现和接入都采用了java的spi机制。

所以简单的总结下java spi机制的思想。

 

我们系统里抽象的各个模块，往往有很多不同的实现方案，比如日志模块的方案，xml解析模块、jdbc模块的方案等。面向的对象的设计里，我们一般推荐模块之间基于接口编程，模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类，就违反了可]]></description><category></category></item><item><title><![CDATA[Java多线程-新特征-信号量Semaphore]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78304487</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78304487</guid><author>weiythi</author><pubDate>Sat, 21 Oct 2017 16:27:04 +0800</pubDate><description><![CDATA[简介
信号量(Semaphore)，有时被称为信号灯，是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。

概念
Semaphore分为单值和多值两种，前者只能被一个线程获得，后者可以被若干个线程获得。

以一个停车场运作为例。为了简单起见，假设停车场只有三个车位，一开始三个车位都是空的。这时如果同时来了五辆车，看门人允许其中三辆不受阻碍的]]></description><category></category></item><item><title><![CDATA[关于Redis数据过期策略]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78158630</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78158630</guid><author>weiythi</author><pubDate>Wed, 04 Oct 2017 16:54:56 +0800</pubDate><description><![CDATA[1、Redis中key的的过期时间
通过EXPIRE key seconds命令来设置数据的过期时间。返回1表明设置成功，返回0表明key不存在或者不能成功设置过期时间。在key上设置了过期时间后key将在指定的秒数后被自动删除。被指定了过期时间的key在Redis中被称为是不稳定的。
当key被DEL命令删除或者被SET、GETSET命令重置后与之关联的过期时间会被清除




]]></description><category></category></item><item><title><![CDATA[redis判断key是否存在（过期）的几种方式]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78150568</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78150568</guid><author>weiythi</author><pubDate>Mon, 02 Oct 2017 12:26:26 +0800</pubDate><description><![CDATA[exist命令
  EXISTS key
  
  检查给定 key 是否存在。 
  可用版本：>= 1.0.0 
  时间复杂度：O(1) 
  返回值： 
  若 key 存在，返回 1 ，否则返回 0 。
示例：ip:6379> set ceshi-111-222 wcl
OK
ip:6379> exists ceshi-111-222
(integer) 1
ip:6379> del ce]]></description><category></category></item><item><title><![CDATA[四种数据存储结构---顺序存储 链接存储 索引存储 散列存储]]></title><link>https://blog.youkuaiyun.com/weiythi/article/details/78083186</link><guid>https://blog.youkuaiyun.com/weiythi/article/details/78083186</guid><author>weiythi</author><pubDate>Mon, 25 Sep 2017 11:15:08 +0800</pubDate><description><![CDATA[记录]]></description><category></category></item></channel></rss>