小编maa*_*nus的帖子

是否有用于测试Java中非随机性序列的软件?

我在寻找Java中的程序或库,能够找到字节序列的非随机属性.当给出一个巨大的文件时,运行一些统计测试并报告数据是否显示任何规律性.

我知道三个这样的程序,但不是Java.我尝试了所有这些,但它们似乎并不适合我(这是非常令人惊讶的,因为其中一个是由NIST).其中最古老的,死硬,工作正常,但它有点难以使用.

java testing random statistics

14
推荐指数
1
解决办法
1058
查看次数

如何在不缓存的情况下测量文件读取速度?

我的java程序花了大部分时间来阅读一些文件,我想优化它,例如,通过使用并发,预取,内存映射文件或其他.

没有基准测试的优化是无意义的,所以我进行了基准测试.但是,在基准测试期间,整个文件内容都缓存在RAM中,与实际运行时不同.因此,基准测试的运行时间要小得多,而且很可能与现实无关.

我需要以某种方式告诉操作系统(Linux)不要缓存文件内容,或者更好地在每次基准测试运行之前清除缓存.或者可能消耗大部分可用的RAM(32 GB),因此只有一小部分文件内容适合.如何操作?

我正在使用卡尺进行基准测试,但在这种情况下我认为没必要(它绝不是微基准测试),我不确定这是个好主意.

java benchmarking caching disk-io caliper

14
推荐指数
1
解决办法
1987
查看次数

泛型和Class.asSubclass

我一直认为以下应该有效.我得到一个对象,我知道是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中它不起作用,我看到的唯一解决方案是未经检查的强制转换.我敢打赌上面的代码必须工作,我已经使用过这样的东西......不知道这里有什么问题.

java eclipse generics

13
推荐指数
2
解决办法
8366
查看次数

番石榴ImmutableSet.contains的表现

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)

set immutability guava caliper

13
推荐指数
1
解决办法
2291
查看次数

恒定时间等于

为了防止定时攻击,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.

java security optimization timing

13
推荐指数
3
解决办法
1896
查看次数

使用Hibernate将TIMESTAMP复制到MySQL上的DATETIME

我有这两个班

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,但在我的情况下,它没有.为什么?

java mysql datetime hibernate

13
推荐指数
2
解决办法
564
查看次数

更简单地使用TypeAdapterFactory

AFAIK可以通过最灵活的gson定制TypeAdapterFactory,但它可能会变得不必要地复杂化.它迫使我写的每个处理类既readwrite,而真正需要的,有时只有一个方法.此外,有时a JsonSerializer和/或JsonDeserializer更容易编写,例如像这里.这引出了我这些问题:

  • 是否有可能写TypeAdapter它只是代表它的方法一种(如写作ImmutableList,以书面List)?
  • 有可能以某种方式使用JsonSerializer和/或JsonDeserializerTypeAdapterFactory?一起使用?或者,他们有工厂吗?

java adapter gson

12
推荐指数
1
解决办法
3829
查看次数

有效地计算产品a*b**2*c**3 ....

什么是计算产品的最有效方法

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.

java math biginteger arbitrary-precision

12
推荐指数
1
解决办法
273
查看次数

使用HttpOnly cookie注销

我可以看到HttpOnlycookie 对安全性有好处,但是它们无法在没有服务器交互的情况下进行注销,对吧?1因此,当网络出现故障时,您无法注销并离开.我可以想象一个解决方法,但我想先问一下

  • 处理这种情况是否有意义
  • 这有什么标准的解决方案吗?

1假设你实际上正在使用它们.

cookies session web-services httponly cookie-httponly

12
推荐指数
1
解决办法
1545
查看次数

将标准转换为分离标准

这个问题的标题是类似于这一个,但它是没有重复的为其他OP其实是想别的东西(反正没有回答我的问题在那里).我想要的是回收我已经建成CriteriaSubqueries.exists(DetachedCriteria).

我知道这Criteria基本上DetachedCriteria是附加的Session,所以我希望Criteria#toDetached()在另一边有类似的东西或工厂方法,但我找不到任何东西.

java hibernate criteria

12
推荐指数
1
解决办法
740
查看次数