200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > mysql 1500万_1500万的天价配送费?懂这行代码的人送外卖永远不会吃亏!

mysql 1500万_1500万的天价配送费?懂这行代码的人送外卖永远不会吃亏!

时间:2024-05-15 16:29:55

相关推荐

mysql 1500万_1500万的天价配送费?懂这行代码的人送外卖永远不会吃亏!

别误会,标题并不是让你写个代码整出个超高配送费来养活自己,这肯定是违法的。

我只是想说,接单的时候如果看到千万级别的配送费,别急着接单,冷静分析其原理,找出bug并上报平台,说不定就能成功转行当程序员,走上升职加薪996的福报道路了。

事情是这样的啊,近几天班主任在网上冲浪的时候,看到了这么一件事:

“外卖骑手获1500多万元配送费又被撤销,饿了么回应:系统故障”

1500多万的配送费?难道这就是最近同行纷纷转行送外卖的真正原因?!

点进去一瞅,大概是这么一回事:

7月21日的下午,南京饿了么骑手谢先生,接到一笔配送费高达1590多万的订单,将信将疑的将单子送到目的地后,发现这笔“天价”送单费,已经汇入到了他的个人账户中。

但不到一小时,他再查看自己的账户时发现,这一千多万配送费已经被饿了么撤销了。对此,饿了么南京地区相关负责人回应称,出现天价配送费的原因是,系统出现了故障,我们已经做出了整改,避免类似问题发生。

原来是一个小bug引起的大起大落,看了这件事,网友们除了在为谢先生打抱不平以外,还有不少人在讨论这个bug是怎么来的,不愧是全民编程的时代啊。

事实上这个bug涉及的知识非常基础,只要稍微学过一段时间的编程,无论学的是Python还是Java或是其他什么语言,只要对“时间戳”这个知识非常熟悉,那么就能一眼看出饿了么的问题所在。

159531386是什么神秘数字?

在饿了么里有些订单可能会因为过于偏僻,导致无人愿意接单,这个时候发单人就可以通过增加小费,加价等形式吸引骑手接单。

所以有人就开始怀疑,会不会是发单人想加小费,却误错输成手机号了呢?

的确有这一种可能,但恰巧班主任在前些天就用了时间戳写了点东西,所以对159531386这一串数字的大小十分敏感。

今天是8月3日,大前天是/7/31,对应的秒数时间戳就是1596124800,如果把159531386加个0,变成1595313860,这1596124800到1595313860的差值,目测似乎也差不多符合/7/31到/7/21(新闻发生时间)的秒数。

因此写一行代码,直接把1595313860转换一下,得到结果是……

那么我们再来看看这个新闻,7月21日下午发生,谢先生的接单时间也恰好为14:44分!

数字完全符合,在计算机的世界里可没有那么巧合的事情,那么,结果就显而易见了。

系统在派单的时候,误把订单此时的时间戳作为特殊奖励设置进了订单内,于是就产生了这么一个天价订单!

时间戳是啥?

时间戳是指格林威治时间1970年01月01日00时00分00秒(也就是北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

上面的分析里,“目测1596124800到1595313860的差值,差不多符合/7/31到/7/21的秒数。”也就是这么来的。

在编程的世界里,我们记录时间通常都不会直接写XXXX年X月X日X分X秒,而是都用时间戳来记录时间。

或许小萌新们会有些疑惑,为什么写代码不好好说人话?/07/21,这不是很好懂吗,为什么要用这个长长晕晕的时间戳呢?

这是因为在现在的系统中经常遇到跨数据库的应用开发,不同的数据库对时间类型可能有着不同解释,比如ORACLE的date和MYSQL里面的date就不能直接兼容转换,数据方面还可以使用数据迁移工具进行转换,但是对与应用来说那就是灾难。

用更生动形象的例子来说,可以这么想象,小O是个美国机器人,写时间的时候喜欢把日期写在前面,年份写在后面,也就是07/21/,不认得其他格式,小M是个日本机器人,写日期的时候喜欢先写年份,那就是/07/21,也不认得其他格式。

而有一天考试考了一道时间相关的题目,小M叫小O发答案给他“参考”一下……

所以,为了让大家都能看得懂时间,不考虑格式这些乱七八糟的东西,所以大家规定了UNIX时间戳这个东西。

将需要记录的时间记录为UNIX时间戳,不同数据库在用时间的时候,只需要对时间戳进行操作就可以了。

把时间戳转换为具体时间的代码,也就是本次破译配送费事件的关键代码,其实也非常简单,一行就搞定了。

在极客战记里面,大家一般学的都是Python和JavaScript,所以这儿就教教大家,怎么用Python和JavaScript来转换时间戳。

时间戳转换日期

Python代码如下:

import time

print(time.ctime(1595313860))

比较简单,要先导入一个时间处理用的包time,然后就可以用它的函数来转换时间戳了。

这里只用到了一个函数,time.ctime(),它的作用就是接收一个时间戳,并把它转换成日期。

效果如下:

Python还需要导包,JavaScript就可以直接一行代码搞定。

代码如下:

console.log(new Date(1595313860000))

结果是这样的,同学们可以直接在浏览器内按F12,然后点击Console来输入代码并回车运行查看效果。

console.log()和刚刚的print()相似,都是输出内容用的,转换时间戳主要是new Date(1595313860000)这一段代码。

new大家都知道,是创建一个对象,那么这里就是创建了一个Date对象,这是JavaScript里用于处理日期和时间的对象,并用时间戳1595313860000作为它的值,创建了这么一个时间对象,它被输出的时候会展示成一个比较通俗易懂的通用格式,因此输出它就能看到具体的日期时间了。

这里用1595313860000而不是1595313860,是因为Date对象默认接收的时间戳是以毫秒为单位的,所以就得多加三个0。

上面这两种代码,都是直接调用函数来查看时间戳具体时间的方法,除了这样,我们也可以不依赖函数,直接利用时间戳的原理来进行转换。

时间戳,也就是从北京时间1970年01月01日08时00分00秒到现在的秒数,所以可以直接将1595313860转换成秒钟、分钟、天数,然后加到1970年01月01日08时00分00秒里,得到最终得结果。

思路就是这样,这就属于自己动手造轮子的问题啦,难倒不难,同学们可以自己动动手,造一造试试看!

如果看官您觉得我说的还不错,那能不能给我在下方点个赞点个喜欢呢?

球球您们辣,这个对我真的很重要!

这是一个想让你学编程开心点的“营销号”哦,如果想看一些编程类的干货,或者想听听编程学习相关的良心话,那不妨给我点个关注吧~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。