1. JS 不能处理double类型的数据
这是一个相当蛋疼的问题,原因是 Javascript 里所有的数字都是使用浮点数(double)来表示的,我们知道浮点数在计算机系统中使用 “尾数(Mantissa)+指数(Exponent)” 来表示的,例如 1.2345 用浮点数的表示方式为 12345 * 10^(-4),也就是 11000000111001(12345) 11111100(-4),具体可以参见这里:https://en.wikipedia.org/wiki/Floating_point,由于Javascript中的尾数只有53位,自然不能使用全部64位来表示数字了,丢失的部分将全部填零处理,如 793548328091516928 将变为 793548328091516900
2. Netty在
Netty4的Unpooled.copiedBuffer竟然不是线程安全的,在高并发情况下会污染原来的数据,其代码如下:
public static ByteBuf copiedBuffer(ByteBuffer buffer) { int length = buffer.remaining(); if (length == 0) { return EMPTY_BUFFER; } byte[] copy = new byte[length]; int position = buffer.position(); try { buffer.get(copy); } finally { buffer.position(position); } return wrappedBuffer(copy).order(buffer.order()); }显然如果两个线程都在做复制的话,原来buffer中的position很可能就是脏数据。我在Netty上开了一个issue:https://github.com/netty/netty/issues/3896
。如今已经被官方采纳
评论列表: