使用位图法记录用户在一个月内的活跃情况
来源:互联网 发布:美的网络专供和实体店 编辑:程序博客网 时间:2024/06/05 04:31
当我们在某些情况下,比如需要记录一个用户在某个月内哪一天上线了这种情况。氮素那,如果用户数量大(百万级用户),记录信息量少(只有上线没上线两种情况)。这种情况下的记录如果使用传统的面向对象的方式保存就很浪费空间了。
那么怎么存才能使信息记录准确但是又占用空间少呢?可以使用2进制的方式保存嘛。
二进制只有两种值的类型(0,1),用户情况也只有两种类型(上线、没上线)。
需要记录一个月内的用户情况,int类型有32位,正好够用。
好!(语出我闺女)
决定了!
就用他了!
话又说回来了,怎么操作二进制数据那。
也就那几种啦。简单简单,一点也不难。使用位运算符即可
“与”、“非”、“或”、“异或”。
1.与运算符
与运算符用符号“&”表示,其使用规律如下:
两个操作数中位都为1,结果才为1,否则结果为0。
2.或运算符
或运算符用符号“|”表示,其运算规律如下:
两个位只要有一个为1,那么结果就是1。
3.非运算符
非运算符用符号“~”表示,其运算规律如下:
如果位为0,结果是1,如果位为1,结果是0。
4.异或运算符异或运算符是用符号“^”表示的,其运算规律是:
两个操作数的位中,相同则结果为0,不同则结果为1。
除了使用上述操作之外还需要用到当前是哪一天啊。
java中有三种移位运算符
<< : 左移运算符,num << 1,相当于num乘以2
>> : 右移运算符,num >> 1,相当于num除以2
>>> : 无符号右移,忽略符号位,空位都以0补齐
那么准备工作做完了。我们在操作的时候首先把当前日期对应的位置置1,其他位置置0。
然后取得用户的活跃信息,把用户活跃值与日期数字相或。因为日期数字除了日期位其他都是0,所以除了日期位之外,用户信息其他位数字保持不变。只有对应当前日期的值受到影响。然后保存这个值。这样就大功告成啦。
比如某人1号上线,那么他对应的活跃信息就是0001,如果1、3号上线,2号没上,那么他对应的活跃信息就是0101。
代码如下
int t = 1;//日期int t2 = 0;//用户信息t = t << 1;//过了一天,日期位左移一位t2 = t | t2;//用户今天活跃了,把代表今天的位置置1System.out.println(Integer.toBinaryString(t2));
困扰我们多时的问题这简单就解决了,是不是很简单啊。哈哈哈
- 使用位图法记录用户在一个月内的活跃情况
- 一个月内留存用户和活跃用户并没有增长,这个月的运营工作是失败的吗?
- 一个APP用户的活跃情况,和下期活跃预测的例子
- sql 连续两个月活跃的用户
- 位图法统计活跃用户
- redis位图法统计活跃用户
- redis位图法统计活跃用户
- WhatsApp月活跃用户4.3亿,是如何做到的
- redis位图法统计活跃用户+统计3天的连续登录用户案例
- 查看一段周期内每天表空间使用情况,运用场景评估一个月需要增加多大的表空间
- 使用Redis统计活跃用户
- 如何查看用户使用情况(最近登入,活跃度。。。)
- 查询近一个月的表空间使用情况
- redis使用bitmaps实现网站活跃用户的统计
- redis实际应用位图法统计活跃用户
- 一个查看所有用户的磁盘空间使用情况的脚本
- WhatsApp月活跃用户量达3.5亿,它成功的原因很简单
- .Net GridView 应用:Gridview有一个CheckBox列,在用了分页的情况下,如何取出用户选择的所有记录id
- webstorm下的json-server
- windows下Graphviz安装及入门教程
- Netty 实例学习一
- Using Android Studio to build applications with NDK and Boost C++ libraries
- socket编程常见问题笔记
- 使用位图法记录用户在一个月内的活跃情况
- BZOJ-2049 2049: [Sdoi2008]Cave 洞穴勘测 LCT||并查集||可撤销并查集+时间分治
- 2017 秋招 百度二轮面试—血淋淋的经历写实
- 创建Maven项目pom.xml出现错误(依赖Missing)
- 用 Kotlin 开启我们的 Activity
- 使用QMainWindow进行布局
- css clientheight、offsetheight、scrollheight详解
- 3分钟学会自媒体爆款标题,直接套用
- POJ2996