小编Joh*_*ohn的帖子

如何在未排序的数组中找到最接近的double

我在离散空间中有一组点,坐标以N double []数组的形式给出.

如:

点T1 = {1.3,2.5,4-3} ---> double [] x = {1.3},double [] y = {2.5},double [] z = {4.3}

然后我有一个函数,它在连续空间的所有方向上从给定点生成偏移量,我需要在我的矩阵/双数组中找到最接近的匹配.

问题是我无法对这些数组进行排序并应用二进制搜索,因为Point的组件很可能在排序后没有相同的索引.

是否有一些数据结构/算法可以应用于避免迭代搜索最接近的匹配点?

组织点是否更好,以便有一个数组实例描述整个点而不是每个组件的数组?

编辑

看起来理想的解决方案将使用评论中建议的kd树.计算机科学算法不是我的领域,因此在我研究该主题时,用kd树或其他替代方案展示最小例子的答案将是最有帮助的.

java arrays algorithm optimization search

5
推荐指数
1
解决办法
310
查看次数

使用RSA Cipher实现线程安全

正如标题所说,我想知道在给定RSA算法的情况下如何在多线程环境中最好地使用Cipher实例.

我已经阅读了关于这个主题的几个问题,以及我收集的内容:

  • 密码不是线程安全的,因为它在加密/解密时保持内部状态

  • 如果使用AES,doFinal()则将初始化向量重置为上一个已知值,因此每次都应生成新的Cipher实例

我的问题

  • cipher.init()如果选择的算法是RSA,是否可以只调用一次?这与第二个子弹相反,如下面的代码所示.我相信因为没有初始化向量.此外,密码仅用于解密数据.

  • 我应该只在cipher.doFinal()调用时同步吗?

  • 处理多个线程请求加密服务的常用方法是什么,我应该将密码池作为一些代理后面的阻塞队列吗?

代码示例:

public class RsaPrototype {

private static PrivateKey privKey;
private static Cipher cipher;
private static final String PRIVATE_KEY_PATH ="./privK.pem";

/*
 * ALGORITHM/BLOCKING_MODE/PADDING_SCHEMA
 */
private static final String CIPHER_SPECIFICATION = "RSA/None/NoPadding";
private static final String RSA_PROVIDER ="BC";

static {

    Security.addProvider(new BouncyCastleProvider());
    importPrivateKey();
    cipher = getCipher();

}

/**
 * Initializes cipher with RSA algorithm, without blocking mode and padding.
 * Implementation provider is bouncy castle.
 * 
 * @return cipher …
Run Code Online (Sandbox Code Playgroud)

java encryption multithreading rsa

5
推荐指数
1
解决办法
1773
查看次数

在java 8中使用流API,如何从Map返回实例,需要多次计算

假设有这样的类:

class A {

    long sent;
    long received;
    double val; // given as max {(double)sent/someDenominator,(double)received/someDenominator}
}
Run Code Online (Sandbox Code Playgroud)

其中有多个实例引用Map<String , A>.

是否可以一次性使用流API返回具有以下属性的A类实例:

  • sent =来自所有实例的已发送字段的总和
  • received =来自Map中所有实例的已接收字段的总和
  • val = val的最大值,给定val = max {sent/someDenominator,received/someDenominator}的所有条目

使用标准循环和一次迭代会有什么琐碎的任务,我不知道如何用流API实现.

java lambda java-8 java-stream

4
推荐指数
2
解决办法
180
查看次数

EntityManager线程安全性和Java EE

我是EJB和hibernate的新手,以下让我感到困惑,因为每当我寻找明确的答案时似乎都会有矛盾.题:

以下列方式将实体管理器直接注入无状态bean是否可以线程安全?

@Stateless
public class SomeBean implements SomeInterface {

//..    
@Inject
private EntityManager entityManager;

//... non related transaction1()
//... non related transaction2()
Run Code Online (Sandbox Code Playgroud)

EntityManager是否可以注入每个无状态bean都有自己的实例或共享实例?

根据Hibernate文档:

一个EntityManager是应该被使用一次,单个业务流程的廉价,非线程安全的对象,一个工作单位,然后丢弃.

EJB容器是否使其线程安全?

根据EJB文档,无状态会话bean本身就是线程安全的,因为不允许不同的客户端同时在同一个bean上运行.

然而,我看过的例子中,EntityManagerFactory应注射代替EntityManager,如果EntityManager直接注射应在状态bean来完成.

总是将EJB直接注入无状态bean(如上所示)或者什么是无用的情况下是否安全?

multithreading hibernate ejb java-ee

3
推荐指数
1
解决办法
1147
查看次数

java是否在循环中缓存数组长度计算

让我们说我有一个我想迭代的数组:

int[] someArray = {1,2,3,4}

for (int i = 0; i < someArray.length; i++) {

    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

这个aray的长度是否会随着每次迭代而被重新计算,或者它会被优化以仅计算一次?

我应该通过提前计算长度来迭代数组并将其传递给循环吗?

for (int i = 0, length = someArray.length; i < length ; i++) {

    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

java arrays performance compiler-optimization

3
推荐指数
1
解决办法
1118
查看次数

在Tomcat 8上启动Spring应用程序时出现java.lang.IllegalAccessError

当我尝试在Tomcat 8上运行项目时,我收到了这个非常奇怪的错误:

INFO osweb.context.ContextLoader - Root WebApplicationContext:初始化已启动.INFO oswcsAnnotationConfigWebApplicationContext - 刷新根WebApplicationContext:启动日期[Mon Jun 29 10:59:34 CEST 2015]; 上下文层次结构的根.INFO oswcsAnnotationConfigWebApplicationContext - 注册带注释的类:[class com ...]

错误osweb.context.ContextLoader - 上下文初始化失败java.lang.IllegalAccessError:尝试访问方法org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingletonMutex()Ljava/lang/Object; 来自org.springframework.context.event.AbstractApplicationEventMulticaster类

完整堆栈跟踪:

信息:基于APR的Apache Tomcat Native库在java.library.path中找不到生产环境中的最佳性能:C:\ Program Files\Java\jdk1.8.0_45\bin; C:\ WINDOWS\Sun\Java\BIN; C:\ WINDOWS\SYSTEM32; C:\ WINDOWS; C:\ ProgramData\ORACLE \的Java\javapath; C:\ WINDOWS\SYSTEM32; C:\ WINDOWS; C:\ WINDOWS\SYSTEM32\WBEM; C:\ WINDOWS\System32\WindowsPowerShell\v1.0 \; C:\ Program Files\WIDCOMM\Bluetooth Software \; C:\ Program Files\WIDCOMM\Bluetooth Software\syswow64; C:\ glassfish4\jdk7\jre\bin; C:\ Program Files\TortoiseSVN\bin; D:\ apache-maven-3.2.3\bin; C:\ Program Files(x86)\ QuickTime\QTSystem \;.lip 29,2015 11:40:01 AM org.apache.coyote.AbstractProtocol init INFO:Initializing ProtocolHandler ["http-nio-8088"] lip 29,2015 …

java spring tomcat spring-mvc maven

3
推荐指数
1
解决办法
7189
查看次数

在Spring中为MethodArgumentNotValidException的@ExceptionHandler添加参数

我有一个Spring控制器,用hibernate验证器验证传入的请求.

当请求无效时,MethodArgumentNotValidException验证程序将抛出该请求 .是否可以将附加类作为参数添加到异常的处理程序方法中?

这就是我所拥有的:

@RequestMapping(value = "/...", method = RequestMethod.POST)
@ResponseBody
public Response handleCustomObject(@Valid @RequestBody CustomObject obj) {
  //..
}


@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public Response handleInvalidRequest(MethodArgumentNotValidException e) {

    return getMissingMandatoryParametersResponse(e);

    }
}
Run Code Online (Sandbox Code Playgroud)

我需要像下面的示例,但这不起作用:

@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public Response handleInvalidRequest(MethodArgumentNotValidException e, CustomObject obj) {

 // do something with CustomObject
}
Run Code Online (Sandbox Code Playgroud)

java validation spring spring-mvc

3
推荐指数
1
解决办法
7310
查看次数

Spring Data Jpa 的超时异常

如果 Spring Data Jpa 存储库查询超时,我可以捕获哪个特定异常?

假设我有这样的存储库:

public interface VoucherRepository extends CrudRepository<VoucherEntity, String> {

    @Transactional(readOnly = true, timeout = 30)
    VoucherEntity findByCode(String code);

    List<VoucherEntity> findAllByCodeIn(List<String> codes);
}
Run Code Online (Sandbox Code Playgroud)

当超时发生时,调用者会看到哪个异常?

我不知道如何模拟这种情况,奖金问题是如何做到这一点?

使用的数据库是 PostrgreSQL。

java postgresql spring jpa

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