编程访谈中的一个常见任务(不是根据我的访谈经验)是采用字符串或整数并列出每个可能的排列.
有没有这样做的例子和解决这个问题背后的逻辑?
我已经看过一些代码片段,但它们没有得到很好的评论/解释,因此难以理解.
引用 Eric Lippert的GetHashCode指南和规则:
规则:GetHashCode的消费者不能依赖它随着时间的推移或跨appdomains的稳定性
假设您有一个Customer对象,其中包含一系列字段,如Name,Address等.如果在两个不同的进程中使用完全相同的数据生成两个这样的对象,则它们不必返回相同的哈希代码.如果你在星期二的一个进程中创建这样一个对象,关闭它,并在星期三再次运行程序,哈希码可能会有所不同.
这在过去曾经被人咬伤过.System.String.GetHashCode的文档特别指出,两个相同的字符串在CLR的不同版本中可以具有不同的哈希码,实际上它们也是如此.不要在数据库中存储字符串哈希并期望它们永远是相同的,因为它们不会.
那么创建一个可以存储在数据库中的字符串的HashCode的正确方法是什么?
(请告诉我,我不是第一个在我写的软件中留下这个错误的人!)
我在招聘面试中看到了以下问题:
在 C# 中如何找到具有相同哈希码的三个不同字符串?
换句话说,给定字符串
a、b、 和c,以下四个陈述应该为真:Run Code Online (Sandbox Code Playgroud)a != b a != c a.GetHashCode() == b.GetHashCode() a.GetHashCode() == c.GetHashCode()笔记:
- 您不应该覆盖
GetHashCode()也不应该使用自己的String类。使用默认的 .NET 实现。- 您不需要知道
string.GetHashCode().- 人们应该相对较快地找到结果,而不必使用多线程。
我对此有点困惑。有没有一种方法可以做到这一点,而无需实际逐一枚举字符串,这肯定会非常慢,并且无需检查实际实现string.GetHashCode()来找出如何进行冲突?
c# ×3
hashcode ×2
.net ×1
algorithm ×1
database ×1
gethashcode ×1
performance ×1
permutation ×1
puzzle ×1