小编Pet*_*end的帖子

一致的散列与会合(HRW)散列 - 有什么权衡?

网上有很多关于一致性散列的信息,以及可用的多种语言的实现.该主题的Wikipedia条目引用了具有相同目标的另一种算法:

会合哈希

该算法看起来更简单,并且不需要在环周围添加复制品/虚拟来处理不均匀的加载问题.正如文章所提到的,它似乎在O(n)中运行,这对于大n来说是一个问题,但引用一篇文章说明它可以被构造为在O(log n)中运行.

对于在这方面有经验的人来说,我的问题是,为什么人们会选择一致的哈希而不是HRW,反之亦然?是否存在其中一种解决方案是更好的选择的用例?

非常感谢.

load-balancing consistent-hashing

14
推荐指数
2
解决办法
7369
查看次数

通过RFC 5987处理带有空格的文件名*参数会导致文件名中出现"+"

我有一些我正在处理的遗留代码(所以我不能只使用带有编码文件名组件的URL),允许用户从我们的网站下载文件.由于我们的文件名通常有许多不同的语言,因此它们都存储为UTF-8.我写了一些代码来处理RFC5987转换为正确的文件名*参数.这非常有用,直到我有一个带有非ascii字符空格的文件名.根据RFC,空格字符不是attr_char的一部分,因此它被编码为%20.我有新版本的Chrome和Firefox,他们都在下载时转换为%20到+.我试过不编码空格并将编码的文件名放在引号中并获得相同的结果.我已经嗅到了来自服务器的响应,以验证servlet容器没有弄乱我的标题,它们看起来对我来说是正确的.RFC甚至包含%20的示例.我错过了什么,或者所有这些浏览器都有与此相关的错误?

提前谢谢了.我用来编码文件名的代码如下.

彼得

public static boolean bcsrch(final char[] chars, final char c) {
    final int len = chars.length;
    int base = 0;
    int last = len - 1; /* Last element in table */
    int p;

    while (last >= base) {
        p = base + ((last - base) >> 1);

        if (c == chars[p])
            return true; /* Key found */
        else if (c < chars[p])
            last = p - 1;
        else
            base = p + 1;
    }

    return …
Run Code Online (Sandbox Code Playgroud)

java filenames http utf-8 content-disposition

6
推荐指数
1
解决办法
2216
查看次数

基于该对象在同步块内分配对象(Java)

我遇到了一些(生产!)代码,看起来像下面的代码片段:

synchronized(some_object) {
    some_object = new some_object()
}
Run Code Online (Sandbox Code Playgroud)

我希望这会受到各种可怕的竞争条件的影响,并且第二个线程可能会进入此块,创建一个新对象.我的Java排骨不够好,无法明确说明上面的预期行为,所以好奇你们重构之前你们要说的话.

java synchronization

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

尝试使用OWASP ESAPI时找不到antisamy-esapi.xml

我一直在尝试评估OWASP ESAPI库,但一直有问题只是让它正确初始化.我为ESAPI.properties和validation.properties设置了一个资源文件夹,这些文件夹从类路径加载而没有问题.但是antisamy-esapi.xml文件没有从classpath加载,我发现2010年有一个提到这个的bug.我得到的错误是:

尝试通过文件I/O加载antisamy-esapi.xml作为资源文件.在'org.owasp.esapi.resources'目录中找不到或文件不可读:C:\ Users\mydir\resin-pro-4.0.27\antisamy-esapi.xml在SystemResource Directory/resourceDirectory中找不到:.esapi\antisamy -esapi.xml在'user.home'(C:\ Users\mydir)目录中找不到:C:\ Users\mydir\esapi\antisamy-esapi.xml

我正在使用这个库部署应用程序树脂.我已经尝试手动将xml文件放在上面的所有位置,唯一一个最终工作的是我的主目录,这对于生产部署来说效果不佳.

我还遵循其他地方发现的建议,即设置-Dorg.owasp.esapi.resources属性.这也没有用,但更有趣的是错误没有改变,这让我觉得设置没有因为某些原因而被选中.

有关此文件需要在我的项目中的位置的任何指针,以便在部署到容器后正确加载它?

提前致谢.

更新:

因此,通过挖掘代码,似乎存在用于加载ESAPI.properties的专用函数,这就是为什么该文件能够从部署到容器的标准资源(或任何其他src目录)目录加载的原因.但是,antisamy-esapi.xml的加载函数只检查user.home下的特定目录,配置的自定义目录,或者通过ClassLoader.getSystemResource()的结果.不确定为什么这些例程是分开的.经过几个小时的搞乱,我失去了耐心并复制了DefaultSecurityConfiguration.java并更正了getResourceFile()方法,以使用与loadConfigurationFromClasspath()相同的查找代码.然后我用这个类调用ESAPI.override(),它现在似乎正常工作.

java resources owasp esapi

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