全部回帖
哥们能简单的给我科普一下吗,不是学这方面的,单纯有点感兴趣
哥们能简单的给我科普一下吗,不是学这方面的,单纯有点感兴趣
回来晚了,我简单描述下。
首先,计算机只能识别0和1,他们的运算方式就是位运算,下列用到的两种位运算是 与(运算符号 &)和或(运算符号 |),比如 0&1=0,1&1=1,0|1=1,1|1=1 等。用俗话来讲就是只要有假,与运算就为假。只要有真,或运算就为真。下文使用这两种运算方式就行。我们用到的最小内存占用的数据结构是位图(BitMap),就是用一个数组存放的二进制数据,比如我们要使用64位的内存,就可以用 long[] bm = new long[1]; 来表示(long是64位)。这玩意能干啥呢?比如我们要统计一个人上班签到,就可以用 BitMap 来表示。初始化的位图中所有位都是0,当他某天上班了,就在位图中把这天对应的那位变成1,一年下来,这张位图就记录了这个人哪天有上班,哪天在缺勤。
接下来简单介绍一下在模拟12306售票过程是如何使用位图来计算的。
在一列火车中,有很多停靠站,也有很多座位。为了简化模型,我们假定从深圳到北京的火车途径长沙、武汉、郑州、石家庄,假定有6个座位好了。
那么我们需要建立5个位图数组(下图1):
0表示当前座位没人,1表示有人。
假设有人买票了,他要从深圳到武汉。那么我们只需要把深圳到长沙的位图做或运算,得到的结果中只要是0的位就表示能坐。不用算武汉是因为到了武汉就下车了。假设他选了1号座位,那么运算结果就是:(下图2)
OK现在假设第二个人买票了,他要从长沙坐到北京。我们现在只需要计算上图中长沙、武汉、郑州、石家庄这四个位图的或运算。100000 | 000000 | 000000,运算结果是 100000,表示第一个位置不能坐。假定他选了第四个座位,那么结果就是:(下图3)
假设第三个人来买票了,他要从深圳到北京。这时候我们要把上图5个城市的位图做或运算。计算结果是 100100,表示只能选2356号座位。假定他选了2号座位,那么结果是:(下图4)
假定多人坐车之后,成了这种结果:(下图5)
那么有人要坐车从深圳到北京,有座吗?已经没有了。5个位图的或运算结果是111111。
简单的抢票逻辑就是这样,如有质疑欢迎指正。
回来晚了,我简单描述下。
首先,计算机只能识别0和1,他们的运算方式就是位运算,下列用到的两种位运算是 与(运算符号 &)和或(运算符号 |),比如 0&1=0,1&1=1,0|1=1,1|1=1 等。用俗话来讲就是只要有假,与运算就为假。只要有真,或运算就为真。下文使用这两种运算方式就行。我们用到的最小内存占用的数据结构是位图(BitMap),就是用一个数组存放的二进制数据,比如我们要使用64位的内存,就可以用 long[] bm = new long[1]; 来表示(long是64位)。这玩意能干啥呢?比如我们要统计一个人上班签到,就可以用 BitMap 来表示。初始化的位图中所有位都是0,当他某天上班了,就在位图中把这天对应的那位变成1,一年下来,这张位图就记录了这个人哪天有上班,哪天在缺勤。
接下来简单介绍一下在模拟12306售票过程是如何使用位图来计算的。
在一列火车中,有很多停靠站,也有很多座位。为了简化模型,我们假定从深圳到北京的火车途径长沙、武汉、郑州、石家庄,假定有6个座位好了。
那么我们需要建立5个位图数组(下图1):
0表示当前座位没人,1表示有人。
假设有人买票了,他要从深圳到武汉。那么我们只需要把深圳到长沙的位图做或运算,得到的结果中只要是0的位就表示能坐。不用算武汉是因为到了武汉就下车了。假设他选了1号座位,那么运算结果就是:(下图2)
OK现在假设第二个人买票了,他要从长沙坐到北京。我们现在只需要计算上图中长沙、武汉、郑州、石家庄这四个位图的或运算。100000 | 000000 | 000000,运算结果是 100000,表示第一个位置不能坐。假定他选了第四个座位,那么结果就是:(下图3)
假设第三个人来买票了,他要从深圳到北京。这时候我们要把上图5个城市的位图做或运算。计算结果是 100100,表示只能选2356号座位。假定他选了2号座位,那么结果是:(下图4)
假定多人坐车之后,成了这种结果:(下图5)
那么有人要坐车从深圳到北京,有座吗?已经没有了。5个位图的或运算结果是111111。
简单的抢票逻辑就是这样,如有质疑欢迎指正。
回来晚了,我简单描述下。
首先,计算机只能识别0和1,他们的运算方式就是位运算,下列用到的两种位运算是 与(运算符号 &)和或(运算符号 |),比如 0&1=0,1&1=1,0|1=1,1|1=1 等。用俗话来讲就是只要有假,与运算就为假。只要有真,或运算就为真。下文使用这两种运算方式就行。我们用到的最小内存占用的数据结构是位图(BitMap),就是用一个数组存放的二进制数据,比如我们要使用64位的内存,就可以用 long[] bm = new long[1]; 来表示(long是64位)。这玩意能干啥呢?比如我们要统计一个人上班签到,就可以用 BitMap 来表示。初始化的位图中所有位都是0,当他某天上班了,就在位图中把这天对应的那位变成1,一年下来,这张位图就记录了这个人哪天有上班,哪天在缺勤。 接下来简单介绍一下在模拟12306售票过程是如何使用位图来计算的。
在一列火车中,有很多停靠站,也有很多座位。为了简化模型,我们假定从深圳到北京的火车途径长沙、武汉、郑州、石家庄,假定有6个座位好了。
那么我们需要建立5个位图数组(下图1):
[图片]
0表示当前座位没人,1表示有人。
假设有人买票了,他要从深圳到武汉。那么我们只需要把深圳到长沙的位图做或运算,得到的结果中只要是0的位就表示能坐。不用算武汉是因为到了武汉就下车了。假设他选了1号座位,那么运算结果就是:(下图2)
[图片]
OK现在假设第二个人买票了,他要从长沙坐到北京。我们现在只需要计算上图中长沙、武汉、郑州、石家庄这四个位图的或运算。100000 | 000000 | 000000,运算结果是 100000,表示第一个位置不能坐。假定他选了第四个座位,那么结果就是:(下图3)
[图片]
假设第三个人来买票了,他要从深圳到北京。这时候我们要把上图5个城市的位图做或运算。计算结果是 100100,表示只能选2356号座位。假定他选了2号座位,那么结果是:(下图4)
[图片]
假定多人坐车之后,成了这种结果:(下图5)
[图片]
那么有人要坐车从深圳到北京,有座吗?已经没有了。5个位图的或运算结果是111111。
简单的抢票逻辑就是这样,如有质疑欢迎指正。
回来晚了,我简单描述下。
首先,计算机只能识别0和1,他们的运算方式就是位运算,下列用到的两种位运算是 与(运算符号 &)和或(运算符号 |),比如 0&1=0,1&1=1,0|1=1,1|1=1 等。用俗话来讲就是只要有假,与运算就为假。只要有真,或运算就为真。下文使用这两种运算方式就行。我们用到的最小内存占用的数据结构是位图(BitMap),就是用一个数组存放的二进制数据,比如我们要使用64位的内存,就可以用 long[] bm = new long[1]; 来表示(long是64位)。这玩意能干啥呢?比如我们要统计一个人上班签到,就可以用 BitMap 来表示。初始化的位图中所有位都是0,当他某天上班了,就在位图中把这天对应的那位变成1,一年下来,这张位图就记录了这个人哪天有上班,哪天在缺勤。
接下来简单介绍一下在模拟12306售票过程是如何使用位图来计算的。
在一列火车中,有很多停靠站,也有很多座位。为了简化模型,我们假定从深圳到北京的火车途径长沙、武汉、郑州、石家庄,假定有6个座位好了。
那么我们需要建立5个位图数组(下图1):
0表示当前座位没人,1表示有人。
假设有人买票了,他要从深圳到武汉。那么我们只需要把深圳到长沙的位图做或运算,得到的结果中只要是0的位就表示能坐。不用算武汉是因为到了武汉就下车了。假设他选了1号座位,那么运算结果就是:(下图2)
OK现在假设第二个人买票了,他要从长沙坐到北京。我们现在只需要计算上图中长沙、武汉、郑州、石家庄这四个位图的或运算。100000 | 000000 | 000000,运算结果是 100000,表示第一个位置不能坐。假定他选了第四个座位,那么结果就是:(下图3)
假设第三个人来买票了,他要从深圳到北京。这时候我们要把上图5个城市的位图做或运算。计算结果是 100100,表示只能选2356号座位。假定他选了2号座位,那么结果是:(下图4)
假定多人坐车之后,成了这种结果:(下图5)
那么有人要坐车从深圳到北京,有座吗?已经没有了。5个位图的或运算结果是111111。
简单的抢票逻辑就是这样,如有质疑欢迎指正。
好像懂了一点,感谢老哥打这么多字给我科普,辛苦老哥了
好像懂了一点,感谢老哥打这么多字给我科普,辛苦老哥了
对对,我是外行,但我知道内行从来不说界面,只说UI,素材,面板。再说了软件功能强不强大主要是程序员的事,至于好不好用,漂不漂亮是结构工程师和UI设计师的事情,从你的字里行间就看得出你比我这外行还外行,还前端后端,这些词也只有在跟啥都不懂的人说说,别嘴硬了。
对对,我是外行,但我知道内行从来不说界面,只说UI,素材,面板。再说了软件功能强不强大主要是程序员的事,至于好不好用,漂不漂亮是结构工程师和UI设计师的事情,从你的字里行间就看得出你比我这外行还外行,还前端后端,这些词也只有在跟啥都不懂的人说说,别嘴硬了。
内行从不说界面这句话就知道你只是个道听途说的半吊子,没有在真正的团队里面待过。做过leader吗?你跟产品沟通、和领导汇报是说ui的?别人关心你说的UX/UI、PX/PT吗?
内行从不说界面这句话就知道你只是个道听途说的半吊子,没有在真正的团队里面待过。做过leader吗?你跟产品沟通、和领导汇报是说ui的?别人关心你说的UX/UI、PX/PT吗?
……想多了真的。12306自从15年和阿里云合作以后,春运期间阿里云承担了75%的流量之后,12306的体验才有了明显好转。12306一期投入的费用为3亿,包括硬件,而淘宝/微信之类App投入起码10倍不止。只能说12306技术进步很大,但绝对称不上目前最牛逼的App。单论国内,微信淘宝所包含的技术绝对碾压12306。如果你是做IT有不同意见,起码对这行的技术有所了解,欢迎来讨论。如果啥也不懂单抓着“12306技术吊炸天,动态库存计算能力强无敌”之类的无脑吹,那我可以给你科普如何用BitMap来简单模拟一下12306的抢票算法。如果你还是听不懂,或者来一句“那你做一个看看”之类的,行吧你说得对。
……想多了真的。12306自从15年和阿里云合作以后,春运期间阿里云承担了75%的流量之后,12306的体验才有了明显好转。12306一期投入的费用为3亿,包括硬件,而淘宝/微信之类App投入起码10倍不止。只能说12306技术进步很大,但绝对称不上目前最牛逼的App。单论国内,微信淘宝所包含的技术绝对碾压12306。如果你是做IT有不同意见,起码对这行的技术有所了解,欢迎来讨论。如果啥也不懂单抓着“12306技术吊炸天,动态库存计算能力强无敌”之类的无脑吹,那我可以给你科普如何用BitMap来简单模拟一下12306的抢票算法。如果你还是听不懂,或者来一句“那你做一个看看”之类的,行吧你说得对。
我说怎么毕业后感觉好用多了。。。15年毕业
我说怎么毕业后感觉好用多了。。。15年毕业
回来晚了,我简单描述下。
首先,计算机只能识别0和1,他们的运算方式就是位运算,下列用到的两种位运算是 与(运算符号 &)和或(运算符号 |),比如 0&1=0,1&1=1,0|1=1,1|1=1 等。用俗话来讲就是只要有假,与运算就为假。只要有真,或运算就为真。下文使用这两种运算方式就行。我们用到的最小内存占用的数据结构是位图(BitMap),就是用一个数组存放的二进制数据,比如我们要使用64位的内存,就可以用 long[] bm = new long[1]; 来表示(long是64位)。这玩意能干啥呢?比如我们要统计一个人上班签到,就可以用 BitMap 来表示。初始化的位图中所有位都是0,当他某天上班了,就在位图中把这天对应的那位变成1,一年下来,这张位图就记录了这个人哪天有上班,哪天在缺勤。 接下来简单介绍一下在模拟12306售票过程是如何使用位图来计算的。
在一列火车中,有很多停靠站,也有很多座位。为了简化模型,我们假定从深圳到北京的火车途径长沙、武汉、郑州、石家庄,假定有6个座位好了。
那么我们需要建立5个位图数组(下图1):
[图片]
0表示当前座位没人,1表示有人。
假设有人买票了,他要从深圳到武汉。那么我们只需要把深圳到长沙的位图做或运算,得到的结果中只要是0的位就表示能坐。不用算武汉是因为到了武汉就下车了。假设他选了1号座位,那么运算结果就是:(下图2)
[图片]
OK现在假设第二个人买票了,他要从长沙坐到北京。我们现在只需要计算上图中长沙、武汉、郑州、石家庄这四个位图的或运算。100000 | 000000 | 000000,运算结果是 100000,表示第一个位置不能坐。假定他选了第四个座位,那么结果就是:(下图3)
[图片]
假设第三个人来买票了,他要从深圳到北京。这时候我们要把上图5个城市的位图做或运算。计算结果是 100100,表示只能选2356号座位。假定他选了2号座位,那么结果是:(下图4)
[图片]
假定多人坐车之后,成了这种结果:(下图5)
[图片]
那么有人要坐车从深圳到北京,有座吗?已经没有了。5个位图的或运算结果是111111。
简单的抢票逻辑就是这样,如有质疑欢迎指正。
回来晚了,我简单描述下。
首先,计算机只能识别0和1,他们的运算方式就是位运算,下列用到的两种位运算是 与(运算符号 &)和或(运算符号 |),比如 0&1=0,1&1=1,0|1=1,1|1=1 等。用俗话来讲就是只要有假,与运算就为假。只要有真,或运算就为真。下文使用这两种运算方式就行。我们用到的最小内存占用的数据结构是位图(BitMap),就是用一个数组存放的二进制数据,比如我们要使用64位的内存,就可以用 long[] bm = new long[1]; 来表示(long是64位)。这玩意能干啥呢?比如我们要统计一个人上班签到,就可以用 BitMap 来表示。初始化的位图中所有位都是0,当他某天上班了,就在位图中把这天对应的那位变成1,一年下来,这张位图就记录了这个人哪天有上班,哪天在缺勤。
接下来简单介绍一下在模拟12306售票过程是如何使用位图来计算的。
在一列火车中,有很多停靠站,也有很多座位。为了简化模型,我们假定从深圳到北京的火车途径长沙、武汉、郑州、石家庄,假定有6个座位好了。
那么我们需要建立5个位图数组(下图1):
0表示当前座位没人,1表示有人。
假设有人买票了,他要从深圳到武汉。那么我们只需要把深圳到长沙的位图做或运算,得到的结果中只要是0的位就表示能坐。不用算武汉是因为到了武汉就下车了。假设他选了1号座位,那么运算结果就是:(下图2)
OK现在假设第二个人买票了,他要从长沙坐到北京。我们现在只需要计算上图中长沙、武汉、郑州、石家庄这四个位图的或运算。100000 | 000000 | 000000,运算结果是 100000,表示第一个位置不能坐。假定他选了第四个座位,那么结果就是:(下图3)
假设第三个人来买票了,他要从深圳到北京。这时候我们要把上图5个城市的位图做或运算。计算结果是 100100,表示只能选2356号座位。假定他选了2号座位,那么结果是:(下图4)
假定多人坐车之后,成了这种结果:(下图5)
那么有人要坐车从深圳到北京,有座吗?已经没有了。5个位图的或运算结果是111111。
简单的抢票逻辑就是这样,如有质疑欢迎指正。
楼主辛苦了,看起来逻辑不是特别复杂,可能数据量和运算量比较大,这个才是接入阿里云解决的本质问题啦
楼主辛苦了,看起来逻辑不是特别复杂,可能数据量和运算量比较大,这个才是接入阿里云解决的本质问题啦
恕我说话比较直接,微信算是app吗?12306超微信?还没有之一?就愣吹显得自己很有文化?
恕我说话比较直接,微信算是app吗?12306超微信?还没有之一?就愣吹显得自己很有文化?
微信扫个健康码都点无数次的填写信息,就这技术,也别和12306比了,怪不得金融做不起来,健康码信息都保存不了的软件,谁敢把大钱放进去。。。
微信扫个健康码都点无数次的填写信息,就这技术,也别和12306比了,怪不得金融做不起来,健康码信息都保存不了的软件,谁敢把大钱放进去。。。
为啥对自己不懂得领域这么自信呢 ?
所以我们讨论的不应该是如何评价一款app优秀吗,扯什么访问量大和安全可靠不就是底层数据库服务器安全做得好,和app这个软件有啥关系?
所以我们讨论的不应该是如何评价一款app优秀吗,扯什么访问量大和安全可靠不就是底层数据库服务器安全做得好,和app这个软件有啥关系?
杠杠滴
杠杠滴
上海匡慧网络科技有限公司 沪B2-20211235 沪ICP备2021021198号-6 Copyright ©2021 KUANGHUI All Rights Reserved. 匡慧公司 版权所有