小编bmu*_*976的帖子

什么是比赛条件?

编写多线程应用程序时,遇到的最常见问题之一是竞争条件.

我对社区的问题是:

什么是比赛条件?你怎么发现它们?你怎么处理它们?最后,你如何防止它们发生?

concurrency multithreading terminology race-condition

915
推荐指数
11
解决办法
54万
查看次数

什么是互斥?

互斥体是一种经常用于解决多线程问题的编程概念.我向社区提出的问题:

什么是互斥锁,你如何使用它?

concurrency multithreading mutex

611
推荐指数
10
解决办法
26万
查看次数

什么是信号量?

信号量是一种经常用于解决多线程问题的编程概念.我向社区提出的问题:

什么是信号量,你如何使用它?

concurrency multithreading semaphore

326
推荐指数
10
解决办法
21万
查看次数

什么是僵局?

编写多线程应用程序时,遇到的最常见问题之一是死锁.

我对社区的问题是:

  1. 什么是僵局?

  2. 你怎么发现它们?

  3. 你处理它们吗?

  4. 最后,你如何防止它们发生?

concurrency multithreading deadlock locking

143
推荐指数
6
解决办法
10万
查看次数

Mercurial到Mercurial到颠覆工作流问题

我们正在从Subversion迁移到Mercurial.为了促进迁移,我们正在创建一个中间Mercurial存储库,它是我们的Subversion存储库的一个副本.所有开发人员将开始切换到Mercurial存储库,我们将定期将更改从中间Mercurial存储库推送到现有的Subversion存储库.经过一段时间后,我们将简单地废弃Subversion存储库,中间的Mercurial存储库将成为新的记录系统.

Dev 1 Local --+--> Mercurial --+--> Subversion
Dev 2 Local --+                +
Dev 3 Local --+                +
Dev 4 -------------------------+
Run Code Online (Sandbox Code Playgroud)

我一直在测试它,但是当我将更改从本地存储库推送到中间Mercurial存储库,然后直到我们的Subversion存储库时,我一直遇到问题.

alt text http://bmurphy.mediafly.com.s3.amazonaws.com/images/mercurial/01.png

在我的本地计算机上,我有一个已提交的变更集,可以将其推送到我们的中间Mercurial存储库.在这里你可以看到它是版本#2263,哈希625 ...

alt text http://bmurphy.mediafly.com.s3.amazonaws.com/images/mercurial/02.png

我只将此变更集推送到远程存储库.

替代文字http://bmurphy.mediafly.com.s3.amazonaws.com/images/mercurial/03.png

到目前为止,一切看起来都很好 变更集已被推送.

hg update
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Run Code Online (Sandbox Code Playgroud)

我现在切换到远程存储库,并更新工作目录.

hg push
pushing to svn://...
searching for changes
[r3834] bmurphy: database namespace
pulled 1 revisions
saving bundle to /srv/hg/repository/.hg/strip-backup/62539f8df3b2-temp
adding branch
adding changesets
adding manifests
adding file changes
added 1 changesets …
Run Code Online (Sandbox Code Playgroud)

svn mercurial hgsubversion

23
推荐指数
1
解决办法
4999
查看次数

如何生成一个独特,小巧,随机且用户友好的密钥?

几个月前,我的任务是为我们的Web应用程序实现一个独特的随机代码.代码必须是用户友好的并且尽可能小,但仍然基本上是随机的(因此用户无法轻易预测序列中的下一个代码).

它最终生成的值看起来像这样:

Af3nT5Xf2
Run Code Online (Sandbox Code Playgroud)

不幸的是,我对实施从未满意.Guid是不可能的,它们对于用户来说太大而且难以输入.我希望能够提供更多的4或5个字符/数字的内容,但是如果我们编码为的话,我们的特定实现会生成明显的图案序列少于9个字符.

这是我们最终做的事情:

我们从数据库中提取了一个唯一的顺序32位id.然后我们将它插入64位RANDOM整数的中心位.我们创建了一个易于键入和识别的字符的查找表(AZ,az,2-9跳过容易混淆的字符,如L,l,1,O,0等).最后,我们使用该查找表对64位整数进行base-54编码.高位是随机的,低位是随机的,但中心位是顺序的.

最终结果是一个比guid小得多的代码并且看起来是随机的,即使它绝对不是.

我对此特定实现从未满意.你们会做什么?

encoding cryptography key

13
推荐指数
3
解决办法
1805
查看次数

防止命令行注入攻击

我们目前正在构建一个执行许多外部工具的应用程序.我们经常要将用户输入我们系统的信息传递给这些工具.

显然,这是一场等待发生的大安全噩梦.

遗憾的是,我们还没有在.NET Framework中找到执行命令行程序的任何类,同时提供与IDbCommand对象为数据库执行的注入攻击相同的防范.

现在,我们正在使用一个非常原始的字符串替换,我怀疑它是不够的:

protected virtual string Escape(string value)
{
      return value
        .Replace(@"\", @"\\")
        .Replace(@"$", @"\$")
        .Replace(@"""", @"\""")
        .Replace("`", "'")
      ;
}
Run Code Online (Sandbox Code Playgroud)

你们做了什么来防止命令行注入攻击?我们计划实现一个非常严格的正则表达式,只允许一小部分字符通过,但我想知道是否有更好的方法.

一些澄清:

  • 其中一些工具没有我们可以编程的API.如果他们这样做了,我们就不会遇到这个问题.
  • 用户不选择要执行的工具,他们输入我们选择使用的工具的元数据(例如,将诸如版权声明之类的元数据注入目标文件中).

security command-line code-injection

9
推荐指数
1
解决办法
7457
查看次数