本文创意来自一次业务需求,这次需要接入一个第三方外部服务。由于这个服务只提供异步API,为了不影响现有系统同步处理的方式,接入该外部服务时,应用对外屏蔽这种差异,内部实现异步请求同步。全文摘要:异步给现有架构带来的问题Dubbo异步转同步解决方法异步转同步架构设计方案0x00.前言现有一个系统,整体架构如下所示:这是一个很常见的同步设计方案,上游系统需要等待下游系统接口返回调用结果。现在需要接入另
分类:
其他好文 时间:
2020-08-06 09:23:22
阅读次数:
59
以Lock作为切入点 Lock API Lock接口常见实现类 ReentrantLock的简单使用 什么是AQS? AQS的两种功能 ReentrantLock的类图 AQS的内部实现 释放锁以及添加Node对与队列的变化 添加节点 释放锁移除节点 AQS的源码解析 ReentrantLock整体 ...
分类:
其他好文 时间:
2020-08-04 18:18:47
阅读次数:
88
webjars 是很方便,方式很多时候我们也需要读取内容,ClassGraph 是一个高效的classpath 以及模块扫描器 如果查看了webjars 提供的webjars-locator 内部实现也是基于此工具的,但是weebjars 默认提供的功能缺少 内容读取的能力,我们可以基于ClassG ...
分类:
编程语言 时间:
2020-07-23 23:16:31
阅读次数:
113
外观模式(或门面模式、包装模式)是设计模式中非常朴素地体现面向对象“封装”概念的模式,它的基本原理是将复杂的内部实现以统一接口的方式暴露出来,最大程度地减少客户程序对某些子系统内部众多对象的依赖关系。 外观模式在开发过程中运用频率非常高,比如各种第三方SDK大多会使用外观模式。通过一个外观类是的整个 ...
分类:
其他好文 时间:
2020-07-23 09:18:32
阅读次数:
63
自动动态方法并不能理解代码逻辑,所以仅仅被用于发现异常、崩溃和超时这类“有特征”的错误,而对于代码逻辑功能的测试,主要还是要依靠人工动态方法。 人工动态方法 人工动态测试方式,是最常用的代码级测试方法,也是我们在进行单元测试时采用的方法。 单元测试用例“输入参数”的复杂性 如果你认为单元测试的输入参 ...
分类:
其他好文 时间:
2020-07-19 11:38:23
阅读次数:
86
##HMR热模块替换 HMR:hot moddule replacement 热模块替换 作用:一个模块发生变化,只会重新打包这个模块,极大的提升了构建速度 样式文件:可以使用HMR,style-loader内部实现 js文件:默认没有HMR功能,需要修改js代码,添加支持该功能的代码 HMR功能对 ...
分类:
Web程序 时间:
2020-07-17 19:19:42
阅读次数:
85
##HMR热模块替换 HMR:hot moddule replacement 热模块替换 作用:一个模块发生变化,只会重新打包这个模块,极大的提升了构建速度 样式文件:可以使用HMR,style-loader内部实现 js文件:默认没有HMR功能,需要修改js代码,添加支持该功能的代码 HMR功能对 ...
分类:
Web程序 时间:
2020-07-17 16:11:55
阅读次数:
75
为什么要学习数据结构和算法很多人在实际工作中,并不会直接实现数据和写一个算法来解决实际问题,因为这些都在类库或者框架内部实现了,只需要调用类库或框架提供的api。这些api极大的帮助了我们快速实现业务需求,开发出符合要求的产品。这样的api调用对程序猿(媛)来说不是那么的困难,导致现在越来越多的人开始步入这个高薪行业。做开发的人越来越多,为了提高门槛,很多企业开始注重候选人的基本功那就是数据结构和
分类:
编程语言 时间:
2020-07-14 10:34:22
阅读次数:
60
1.1 关于Caffeine Cache ? Google Guava Cache是一种非常优秀本地缓存解决方案,提供了基于容量,时间和引用的缓存回收方式。基于容量的方式内部实现采用LRU算法,基于引用回收很好的利用了Java虚拟机的垃圾回收机制。其中的缓存构造器CacheBuilder采用构建者模 ...
分类:
系统相关 时间:
2020-07-10 13:38:09
阅读次数:
146
在与同事讨论async/await内部实现的时候,突然想到Task.Yeild()这个函数,为什么呢,了解一点C#async/await内部机制的都知道,在await一个异步任务(函数)的时候,它会先判断该Task是否已经完成,如果已经完成,则继续执行下去,不会返回到调用方,原因是尽量避免线程切换, ...