这天,公司的前端程序猿小明正在吃着火锅唱着歌,欢快地跟后端开发小刚联调接口。页面其实也不难,在个人空间显示一个历史记录列表,然后列表的每个item都可以对应地操作。就像这样:
小明隔着工位对对面的小刚喊道:“你的下载接口有问题!”
小明的言辞冒犯了小刚作为一个后端的尊严,小刚抑制住了一闪而过的多个念头——“ 你的环境才有问题”、“**你会用吗”,耐着性子检查了一遍自己的逻辑,回复道:“没毛病啊,你把id给我”。
小明从内部IM扔过去一串数 76154831290589340。id的生成是随机的,像这个bug一样混沌而无规律。
小刚:“你这id在库里不存在。”
小明:“怎么可能,你返回给我的”。
小刚:“胡说,我给你的明明是76154831290589341。”
……
此处略去互相扯皮二百字。
接下来,二人友好地坐到了一起,开始见证奇迹。
小明:“你看,这是网络请求的返回,诶,等等,为啥结尾是41?”(打脸声)
小明尝试继续挣扎:“不对啊,你看渲染出来的页面,见鬼了。”
一顿操作中,小明不小心点中了开发中工具Network中Preview栏,更加诡异的现象出现了:
明明是同一个请求,Preview里跟Response里还不一样。这究竟是因为道德的扭曲还是人性的沦丧!?小明不禁陷入了深思。
在旁观摩良久的小刚说:“我有一个大胆的想法。”于是他接过页面控制台,打出了惊世骇俗的一个表达式,这个发现足以颠覆现代数学的基础。(误)
到这之后事情变得简单了,根本原因是后端将id类型定义为long,所以这个数在后端眼里并未超出范围。但是对于Javascript,number类型的大整数超出2的53次方(9007199254740992)就会出现不精确的问题。解决方法也很简单,response中改为返回string即可。
伴随着《走近科学》的结束曲,小明和小刚渐渐平静了下来,重新投入到了日常的开发之中。夕阳斜斜地照进来,工位上一片金黄。组里的其它小伙伴们,正在辛勤地为智云平台的建设添砖加瓦。
一个来自有道智云的程序员:ai.youdao.com