
Java
文章平均质量分 92
Davids_
原来人生无常,心安便是归处。
展开
-
Davids原理探究:Java并发包中的线程同步器(CountDownLatch、CyclicBarrier和Semaphore)
文章目录Java并发包中的线程同步器(CountDownLatch、CyclicBarrier和Semaphore)CountDownLatch核心方法1:countDown核心方法2:await核心方法3:getCountCyclicBarrier核心方法1:await核心方法2:resetSemaphore核心方法1:construction核心方法2:acquire核心方法3:acquireUninterruptibly核心方法4:release总结Java并发包中的线程同步器(CountDownL原创 2020-08-13 09:21:38 · 331 阅读 · 0 评论 -
Davids实操笔记:玩转Arthas
文章目录玩转Arthas个人感受官网简介使用方式下载arthas-bin.zip找到arthas-boot.jar模拟场景启动Arthas处理问题为什么单元测试同样的参数是可以的,到了生产环境却没有返回值?是我没有传进去吗?我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?为什么接口这么慢啊?这方法几百行我要一行一行加日志打印时间(吐血...)?怎么感觉这个没有调用到我的方法呀?感觉调用路径不对?生产环境又不能debug!玩转Arthas个人感受其实很早之前就听说过Arthas这个工具原创 2020-07-18 23:59:29 · 952 阅读 · 0 评论 -
转载:Arthas 原理解析
Arthas 原理解析转载 2020-07-16 17:20:54 · 483 阅读 · 0 评论 -
转载:Arthas 线上诊断利器
Arthas 线上诊断利器转载 2020-07-14 17:04:54 · 200 阅读 · 0 评论 -
Davids原理探究:Java抽象同步队列AQS原理
Java抽象同步队列AQS原创 2020-07-04 11:00:31 · 225 阅读 · 0 评论 -
Davids原理探究:Java并发包中锁的原理(ReentrantLock、ReentrantReadWriteLock)
文章目录Java并发包中锁的原理(ReentrantLock、ReentrantReadWriteLock)ReentrantLock公平锁ReentrantLock非公平锁abstract class AbstractQueuedSynchronizer - hasQueuedPredecessors实现ReentrantLock抽象类syncCopyOnWriteArrayList内部由ReentrantLock加锁实现线程安全Java并发包中锁的原理(ReentrantLock、ReentrantR原创 2020-07-02 19:30:02 · 331 阅读 · 0 评论 -
Davids原理探究:Dubbo服务消费原理
文章目录Dubbo服务消费原理概述服务消费过程Dubbo服务消费原理关注可以查看更多粉丝专享blog~概述前面已经讲过Dubbo服务暴露的原理了(传送门),今天分析一下Dubbo服务消费原理,相比于服务暴露原理,服务消费就有点像把暴露原理倒过来,可以看一下消费原理图。跟服务暴露的流程很相似,只是服务暴露的核心类是ServiceConfig,服务消费的核心类是ReferenceConfig,从名字上也可以看出来。服务暴露流程是ServiceConfig --> ProxyFactory --&原创 2020-06-24 22:48:01 · 2492 阅读 · 0 评论 -
Davids原理探究:Dubbo优雅停机原理
Dubbo优雅停机原理解析关注可以查看更多粉丝专享blog~收到kill -9进程退出信号,Spring容器会触发容器销毁事件。provider端会取消注册服务元数据信息。consumer端会收到最新的地址列表(不包含准备停机的地址)。Dubbo协议会发送readonly事件报文通知consumer服务不可用。服务端等待已经执行的任务结束并拒绝新任务执行。最后provider与consumer断开TCP连接。注册中心已经通知了最新服务列表,provider还要发送readonly报文的原创 2020-06-24 22:45:18 · 2095 阅读 · 0 评论 -
Davids原理探究:Dubbo配置解析原理
文章目录Dubbo配置解析原理配置解析原理基于XML配置解析原理schema模块说明基于注解配置解析原理@EnableDubboServiceAnnotationBeanPostProcessor的作用ReferenceAnnotationBeanPostProcessor的作用Dubbo配置解析原理关注可以查看更多粉丝专享blog~上次本地编译的最新的Dubbo 2.7.8,跟着书看源码是基于2.6.5,从2.7.0版本开始dubbo的groupId已经变了。这里查看2.6.5的源码有两种方案【原创 2020-06-24 22:29:04 · 2065 阅读 · 0 评论 -
Davids原理探究:JDK8将永久代(PermGen)替换为元空间(MetaSpace)的原因
文章目录JDK8为什么要将永久代(PermGen)替换为元空间(MetaSpace)呢?什么是方法区永久代产生的原因将永久代替换为源空间的原因JDK8为什么要将永久代(PermGen)替换为元空间(MetaSpace)呢?什么是方法区方法区(Method Area)和Java堆一样,是各个线程共享的内存区域,它用于存储已经被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。虽然《Java虚拟机规范》中把方法区描述为堆的一个逻辑部分,但是它却有着一个别名叫做“非堆”(Non-Hea原创 2020-06-20 10:44:39 · 3477 阅读 · 0 评论 -
Davids原理探究:Dubbo负载均衡实现原理
Dubbo负载均衡实现原理RandomRobin 随机负载均衡(default)RoundRobin 轮询负载均衡普通轮询/平滑轮询算法(Nginx中有使用)LeastActive 最少活跃调用数负载均衡越慢的服务越少调用,活跃计数差(调用前计数器+1,调用后计数器-1,如果一个服务提供者计数差很大,则说明该服务处理的比较慢,则减少请求量,防止服务客户端阻塞,以及服务端崩溃。)一致性Hash负载均衡默认根据只对第一个参数hash,可以通过<dubbo:parameter key="has原创 2020-06-15 23:48:29 · 4327 阅读 · 0 评论 -
Davids原理探究:Dubbo过滤器原理
文章目录Dubbo过滤器原理概述使用方式@Activate注解启用XML配置启用规则总体结构图作用列表过滤器链初始化的实现原理Dubbo过滤器原理概述Dubbo过滤器提供了服务提供者和消费者的调用拦截,即每次执行RPC调用的时候,对应的过滤器都会生效。虽然过滤器功能强大,但由于每次调用的时候都会执行,因此在使用的时候需要注意它对性能的影响。使用方式在Dubbo中又很多内置过滤器,并且大多数都是使用@Activate注解默认启用的,比如ContextFilter。对于自行扩展的过滤器有以下两种启用方原创 2020-06-14 18:57:43 · 4402 阅读 · 0 评论 -
Davids原理探究:Dubbo SPI和Java SPI实现原理
Java SPI实现原理原创 2020-06-14 18:55:46 · 2326 阅读 · 0 评论 -
Davids原理探究:Dubbo路由实现原理
文章目录Dubbo路由实现原理ConditionRouter(条件路由)条件路由的参数规则Dubbo路由实现原理Dubbo的路由分为条件路由、文件路由和脚本路由,对应的dubbo-admin中三种不同的规则配置方式。条件路由是用户使用Dubbo定义的语法规则去写的路由规则;文件路由则需要用户提交一个文件,里面写着对应的路由规则,框架基于文件读取对应的规则;脚本路由则是使用JDK自身的脚本引擎解析路由规则脚本,所有JDK脚本引擎支持的脚本都能解析,默认是JavaScript。ConditionRout原创 2020-06-12 17:26:10 · 4818 阅读 · 0 评论 -
Davids原理探究:Dubbo服务暴露原理
文章目录Dubbo服务暴露和服务消费原理(基于Dubbo 2.6.5)配置解析原理基于XML配置解析原理schema模块说明基于注解配置解析原理@EnableDubboServiceAnnotationBeanPostProcessor的作用ReferenceAnnotationBeanPostProcessor的作用服务暴露原理配置初始化服务暴露的核心类ServiceConfig注册中心暴露服务拦截器初始化服务消费原理概述服务消费过程Dubbo优雅停机原理解析Dubbo服务暴露和服务消费原理(基于Dub原创 2020-06-12 09:50:12 · 4345 阅读 · 0 评论 -
转载:MyBatis SQL执行原理
MyBatis SQL是如何执行的mark一下https://juejin.im/post/5e350d895188254dfd43def5#heading-8转载 2020-06-14 16:41:00 · 720 阅读 · 0 评论 -
Davids原理探究:Java中List浅拷贝深拷贝问题
Java中List浅拷贝深拷贝问题浅拷贝基本数据类型的成员变量,进行值传递(将该属性值复制一份给新的对象)。引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等进行引用传递(将该成员变量的引用值(内存地址)复制一份给新的对象)。深拷贝基本数据类型的成员变量,进行值传递(将该属性值复制一份给新的对象)。引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,会重新分配内存并将成员变量拷贝一份赋值给新对象(将该成员变量的内容复制一份到新开辟的内存上,新的对象指向新的内存地原创 2020-06-05 10:55:50 · 3374 阅读 · 0 评论 -
Davids原理探究:ThreadPoolExecutor原理
ThreadPoolExecutor原理探究线程池状态及转换条件如果当前线程!RUNNING状态,则从队列中删除任务,并执行拒绝策略,如果队列满,则新增线程,新增失败则执行拒绝策略。executeaddWorkerCASaddWorkers状态设置为-1避免在runWorker之前被中断,shutDownNow中断状态>=0的线程。// TODO 线程池状态已经切换状态的方法图XmindshutDown和shutDownNowpublic void shutdown()原创 2020-06-06 17:24:40 · 4481 阅读 · 0 评论 -
Davids原理探究:Java并发包中并发队列(ConcurrentLinkedQueue、LinkedBlockingQueue、DelayQueue...)
Java并发包中并发队列的原理剖析ConcurrentLinkedQueue无界队列无锁算法,入队和出队使用CAS算法进行设置队首和队尾元素由于是无锁算法,所以在获取size的时候是进行遍历操作的,在遍历过程中,已经遍历过的节点可能有增删,所以size在高并发场景下存在一定误差,而且size性能较差,所以如果只是判断队列是否有元素建议使用isEmpty(),该方法只会获取first节点是否有元素。初始化队列时头尾节点均指向哨兵节点head = tail = new Node(null);p原创 2020-05-29 00:18:58 · 4393 阅读 · 0 评论 -
Davids知识点笔记:事务的7种传播机制和4种隔离级别
事务的7种传播机制和4种隔离级别事务的传播机制支持当前事务:1、REQUIRED(默认):支持使用当前事务,如果当前事务不存在,创建一个新事务。2、SUPPORTS:支持使用当前事务,如果当前事务不存在,则不使用事务。3、MANDATORY:强制,支持使用当前事务,如果当前事务不存在,则抛出Exception。不支持当前事务:1、REQUIRES_NEW:创建一个新事务,如果当前事务存在,把当前事务挂起。2、NOT_SUPPORTED:无事务执行,如果当前事务存在,把当前事务挂起。3、N原创 2020-06-05 09:17:23 · 5067 阅读 · 1 评论 -
Davids实操笔记:Spring Cloud使用Zuul和Ribbon实现灰度发布
##Spring Cloud使用Zuul和Ribbon实现灰度发布公司产品线采用的是Spring Cloud(Dalston.SR1)、Spring Boot(1.5.x)、Spring MVC、Mybatis、Redis构建的微服务、服务数量60+,之前规定是每周二中午12点-2点发布,由于用户访问量的上升这样用户体验特别差,之前为了解决这个问题做过一次不停机发布方案,采用的是Spring C...原创 2020-06-05 15:47:38 · 4754 阅读 · 0 评论