- 博客(42)
- 收藏
- 关注
原创 Java并发编程实践:利用信号量实现阻塞集合demo
package com.rx.wwx; import java.util.HashSet; import java.util.Random; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.conc...
2019-01-18 10:39:20
328
转载 Guava异步事件总线AsyncEventBus的注解AllowConcurrentEvents分析
Guava提供了EventBus事件总线工具,可以很方便的创建观察者模式,基本使用请参考如下链接 http://www.cnblogs.com/peida/p/EventBus.html。 在设置观察者时,需要使用注解类@Subscribe来标识一个订阅者,但在注解中还要一个注解@AllowConcurrentEvents,这个注解是用来标识当前订阅者是线程安全的,那Guava内部是如何实现的...
2019-01-03 20:24:05
5017
转载 Java并发编程:CopyOnWriteArrayList
原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机...
2018-12-31 00:01:57
257
转载 redis主从、哨兵、集群的区别
原文来自:https://blog.csdn.net/c295477887/article/details/52487621 关于redis主从、哨兵、集群的介绍网上很多,这里就不赘述了。 一、主从 通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。 。但是由于数据是存储在一台服务器上的,如果这台...
2018-11-12 11:06:47
13729
3
转载 nginx中root和alias的区别
转自:https://www.cnblogs.com/zhangqunshi/p/6866522.html 今天使用nginx搭建了一个网站,访问后出现404错误Not found. 上网查了一下原因,是由于nginx的配置不对。因为我是有两个web目录,这两个目录在不同的位置上。而且我不想把两个目录合并在一起,所以就要配置两个location。配置如下: server { list...
2018-10-16 17:07:48
622
原创 Nginx入门系列
传送门:https://www.cnblogs.com/crazylqy/category/883974.html
2018-10-15 19:10:17
1037
转载 使用aop代理获取不到Annotation注解问题
原文来自:https://blog.csdn.net/frightingforambition/article/details/78842306 这里碰到了一个问题 ,执行的方法有注解,但是通过Annotation an = method.getAnnotation(UserChangeLog.class); 取值为null. 具体情况和此篇文章类似:示例 其实问题很简单,是代理对象和目标对...
2018-10-08 10:27:05
3667
1
转载 guava缓存的expireAfterWrite与refreshAfterWrite的区别
原文来自:https://my.oschina.net/scipio/blog/551475?p= expireAfterWrite是在指定项在一定时间内没有创建/覆盖时,会移除该key,下次取的时候从loading中取 expireAfterAccess是指定项在一定时间内没有读写,会移除该key,下次取的时候从loading中取 refreshAfterWrite是在指定时间内没有被创建...
2018-09-18 17:00:03
27409
转载 Java Guava Cache 使用
原文来自:https://blog.csdn.net/u012881904/article/details/79263787 Guava -Caache Guava缓存值CacheBuilder介绍-参考 Google -CachesExplained wiki 缓存框架Guava Cache部分源码分析 概述 缓存是日常开发中经常应用到的一种技术手段,合理的利用缓存可以极大的改善应用程序...
2018-09-18 14:26:37
4031
转载 并发编程工具之一:CountDownLatch 用法
原文来自:https://blog.csdn.net/Somhu/article/details/78614783 CountDownLatch 用法 CountDownLatch是java.util.concurrent包中一个类,CountDownLatch只要提供的机制是多个(具体数量等于初始化CountDownLatch时count的值)线程都达到了预期状态或者完成了预期工作时触发事件...
2018-09-14 15:52:45
13924
1
转载 使用ExecutorCompletionService 管理线程池处理任务的返回结果
在我们日常使用线程池的时候,经常会有需要获得线程处理结果的时候。此时我们通常有两种做法。 1. 使用并发容器将callable.call() 的返回Future存储起来。然后使用一个消费者线程去遍历这个并发容器,调用Future.isDone()去判断各个任务是否处理完毕。然后再处理响应的业务。 import java.util.concurrent.BlockingQueue; im...
2018-09-14 15:18:29
775
转载 利用消息队列实现最终一致性
本文转自:http://skaka.me/blog/2016/04/21/springcloud1/ 不同于单一架构应用(Monolith), 分布式环境下, 进行事务操作将变得困难, 因为分布式环境通常会有多个数据源, 只用本地数据库事务难以保证多个数据源数据的一致性. 这种情况下, 可以使用两阶段或者三阶段提交协议来完成分布式事务.但是使用这种方式一般来说性能较差, 因为事务管理器需要在多个...
2018-09-11 10:19:29
6548
转载 select/poll/epoll
在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在大数据、高并发、集群等一些名词唱得火热之年代,select和poll的用武之地越来越有限,风头已经被epoll占尽。 本文便来介绍epoll的实现机制,并附带讲解一下select和poll。通过对比其不同的实现机制,真正理解为何epoll能实现高并发。 select...
2018-09-09 00:42:44
372
原创 NIO相关基础篇
1.此篇文章主要讲解了操作系统的IO模型 2.讲解了IO过程中用户程序到操作系统内核到硬件的过程 相关文章转载自:https://mp.weixin.qq.com/s/q1G1-zV6Mhb72ukzTL7P5A 请复制文章地址,在微信浏览器中打开...
2018-09-08 23:49:01
236
转载 深入分析Java的序列化与反序列化
原文转自:http://www.hollischuang.com/archives/1140 序列化是一种对象持久化的手段。普遍应用在网络传输、RMI等场景中。本文通过分析ArrayList的序列化来介绍Java序列化的相关内容。主要涉及到以下几个问题: 怎么实现Java的序列化 为什么实现了java.io.Serializable接口才能被序列化 transient的作用是什么 怎么...
2018-09-07 11:47:32
163
转载 Protobuf 的 proto3 与 proto2 的区别
原文转自:https://solicomo.com/network-dev/protobuf-proto3-vs-proto2.html 这是一篇学习笔记。在粗略的看了 Protobuf 的文档中关于 proto2 和 proto3 的说明后,记录下了几点 proto3 区别于 proto2 的地方。 总的来说,proto3 比 proto2 支持更多语言但 更简洁。去掉了一些复杂的语法和特性...
2018-09-07 10:36:56
5452
原创 Windows Protobuf的运行环境
1.前往github Protocol Buffer的readme文件,找到下载地址,但是window是下需要下载额外的编译器 2.编译器下载地址:https://pan.baidu.com/s/1_LZMi0AqTJoeklind2bnPQ 3.执行命令 protoc.exe -I=proto的输入目录 --java_out=java类输出目录 proto的输入目录包括包括p...
2018-09-07 10:35:43
559
转载 单例模式与序列化那些事
本文将通过实例+阅读Java源码的方式介绍序列化是如何破坏单例模式的,以及如何避免序列化对单例的破坏。 单例模式,是设计模式中最简单的一种。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。关于单例模式的使用方式,可以阅读单例模式的七种写法 但是,单例模式真的能够实...
2018-09-07 10:29:23
231
转载 Java设计模式-单例模式
目录: 前言 一 单例模式简介 1.1 定义 1.2 为什么要用单例模式呢? 1.3 为什么不使用全局变量确保一个类只有一个实例呢? 二 单例的模式的实现 2.1 饿汉方式(线程安全) 2.2 懒汉式(非线程安全和synchronized关键字线程安全版本 ) 2.3 懒汉式(双重检查加锁版本) 2.4 懒汉式(登记式/静态内部类方式) 2.5 饿汉式(...
2018-09-07 10:27:59
169
转载 commons-lang3的tuple包介绍
问题 有时候我们调用方法的时候返回值有可能不止1个,比如说我们返回name = "张三" age = 20这两个值,那么这个时候方法的返回值怎么写呢。在Scala和python中都有Tuple使用,在java中我们怎么办。很容易我们就想到了一个方式:可以构造一个User类来封装这两个属性。 但是如果返回的两个值并没有任何关联关系,或者说每一个方法返回的参数都不同,那么我们就得为每一个方法的返回类...
2018-08-20 19:59:02
3180
转载 消息队列如何做到消息幂等性
一、缘起 如《消息总线消息必达》所述,MQ消息必达,架构上有两个核心设计点: (1)消息落地 (2)消息超时、重传、确认 再次回顾消息总线核心架构,它由发送端、服务端、固化存储、接收端四大部分组成。 为保证消息的可达性,超时、重传、确认机制可能导致消息总线、或者业务方收到重复的消息,从而对业务产生影响。 举个栗子: 购买会员卡,上游支付系统负责给用户扣款,下游系...
2018-08-02 20:32:07
16425
转载 消息队列如何做到消息必达
一、缘起 上周讨论了两期环形队列的业务应用: 《高效定时任务的触发》 《延迟消息的快速实现》 两期的均有大量读者提问: 任务、延迟消息都放在内存里,万一重启了怎么办? 能否保证消息必达? 今天就简单聊聊消息队列(MsgQueue)的消息必达性架构与流程。 二、架构方向 MQ要想尽量消息必达,架构上有两个核心设计点: (1)消息落地 (2)消息超时、重传、确认...
2018-08-02 20:31:00
1115
转载 服务降级的概念及应用手段
什么是服务降级 服务降级,就是对不怎么重要的服务进行低优先级的处理。说白了,就是尽可能的把系统资源让给优先级高的服务。资源有限,而请求是无限的。如果在并发高峰期,不做服务降级处理,一方面肯定会影响整体服务的性能,严重的话可能会导致宕机某些重要的服务不可用。所以,一般在高峰期,为了保证网站核心功能服务的可用性,都要对某些服务降级处理。 服务降级手段 拒绝服务 判断应用来源,高峰时段拒绝低优先级...
2018-07-24 23:38:55
657
转载 对高并发流量控制的一点思考
前言: 在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,主要就是自己对高并发流量控制的一点思考。 应对大流量的一些思路 首先,我们来说一下什么是大流量? 大流量,我们很可能会冒出:TPS(每秒事务量),QPS(每秒请求量),1W+,5W+,10W+,100W+...。其实并没有一个绝对的数字,如果这个量造成了系统的压力,影响了系统的性能,那...
2018-07-24 23:35:15
198
原创 深入理解Java虚拟机-读书笔记(1)
导读:JVM是Java的精髓所在,但有时候也是Java的短板所在,所以作为一个Java程序员,掌握JVM的知识,将会帮助我们进一步掌握Java,本文所有知识点来自《深入理解Java虚拟机》 初入JVM JVM有一个特性,那就是自动垃圾回收,帮助管理内存,让Java程序员不需要手动的去释放内存,但是有时候也是因为它的自动垃圾回收的“不彻底”,才会导致程序应用出现内存泄漏或者内存溢出 Java虚...
2018-07-24 23:26:22
183
转载 RabbitMQ中几种Exchange的对比
原来来自:https://www.cnblogs.com/hz04022016/p/6519445.html RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct,topic,header。但常用的主要是fanout,direct,topic。 性...
2018-07-22 22:47:13
1816
原创 Netty实战-读书笔记-ByteBuf
网络数据的基本单位是字节,那么在JavaNIO和netty分别用什么作为字节容易呢? 在JavaNIO中使用ByteBuffer作为字节容器,Netty使用ByteBuf Netty的数据处理API通过两个组件暴露出来,一个是ByteBuf,一个是ByteBufHolder ------- 跟ByteBuffer相比,ByteBuf有以下几个优点(个人觉得比较重要的几个点): 1.通过内...
2018-07-22 22:15:15
297
原创 RabbitMQ基础入门(一)
RabbitMQ是一款优秀的消息队列中间件,它广泛应用于企业级应用中,可以帮助应用解耦,面对一些业务场景起到一个很强的分流作用等等。为什么挑选RabbitMQ进行学习呢,主要是因为它支持大多数协议,支持AMQP协议,而且官方文档相当全面,今天面向官方文档进行一个基础入门。题主使用的语言是JAVA。 RabbitMQ是基于Erlang语言进行编写的,所以如果想要使用RabbitMQ,首先需要安装E...
2018-07-22 21:20:35
551
原创 简书最完整的RabbitMQ入门教程
https://www.jianshu.com/p/79ca08116d57 感谢大佬的分享
2018-07-21 18:46:42
22472
翻译 何时该用 RabbitMQ,何时该用 Apache Kafka?
转载自:https://www.sohu.com/a/145359159_747818 人们是如何做决定的呢?日常生活中,每当人们做出复杂或重大决定时,情绪往往起到最终的决定作用。但对于决策专家来说,他们的每一个决定都具有长远影响,因此做决定不能只靠冲动了。通常,高效率的执行者只会在他们凭借自发的专业思维掌握决策所需的所有信息之后,才靠本能、直觉或情绪做出决策。 如今,市场上有几十种消息传...
2018-07-21 15:29:12
384
原创 图文讲解AMQP
最近突然发现自己对消息队列一无所知,所以想一谈究竟,市场上轻量级的消息队列非常多,那么如何做到统一提供服务,屏蔽其中的实现的呢,他们都遵循高级消息队列协议(AMQP)协议,查阅了一些资料,自己总结了一下,画个图然后讲解一些流程,如果其中有我个人理解错误的地方,麻烦各位指出,万分感谢。 主要分为几个流程: 1.生产者发送消息到MQSERVER 2.根据消息绑定exchange,然后根据rout...
2018-07-21 15:04:28
721
转载 AMQP
当前各种应用大量使用异步消息模型,并随之产生众多消息中间件产品及协议,标准的不一致使应用与中间件之间的耦合限制产品的选择,并增加维护成本。AMQP是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。 当然这种降低耦合的机制是基于与上层产品,语言无关的协议。AMQP协议是一种二进制协议,提...
2018-07-19 22:36:32
400
原创 Netty实战-读书笔记-Netty组件和设计
《Netty实战》(《Netty In Action》)是一本好书,是我正在读的一般关于netty入门的书,我喜欢把知识点提出来记录,回头方便查看1.什么是Netty?Netty是一款基于Java NIO的异步和事件驱动实现的高性能网络框架2.Netty有哪些重要的组件Channel,EventLoop,ChannelFuture,ChannelHandler,ChannelPipeline3...
2018-07-14 19:11:29
238
原创 Netty入门例子(一): EchoServerApp和EchoClientApp
Netty是一个高性能的网络框架,遵循异步和事件通知的模型,隐藏了复杂的NIO和多线程构建,提供了一层简单易用的API在分布式微服务盛行的年代,与其快速搭建服务,按照配置构建微服务,还不如先入门其通讯原理,从通讯底层的构建去了解服务注册与发现Netty作为众多分布式应用的底层通讯应用,学习Netty将有助于我们学习分布式和微服务以下是来自《Netty实战》的入门例子以及个人的一些备注见解,个人刚刚...
2018-07-14 15:30:14
452
原创 JavaNIO优秀博文收集
1.基于Java NIO 实现简单的HTTP服务器2.Java NIO 实现简单的聊天室3.Java NIO的Selector长期更新,感谢江湖上那些优秀的人儿,你们永远是我学习的榜样
2018-07-11 22:28:15
167
转载 四种常用IO模型
原文来自:https://www.cnblogs.com/myJavaEE/p/6721127.html1) 同步阻塞IO(Blocking IO)2) 同步非阻塞IO(Non-blocking IO)3) IO多路复用(IO Multiplexing)4) 异步IO(Asynchronous IO)注意以下概念:1.同步/异步同步和异步是相对的同步 前后两件任务, 有严格的顺序一致性(依赖和递进...
2018-07-02 17:02:31
2736
转载 深入理解乐观锁与悲观锁
在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。无论是悲观锁还是乐观锁,都是人们定义出来的概念,可以认为是一种思想。其实不仅仅是关系型数据库系统中有乐观锁和悲观锁的概念,像memcache、hibernate、ta...
2018-06-28 14:23:12
454
1
转载 mysql中GROUP BY结合GROUP_CONCAT的使用
我们知道,group by可以将sql查询结果按照group by后面列进行分类显示。比如:Sql代码 select columnA,columnB from table group by columnA,columnB 则查询结果将按照columnA和columnB分类显示。没有显示在group by中的列不能直接作为返回列放在sql语句中,比如如下sql就是不正确的Sql代码 sele...
2018-06-28 14:22:43
1561
1
转载 MySQL 格式化日期函数 DATE_FORMAT(), FROM_UNIXTIME() 和 UNIX_TIMESTAMP() 之间区别
原文来自:http://blog.wpjam.com/m/mysql-date_format-from_unixtime-unix_timestamp/MySQL 中有非常多的日期函数,但是使用到比较多的就是 DATE_FORMAT(), FROM_UNIXTIME() 和 UNIX_TIMESTAMP() 这三个,DATE_FORMAT() 把日期进行格式化,FROM_UNIXTIME() 把时...
2018-06-28 14:21:59
3902
转载 Mysql模糊查询like效率,以及更高效的写法
原文来自:https://www.cnblogs.com/chaobest/p/6737901.html在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来。这个时候查询的效率就显得很重要! 一般情况下like模糊查询的写法为(field已建立索引):SELECT `col...
2018-06-28 14:21:25
1846
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人