关闭

微信红包算法?

作者:匿名用户 链接:https://www.zhihu.com/question/22625187/answer/40041558 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 微信是采用什么样的算法做到的?简单百度了下,目前尚未有官方的说明,仅仅在知乎里有一个较为热门的讨论,链接戳这里 不过他们讨论的太过于深入,有掉坑之嫌。 我按照自己的逻辑尝试了下,这个算法需要满...
阅读(963) 评论(0)

抽奖-高并发

上一篇写了关于抽奖算法的实现,本文就抽奖的高并发做简单的介绍 其实抽奖和秒杀系统的很多相似的地方,都会有这几个问题: 防止用户非法请求并发请求比较大数据库压力大 方案: 负载均衡缓存多线程异步… 流程: 初始化-把抽奖活动和奖品数据都放到redis缓存当有用户参与抽奖活动就从redis把奖品列表取出来调用之前提到的算法如果中奖更新redis数据,同时提交任务...
阅读(3189) 评论(0)

抽奖-算法

最近在搞抽奖活动的项目开发,涉及到抽奖算法和高并发,本文讨论一下抽奖的算法实现。 目标 首先算法要满足几个目标: 奖品尽量在活动期间被平均分布(不要在活动一开始就被抽完)大奖尽量在后面才被抽中奖品尽量不要有剩余每个奖品可以设置抽中概率 对于最后一点,因为活动前并不知道参加活动人数,所以设置的概率反而影响了前面几点。如果概率大了可能活动一开始就被抽完,如果太小参与人数不多可能...
阅读(1612) 评论(0)

Zookeeper开源客户端框架Curator简介[转]

Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情, 于是在它的基础上包装了一下, 提供了一套更好用的客户端框架. Netflix在用ZooKeeper的过程中遇到的问题, 我们也遇到了, 所以开始研究一下, 首先从他在github上的源码, wik...
阅读(227) 评论(0)

数据工程师必知算法:蓄水池抽样

摘要: 引言:众所周知,想要面试一个统计学家和软件工程师的合体——数据工程师——是件很难的事情。我在面试中常使用的方法是:提出即需要算法设计,又需要一些概率论知识的问题,来考察面试者的功底。         英文原文:hadoop-stratified-randosampling-algorithm         译者:bruce-accumulate 译文链接...
阅读(457) 评论(0)

Java总结篇系列:Java泛型

一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(String[] args) { 4 List list = new ArrayList(); 5 list.add("qqyumidi")...
阅读(155) 评论(0)

zookeeper编程(二)

ZooKeeper的轮廓 /---root   |   \----child1   |   \----child2   |   \----child3      |      \----grandson1      |      \----grandson2 采用了简化的praxos算法来确保zookeeper集群节点的数据一致性 只要Quorum的成员有一半以上处于...
阅读(256) 评论(0)

ZooKeeper编程(一)

ZooKeeper的用途:distributed coordination;maintaining configuration information, naming, providing distributed synchronization, and providing group services. Zookeeper的节点都是存放在内存中的,所以读写速度很快。更新日志被记录到了磁盘中...
阅读(210) 评论(0)

Java多线程同步设计中使用Mutex

Mutex是互斥体,广泛地应用在多线程编程中。本文以广为流程的Doug Lea的concurrent工具包的Mutex实现为例,进行一点探讨。在Doug Lea的concurrent工具包中,Mutex实现了Sync接口,该接口是concurrent工具包中所有锁(lock)、门(gate)和条件变量(condition)的公共接口,Sync的实现类主要有:Mutex、Semaphore及其子...
阅读(1365) 评论(1)

两种分布式锁实现方案(二)

四。方案2,基于redis的分布式锁 /** *分布式锁工厂类 */ public class RedisLockUtil { private static final Logger logger = Logger.getLogger(RedisLockUtil.class); private static Object schemeLock = new Object(); private...
阅读(2066) 评论(0)

两种分布式锁实现方案(一)

一。为何使用分布式锁? 当应用服务器数量超过1台,对相同数据的访问可能造成访问冲突(特别是写冲突)。单纯使用关系数据库比如MYSQL的应用可以借助于事务来实现锁,也可以使用版本号等实现乐观锁,最大的缺陷就是可用性降低(性能差)。对于GLEASY这种满足大规模并发访问请求的应用来说,使用数据库事务来实现数据库就有些捉襟见肘了。另外对于一些不依赖数据库的应用,比如分布式文件系统,为了保证同一文件在大...
阅读(2707) 评论(0)

Redis 分布式锁实现

Redis是一个key-value存储系统。和Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持lists(链表)、sets(集合)和zsets(有序集合)几种数据类型。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。     下面我们以redis为基...
阅读(484) 评论(0)

[项目回顾]基于Redis的在线用户列表解决方案

前言:   由于项目需求,需要在集群环境下实现在线用户列表的功能,并依靠在线列表实现用户单一登陆(同一账户只能一处登陆)功能:   在单机环境下,在线列表的实现方案可以采用SessionListener来完成,当有Session创建和销毁的时候做相应的操作即可完成功能及将相应的Session的引用存放于内存中,由于持有了所有的Session的引用,故可以方便的实现用户单一登陆的功能(比...
阅读(934) 评论(0)

Redis中PipeLine使用(二)---批量get与批量set

批量查询的相关问题总结 再做测试之前首先向redis中批量插入一组数据 1-->1 2-->2 3-->3 4-->4 5-->5 6-->6123456123456 现在批量get数据 for (EntryString,String> entry :map.entrySet()) { pipe.get(entry.getKe...
阅读(2060) 评论(0)

Redis中PipeLine使用(一)

(一)简介  Redis客户端与Redis之间使用TCP协议进行连接,一个客户端可以通过一个socket连接发起多个请求命令。每个请求命令发出后client通常会阻塞并等待redis服务处理,redis处理完后请求命令后会将结果通过响应报文返回给client,因此当执行多条命令的时候都需要等待上一条命令执行完毕才能执行,如:get ‘0’,get ‘1’,get ‘2’ 其执行过程...
阅读(1780) 评论(0)
86条 共6页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:7794204次
    • 积分:66939
    • 等级:
    • 排名:第28名
    • 原创:254篇
    • 转载:2714篇
    • 译文:3篇
    • 评论:714条
    文章分类
    最新评论