阅读更多

8顶
0踩

编程语言

转载新闻 5 张漫画让你了解奇葩的编程问题

2014-07-17 10:50 by 正式记者 newer7 评论(8) 有35523人浏览
本文由伯乐在线翻译自EXPLAIN EXTENDED。一些程序员喜欢用漫画来吐槽或表达自己的心情,下面一起来看看这些漫画和吐槽的编程问题吧。

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

我使用的查询很简单:

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
private const int MSEED = 161803398;

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

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

我Google过了,没有结果。

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

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

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

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

#4 goto (10次引用)



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

被顶最多的评论来自这个帖子:解析错误:Unexpected “

我遇到了这么一条错误信息:

引用
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\game.php on line 12


源代码如下:

<?php
    $words=$_GET['words'];
    $array=explode(",",$words);
    $j=count($array)-1;
    goto a;
 
a:  shuffle($array);
    $num=$array[0];
    echo "The Number Is = $num";
    echo "";
    echo "Please Enter The Number Within 10 Seconds";
    echo "<form method=\"get\" action=\"$_SERVER[\'PHP_SELF\']\" ";  **<--Line 12**
    echo "<input type=\"text\" name=\"num\"";
    echo "<input type=\"submit\" value=\"Press Me! \"";
    $input=$_GET['num'];
    goto b;
 
b:  if($input==$array[0] && $array!=NULL)
    {
        array_pop($array);
        goto a;
    }
    elseif($array!=NULL)
    {
        goto a;
    }
else
    break;
?>


请别揪着GOTO不放,告诉我怎么解决这个错误就好,我只是在试验用这段代码解决个问题。

虽然楼主声明不要在GOTO上挑三拣四,不过说了也白说,被顶最多的评论就链接到上面那篇漫画。

#3 密码强度 (11次引用)



相比用一串随机字符(很难记)当密码,Randall建议使用基于自然语言的密码短语(passphrase),既安全又好记。

得票最多的评论来自这个求 助帖:《使用正则验证密码复杂度

我在写一个javascript的正则表达式,用于验证密码的复杂度,密码必须符合这些条件:

  • 至少包含12个字符
  • 至少包含一个以下字符:* ^ !
  • 至少包含两个大写字母
  • 至少包含两个数字
  • 至少包含一个小写字母
我在网上找到一个例子,修改了一下:

(?=.*[0-9]{2,})(?=.*[a-z])(?=.*[A-Z]{2,}).{12,}


但是还缺特殊字符的验证,而且两个大写字母和两个数字必须连在一起才能通过验证,结果如下:

aMMericano11 - true
aMmeRican1o1 - false


我希望第二个密码也能通过验证,当然还需要特殊字符的验证。

谁能帮帮我吗?

问题在于,这个正则显然不能允许密码短语的使用,所以下面的评论用XKCD的链接巧妙地指出了这一点。

#2 前人的智慧 (16次引用)



所谓挫败感:在网上搜索一个罕见的、奇特的问题,只找到一个帖子,描述的问题一模一样,但是最后解决了没有,如何解决的,没有下文。

被顶最多的评论来自这个帖子:《部署EAR时报错:Class bytes found but defineClass()failed for

今天我尝试把一部分使用EJB 1.1的老代码部署到Weblogic 10.3.6,但总是报这个奇怪的错误:Class bytes found but defineClass()failed for

类都被找到了,还能是什么问题?

搞定了,项目代码是用JDK 1.7编译的,但是Weblogic服务器安装的是1.6。

我用JDK 1.6重新编译了一下,然后就能用了!

我把这件事记在这儿,因为这个问题在网上实在太难找到答案了。

发帖的这位显然花了很多时间才找到这个问题的解决办法,于是他好心地把问题和答案都发到了Stack Overflow上。

此答案的评论只是一句「谢谢」,外加这篇漫画的链接。从这条评论和这篇帖子的顶贴数来看,它至少帮到了三个人。

说真的,干得漂亮!大家都向Jarrod Roberson看齐吧。

最后,获得了96次引用的大热门,是这篇:

#1 老妈的逆袭 (96次引用)



一个没安好心的老妈给他儿子取的这个名字,只要输入到未防范SQL注入的数据库里,就能把数据库搞坏。

这种事不是第一次听说了,你可以读一读这篇真人真事:《搜索一个叫Null的客户把程序整崩了

同时,也有一些人,爱尔兰血统的人(可能是有Null这个名字—译者注),在注册网站的时候,被矫枉过正的SQL注入预防手段弄得很不高兴。

被顶最多的评论来自这个帖子:《SQL注入演示页面

我在为我的学生们创建一个SQL注入演示页面。我写了一个登录页面,但是我好像没法进行注入。下面是我写的页面代码。我已经试过在username字段写入多个语句以绕过SQLi。我还能想到的就只有使用子查询,或者把我的代码漏洞再搞大一点。

<?php // Check to see if there was a request method that is a post type
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    // Check to see if username field is null
    if (!empty($_POST['username'])) {
 
    // Connect to the server using credentials
    $con = mysql_connect('localhost','root','sqlcool1');
    // If the connection was not successful
    if (!$con){
        echo 'OUCH';
        die('Could not connect: '.mysql_error());
    }
    // Select the correct database from the server
    $db = mysql_select_db('injectme',$con);
    // Pass a sql query through the table to pull the user field that was entered in the form
    // Return the results in an array
    $sql = mysql_query('SELECT * FROM user WHERE username = "' . $_POST['username'] . '"');
    $row = mysql_fetch_row($sql);
 
    // compare $row["password"] to $_post["password"]
    // if they match it's good: log them in
    // if not, they're beat: don't log them in
 
    if ($_POST["username"] == $row[1] && $_POST["password"] == $row[2]) {
    // do something to let them know that it worked
    echo('<html>
        <head>
            <meta http-equiv="refresh" content="3; url=search.php">
        </head>
        <body>
            <p style="color:green">logged in</p>
        </body>
    </html>');
    } else {
        // do something to let them know it didn't work
        echo('<p style="color: red">Invalid username or password.</p>');
        echo('<form name="login" action="login.php" method="POST">
            Username: <input type="text" name="username">
            Password: <input type="password" name="password">
            <input type="submit" name="submit_button" value="Submit">
            <button type="submit" formaction="register.php">Register</button>
        </form>');
    }
    //Close the connected session with the server
    mysql_close($con);
 
    } else {
 
        // Repost Form
        echo ('<p style="color: red"> No username / password provided.</p>');
        echo('<form name="login" action="login.php" method="POST">
            Username: <input type="text" name="username">
            Password: <input type="password" name="password">
            <input type="submit" name="submit_button" value="Submit">
            <button type="submit" formaction="register.php">Register</button>
            </form>');
        }
    }
    else
    {
        echo('<form name="login" action="login.php" method="POST">
            Username: <input type="text" name="username">
            Password: <input type="password" name="password">
            <input type="submit" name="submit_button" value="Submit">
            <button type="submit" formaction="register.php">Register</button>
        </form>');
    }
?>


这位作者很奇葩地想故意把代码写得能被SQL注入,结果却做不到……

原文链接: EXPLAIN EXTENDED   翻译: 伯乐在线 - 轻如纸张
译文链接: http://blog.jobbole.com/73411/
  • 大小: 11.7 KB
  • 大小: 38.7 KB
  • 大小: 141.8 KB
  • 大小: 38.1 KB
  • 大小: 48.9 KB
来自: 伯乐在线
8
0
评论 共 8 条 请登录后发表评论
8 楼 wfifi 2014-07-22 17:47
#3如果有多个这样的长密码呢,到时一定会嫌脑子不够用的!!
7 楼 liuyuhua0066 2014-07-21 11:04
这个sql注入笑死了
6 楼 o0rid0o 2014-07-21 08:36
周一来看到这个,我整个人都变好了。。。O(∩_∩)O哈哈~
5 楼 rea 2014-07-20 22:56
有趣与教育一体啊
4 楼 yujiaao 2014-07-19 10:08
写得不错,这个月可以给你发奖金了
3 楼 ft3159572 2014-07-17 20:30
老妈的逆袭,我看了后,读了两遍,乐的不行了
2 楼 pudi 2014-07-17 16:47
前人的智慧 很有同感
1 楼 iaimstar 2014-07-17 12:32
还真是搞笑

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 细胞识别图像处理项目总结

    总结一下我做的细胞图像识别项目的过程和经验与结果收获

  • 浅谈WebAssmebly,在浏览器上进行图像处理

    浅谈WebAssmebly,在浏览器上进行图像处理 自从2008年各大浏览器为JavaScript执行引擎加入JIT(Just in Time, 即时编译器)以来,JavaScript在浏览器的执行性能有了一个量级的飞跃提升,促进了Web领域的飞速...

  • 基于神经网络的图像分割

    入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 一、图像分割简介与分类 ????图像分割:把图像分成若干个特定的、具有独特性质的区域并提出感兴趣...

  • python+opencv图像处理基础(一)————对图像的获取、查看、保存等基本操作

    读取图像并查看形状、像素等 hello,大家好.疫情在家期间,文献看不下去,就想学一下python这个软件,刚开始是跟着视频学的一些基础,比如anconda pycharm的安装,以及它们所需的环境的配置,还有一些数据包的下载等. 在弄...

  • 我的第一份实习—ISP图像调试工程师

    在实习期间从刚开始做每一步都需要寻求公司导师的帮忙到我开始独立接手项目用来大概3个月时间,今天是我在公司的最后一天,我觉得我在这里很开心,因为我做着自己喜欢的事情,公司的同事也很友善,实习生的工作压力...

  • 理解 CMOS IMAGE Sensor

    文章作者 刘斯宁是一位Camera技术大佬,做相机图像相关技术的,有兴趣可以关注一下。 前言摄像机用来成像的感光元件叫做image sensor或imager。CMOS Image Sensor (CIS) 最早是美国喷气推进实验室(Jet Propulsion ...

  • Pytorvh之Vision Transformer图像分类

    与传统的卷积神经网络(CNN)不同,ViT通过将图像分成==固定大小的图块==(Image Patches)并展平成序列,然后将==序列输入Transformer模型进行处理==。在Transformer中,`Self-Attention结构被用来捕捉序列中不同位置...

  • 图形图像处理-之-高质量的快速的图像缩放 中篇 二次线性插值和三次卷积插值

    from:... 图形图像处理-之-高质量的快速的图像缩放 中篇 二次线性插值和三次卷积插值   HouSisong@GMail.com 2006255.12.13 (2015.08.15 PicZoom_ftBilinear_

  • ICA算法处理后,ICA成分识别

    今天Rose分享一篇关于脑电成分、眼电成分等判断。 当Run ICA结束后,我们一般会判断ICA成分对应的是什么成分,是眨眼成分... ICA处理脑电资料汇总 收藏 | 脑电EEG基础与处理汇总 脑机接口BCI学习交流QQ群:903290195

  • VC+DirectShow对视频进行图片处理(转)

    本来图像特效没什么稀奇的,在PhotoShop等图像处理软件中我们早已见得多了,不过用在视频上就令人感觉有点神奇。我一直都想拥有这些效果,但我的摄像头是很早就买到的,没福气奢望驱动程序给 它带来的全新精彩。刚好...

  • [Halcon&测量] 测量助手详解

    &nbsp; &nbsp; &nbsp; &nbsp; 这里主要介绍一些如何利用Halcon做一些一维、二维的测量,单位是像素距离,如果要... Halcon在测量物体的距离主要有测量助手、手动编程两种方式,下面介绍一下测量助手的使用: halcon...

  • 目标跟踪综述

    商业转载请联系作者获得授权,非商业转载请注明出处。相信很多来这里的人和我第一次到这里一样,都是想找一种比较好的目标跟踪算法,或者想对目标跟踪这个领域有比较深入的了解,虽然这个问题是经典目标跟踪算法,但...

  • 基于Java+SpringBoot+Vue前后端分离仓库管理系统设计实现

    从仓库管理系统的前台页面实现,到仓库管理系统的后台代码的编辑,我用到的软件包括了数据库软件MySQL,Java开发工具IDEA,办公软件Office,浏览器软件Fireworks,图像处理软件Photoshop等,这也是我第一次使用Java...

  • 这么漂亮的图画,竟然是用NumPy画出来的?请跟我来,10行代码玩转NumPy!

    若能邀请Matplotlib的ColorMap来帮忙的话,处理颜色就会轻松很多,色彩也会更丰富,但这并不意味着ColorMap是必需的。 &gt;&gt;&gt; import numpy as np &gt;&gt;&gt; from PIL import Image &gt;&gt;&gt; from matplotlib import ...

  • FFMPEG相关知识

    我们将生成一个简单的PPM格式文件,请相信,它是可以工作的。 void SaveFrame(AVFrame *pFrame, int width, int height, int iFrame) {    FILE *pFile;    char szFilename[32];    ...

  • 你不知道的前端图片处理(万字长文,建议收藏)

    本文阿宝哥将按照以下的流程来介绍前端如何进行图片处理,然后穿插介绍二进制、Blob、Blob URL、Base64、Data URL、ArrayBuffer、TypedArray、Dat...

  • 基于神经网络的系统辨识,神经网络与图像识别

    生物特征识别技术涉及的内容十分广泛,包括指纹、掌纹、人脸、虹膜、指静脉、声纹、步态等多种生物特征,其识别过程涉及到图像处理、计算机视觉、语音识别、机器学习等多项技术。 目前生物特征识别作为重要的智能化...

  • vue3.2+ts+vite+admin 开发的admin管理系统模板

    vue3.2+ts+vite+admin 开发的admin管理系统模板

  • chromedriver-win64-124版本浏览器驱动

    自动化测试工具selenium使用的浏览器驱动下载 chromedriver驱动压缩包 Java web 自动化测试工具需要使用的chromedriver浏览器驱动

  • node-v8.1.0-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics