小编eri*_*son的帖子

比特阵列有哪些替代方案?

我有一个信息检索应用程序,它创建大小为10万位的位数组.数组中"set"位的数量变化很大,从所有清除到全部设置.目前,我正在使用直接位数组(java.util.BitSet),因此我的每个位数组都需要几兆字节.

我的计划是查看前N位的基数,然后决定使用哪些数据结构用于余数.显然,对于非常稀疏的位阵列,一些数据结构更好,而当大约一半的位被设置时,其他数据结构更好(当大多数位被设置时,我可以使用否定将其视为稀疏的零集合).

  • 什么结构可能在每个极端都很好?
  • 中间有没有?

以下是一些约束或提示:

  1. 这些位仅按索引顺序设置一次.
  2. 我需要100%的准确度,所以像Bloom过滤器这样的东西还不够好.
  3. 在构建集之后,我需要能够有效地迭代"set"位.
  4. 这些位是随机分布的,因此运行长度编码算法不可能比简单的位索引列表好得多.
  5. 我正在尝试优化内存利用率,但速度仍然有一些重量.

使用开源Java实现的东西是有帮助的,但不是绝对必要的.我对基本面更感兴趣.

information-retrieval data-structures

8
推荐指数
1
解决办法
3157
查看次数

如何为多个收件人加密一条邮件?

使用两个密钥(可能是基于密码的)完成数据加密的基本原理是什么,但只需要两个密钥中的一个(任一个)来解密数据?

例如,使用用户的密码和公司的密码对数据进行加密,然后他或他的公司可以解密数据.他们都不知道其他密码.仅存储加密数据的一个副本.

我不是指公钥/私钥.可能通过对称密钥密码术,可能涉及将密钥异或一起用于加密.

更新:我还想找到一个不涉及存储密钥的解决方案.

security encryption cryptography

8
推荐指数
2
解决办法
8314
查看次数

如何维护运行两个Java应用程序的Hibernate缓存一致性?

我们的设计有一个jvm,它是一个jboss/webapp(读/写),用于通过hibernate(使用jpa)维护数据到db.该模型具有10-15个持久类,在关系中具有3-5个深度级别.

然后我们有一个单独的jvm,它是使用这些数据的服务器.当它连续运行时,我们只有一个长db会话(只读).

目前没有涉及jvm内部缓存 - 所以我们手动发信号通知另一个jvm.

现在,当webapp更改某些数据时,它会通知服务器重新加载已更改的数据.我们发现我们需要告诉hibernate清除数据然后重新加载它.只是对数据库进行提取/合并不起作用 - 主要是关于层次结构中几层的对象.

关于这个设计是否存在根本性错误的任何想法,或者是否有人这样做,并且在重新加载时使用hibernate有更好的运气.

谢谢,克里斯

java caching hibernate

8
推荐指数
2
解决办法
1万
查看次数

关系数据库的高效持久数据结构

我正在寻找可用于实现关系模型的持久性数据结构的材料.

坚持不可变数据结构的含义.

有人知道一些好的资源,书籍,论文等吗?

(我已经有了Purely Functional Data Structures这本书,这是我正在寻找的一个很好的例子.)

rdbms functional-programming relational immutability data-structures

8
推荐指数
2
解决办法
2384
查看次数

如何配置文件I/O?

我们的构建非常缓慢.这是一个用Ant构建的Java系统,我在Windows XP上运行它.根据硬件的不同,可能需要5到15分钟才能完成.

查看计算机上的整体性能指标,以及将硬件差异与构建时间相关联,表明该进程受I/O限制.它还表明,该过程比写作更能阅读.

但是,我还没有找到一种很好的方法来确定正在读取或写入哪些文件,以及多少次.我怀疑,随着我们的许多子项目和随后的编译器调用,构建多次重读相同的常用库.

什么是一些分析工具会告诉我给定的进程对哪些文件做了什么?免费很好,但不是必需的.


使用过程监视器,正如Jon Skeet建议的那样,我能够证实我的怀疑:几乎所有的磁盘活动都是读取和重新读取库,JDK的"rt.jar"副本和其他库位于顶部.列表.我不能使RAM​​磁盘足够大以容纳我使用的所有库,但是将"最热"的库安装在RAM磁盘上会使构建时间缩短约40%; 显然,Windows文件系统缓存工作做得不够好,尽管我告诉Windows要优化它.

我注意到一件有趣的事情是,JAR文件上的典型"读取"操作只有几十个字节; 通常有两个或三个,然后在文件中进一步跳过几千字节.它似乎不适合批量读取.

我将在闪存驱动器上对我的所有第三方库进行更多测试,看看它有什么影响.

java windows profiling build-process

8
推荐指数
1
解决办法
3781
查看次数

如何使用Hibernate映射byte []属性?

我正在使用Hibernate/Java将实体持久化到数据库.该实体有一个密码字段,它是一个字符串.在我的应用程序中注册用户时,我使用SHA-1哈希密码(我承认这有点弱).这将产生一个字节[]我再转换为字符串使用 new String(byte[] arr); 每当我想在注销用户,我只是从数据库中检索哈希密码(如字符串),并将其与输入密码的摘要在登录时使用比较 hashedPasswordFromDatabase.equals(SHA1_HASH(inputPassword));

这工作完全在我的开发系统(Windows 7中,JDK 1.6.0_23/JDK 1.7中,MySQL 5.5,Tomcat的6.0.26),但在我们的服务器上部署它(在Linux上运行JDK 1.6)中,等号方法从不计算真实的,即使对于相同的密码.我快速设置了一个新的开发系统(Ubuntu 12.04,MySQL 5.5,JDK 1.7.0_03,Tomcat 7.0.22),它也不能在那里工作.

我知道String类文档中针对String类所述的可能的编码问题,并且在SO的几个地方也有说明.我在这个论坛上尝试了几种编码(例如Base64,Latin-1),最后我得到了UnsupportedEncodingException.我想我最好避免String转换.那么我如何设计我的数据库,以便Hibernate生成的实体类为密码字段而不是字符串提供byte []

java string encoding hibernate sha1

8
推荐指数
1
解决办法
1万
查看次数

线程死锁

我有2个帖子.一个线程打印奇数,第二个线程打印偶数.现在,我必须交替执行线程,以便我可以输出1,2,3,4,5,6,.....

我为此编写了一个程序,这导致了死锁.有人可以解释代码的问题是什么以及如何纠正它?

class BooleanObject {
boolean flag;
BooleanObject(boolean flag) {
    this.flag = flag;
}
}
class EvenThread extends Thread {
Object lock;
BooleanObject flagObj;
EvenThread(Object o, BooleanObject flag) {
    lock = o;
    this.flagObj = flag;
}
public void run() {
    for (int i=2;i<100;i+=2) {
        synchronized(lock) {
            if (flagObj.flag == false) {
                flagObj.flag = true;
                lock.notify();
            }
            else {
                try {
                    while (flagObj.flag == true) {
                        lock.wait();
                    }
                }
                catch (InterruptedException e) {

                }
            }
            System.out.println(i);
        }
    }
}
}

class …
Run Code Online (Sandbox Code Playgroud)

java multithreading deadlock

7
推荐指数
1
解决办法
803
查看次数

ruby中有类似Java Quartz的东西吗?

这是一个像Java中的Quartz这样的库,用于ruby?

ruby java quartz-scheduler

7
推荐指数
1
解决办法
1877
查看次数

org.bouncycastle.openssl.PEMReader可以读取java.security.PrivateKey吗?

我有以下代码:

PrivateKey key = null;
X509Certificate cert = null;
KeyPair keyPair = null;

final Reader reader = new StringReader(pem);
try {
    final PEMReader pemReader = new PEMReader(reader, new PasswordFinder() {
        @Override
        public char[] getPassword() {
            return password == null ? null : password.toCharArray();
        }
    });

    Object obj;
    while ((obj = pemReader.readObject()) != null) {
        if (obj instanceof X509Certificate) {
            cert = (X509Certificate) obj;
        } else if (obj instanceof PrivateKey) {
            key = (PrivateKey) obj;
        } else if (obj instanceof KeyPair) …
Run Code Online (Sandbox Code Playgroud)

java openssl cryptography bouncycastle public-key-encryption

7
推荐指数
1
解决办法
9338
查看次数

后增量和增量前运算符之间的性能差异?

在Java中,使用后增量与预增量运算符会产生任何性能影响吗?

例:

for (int n = 0; idx < max; ++idx) { /* Note pre-increment */
  f(max);
}
Run Code Online (Sandbox Code Playgroud)

java performance

7
推荐指数
1
解决办法
4771
查看次数