javaEE
文章平均质量分 92
要懂得舍得
从零开始
展开
-
基于 springSecurity 的用户管理脚手架(UMS)
UMS (user manage scaffolding) 用户管理脚手架: github gitee用户管理脚手架集成:用户密码登录、手机登录、支持所有 JustAuth 支持的第三方授权登录、验证码、基于 RBAC 的 uri 访问权限控制功能、签到等功能。通过配置文件与实现 用户服务 与 短信发生服务 两个 API 接口就可以实现上述功能,实现快速开发,只需要专注于业务逻辑。一、UMS 功能列表:验证码(图片,短信, 滑块)校验功能。手机登录功能,登录后自动注册。支持所有 Just原创 2020-10-21 13:23:45 · 1453 阅读 · 0 评论 -
Spring security 集成 JustAuth 实现第三方授权登录
Spring security 集成 JustAuth 实现第三方授权登录脚手架:一、特性spring security 集成 JustAuth 实现第三方授权登录: 此项目从 用户管理脚手架(UMS):https://github.com/ZeroOrInfinity/UMS | https://gitee.com/pcore/UMS) 项目中分离.支持所有 justAuth 支持的第三方登录,登录后自动注册 或 绑定.支持定时刷新 accessToken 分布式定时任务,支持第三方授权登录原创 2020-10-23 19:57:46 · 5967 阅读 · 0 评论 -
剖析Disruptor:为什么会这么快?(二)神奇的缓存行填充
作者:Trisha 译者:方腾飞 校对:丁一我们经常提到一个短语Mechanical Sympathy,这个短语也是Martin博客的标题(译注:Martin Thompson),Mechanical Sympathy讲的是底层硬件是如何运作的,以及与其协作而非相悖的编程方式。我在上一篇文章中提到RingBuffer后,我们收到一些关于RingBuffer中填充高速缓存行的评论和疑问。转载 2017-12-18 21:23:32 · 425 阅读 · 0 评论 -
LMAX架构
作者:Martin Fowler译文地址:http://www.jdon.com/42452 译者:banqLMAX是一种新型零售金融交易平台,它能够以很低的延迟(latency)产生大量交易(吞吐量).这个系统是建立在JVM平台上,核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单.业务逻辑处理器完全是运行在内存中(in-memory),使用事件源驱动方式(eve转载 2017-12-17 11:55:24 · 909 阅读 · 0 评论 -
通过Axon和Disruptor处理1Mtps
作者: AllardBuijze 译者:程晓明LMAX,一家金融公司,最近开源了其(新型零售金融交易平台的)核心组件之一:Disruptor。这个组件通过删除必须的锁来降低执行开销,且任然保证正确的处理订单。如果你问我,我会说这是一个优美精巧的工程。我尝试把Disruptor应用到Axon控制总线中,就是想看看它到底有多大的潜力。结果相当惊人。The DisruptorD转载 2017-12-18 21:12:43 · 631 阅读 · 0 评论 -
剖析Disruptor:为什么会这么快?(三)伪共享
作者:Martin Thompson 译者:丁一缓存系统中是以缓存行(cache line)为单位存储的。缓存行是2的整数幂个连续字节,一般为32-256个字节。最常见的缓存行大小是64个字节。当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。缓存行上的写竞争是运行在SMP系统中并行线程实现可伸缩性最重要的限制因素。有人将伪共享描述成无声的性转载 2018-05-19 21:01:26 · 764 阅读 · 0 评论 -
聊聊并发(三)Java线程池的分析和使用
作者:方腾飞1. 引言合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须转载 2018-05-19 21:02:41 · 230 阅读 · 0 评论 -
聊聊并发(五)原子操作的实现原理
1 引言原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作”。在多处理器上实现原子操作就变得有点复杂。本文让我们一起来聊一聊在Inter处理器和Java里是如何实现原子操作的。2 术语定义术语名称英文解释缓存行转载 2018-05-19 21:03:02 · 1436 阅读 · 0 评论 -
聊聊并发(二)Java SE1.6中的Synchronized
作者:方腾飞1 引言在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。2 术语定义术语转载 2018-05-19 21:02:31 · 280 阅读 · 0 评论 -
聊聊并发(四)深入分析ConcurrentHashMap
术语定义术语英文解释哈希算法hash algorithm是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值。 哈希表hash table根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上,并以关键字在地址区间中的转载 2018-05-19 21:02:54 · 329 阅读 · 0 评论 -
并发框架Disruptor译文
并发框架Disruptor译文Martin Fowler在自己网站上写了一篇LMAX架构的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易。这个系统是建立在JVM平台上,其核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单。业务逻辑处理器完全是运行在内存中,使用事件源驱动方式。业务逻辑处理器的核心是Disruptor。Di转载 2017-12-16 23:35:27 · 649 阅读 · 0 评论 -
剖析Disruptor:为什么会这么快?(一)锁的缺点
原文:http://ifeve.com/disruptor-locks-are-bad/作者:Trisha’s 译者:张文灼,潘曦 整理和校对:方腾飞,丁一Martin Fowler写了一篇非常好的文章,里面不仅提到了Disruptor,而且还解释了Disruptor如何应用在LMAX的架构里。里面有提及了一些目前没有涉及的概念,但最经常问到的问题是 “Disruptor究转载 2017-12-17 12:23:05 · 696 阅读 · 0 评论 -
聊聊并发(一)深入分析Volatile的实现原理
引言在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比synchronized的开销更小,本文将深入分析在硬件层面上Inter处理器是如何实现Volatile的,通过深入分析能转载 2017-12-18 21:23:03 · 368 阅读 · 0 评论 -
Storm与Kafka集成用eclipse调试集群连接不上的问题
Exception in thread"main" org.apache.storm.utils.NimbusLeaderNotFoundException: Couldnot find leader nimbus from seed hosts [localhost]. Did you specify a validlist of nimbus hosts for config nimbus.s原创 2018-01-26 23:22:05 · 1334 阅读 · 6 评论 -
利用Rocketmq4.2版来实现分布式事务
花了点时间学了RocketMQ,下面是本人的一点点心得,如果觉的写的好就点个赞,但如果你要借鉴话,我还是劝你看下面参考资料里的视频(作者为阿里牛人),虽然他分享的视频是为了推销阿里云的DRDS、ONS(RocketMQ阿里版),只是讲了个大概,没有细说,但是指明一个大的方向,让人非常的受益。借用阿里牛人视频中的ppt:来说明单机事务拆分成分布式事务分解思想(具体自己看视频)。...原创 2018-01-15 23:34:14 · 9242 阅读 · 9 评论 -
dubbo-amdin-2.5.8打包war包(jdk7)
用jdk8打dubbo-amdin-2.5.8的war包,折腾了一天,在command命令模式下执行mvn package -Dmaven.skip.test=true,直接BUILD FAILED,编译过程就通不过。在MyEclipse下不修改pom.xml也是一样,在加入compiler与war插件后可以打war包了, maven-compiler-plugin 2.3.2 1原创 2018-01-21 17:39:38 · 707 阅读 · 0 评论 -
CopyOnWriteArrayList类set方法疑惑?
在淘宝内网有位同事提了一个很好的问题,大家能否帮忙解答下?在CopyOnWriteArrayList类的set方法中有一段setArray(elements)代码,实际上这段代码并未对elements做任何改动,实现的volatile语意并不对CopyOnWriteArrayList实例产生任何影响,为什么还是要保留这行语句?见以下代码红体部分:01转载 2017-12-18 21:24:59 · 386 阅读 · 0 评论 -
Callable和Future
原文链接 译文链接 译者:Greenster 校对:沈义扬Java从发布的第一个版本开始就可以很方便地编写多线程的应用程序,并在设计中引入异步处理。Thread类、Runnable接口和Java内存管理模型使得多线程编程简单直接。但正如之前提到过的,Thread类和Runnable接口都不允许声明检查型异常,也不能定义返回值。没有返回值这点稍微有点麻烦。 不能声明抛出检查型异常则转载 2017-12-18 21:24:54 · 239 阅读 · 0 评论 -
JUC LinkedBlockingQueue
java.util.concurrent.LinkedBlockingQueue 是一个基于单向链表的、范围任意的(其实是有界的)、FIFO阻塞队列。访问与移除操作是在队头进行,添加操作是在队尾进行,并分别使用不同的锁进行保护,只有在可能涉及多个节点的操作才同时对两个锁进行加锁。队列是否为空、是否已满仍然是通过元素数量的计数器(count)进行判断的,由于可以同时在队头、队尾并发地进行访问转载 2017-12-18 21:24:30 · 215 阅读 · 0 评论 -
剖析Disruptor:为什么会这么快?(四)揭秘内存屏障
译者:杜建雄 校对:欧振聪最近我博客文章更新有点慢,因为我在忙着写一篇介绍内存屏障(Memory Barries)以及如何将其应用于Disruptor的文章。问题是,无论我翻阅了多少资料,向耐心的Martin和Mike请教了多少遍,以试图理清一些知识点,可我总是不能直观地抓到重点。大概是因为我不具备深厚的背景知识来帮助我透彻理解。所以,与其像个傻瓜一样试图去解释一些自己都没完转载 2017-12-18 21:24:26 · 385 阅读 · 0 评论 -
内存屏障
原文地址 作者:Martin Thompson 译者:一粟 校对:无叶,方腾飞本文我将和大家讨论并发编程中最基础的一项技术:内存屏障或内存栅栏,也就是让一个CPU处理单元中的内存状态对其它处理单元可见的一项技术。CPU使用了很多优化技术来实现一个目标:CPU执行单元的速度要远超主存访问速度。在上一篇文章 “Write Combing (合并写)”中我已经介绍了其中的一项技术转载 2017-12-18 21:24:14 · 259 阅读 · 0 评论 -
聊聊并发(六)ConcurrentLinkedQueue的实现原理分析
1. 引言在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,本文让我们一起来研究下Doug Lea是如何使用非阻塞的方式来实现线程安全队列Conc转载 2018-05-19 21:03:11 · 425 阅读 · 0 评论 -
聊聊并发(八)——Fork/Join框架介绍
本文首发于InfoQ1. 什么是Fork/Join框架Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大转载 2018-05-19 21:03:31 · 443 阅读 · 0 评论 -
Disruptor入门
Disruptor入门翻译自Disruptor git库教程 英文地址获得Disruptor可以通过Maven或者下载jar来安装Disruptor。只要把对应的jar放在Java classpath就可以了。基本的事件生产和消费我们从一个简单的例子开始学习Disruptor:生产者传递一个long类型的值给消费者,而消费者消费这个数据的方式仅仅是把它打转载 2017-12-16 23:53:20 · 251 阅读 · 0 评论 -
servlet中利用spring的注解@Autowired自动注入service失败,优雅的解决方法
一个项目启动时,有一些系统参数希望在web.xml加载时自动初始化:这时可以利用servlet的init方法,初始化系统参数到ServletContext。但初始化参数时要用到一些service,如果想往常一样利用@Autowired注入service,就会在项目启动时此servlet的init方法会报错;解决这个注入失败的方法有很多,其中有一种方法感觉跟优雅,就是添加这条语句:SpringB原创 2017-09-15 18:48:46 · 9119 阅读 · 0 评论 -
Struts2文件上传 超过大小限制无法跳转至指定input页面问题,浏览器提示连接已重置?根本原因
Struts2文件上传 超过大小限制无法跳转至指定input页面问题。浏览器提示连接已重置问题:根本原因:此问题在用tomcat7/8/9版本会出现。根本原因是:当request的最大的字节数(不包括传输编码开销)超过tomcat服务器conf文件server.xml中maxSwallowSize的设置值将被Tomcat会终止上传,tomca原创 2017-05-23 18:08:04 · 3517 阅读 · 4 评论 -
Struts2中ActionContext、Ognlcontext、OgnlValueStack对象关系图,ognl表达式根元素分析
关系图:Action:public String execute() throws Exception{List list = new ArrayList();List list1 = new ArrayList();List list2 = new ArrayList();for (int i = 0; i list.add(i原创 2017-05-25 18:46:50 · 1585 阅读 · 0 评论 -
禁止浏览器缓存所有动态页面的过滤器:
禁止浏览器缓存所有动态页面的过滤器:有 3 个 HTTP 响应头字段都可以禁止浏览器缓存当前页面,它们在 Servlet 中的示例代码如下:response.setDateHeader("Expires",-1);response.setHeader("Cache-Control","no-cache"); response.setHeader("Pragma"转载 2017-04-29 23:39:18 · 1125 阅读 · 0 评论 -
线程间共享数据无需竞争
原文 地址 作者 Trisha 译者:李同杰LMAX Disruptor是一个开源的并发框架,并获得2011 Duke’s 程序框架创新奖。本文将用图表的方式为大家介绍Disruptor是什么,用来做什么,以及简单介绍背后的实现原理。Disruptor是什么?Disruptor是线程内通信框架,用于线程里共享数据。LMAX创建Disruptor作为可靠消息架构的一转载 2017-12-17 11:26:06 · 473 阅读 · 0 评论 -
如何使用Disruptor(二)如何从Ringbuffer读取
英文原文:http://ifeve.com/dissecting-the-disruptor-how-do-i-read-from-the-ring-buffer/作者:Trisha 译者:古圣昌 校对:方腾飞从上一篇文章中我们都了解了什么是Ring Buffer以及它是如何的特别。但遗憾的是,我还没有讲述如何使用Disruptor向RingBuffer写数据和从Ring Bu转载 2017-12-17 00:19:58 · 980 阅读 · 0 评论 -
如何使用Disruptor(一)Ringbuffer的特别之处
作者:Trisha 译者:寒桐 校对:方腾飞最近,我们开源了LMAX Disruptor,它是我们的交易系统吞吐量快(LMAX是一个新型的交易平台,号称能够单线程每秒处理数百万的订单)的关键原因。为什么我们要将其开源?我们意识到对高性能编程领域的一些传统观点,有点不对劲。我们找到了一种更好、更快地在线程间共享数据的方法,如果不公开于业界共享的话,那未免太自私了。同时开源也让我们觉得转载 2017-12-17 00:12:35 · 2338 阅读 · 0 评论 -
聊聊并发(七)——Java中的阻塞队列
原文首发于InfoQ1. 什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。阻塞转载 2018-05-19 21:03:20 · 369 阅读 · 0 评论 -
聊聊并发(九)Java中的Copy-On-Write容器
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。转载 2018-05-19 21:04:04 · 349 阅读 · 0 评论 -
聊聊并发(十)生产者消费者模式
本文首发于InfoQ 作者:方腾飞 校对:张龙在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。为什么要使用生产者和消费者模式在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处转载 2018-05-19 21:04:15 · 544 阅读 · 0 评论 -
Disruptor 2.0更新摘要
原文:Disruptor 2.0 – All Change Please 译者:杨帆马丁最近发布了Disruptor的2.0版本,从我们开始将其开源以来发生了很多变化,现在是个时候推出一个正式的里程碑了。马丁的博客上涵盖了这次更新的所有内容,这篇文章的目的是尝试把我以前的博文以新框架的架构转述给大家,因为将它们都重写一遍要耗费很多时间。现在我看到手工绘图的缺点了。在旧的版本中:转载 2017-12-17 00:26:31 · 346 阅读 · 0 评论 -
Disruptor Wizard已死,Disruptor Wizard永存!
译者:杨帆 校对:丁一Disruptor Wizard(上一篇中提到的DSL组件)目前已经正式并入Disruptor的代码树当中。既然.net移植版包含了Wizard风格的语法很久了,并且看起来还挺受欢迎,所以为什么还要让人们非得搞两个jar而不是一个?我跟随Disruptor在术语命名上的变动做出了相应的更新。以前的Customer(消费者),现在叫EventProcessor(事件处理转载 2017-12-17 11:22:46 · 360 阅读 · 0 评论 -
LMAX Disruptor——一个高性能、低延迟且简单的框架
翻译:杨帆 校对:丁一Disruptor是一个用于在线程间通信的高效低延时的消息组件,它像个增强的队列,并且它是让LMAX Exchange跑的如此之快的一个关键创新。关于什么是Disruptor、为何它很重要以及它的工作原理方面的信息都呈爆炸性增长 —— 这些文章很适合开始学习Disruptor,还可跟着LMAX BLOG深入学习。这里还有一份更详细的白皮书。虽然disrup转载 2017-12-17 11:20:57 · 3989 阅读 · 0 评论 -
Disruptor(无锁并发框架)-发布
译者:罗立树假如你生活在另外一个星球,我们最近开源了一套高性能的基于消息传递的开源框架。下面我给大家介绍一下如何将消息通过Ring buffer在无锁的情况下进行处理。在深入介绍之前,可以先快速阅读一下Trish发表的文章,该文章介绍了ring buffer和其工作原理。这篇文章的要点如下:1.ring buffer是由一个大数组组成的。2.所有ring buf转载 2017-12-17 11:15:19 · 844 阅读 · 0 评论 -
解析Disruptor的依赖关系
作者:Trisha 译者:廖涵 校对:方腾飞现在我已经讲了 RingBuffer 本身,如何从它 读取以及如何向它 写入。从逻辑上来说,下一件要做的事情就是把所有的东西拼装到在一起。我前面提到过多生产者的情况——他们通过 ProducerBarrier 保证写入操作顺序与可控。我也提到过简单场景下的多消费者数据访问。更多的消费者的场景会变得更加复杂,我们实现了转载 2017-12-17 11:12:11 · 822 阅读 · 0 评论 -
如何使用 Disruptor(三)写入 Ringbuffer
作者:Trisha 译者:廖涵 校对:方腾飞这是Disruptor全方位解析(end-to-end view)中缺少的一章。当心,本文非常长。但是为了让你能联系上下文阅读,我还是决定把它们写进一篇博客里。本文的 重点 是:不要让 Ring 重叠;如何通知消费者;生产者一端的批处理;以及多个生产者如何协同工作。ProducerBarriersDisruptor 代码转载 2017-12-17 00:30:15 · 790 阅读 · 0 评论