我有一个信息检索应用程序,它创建大小为10万位的位数组.数组中"set"位的数量变化很大,从所有清除到全部设置.目前,我正在使用直接位数组(java.util.BitSet),因此我的每个位数组都需要几兆字节.
我的计划是查看前N位的基数,然后决定使用哪些数据结构用于余数.显然,对于非常稀疏的位阵列,一些数据结构更好,而当大约一半的位被设置时,其他数据结构更好(当大多数位被设置时,我可以使用否定将其视为稀疏的零集合).
以下是一些约束或提示:
使用开源Java实现的东西是有帮助的,但不是绝对必要的.我对基本面更感兴趣.
使用两个密钥(可能是基于密码的)完成数据加密的基本原理是什么,但只需要两个密钥中的一个(任一个)来解密数据?
例如,使用用户的密码和公司的密码对数据进行加密,然后他或他的公司可以解密数据.他们都不知道其他密码.仅存储加密数据的一个副本.
我不是指公钥/私钥.可能通过对称密钥密码术,可能涉及将密钥异或一起用于加密.
更新:我还想找到一个不涉及存储密钥的解决方案.
我们的设计有一个jvm,它是一个jboss/webapp(读/写),用于通过hibernate(使用jpa)维护数据到db.该模型具有10-15个持久类,在关系中具有3-5个深度级别.
然后我们有一个单独的jvm,它是使用这些数据的服务器.当它连续运行时,我们只有一个长db会话(只读).
目前没有涉及jvm内部缓存 - 所以我们手动发信号通知另一个jvm.
现在,当webapp更改某些数据时,它会通知服务器重新加载已更改的数据.我们发现我们需要告诉hibernate清除数据然后重新加载它.只是对数据库进行提取/合并不起作用 - 主要是关于层次结构中几层的对象.
关于这个设计是否存在根本性错误的任何想法,或者是否有人这样做,并且在重新加载时使用hibernate有更好的运气.
谢谢,克里斯
我正在寻找可用于实现关系模型的持久性数据结构的材料.
坚持不可变数据结构的含义.
有人知道一些好的资源,书籍,论文等吗?
(我已经有了Purely Functional Data Structures这本书,这是我正在寻找的一个很好的例子.)
rdbms functional-programming relational immutability data-structures
我们的构建非常缓慢.这是一个用Ant构建的Java系统,我在Windows XP上运行它.根据硬件的不同,可能需要5到15分钟才能完成.
查看计算机上的整体性能指标,以及将硬件差异与构建时间相关联,表明该进程受I/O限制.它还表明,该过程比写作更能阅读.
但是,我还没有找到一种很好的方法来确定正在读取或写入哪些文件,以及多少次.我怀疑,随着我们的许多子项目和随后的编译器调用,构建多次重读相同的常用库.
什么是一些分析工具会告诉我给定的进程对哪些文件做了什么?免费很好,但不是必需的.
使用过程监视器,正如Jon Skeet建议的那样,我能够证实我的怀疑:几乎所有的磁盘活动都是读取和重新读取库,JDK的"rt.jar"副本和其他库位于顶部.列表.我不能使RAM磁盘足够大以容纳我使用的所有库,但是将"最热"的库安装在RAM磁盘上会使构建时间缩短约40%; 显然,Windows文件系统缓存工作做得不够好,尽管我告诉Windows要优化它.
我注意到一件有趣的事情是,JAR文件上的典型"读取"操作只有几十个字节; 通常有两个或三个,然后在文件中进一步跳过几千字节.它似乎不适合批量读取.
我将在闪存驱动器上对我的所有第三方库进行更多测试,看看它有什么影响.
我正在使用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 []?
我有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中的Quartz这样的库,用于ruby?
我有以下代码:
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
在Java中,使用后增量与预增量运算符会产生任何性能影响吗?
例:
for (int n = 0; idx < max; ++idx) { /* Note pre-increment */
f(max);
}
Run Code Online (Sandbox Code Playgroud) java ×7
cryptography ×2
hibernate ×2
bouncycastle ×1
caching ×1
deadlock ×1
encoding ×1
encryption ×1
immutability ×1
openssl ×1
performance ×1
profiling ×1
rdbms ×1
relational ×1
ruby ×1
security ×1
sha1 ×1
string ×1
windows ×1