一不留神就掉坑
乘除顺序问题
在据卡特兰数公式,解决leetcode-96 不同的二叉搜索树时,遇到一个非常诡异的问题,
1 | package main |
即 注释掉的这一行,居然和上一行得出了完全不同的结果. 虽然马上解决,但对固有认知影响巨大---
难道对一直以来习以为常的乘法语法糖理解有误???
*= 为乘法和赋值运算符,它将右操作数与左操作数相乘,并将结果赋给左操作数. C *= A 相当于 C = C * A
读了一遍感觉没问题,那原因出在哪里呢?
构建demo,
1 | package main |
结果为
1 | 当前的rs1,rs2为: 2 2 |
初步判断,问题出在除法这里. 去掉除法部分后,确实得到的结果都一样.
在数学中 乘除运算不分先后. 但因为可能无法整除,对计算机来说,除不尽的部分会一律向下取整。所以乘除的先后顺序,实际是对最终结果有影响的
对于 rs1,其等于 2 * 2 * 7 / 5
,即28/5
,向下取整,即为5
对于rs2, 会先计算后面部分2 * (2*3 + 1) / (3 + 2)
= 14/5 = 2, 而后计算 2*2 = 4
crontab配置问题
Linux自带的crontab只能精确到分钟,而某些语言的工具包,可以提供精确到秒的crontab.
但在使用时,务必注意,如0 */10 * * * *
,是从下一个 xx:x0:00 开始,每10分钟执行一次.
如写成 * */10 * * * *
, 就成了每秒钟执行一次,如有对数据库的读写操作,会造成巨大压力.
上线前可以用这个工具, 选Java(Spring)
项,来校验一下
原文作者: fliter
原文链接:
http://www.dashen.tech/2021/03/01/一不留神就掉坑/版权声明: 转载请注明出处