逻辑变得相当杂乱
这个标题暗示了一个先决条件——你必须对每一段代码进行代码评审。为此,最近发表了一码审查。我将详述其中一点:
注释是否存在并描述了代码的意图?
根据我的经验,这是我最常评论的问题。
https://www.douban.com/doulist/150186338/
代码本身很好,写得很好,经过测试,遵循风格指南,处理边缘情况,等等,但是有时它缺少对几个月来第一次看给定方法的人有用的描述。所以我经常加上这样的话:
https://movie.douban.com/doulist/150186338/
你能添加一条注释来描述这段代码的意图吗?
我实际上周知,您应该添加注释“为什么”这段代码在那里(而不是它在做什么)。然而,甚至我自己的代码有时也缺乏足够的描述意图的注释。
这很可能是因为在编写代码时,意图是显而易见的。只有当一些逻辑变得相当复杂时,你才会意识到以后很难弄清楚。但是通常情况下,你认为你的代码是简单明了的(当你在半年后再看这些代码时,你会不同意自己的观点)。要纠正这一点,您必须在完成后进行自我代码审查,并提出审查者会提出的同样的问题。
但是,无论是初步的自我代码审查还是实际的审查,代码审查似乎都是提醒我们自己添加注释的理想时刻,这些注释描述了为什么给定的一段代码会在那里,以及它在全局中有什么作用。所以不要吝惜像“请添加关于这段代码意图的描述”这样的评论。
k上关于我之前博客的讨论跑题了,引发了一场有趣的挑战。一位评论者(Stilgar)不相信如果有盐的话,用MD5(
https://weibo.com/ttarticle/p/show?id=2309404762472379973715
或SHA)散列的密码是如此容易被破解。所以他发布了一个挑战:
“我将发布一个“密码”的散列,它将是一个字典单词,有或没有混合大小写,最多3位数字。密码前会有salt–8个随机符号。谁先发布正确的密码,谁就能获得100欧元(通过PayPal)。我承认我可能是错的,但我愿意赌100欧元。在现实世界中,大多数网站会以100欧元的价格出售一个用户。如果我输了,我会承认我不对..]
盐:fe#ad746
MD5:CD 7 B1 e 790d 877 ee 64613 D7 f 0 FD 38932 a
生成它的代码:https://dotnetfiddle.net/st0RfL额外奖励50欧元(另一个密码,相同的盐)
盐:fe#ad746
SHA1:Fe 3463 DC 8 b 98d 33 C1 DD 8d 823 b 0d 49 DCD 991 e 6627
我们必须注意盐真的很少,这有点扭曲了实验,但不管怎样,事情是这样的:
最初的挑战发布在00:20
在5:20瘤胃过账:
密码是:开发9
我的代码:http://pastebin.com/enzgq1iz
所以,这是我的贝宝:…
在6:15Petar发布:
Fe 3463 DC 8 b 98d 33 C1 DD 8d 823 b 0d 49 DCD 991 e 6627:Fe # ad 746:techno 21
据报道,在台式电脑上破解这个挑战的时间是1-3分钟。
因此,Stilgar损失了150欧元(约180美元)。但希望这是一个有价值的故事——使用哈希算法的输出来存储密码是错误的。因为如果有人得到了散列,他就有了密码。这可能价值超过150欧元,尤其是由于用户倾向于重复使用密码。如果您的站点存储密码不正确,攻击者可能会获得许多其他站点上相同用户的帐户。
正是出于这个原因,去年我