我已经对哈希表进行了一些研究,并且我一直遵循经验法则,当有一定数量的条目(最大或通过75%的加载因子)时,应该扩展哈希表.
几乎总是,建议是将哈希表的大小加倍(或加倍加1,即2n + 1).但是,我没有找到一个很好的理由.
为什么要加倍大小,而不是将其增加25%,或者将其增加到下一个素数或下一个素数(例如三个)?
我已经知道,选择一个初始哈希表大小是一个素数通常是一个好主意,至少如果你的哈希函数使用模数,如通用哈希.我知道这就是为什么通常建议做2n + 1而不是2n(例如,http://www.concentric.net/~Ttwang/tech/hashsize.htm)
然而正如我所说,我没有看到任何真正的解释,为什么加倍或加倍加一个实际上是一个很好的选择,而不是选择新哈希表的大小的其他方法.
(是的,我已经阅读了关于哈希表的维基百科文章:) http://en.wikipedia.org/wiki/Hash_table
虽然我熟悉并发编程概念,如互斥和信号量,但我从未理解它们是如何在汇编语言级别实现的.
我想有一组内存"标志"说:
但是如何在线程之间同步访问这些标志呢?像这个天真的例子只会产生竞争条件:
mov edx, [myThreadId]
wait:
cmp [lock], 0
jne wait
mov [lock], edx
; I wanted an exclusive lock but the above
; three instructions are not an atomic operation :(
Run Code Online (Sandbox Code Playgroud) 我清楚MemoryBarrier的用法,但不清楚运行时幕后发生的事情.任何人都可以对发生的事情做出很好的解释吗?
如果我的自定义jQuery验证返回false,我试图在表单提交上停止回发.
有没有办法阻止__doPostback()函数在submit()函数内完成?
我假设:
$('#aspnetForm').submit(function () { return false; });
Run Code Online (Sandbox Code Playgroud)
会做的伎俩,但显然事实并非如此:有没有人有建议?
submit()函数会阻止回发(如果你在firebug中的断点暂停,它不会回发),但是我似乎无法在submit()函数完成后停止事件发生!
干杯,艾德
编辑
好吧,我有一个快速的混乱,并发现我用来导致回发的按钮与更新面板绑定作为asyncpostbacktrigger的事实似乎是问题:如果我将其作为触发器删除(即导致它产品一个完整的回发),没有问题阻止回发与返回false;
任何想法为什么异步回发不会使用return false停止?
我是新手,有人可以解释(以下代码)的意义,或者可能链接到一些关于lambda表达式的有用信息?我在测试中遇到以下代码,我想知道为什么有人会这样做:
foo.MyEvent += (o, e) => { fCount++; Console.WriteLine(fCount); };
foo.MyEvent -= (o, e) => { fCount++; Console.WriteLine(fCount); };
Run Code Online (Sandbox Code Playgroud)
我的直觉告诉我这是一件简单而不是错误的事情,但我对这些表达方式知之甚少,无法理解为什么要这样做.
.net ×1
algorithm ×1
asp.net ×1
asp.net-ajax ×1
assembly ×1
c# ×1
concurrency ×1
forms ×1
hash ×1
hashtable ×1
jit ×1
jquery ×1
lambda ×1
updatepanel ×1
x86 ×1