小编bal*_*pha的帖子

处理应该是唯一值的接近不可能的碰撞

有许多系统依赖于某些特定值的唯一性.任何使用GUID的东西都会浮现在脑海中(例如,Windows注册表或其他数据库),但也会从对象创建哈希以识别它,因此需要此哈希是唯一的.

哈希表通常不介意两个对象是否具有相同的哈希,因为哈希仅用于将对象分解为类别,因此在查找时,不是表中的所有对象,而只是同一类别中的那些对象(必须将搜索对象的身份进行比较.

然而,其他实现(似乎)取决于唯一性.我的例子(这就是让我问这个的原因)是Mercurial的修订版ID.一进入 Mercurial的邮件列表中正确地指出:

在您的第一个十亿次提交中,变更集哈希意外冲突的几率基本为零.但我们会注意到它是否会发生.你会因为偶然打破SHA1而成名.

但即使是最小的概率并不意味着不可能.现在,我不想解释为什么完全可以依赖于唯一性(这已经在这里讨论).这对我来说非常清楚.

相反,我想知道(也许通过你自己的工作中的例子):

  • 是否有任何最佳做法来涵盖这些不可能的案例?

  • 它们是否应该被忽略,因为特别强烈的太阳风更有可能导致硬盘读取错误?

  • 他们至少应该进行测试,如果只是因为"我放弃了,你已经完成了不可能的"消息而失败了吗?

  • 或者甚至应该优雅地处理这些案件?

对我来说,特别是下面的内容很有趣,尽管它们有点敏感:

  • 如果你不处理这些案件,你会如何对付不听概率的直觉?

  • 如果你确实处理过它们,你如何证明这项工作是合理的(对你自己和他人而言),考虑到你有更多可能的案例你不能处理,比如超级新星?

language-agnostic unique

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

requestAnimationFrame在IE10中传递意外参数

因此,我一直是一个优秀的网民,使用功能检测来查看浏览器是否支持requestAnimationFrame,setTimeout否则只回归基于解决方案(保罗爱尔兰着名帖子的内容).

var NOW = Date.now || function () { return new Date.getTime(); };
var reqAnimFrame =
        window.requestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        /*                        ... ||                     */
        function (callback) {
            setTimeout(function () { callback(NOW()); }, 1000 / 60);
        };

var previousTime = NOW();
function animStep(time) {
    var timePassed = time - previousTime;
    myCharacter.move(myCharacter.speed * timePassed);
    previousTime = time;
    reqAnimationFrame(animStep);
} 

// start the animation
reqAnimationFrame(animStep); 
Run Code Online (Sandbox Code Playgroud)

在Internet Explorer 10出现之前,这种方法无处不在.在IE10中,time传递的参数似乎与当前时间无关,搞砸了计算timePassed.

这是怎么回事?

javascript internet-explorer-10 requestanimationframe

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

.net的首选单元测试隔离框架

我已经使用过RhinoMocks产品很长一段时间了,对产品非常满意 - 从来没有理由去其他地方看看.我最近被TypeMock的优秀人员要求给他们的产品一个旋转,并想知道其他开发人员对Typemock Isolator的看法.你会建议其他隔离/模拟框架吗?为什么?

.net unit-testing mocking isolation-frameworks

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

为什么fread总是返回0?

我用这段代码来读取文件.但是fread功能总是返回0.我的错误是什么?

FILE *file = fopen(pathToSourceFile, "rb");
if(file!=NULL) 
{
    char aByte[50000];
    int ret = fread(aByte, sizeof(aByte), 1, file);
    if(ret != 0)
    {
        not jump into there;
        fseek(file, 0, SEEK_SET);
        fwrite(aByte, ret, 1, file);
    }
} 
fclose(file); 
Run Code Online (Sandbox Code Playgroud)

c file-io

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

不直观的UnboundLocalError行为的原因

注意:有一个非常类似的问题在这里.但是,请耐心等待; 我的问题不是"为什么会发生错误",而是"为什么Python实现为在这种情况下抛出错误."

我只是偶然发现了这个:

a = 5
def x()
    print a
    a = 6
x()
Run Code Online (Sandbox Code Playgroud)

抛出一个UnboundLocalException.现在,我确实知道为什么会发生这种情况(后来在这个范围内,a受到限制,因此a在整个范围内都被认为是本地的).

在这种情况下:

a = 5
def x()
    print b
    b = 6
x()
Run Code Online (Sandbox Code Playgroud)

这非常有意义.但第一种情况有一个直观的逻辑,这意味着:

a = 5
def x()
    print globals()["a"]
    a = 6 # local assignment
x()
Run Code Online (Sandbox Code Playgroud)

我想有一个原因是为什么不允许"直觉"版本,但它是什么?虽然这可能是"明确比隐含更好"的情况,但摆弄着globals()总觉得我有点不洁净.

从这个角度来看,发生在我身上的实际情况是别人的剧本,我不得不改变一下.在我的(短暂的)更改中,我在脚本运行时进行了一些文件重命名,所以我插入了

import os
os.rename("foo", "bar")
Run Code Online (Sandbox Code Playgroud)

进入脚本.这个插入发生在一个函数内部.模块已经os在顶级导入(我没有检查过),有些os.somefunction调用在函数内部进行,但在插入之前.这些电话显然触发了一个UnboundLocalException.

那么,有人可以向我解释这个实现背后的原因吗?是为了防止用户犯错误?"直观"的方式会让字节码编译器的内容变得更复杂吗?或者是否有一种我没有想到的歧义?

python

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

镜像文件通过rsync移动

我们用于备份的专有软件(sadface)会生成一系列图像,我们用它们rsync同步到异地位置。生成的文件类似于:

a.bak
b.bak
c.bak
Run Code Online (Sandbox Code Playgroud)

因此,我们将它们同步并在场外机器上获得完全相同的结构。然后备份程序再次运行,我们得到如下信息:

archive/a.bak
archive/b.bak
c.bak
d.bak
e.bak
Run Code Online (Sandbox Code Playgroud)

所以rsync工作运行起来,我们最终得到如下结果:

archive/a.bak
archive/b.bak
a.bak
b.bak
c.bak
d.bak
e.bak
Run Code Online (Sandbox Code Playgroud)

显然,我们希望场外机器看起来像现场机器一样,以避免混乱并节省存储空间。有什么办法可以反映rsync现场发生的动作,还是我们必须在外面解决一些问题rsync

rsync

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

使用鼠标选择文本并突出显示该 div 中多次出现的相同文本

我正在尝试编写一个程序,当我在鼠标上选择 div 内的文本时,我想突出显示该 div 中所选文本的所有出现,到目前为止我已经做了什么

突出显示该 div 中任意位置的选定文本

但这仅适用于静态即硬编码单词,如演示中所示

 var text = $('div').text().replace(/Ipsum/g,"<span class='red'>Ipsum</span>");
Run Code Online (Sandbox Code Playgroud)

这里 Ipsum 是硬编码的,它工作得很好。我想做的是用动态选择的文本替换 ipsum ,但失败了。我已经添加了演示,其中包含我到目前为止所达到的内容,代码如下所示 演示 在 mouseup 上动态获取选定的文本

超文本标记语言

<div id="div">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into …
Run Code Online (Sandbox Code Playgroud)

javascript css regex jquery

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

为select中的每一行重新分配变量的令人惊讶的行为

这是我可以重现问题的最简单的例子.因此它看起来有点做作,但请耐心等待.

declare @t table(number int)
insert into @t values (1), (2)

declare @sum bigint = 0

select @sum = @sum + number
    from (select top 2 number from @t order by number) subquery
    order by number desc

select @sum
Run Code Online (Sandbox Code Playgroud)

这是关于数据资源管理器的查询.

我希望这会返回3,即表中值的总和@t.相反,它返回1.

执行以下任何操作都会导致查询正确返回3:

  • 使@t.number@sum具有相同类型的(通过使@sum一个int@t.number一个bigint).
  • 去掉外面的 order by
  • 去掉内心 order by
  • order by通过添加desc到内部或从外部移除它来使两者在同一方向上排序
  • 删除子查询(即只选择from @t)

这些事情都不会让我觉得应该改变这个查询的行为.

交换排序顺序(在子查询中降序,在外部升序)将使查询返回2而不是1.

类似的事情发生在字符串而不是数字上,所以这并不局限于intbigint. …

sql-server

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

如何自动调整qt小部件的大小?

QT版本:4.5.2操作系统:ubuntu 8.04

我在自动调整大小小部件方面遇到了麻烦,这是一个例子:

alt text http://img15.imageshack.us/img15/3479/autoresize.png

如图所示,这里有两个小部件,一个是"StrWidget"(图1中的上部小部件),它有5个QLabel用于显示字符串,另一个是"CtrlWidget",它告诉StrWidget要显示的字符串.

当我单击"发送CCC"时,StrWidget将成为图2中所示的小部件

但是当我再次单击"发送A"时,StrWidget将成为图3中所示的小部件

有一个成员函数StrWidget :: changeString,它是StrWidget的一个插槽,并接收显示的字符串.

void
StrWidget::changeString(QString inputStr)
{
    for(int i=0;i<5;i++){
        strEntries[i]->setText(inputStr);
    }
}
Run Code Online (Sandbox Code Playgroud)

调用changeString时,StrWidget无法自动调整大小.我尝试以下两种方法:

(1)在StrWidget :: changeString中插入"adjustSize()",它可以工作,但是我需要单击一个按钮两次才能调整大小.我不知道为什么会这样.

(2)插入"hide(); show();" 在StrWidget :: changeString中,它可以工作但是当我点击按钮时StrWidget会刷新.

任何人对此都有所了解?谢谢〜


以下是该示例的源代码

主要:

#include "StrWidget.h"
#include "CtrlWidget.h"
#include <QApplication>

int main(int argc,char *argv[])
{
    QApplication app(argc,argv);
    StrWidget *strWidget=new StrWidget(0);
    CtrlWidget *ctrlWidget=new CtrlWidget(0);
    strWidget->show();
    ctrlWidget->show();
    QObject::connect(ctrlWidget,SIGNAL(sendString(QString)),strWidget,SLOT(changeString(QString)));
    int ref=app.exec();
    strWidget->deleteLater();
    ctrlWidget->deleteLater();
    return ref;
}
Run Code Online (Sandbox Code Playgroud)

StrWidget.h

#include <QWidget>
#include <QString>
#include <QLabel>

#ifndef _StrWidget_H_
#define _StrWidget_H_

class StrWidget:public QWidget
{
    Q_OBJECT
    public:
        StrWidget(QWidget …
Run Code Online (Sandbox Code Playgroud)

qt autoresize

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

Java堆不断缩小!这个堆大小图中发生了什么?

这是运行ActiveMQ的JVM(win64,6u17)的屏幕截图,在堆大小减少的每次垃圾收集之后.随着堆大小的减少,垃圾收集变得更加频繁,并且堆减少得更快.最终,VM会锁定,因为它在GC中花费了所有时间.

-Xms是默认值,-Xmx是2048mb.

怎么了!!?我怎么能避免这个?

http://imagebin.org/92614

缩小堆http://imagebin.org/index.php?mode=image&id=92614

nb最初发布在serverfault.com上,按要求移至stackoverflow.com

java garbage-collection

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