当前位置: 首页 > news >正文

德育工作网站建设方案做网站建设与推广企业

德育工作网站建设方案,做网站建设与推广企业,推广营销平台,中国住房和城乡建设部网站造价师注册通过位运算打多个标记 如何在一个字段上,记录多个标记? 如何在一个字段上,记录不同类型的多个标记? 如何用较少的字段,记录多个标记? 如何在不增加字段的要求下,记录新增的标记? 在实…

通过位运算打多个标记

如何在一个字段上,记录多个标记?

如何在一个字段上,记录不同类型的多个标记?

如何用较少的字段,记录多个标记?

如何在不增加字段的要求下,记录新增的标记?

在实际的开发中,经常有这样的需求,需要用尽可能少的字段,记录多个标记?

比如交易中一个订单,是否发生过支付?是否进行过发货?是否发生过退货退款?是否进行过理赔?

比如社交中一个帖子,是否审核通过?是否被举报过?是否发生过二次编辑,是否要置顶等等

以上场景,最终都是要记录到数据库中的。如果每增加一个类型,都增加一个字段标记是或者否的话,那每行记录的字段数,得增加到多少?

所以我们的诉求是希望通过尽可能少的字段,最好是不要增加数据库的字段,能够记录同时记录多个标记。

这样的场景,一种解决方式是:在数据库中增加一个内容是JSON格式的字段,然后每次往JSON中增加内容。这种方式的好处是比较灵活,增加标记不用修改数据库DDL。而且不需要记录的标记可以不存储,不用占用存储空间。但文本格式毕竟会占用较多的存储空间,随着标记的增加,类似MySQL数据库可能需要调整字符串长度

另一种解决方式是位运算,通过在不同的位置填充0或者1,表示标记的是或者否,有或者没有。大名鼎鼎的布隆过滤器,实现原理也是类似的

比如说一个订单,我们需要记录它是否发生过支付?是否发生过发货?是否发生过退货?那么就可以设计这么几个标记

PAY_FLAG(1L << 1L),
DELIVER_FLAG(1L << 2L),
REFUNR_FLAG(1L << 3L),

然后在订单表中增加一个flag​字段,通过位运算,记录订单的不同标记。方法如下

// 设置Flag
public static Long setFlag(Long orderFlag, OrderFlagEnum orderFlagEnum) {orderFlag |= orderFlagEnum.getFlag();return orderFlag;
}
// 清除Flag
public static Long clearFlag(Long orderFlag, OrderFlagEnum orderFlagEnum) {orderFlag &= ~orderFlagEnum.getFlag();return orderFlag;
}// 判断是否设置过某个Flag
public static boolean hasFlag(OrderFlagEnum orderFlagEnum, Long orderFlag) {return (orderFlag & orderFlagEnum.getFlag()) != 0;
}

引申一下,如果需要在一个字段中,记录多个标记,通过位运算,又该怎么实现呢?

比如说想要在一个字段中,记录两个标记。

还是可以通过不同位置标记1还是0实现,比如一个Long型标记,可以在低53位记录一个标记,在高10位记录另一个标记。

// 初始标记
Long flag = 0L;
// 低位需要记录的标记
Long lowFlag = 1L << 11L;
// 高位需要记录的标记
Long highFlag = 1L << 3L;// 设置低位的标记
flag |= lowFlag;
// 设置高位的标记
flag |= (highFlag << 53);// 判断是否设置低位标记
System.out.println((flag & lowFlag) != 0);// true
// 判断是否设置高位标记
System.out.println((flag >> 53L & highFlag) != 0); // true

同理,如果需要在一个字段记录多个标记,只需要划分不同的标记区间就可以了。

比如Java中的读写锁ReentrantReadWriteLock,就是通过在内部表示锁状态的state变量上的低16位,表示写锁,高16位,表示读锁

这里为什么这么设计呢?而不是维护一个读锁,一个写锁?是因为通过CAS的方式,无法一次性操作两个变量

http://www.yayakq.cn/news/423942/

相关文章:

  • 上海网站建设公司大全百度地图手机网站代码
  • 怎么把网站黑掉wordpress固定链接
  • 相城苏州网站建设淘宝电商怎么做
  • 用点心做点心官方网站个人网站备案名称
  • 官网网站开发框架新建定制网站费用
  • 东营组建网站这几年做啥网站能致富
  • 网站安全管理制度建设下载网站开发所需要的语言
  • 上海网站建设费集团网站设计案例
  • 如皋教育门户网站建设经验自己搭建vps上外网
  • 购书网站开发的意义wordpress 汉化软件
  • 什么样的网站开发比较吃香google网站打不开了
  • 织梦网站最新漏洞入侵中国十大it外包公司
  • 石家庄网站建设模板网站建好怎么发布
  • 公司网站建设 费用入账做网站 空间
  • 网站建设域名有哪些类型清远市住房和城乡建设管理局门户网站
  • 网站建设的五个基本要素可以做仿牌网站
  • 商城网站用什么做优化大师的作用
  • 如何查询网站备案信息查询深圳做棋牌网站建设有哪些公司
  • asp.net网站开发项目化教程公司网站开发建设
  • 可以做代发货源的网站artisteer 做的网站
  • 可以玩h5的网站深圳一建公司地址
  • 惠安县住房和城乡规划建设局网站科技网络公司经营范围
  • 企业小型网站要多少钱重庆做网站多少钱
  • 我找伟宏篷布我做的事ko家的网站网站建设岗位的简介
  • 一个公司主体可以在多个网站做备案制作微信公众号的步骤
  • 域名免费注册网站企业查询哪个好用
  • 想学做蛋糕用哪一个网站成都手机网站制作
  • 网站建设的功能需求文档织梦网站手机版端设置
  • 如何做淘客网站九江网站开发
  • 东莞网站推广哪些海口网红图书馆在哪里