第六机智:1248码的应用,状态码应如何选择
这个得从易经说起,计算机理论和易经有不解之缘。
太极生两仪,两仪生四象,四象生八卦
说起1248码,大家可能并不陌生。这种算法的始祖应该算是发源于易经了,其中的太极八卦就是如此。计算机中 Linux 系统上的权限管理机制将其发挥到了极致,chmod 777 /xxx 这种操作后面的智慧便是如此。
1,最近项目中使用1248码定义了IOT传感器设备的探头路数:传感器探头的路数,1:代表第1路探头,2:代表第2路探头,4:代表第3路探头,8:代表第4路探头...以此类推~
2,假设某一个IOT设备关联到了某个设施(车辆,货柜,集装箱)上,并且使用其中的1~n个探头,如何知道该集装箱使用了哪几个探头呢?
你是不是想到使用一个字符串1,3代表一个数组{1,3},表示他绑定了第1路和第3路探头,如果随着探头数量的扩展,这个字符串会越来越长,不利于扩展~
哪如何实现一个优雅的设计呢?1248码将是你的不二选择!
什么是1248码:
其实就是二进制和十进制之间转换的1248赋值法的原理。
二进制是使用一组1、0表示如下:
二进制:1001 1010
转换 :8421 8421
十进制:9 10
那么如何在上面提到的场景中应用呢?
--》1:代表第1路探头,2:代表第2路探头,4:代表第3路探头,8:代表第4路探头...以此类推~
使用:用探头绑定的路数模1248,若结果大于0说明,route包含该路探头,非常方便使用和扩展:
直接上代码:
if((route & 1)> 0) { //说明包含第一路探头,balabala~处理 }else if((route & 2)> 0){ //说明包含第二路探头,balabala~处理 }else if((route & 4)> 0){ //说明包含第三路探头,balabala~处理 }else if((route & 8)> 0){ //说明包含第四路探头,balabala~处理 } ........ 如果想去掉if else ,大家可以自行实现噢
扩展:
状态码的智慧:《把问题记录一下,以防别人的分享连接失效》
(一个事物有5个流程,ABCDE一般的程序员通常会定义为 status 有5个状态 0/1/2/3/4 ,流程的顺序是 A->B->C->D->E ,可是有一天项目经理说这个流程会有个快捷流程 A->B->E 。于是原本的 0->1->2->3->4 就有部分数据变为了 0->1->4 ,这些都不会有太大的问题,然而,后来项目经理跟你说我需要区分在E状态下它是经历了 ABCDE 还是直接经历 ABE ,于是乎,你就懵逼了。)http://duguying.net/article/%E7%8A%B6%E6%80%81%E7%A0%81%E8%AE%BE%E8%AE%A1%E7%9A%84%E6%99%BA%E6%85%A7%EF%BC%8C1234%E8%BF%98%E6%98%AF1248
状态码面试题:(
)
http://blog.chinaunix.net/uid-20676637-id-86111.html?/10085.html