看一遍就懂,详解java多线程——volatile

多线程一直以来都是面试必考点,而volatile、synchronized也是必问点,这里我试图用容易理解的方式来解释一下volatile。了解volatile之前,先来看一下它的最大特点和作用:1...
阅读(5) 评论(0)

贫血,充血模型的解释以及一些经验

关于在项目中的分层问题争论已久,过大的domain object或者过大的Service都存在较大的不可避免的问题,尤其是Service层在协调多个不同的domain object的持久化时代码更是丑陋,那么引入怎样的模式来改善现状?网上找到了这篇还是不错的。转载自:http://kb.cnblogs.com/page/520743/为了补大家的遗憾,在此总结下ROBBIN的领域模型的一些观点和大...
阅读(58) 评论(0)

Java并发编程之CountDownLatch,CyclicBarrier实现一组线程相互等待、唤醒

java多线程应用场景不少,有时自己编写代码又不太容易实现,好在concurrent包提供了不少实现类,还有google的guava包更是提供了一些最佳实践。 Java并发编程之CountDownLatch,CyclicBarrier...
阅读(58) 评论(2)

mac和linux下使用Docker,部署SpringBoot项目到docker

主要是看一下如何在linux及mac上安装docker,创建docker镜像,部署SpringBoot项目到docker,并借助于DaoCloud进行docker镜像下载加速等。我用的电脑是mac,本身并不支持docker,需要安装Docker ToolBox才能使用Docker。由于大部分情况下线上服务器都是linux,所以这里先以linux下Docker的使用为例,后面再讲在mac上部署Doc...
阅读(117) 评论(0)

使用RateLimiter完成简单的大流量限流,抢购秒杀限流

RateLimiter是guava提供的基于令牌桶算法的实现类,可以非常简单的完成限流特技,并且根据系统的实际情况来调整生成token的速率。 通常可应用于抢购限流防止冲垮系统;限制某接口、服务单位时间内的访问量,譬如一些第三方服务会对用户访问量进行限制;限制网速,单位时间内只允许上传下载多少字节等。 下面来看一些简单的实践,需要先引入guava的maven依赖。 一 有很多任务,但希望每秒...
阅读(124) 评论(0)

限流算法之漏桶算法、令牌桶算法

昨天CodeReview的时候看到同时使用RateLimiter这个类用作QPS访问限制.学习一下这个类. RateLimiter是Guava的concurrent包下的一个用于限制访问频率的类. 1.限流 每个API接口都是有访问上限的,当访问频率或者并发量超过其承受范围时候,我们就必须考虑限流来保证接口的可用性或者降级可用性.即接口也需要安装上保险丝,以防止非预期的请求对系统...
阅读(113) 评论(0)

限流之令牌桶算法——RateLimiter官方文档

昨天CodeReview的时候看到同时使用RateLimiter这个类用作QPS访问限制.学习一下这个类. RateLimiter是Guava的concurrent包下的一个用于限制访问频率的类. 1.限流 每个API接口都是有访问上限的,当访问频率或者并发量超过其承受范围时候,我们就必须考虑限流来保证接口的可用性或者降级可用性.即接口也需要安装上保险丝,以防止非预期的请求对系统...
阅读(102) 评论(0)

BloomFilter布隆过滤器使用

从上一篇可以得知,BloomFilter的关键在于hash算法的设定和bit数组的大小确定,通过权衡得到一个错误概率可以接受的结果。 算法比较复杂,也不是我们研究的范畴,我们直接使用已有的实现。 google的guava包中提供了BloomFilter类,我们直接使用它来进行一下简单的测试。 新建一个maven工程,引入guava包 com.go...
阅读(250) 评论(0)

使用BloomFilter布隆过滤器解决缓存击穿、垃圾邮件识别、集合判重

Bloom Filter是一个占用空间很小、效率很高的随机数据结构,它由一个bit数组和一组Hash算法构成。可用于判断一个元素是否在一个集合中,查询效率很高(1-N,最优能逼近于1)。 在很多场景下,我们都需要一个能迅速判断一个元素是否在一个集合中。譬如: 网页爬虫对URL的去重,避免爬取相同的URL地址; 反垃圾邮件,从数十亿个垃圾邮件列表中判断某邮箱是否垃圾邮箱(同理,垃圾短信); ...
阅读(218) 评论(1)

使用redis计数来控制单位时间内对某接口的访问量,防止刷验证码接口之类的

使用自定义注解的方式,在需要被限制访问频率的方法上加注解即可控制。 看实现方式,基于springboot,aop,redis。 新建Springboot工程,引入redis,aop。 创建注解 package com.tianyalei.annotation; import org.springframework.core.Ordered; import org.springframew...
阅读(227) 评论(0)

2 秒杀系统模拟基础实现,使用Redis实现

这一篇,我们来使用redis进行数据存储。 新建一个redis的service实现类 package com.tianyalei.service; import com.tianyalei.model.GoodInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframew...
阅读(413) 评论(0)

1 秒杀系统模拟基础实现,使用DB实现

本文根据动脑学院的一节类似的课程,改编实现。分别使用DB和redis来完成。 隔离的解释 业务隔离:将秒杀业务独立出来,尽量不与其他业务关联,以减少对其他业务的依赖性。譬如秒杀业务只保留用户id,商品id,数量等重要属性,通过中间件发送给业务系统,完成后续的处理。 系统隔离:将秒杀业务单独部署,以减少对其他业务服务器的压力。 数据隔离:由于秒杀对DB的压力很大,将DB单独部...
阅读(330) 评论(0)

分布式锁 Java常用技术方案

前言:       由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题。所以自己结合实际工作中的一些经验和网上看到的一些资料,做一个讲解和总结。希望这篇文章可以方便自己以后查阅,同时要是能帮助到他人那也是很好的。   ===========================================...
阅读(134) 评论(0)

4 手写实现SpringMVC,第四节:匹配用户请求、执行映射方法

在上一篇我们已经完成了配置的url到方法的映射,并且完成了method的各参数的注解、参数名、类型等的映射配置。 这一篇就很简单了,就是通过获取request的请求地址和参数,和已经加载好的映射进行比对,如果匹配上了就执行对应的方法。 直接上代码: @Override protected void doPost(HttpServletRequest req, HttpServletR...
阅读(128) 评论(0)

3 手写实现SpringMVC,第三节:通过反射给属性和参数注入值

在上一篇已经完成了读取beanName->Object映射关系的功能,这一篇就是把读取到的映射注入到属性中。 在WebController里定义了需要被Autowired的两个Service,myQueryService和modifyService,下面来给他们赋值。 通过反射给属性赋值...
阅读(118) 评论(0)
78条 共6页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:95769次
    • 积分:1529
    • 等级:
    • 排名:千里之外
    • 原创:59篇
    • 转载:19篇
    • 译文:0篇
    • 评论:19条
    博客专栏