设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

吐槽编程问题的五张漫画

2014-7-17 15:09| 发布者: joejoe0332| 查看: 6574| 评论: 0|原作者: 轻如纸张|来自: 伯乐在线

摘要: 大家可能知道,我时常活跃于Stack Overflow——当今最热门的程序员问答网站。该网站的好同志们公开了他们的数据,任何人都可以通过这个页面查询他们的数据库:data.stackexchange.com,那里的很多问题和回答都配上了X ...

  大家可能知道,我时常活跃于Stack Overflow——当今最热门的程序员问答网站。该网站的好同志们公开了他们的数据,任何人都可以通过这个页面查询他们的数据库:data.stackexchange.com


  那里的很多问题和回答都配上了XKCD(由Randall Munroe 创作)的漫画链接,于是我决定扒一扒,哪几篇漫画最爱被程序员拿来吐槽他们遇到的奇葩事。


  我使用的查询很简单:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SELECT  link, cnt, id [Post Link], score
FROM    (
    SELECT  link, id, score,
        COUNT(*) OVER (PARTITION BY link) cnt,
        ROW_NUMBER() OVER (PARTITION BY link ORDER BY score DESC) rn
    FROM    (
        SELECT  id, score,
            'http' + SUBSTRING(start, 1, PATINDEX('%/%', SUBSTRING(start, 13, 30)) + 12)
        FROM    (
            SELECT  id, score,
                SUBSTRING(body, PATINDEX('%://xkcd.com/[0-9]%', body), 20) start
            FROM    (
                SELECT  TOP 400000
                    id, body, score
                FROM    posts
                ORDER BY
                    id DESC
                UNION
                SELECT  TOP 4000000
                    postId, text, score
                FROM    comments
                ORDER BY
                    id DESC
                ) q
            WHERE   body LIKE '%://xkcd.com/[0-9]%'
            ) q
        ) q (id, score, link)
    ) q
WHERE   rn = 1
ORDER BY
    cnt DESC

TOP语句是用来限制查询范围的,因为他们的服务提供商不允许全文索引,所以不这样的话,就会请求超时。这个查询只能涵盖最近的帖子和评论,所以一些经典的帖子可能被忽略了。不过,这样已经足够说明问题了。


  你可以从这儿看全部结果,本文只讨论排名最前的五篇。

 

#5 随机数 (10次引用)


  引用这篇漫画的自然是吐槽各种随机数生成器坑爹的帖子,其中被顶最多的是这一篇:

161803398是一个特殊的数吗?Math.Random()里用到的



  我猜答案可能是「数学原理,不解释」,但我还是希望有人能通俗地解释一下此中玄机…


  起因是,我今天在鼓捣BCL的源代码,想看看以前用过的那些类是怎么实现的。因为以前没考虑过如何生成(伪)随机数的问题,所以我打算看看在这儿是怎么实现的。


  全部代码在此:http://referencesource.microsoft.com/#mscorlib/system/random.cs#29

1
<code>private const int MSEED = 161803398; </code>


  每次生成Random()类的随机数种子都要用到这个MSEED值。


  这个神奇的数字:161803398,我想破头也想不出它是怎么来的。它不是个质数,也不是2的某次幂,跟哪个稍微有点意义的数字都不搭边儿。我也查了它的二进制和十六进制形式,怎么看都只是一个没有特征的数字。


  我Google过了,没有结果。


这个数来自于Phi值(黄金分割比)。
161803398 = 1.61803398 * 10^8 ≈ φ * 10^8

有关黄金分割比

  另外,强烈推荐数学爱好者读读这一篇

  我还找到一篇含同样观点的关于随机数生成器的学术论文。(见53页)

  也就是说,出于某些(也许是有道理的)原因,黄金分割比貌似很适合拿来做随机数生成器的种子……有意思的是,上面引用的那篇论文,编程语言中的伪随机数生成器,第一页就引用了上面这篇漫画。

 

#4 goto (10次引用)

  goto是某些编程语言中的一个构造体(construct),用于跳过所有正在执行的循环和处理,无条件跳转到程序的任意位置。很多程序员(显然还有迅猛龙)都认为这是个很糟的编程习惯。


酷毙

雷人
1

鲜花

鸡蛋

漂亮

刚表态过的朋友 (1 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部