我在寻找Java中的程序或库,能够找到字节序列的非随机属性.当给出一个巨大的文件时,运行一些统计测试并报告数据是否显示任何规律性.
我知道三个这样的程序,但不是Java.我尝试了所有这些,但它们似乎并不适合我(这是非常令人惊讶的,因为其中一个是由NIST).其中最古老的,死硬,工作正常,但它有点难以使用.
我一直认为以下应该有效.我得到一个对象,我知道是Class<X>哪里X扩展一些类Xyz.为了使其类型安全,我想在下面的方法中使用Class.asSubclass:
private Class<? extends Xyz> castToXyzClass(Object o) {
final Class<?> resultClass = (Class<?>) o;
final Class<? extends Xyz> result = Xyz.class.asSubclass(resultClass);
return result;
}
Run Code Online (Sandbox Code Playgroud)
但是,在Eclipse中它不起作用,我看到的唯一解决方案是未经检查的强制转换.我敢打赌上面的代码必须工作,我已经使用过这样的东西......不知道这里有什么问题.
ImmutableSet在我的基准测试中,番石榴似乎表现不佳contains.对于某些尺寸,它甚至比List以下更慢:
size benchmark ns linear runtime
100000 ListContains 110279.54 ==
100000 SetContains 7.15 =
100000 ImmutableSetContains 76716.47 =
200000 ListContains 275367.66 =====
200000 SetContains 7.34 =
200000 ImmutableSetContains 322185.50 ======
500000 ListContains 935210.10 ====================
500000 SetContains 7.79 =
500000 ImmutableSetContains 1382765.76 ==============================
Run Code Online (Sandbox Code Playgroud)
基本上,我填充一组有几千个负整数,测试包含非负数.代码很简单,但在一个小的文本区域粘贴有点太长,所以请看这里.
我想知道这里发生了什么.可能,我遇到了一些堕落的情况,尽管我显然没有尝试过.或许我刚刚吹了基准.否则,我想知道它是否可以而且应该修复.
解决方案是通过替换来改变拖尾功能
hashCode ^= (hashCode >>> 20) ^ (hashCode >>> 12);
return hashCode ^ (hashCode >>> 7) ^ (hashCode >>> 4);
Run Code Online (Sandbox Code Playgroud)
通过
return C2 * Integer.rotateLeft(hashCode * C1, …Run Code Online (Sandbox Code Playgroud) 为了防止定时攻击,equals有时需要一个恒定的时间.还有的MessageDigest.isEqual没有记录是恒定的时间方法和番石榴HashCode.equals等.他们都做了类似的事情
boolean areEqual = true;
for (int i = 0; i < this.bytes.length; i++) {
areEqual &= (this.bytes[i] == that.getBytesInternal()[i]);
}
return areEqual;
Run Code Online (Sandbox Code Playgroud)
要么
int result = 0;
for (int i = 0; i < digesta.length; i++) {
result |= digesta[i] ^ digestb[i];
}
return result == 0;
Run Code Online (Sandbox Code Playgroud)
但谁说JIT在优化时不能引入短路?
发现例如并不难,这areEqual将永远不会成为现实并打破循环.
我通过计算取决于所有输入位的值并将其馈送到自制来尝试CRBlackhole.
我有这两个班
class Source {
// mapped to TIMESTAMP
@Version
@Column(columnDefinition="TIMESTAMP(3) DEFAULT '2016-01-01'")
Instant myInstant;
}
class Destination {
// mapped to DATETIME
@Basic(optional=true)
Instant myInstant;
}
Run Code Online (Sandbox Code Playgroud)
使用Hibernate时,我指定
destination.myInstant = source.myInstant;
Run Code Online (Sandbox Code Playgroud)
然后存储的值比原始值小1小时 - 根据命令行MySQL客户端和Java.我当前的时区是UTC + 1,所以原因显然是时区转换.
有几个地方可以修复,但我正在寻找最好的做法.服务器应该在全球范围内工作,所以它应该继续在内部使用UTC,对吧?
我应该只将列类型更改为TIMESTAMP?那么,为什么Instant默认映射到DATETIME?
根据这篇文章,Instant 确实映射到TIMESTAMP,但在我的情况下,它没有.为什么?
AFAIK可以通过最灵活的gson定制TypeAdapterFactory,但它可能会变得不必要地复杂化.它迫使我写的每个处理类既read和write,而真正需要的,有时只有一个方法.此外,有时a JsonSerializer和/或JsonDeserializer更容易编写,例如像这里.这引出了我这些问题:
TypeAdapter它只是代表它的方法一种(如写作ImmutableList,以书面List)?JsonSerializer和/或JsonDeserializer与TypeAdapterFactory?一起使用?或者,他们有工厂吗?什么是计算产品的最有效方法
a 1 b 2 c 3 d 4 e 5 ...
假设平方成本大约是乘法的一半?操作数的数量小于100.
是否有一个简单的算法,因为乘法时间与操作数长度的平方成正比(如同java.math.BigInteger)?
第一个(也是唯一的)答案是完美的操作次数.
有趣的是,当应用于相当大BigInteger的时候,这部分根本不重要.即使在没有任何优化的情况下计算abbcccddddeeeee也需要大约相同的时间.
大部分时间花在最后的乘法上(BigInteger没有实现像Karatsuba,Toom-Cook或FFT这样的更智能的算法,因此时间是二次的).重要的是确保中间被乘数大约是相同的大小,即给定大小相同的p,q,r,s,计算(pq)(rs)通常比((pq)r)s快.对于几十个操作数,速度比似乎约为1:2.
我可以看到HttpOnlycookie 对安全性有好处,但是它们无法在没有服务器交互的情况下进行注销,对吧?1因此,当网络出现故障时,您无法注销并离开.我可以想象一个解决方法,但我想先问一下
1假设你实际上正在使用它们.
这个问题的标题是类似于这一个,但它是没有重复的为其他OP其实是想别的东西(反正没有回答我的问题在那里).我想要的是回收我已经建成Criteria的Subqueries.exists(DetachedCriteria).
我知道这Criteria基本上DetachedCriteria是附加的Session,所以我希望Criteria#toDetached()在另一边有类似的东西或工厂方法,但我找不到任何东西.
java ×8
caliper ×2
hibernate ×2
adapter ×1
benchmarking ×1
biginteger ×1
caching ×1
cookies ×1
criteria ×1
datetime ×1
disk-io ×1
eclipse ×1
generics ×1
gson ×1
guava ×1
httponly ×1
immutability ×1
math ×1
mysql ×1
optimization ×1
random ×1
security ×1
session ×1
set ×1
statistics ×1
testing ×1
timing ×1
web-services ×1