1. int i =10;
Math.round(i) == i ? => 90% 多的时候都不等,round() 参数为float型,故 round(0)会把参数提升为float, 然后再四舍五入,失了精度。
2. ()?():() 使用时,尽量不要有不同的类型混着用, 会产生不可预期的结果,
此时应该用if, else
3. Math.abs() 看起来任何时候都不会为负数,实际上当参数为 -2147483648 时,结果还是-2147483648。
4.in.skip() 并不是所有时候都会正常跳过。 参数为10*1024或者很大时,就不知道跳哪儿去了。应该在使用这个API时加上返回值判断。
5. 当在写单例模式时,不要在类的一开始就用
public static final MYClass obj = new MYClass();
这样会形成递归,并不会实例化。在使用时也是空指针异常。
应该在类的最后,进行初始化,或者在getxx()中再初始化。
如果一定在要类中初始化,确保这一行要写在其他静态成员初始化之后。
e.g.
public static final String name = "xx“;
public static final MYClass obj = new MYClass();
6.
assertEquals 正确时并没有打印。
异常时用以下方式:
try {
assertEquals(2, number);
}
catch(Error e)
{
error = e;
}
catch(Exception e)
{
exception = e;
}
7. 不要用URL 来作为map的key , 或者 Set的元素。
URL 虽然字符串看着不同,但是解析成ip:port后,如果相同就会产生和我们预期不一样的效果。
我们要用URL为map的key , 或者 Set的元素。最好使用URI 代替。
8. 当Set定义成Set
然后向xx中加入short 元素i,再从xx中 remove(i), 其实是没有被remove的,因为加入的是short, remove的是int。
remove(Object)会把short i自动提升成int, 结果就找不到可移除的对象。
解决:我们应该避免使用short这种会自动提升的类型,如果一定要用,用xx.remove((short) i ), 这样才会是预期的。
9. [摘自http://blog.didispace.com/something-about-YYYY-MM-dd/]
YYYY
是week-based-year
,表示:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。所以2019年12月31日那天在这种表述方式下就已经 2020 年了。
而当使用yyyy
的时候,就还是 2019 年。
10. 在RabbitMQ中,消息的过期时间必须是非负 32 位整数,即:0 <= n <= 2^32-1,以毫秒为单位。 其中,2^32-1 = 4294967295。如果超过这个值就会不生效。故使用时必须要注意各数据类型的边界。翟永超老师遇到过。
http://blog.didispace.com/rabbitmq-deplay-message-max/