- 博客(126)
- 资源 (31)
- 收藏
- 关注
转载 spring cache 使用指南
spring有一套和各种缓存的集成方式。类似于sl4j,你可以选择log框架实现,也一样可以实现缓存实现,比如ehcache,guavacache.首先,缓存是为了省略消耗时间的步骤,比如io。当我需要从数据库查询的数据几乎没有变化,或者变化很少的时候,我就没必要每次都去数据库里拿数据了。大可以放到本地,直接取出来就可以了。这时候需要注意的是数据一致性问题,缓存的数据是否被更改了,数据是否有效。S...
2018-07-01 15:37:12
2065
1
转载 令牌桶算法RateLimiter
令牌桶原理:令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。http://blog.youkuaiyun.com/rickiyeat/article/details/74530967http://blog.youkuaiyun.com/g_hongjin/article/details/51649246算法描述:假如用户配置的平均
2018-01-18 11:25:36
2170
转载 解决Git Revert操作后再次Merge代码被冲掉的问题:
git reset & git revert 区别:1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。 2. 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再
2017-08-22 11:21:25
30372
转载 JAVA IO 以及 NIO 理解
转载:http://www.cnblogs.com/hapjin/p/5736188.html由于Netty,了解了一些异步IO的知识,JAVA里面NIO就是原来的IO的一个补充,本文主要记录下在JAVA中IO的底层实现原理,以及对Zerocopy技术介绍。IO,其实意味着:数据不停地搬入搬出缓冲区而已(使用了缓冲区)。比如,用户程序发起读操作,导致“ syscall read ”
2017-05-25 15:39:45
839
1
转载 J.U.C之AQS:CLH同步队列
此篇博客所有源码均来自JDK 1.8在上篇博客【死磕Java并发】—–J.U.C之AQS:AQS简介中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列。CLH同步队列是一个FIFO双向队列,AQS依赖它来完成同步状态的管理,当前线程如果获取同步状态失败时,AQS则会将当前线程已经等待状态等信息构造成一个节点(Node)并将其加入到CLH同步队列,同时会阻塞当前线
2017-05-16 18:40:37
573
转载 J.U.C之AQS:同步状态的获取与释放
此篇博客所有源码均来自JDK 1.8在前面提到过,AQS是构建Java同步组件的基础,我们期待它能够成为实现大部分同步需求的基础。AQS的设计模式采用的模板方法模式,子类通过继承的方式,实现它的抽象方法来管理同步状态,对于子类而言它并没有太多的活要做,AQS提供了大量的模板方法来实现同步,主要是分为三类:独占式获取和释放同步状态、共享式获取和释放同步状态、查询同步队列中的等待线程情况。
2017-05-16 17:58:52
540
转载 Dubbo消费者无法连接到生产者提供的服务?内网IP?
环境:Cent OS 7.0背景:这篇文章的标题可以设置为如下几个,因为他都是同一个解决方法: (1)Dubbo注册zookepper时为什么会自动使用内网IP? (2)Dubbo消费者无法连接到生产者提供的服务 (3)。。。场景还原1、项目部署架构最近在开发一个项目,使用到Dubbo服务,以下是项目部署的情况,详细说明如下(IP
2017-05-16 17:17:35
1324
转载 mongoDB 全文搜索 TextSearch
snowball(默认分词器)只有在Mongodb 3.2之后的企业版中才开始加入了对中文的支持,之前或者社区的版本在建立全文索引时会自动过滤中文字符。在Mongodb 3.2企业版中,对中文建立全文索引后,默认使用的是与英文同样的分词规则,即以空格与符号作为词与词之间分隔的界限。所以,当使用“福尔摩斯”作为搜索词时,无法搜索到“福尔摩斯探案全集”,只能搜索到类似“福尔摩斯(1)”之类
2017-05-04 17:27:36
4601
转载 dubbo 请求调用过程分析
服务消费方发起请求当服务的消费方引用了某远程服务,服务的应用方在spring的配置实例如下:dubbo:referenceid="demoService"interface="com.alibaba.dubbo.demo.DemoServ ice" />demoService实例其实是代理工厂生产的代理对象(大家可以参考代理那部分生成的伪代码),在代码中调用demoService.
2017-04-11 18:01:44
17998
7
转载 RPC原理及RPC实例分析
在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示。这些程序的特点是服务消费方和服务提供方是本地调用关系。public class Test { public static void main(String[] args) { HelloWorldService helloWorldService = new HelloWo
2017-04-11 14:45:40
702
转载 Dubbo请求响应解析
Dubbo中服务消费者和服务提供者之间的请求和响应过程 发表于 2017-03-21 23:58:13 | 分类于 dubbo | 服务提供者初始化完成之后,对外暴露Exporter。服务消费者初始化完成之后,得到的是Proxy代理,方法调用的时候就是调用代理。服务消费者经过初始化之后,得到的是一个动态代理类,InvokerInvocationHandler,包含MockCl
2017-04-10 16:02:13
1286
转载 JVM GC 垃圾回收算法图解
前面在Java垃圾收集算法中讲过垃圾收集算法中的分代收集器,今天看了一个视频发现里面将的也很不错,所以决定再总结一下。我们知道,在分代收集算法中堆空间被分为新生代和老年代。因为新生代中对象的存活率比较低,所以一般采用复制算法,老年代的存活率一般比较高,一般使用”标记-清理”或者”标记-整理”算法进行回收。上面的这个图已经很清楚的将堆的分区展现出来了。
2017-02-16 15:47:52
1902
转载 Retry重试机制
业务场景 应用中需要实现一个功能: 需要将数据上传到远程存储服务,同时在返回处理成功情况下做其他操作。这个功能不复杂,分为两个步骤:第一步调用远程的Rest服务逻辑包装给处理方法返回处理结果;第二步拿到第一步结果或者捕捉异常,如果出现错误或异常实现重试上传逻辑,否则继续逻辑操作。解决方案演化 这个问题的技术点在于能够触发重试,以及重试情况下逻辑有效执行
2016-12-25 18:53:36
27723
转载 强制要求JVM始终抛出含堆栈的异常(-XX:-OmitStackTraceInFastThrow)
异常没有打印栈信息OmitStackTraceInFastThrow, jdk 1.6开始,默认server模式下开启了这个参数,意为当jvm检测到程序在重复抛一个异常,在执行若干次后会将异常吞掉,这里的若干次在jdk1.7测得是20707。即执行20707次后,stackTrace 长度会为0。有时这不利于我们排错,通过指定OmitStackTraceInFastThrow,可禁用这功能。
2016-12-22 23:00:53
3023
2
原创 Zookeeper分布式锁
//基于线程绑定ThreadLocalpublic class ZkNoReentrantLock { private final static Logger logger = LoggerFactory.getLogger(ZkNoReentrantLock.class); private InterProcessSemaphoreMutex interMutex;
2016-11-27 20:38:22
600
原创 基于Redis BloomFilter算法
public class BloomFilter implements Serializable { private static final long serialVersionUID = 5829598197124113258L; private static final int DEFAULT_SIZE =2 25 ; //2的24次方 private static
2016-11-27 20:34:42
2699
转载 Redis BitMap适应场景
Bitmap以及Redis Bitmaps快速入门(Crash Course on Bitmap and Redis Bitmaps)Bitmap(即Bitset) Bitmap是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset),在bitmap上可执行AND,OR,XOR以及其它位操作。位图计数(Population Count) 位图
2016-11-27 20:29:04
5745
转载 ActiveMQ高级特性:VirtualTopic
ActiveMQ支持的虚拟Destinations分为有两种,分别是Ø 虚拟主题(Virtual Topics)Ø 组合 Destinations(CompositeDestinations)这两种虚拟Destinations可以看做对简单的topic和queue用法的补充,基于它们可以实现一些简单有用的EIP功能,虚拟主题类似于1对多的分支功能+消费端的cluster+failo
2016-04-26 17:24:05
5181
转载 架构のHP&HA&LB
高性能集群(Highperformance cluster,HP) 它是利用一个集群中的多台机器共同完成同一件任务,使得完成任务的速度和可靠性都远远高于单机运行的效果。弥补了单机性能上的不足。该集群在天气预报、环境监控等数据量大,计算复杂的环境中应用比较多; 负载均衡集群(Loadbalance cluster,LB) 它是利用一个集群中的多台单机,完成许多并行的小的工作。一般情况
2016-04-25 18:01:19
836
原创 zookeeper知识点
znode(原子读写操作):zoo.cfg:tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。dataDir:是Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。clientPort:这个端口就是客户端连接
2016-04-03 20:44:57
1284
转载 zookeeper服务注册
系统结构:2 节点角色:Server1、Server2、Server3构成了ZooKeeper注册中心,通过LeaderElection,Server2为Leader,Server1和Server3为Follower;Server1和Server2本身还提供服务,假设Server3不提供任何服务;Server4对外提供服务,但没有部署ZooKeeper服务器,不加入ZooK
2016-04-03 20:35:07
2672
原创 code玩玩
public class recursive { /** * 倒叙递归 * @param args */ public static void main(String[] args) { String str = "I am student"; String[] s = str.split(" "); reverse(s,0); } public static vo
2016-03-24 18:05:21
396
转载 秒杀
0 系列目录秒杀系统架构秒杀系统架构分析与实战1 秒杀业务分析正常电子商务流程(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货秒杀业务的特性(1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短、瞬时并发量高;2 秒杀技术挑战假设
2016-03-16 19:11:48
1087
原创 事务小结
事务1.XA(有一个单点协调事务管理器) XA是由X/Open组织提出的分布式事务的规范。XA规范主要定义了(全局)事务管理器(Transaction Manager)和(局部)资源管理器(Resource Manager)之间的接口。XA接口是双向的系统接口,在事务管理器(Transaction Manager)以及一个或多个资源管理器(Resource Manager)之间形成通信
2016-03-11 16:58:36
451
原创 内核空间与用户空间
内核空间与用户空间内核空间主要是指操作系统运行时所使用的用于程序调度、虚拟内存的使用或者连接硬件资源等的程序逻辑。为何需要内存空间和用户空间的划分呢?很显然和前面所说的每个进程都独立使用属于自己的内存一样,为了保证操作系统的稳定性,运行在操作系统中的用户程序不能访问操作系统所使用的内存空间。这也是从安全性上考虑的,如访问硬件资源只能由操作系统来发起,用户程序不允许直接访问硬件资源。如果
2016-03-01 15:20:03
2916
1
原创 ThreadPoolExecuter 原理机制
当调用 execute() 方法添加一个任务时,线程池会做如下判断:a. 如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务;b. 如果正在运行的线程数量大于或等于 corePoolSize,那么将这个任务放入队列。c. 如果这时候队列满了,而且正在运行的线程数量小于 maximumPoolSize,那么还是要创建线程运行这个任务;d. 如果队列满了
2015-11-21 13:05:51
3059
转载 spring中获取request对象
1.通过注解获取(很简单,推荐):public class Hello {@Autowired HttpServletRequest request; //这里可以获取到request}2.在web.xml中配置一个监听: org.springframework.web.context.request.Reques
2015-09-07 14:12:30
543
转载 利用redis + lua解决抢红包高并发的问题
过年微信红包很火,最近有个项目也要做抢红包,于是写了个红包的生成算法。红包生成算法的需求预先生成所有的红包还是一个请求随机生成一个红包简单来说,就是把一个大整数m分解(直接以“分为单位,如1元即100)分解成n个小整数的过程,小整数的范围是[min, max]。最简单的思路,先保底,每个小红包保证有min,然后每个请求都随机生成一个0到(max-min)
2015-08-28 15:18:45
746
转载 java对象内存结构
public class Student {privateStringname;privateinthigh;privateIntegerage;privatelongjj;privateLongweight;privateBigDecimalincome;}System.out.println(VMSupport.vmDetails()
2015-08-19 16:12:08
429
原创 CAS:Compare And Swap 无锁
CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。import java.lang.reflect.Field;import sun.misc.Unsafe;public class UnsafeTest{ private static Unsafe unsafe;
2015-08-19 14:32:40
489
原创 springMVC 笔记
springmvc工作流程:1 用户请求 如 /user.xhtml2 DispatchServlet拦截,web.xml中配置 *.xhtml 被DispatchServlet拦截3 DispatchServlet 通过handlerMaping检查 该请求匹配的controller4 执行Controller完毕后,如果返回字符串viewResolver包装成相应对象,如
2015-08-16 18:49:07
443
原创 常用 linux 查询日志排错命令 grep & less
一:grep : grep -w "xxxx" yyyyy.log -2 --color -n > /tmp/tmp.log-w 全匹配-2 关键字上下2行--color 关键字着色-n 输出行号less /tmp/tmp.log或者grep -w "xxxx" yyyyy.log -2 --color -n | less二:less
2015-06-30 09:57:30
7755
转载 Eden&Survivor
1.为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会
2015-06-10 18:08:17
2425
转载 图解JVM内存分配和回收
最简单例子图解JVM内存分配和回收原文链接:最简单例子图解JVM内存分配和回收一、简介JVM采用分代垃圾回收。在JVM的内存空间中把堆空间分为年老代和年轻代。将大量(据说是90%以上)创建了没多久就会消亡的对象存储在年轻代,而年老代中存放生命周期长久的实例对象。年轻代中又被分为Eden区(圣经中的伊甸园)、和两个Survivor区。新的对象分配是首先放在Eden区,Survivor
2015-06-10 17:28:12
646
原创 vi 常用命令
:[range]s/pattern/string/[c,e,g,i]range 指的是范围,1,7 指从第一行至第七行,1,$ 指从第一行至最后一行,也 就是整篇文章,也可以 % 代表。还记得吗? % 是目前编辑的文章,# 是前一次编辑的文章:s/old/new/g 替换整行的全部匹配:%s/fuck/fork/cgi g 大概都是要加的,否则只会替换每一行的第一个符合字符串。可
2015-05-29 14:50:40
385
原创 SSH免密码登录原理
原理:密匙认证需要依靠密匙,首先创建一对密匙(包括公匙和密匙,并且用公匙加密的数据只能用密匙解密),并把公匙放到需要远程服务器上。这样当登录远程服务器时,客户端软件就会向服务器发出请求,请求用你的密匙进行认证。服务器收到请求之后,先在你在该服务器的宿主目录下寻找你的公匙,然后检查该公匙是否是合法,如果合法就用公匙加密一随机数(即所谓的challenge)并发送给客户端软件。客户端软件收到 “c
2015-05-22 11:09:50
943
转载 Java内存访问重排序的研究
什么是重排序请先看这样一段代码1public class PossibleReordering {static int x = 0, y = 0;static int a = 0, b = 0;public static void main(String[] args) throws InterruptedException { Thread one = new Thr
2014-12-30 09:39:19
552
TheDefinitiveGuideToTerracottaCluster
2014-06-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人