一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 646|回复: 11
收起左侧

[智力题] 程序有时候work有时候不work,可能的原因?

[复制链接] |试试Instant~ |关注本帖
mattsun 发表于 2015-2-12 06:54:41 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
求助一道经典面试题:
sometimes a program works, sometimes it does not. Possible reasons
kkzxak47 发表于 2015-2-12 22:56:29 | 显示全部楼层
work和don't work之间,什么在变化
时间?光照?噪音?
越不可能、越容易被你忽略的细节,越可能是原因。

其实以上都是扯淡,找bug完全拼rp,找不到就洗洗去睡,等你快把它忘记的时候,突然就找到答案了,效率比你在那不停找要高。
记得有个段子,记不清细节了。。。
嘿,找到了
那还是80年代初期,我爸爸在一家存储设备公司工作,这个公司现在已经不存在了,它生产磁带机和驱动这些磁带高速运转的气动系统 —— 这是那个时代的产物。

(Used under license from Laughing Squid. 原始图片可以在 这里找到。)
他们技术改造了磁带驱动器,使得你可以只有一个中心驱动器 —— “A”盘 —— 由它连接着数个“B”盘,在跟A盘连接的内存里驻留这一个小型的操作系统,负责代理所有B盘的数据的读写操作。
每次当你启动A驱动器,你需要在外围驱动器里插入一张软盘,操作系统会把A盘加载到内存里。这个操作系统简单的出奇 —— 它的处理能力全部从一个8字节的微型控制器产生。
这种设备的目标用户是拥有大量数据的企业 —— 银行,杂志等等 —— 他们需要打印大量的地址簿或银行帐目。
有个客户出现了一个问题。在打印的过程中,有个别的驱动器会停止工作,导致整个打印过程终止。为了重载驱动器,值班人员必须重启所有驱动 —— 如果这种事情发生在一个6小时的打印任务中,大量宝贵的计算机使用时间都会浪费,整个任务将不能按时间完成。
公司派出了技术人员。技术人员尽了他最大的努力也不能在测试环境复制出这个问题:这个问题似乎只会出现在打印大量任务的过程中。尽管问题出在硬件上可能性微乎其微,他还是更换了所有的设备 —— 内存,微处理器,磁盘驱动,所有跟磁带机相关的部件 —— 但问题仍然出现。
于是技术人员打电话给总部叫来了一位专家。
专家要了一把椅子和一杯咖啡,坐在了计算机房 —— 那个时候他们已经专门为计算机提供了机房 —— 值班人员准备了一大堆的打印任务,他就在旁边看着。他等着,一直到机器崩溃。机器果真崩溃了,所有人都看着专家 —— 专家没有发现任何的线索。他命令把打印任务重新执行一次,所有的值班人员和技术人员都回各自岗位工作。
专家又在椅子上做下来,等着机器崩溃。这一等就是六小时,但真的又发生了。专家仍然没有弄清是什么导致了崩溃 —— 除了有一点他注意到,崩溃总是发生在屋内人比较多的时候。他命令再打印一次,重新坐下,等着。
当第三次崩溃时,他发现了一件事情。崩溃总是在值班人员更换其他没有关联的启动盘时发生的。进一步研究,他意识到当一个值班人员走过某块地板时崩溃就会发生。
地板是由铝制的板块拼成,下面有6 到 8 英寸高的隔空层,计算机所使用的大量的电缆都走地板下,这样可以避免值班人员无意间踢到它们。地板块间拼合的很紧密,这是为了保证垃圾不掉进电缆通过的空间。
专家说有一块地板变形了。当值班人员踩着这块变形的地板的一角时,地板块的边缘相互摩擦,这就会跟连接各地板的塑料之间产生静电,进而造成电磁干扰。
如今所有的RAM都有防电磁干扰功能。但当时并没有这种技术。专家指出,电磁干扰破坏的RAM的工作,操作系统也就崩溃了。
专家打电话给维护部门,拿来了一块新地板,他自己把它装上,问题就这样解决了。

评分

1

查看全部评分

回复 支持 3 反对 0

使用道具 举报

robend 发表于 2015-2-12 18:15:23 | 显示全部楼层
为什么这是智力题?是因为月球引力的变化?
回复 支持 反对

使用道具 举报

weihu816 发表于 2015-2-12 18:36:08 | 显示全部楼层
In computer science, do remember "It's always your fault".
回复 支持 反对

使用道具 举报

又见紫风铃 发表于 2015-2-12 21:08:15 | 显示全部楼层
楼上说得对! It's always your fault

我曾经遇到过的情况比如要catch keyboard interupt,用 try - exception KeyboardInterupt的时候,try里面的语句时间太短,导致有时候键盘中断来的时候正好执行到try这一行,而不是try里面的内容,就跪了,但大部分时间还好。

然后有些这种bug是无法避免的(OS老师说的),因为代码一行行运行总需要时间,虽然很短,但这个短时间内还是可以发生异常。 但要竟可能概率降到最低,可能程序运行几个月才有一次这种bug之类的。
回复 支持 反对

使用道具 举报

kurtwang 发表于 2015-2-12 23:07:23 | 显示全部楼层
我记得cc150里有这个题
回复 支持 反对

使用道具 举报

 楼主| mattsun 发表于 2015-2-16 02:10:09 | 显示全部楼层
如果面试中问到这道题目可以怎么回答呢?我能想到的就是如果程序中有产生随机数的话每次的结果可能不同。不过如果只是伪随机的话其实还是一样的
回复 支持 反对

使用道具 举报

c__jay 发表于 2015-2-18 08:40:42 | 显示全部楼层
Dead lock, random varibale, read file failure, connection failure,overflow

其实还是蛮多的吧
回复 支持 反对

使用道具 举报

ludqianshui 发表于 2015-2-20 17:37:28 | 显示全部楼层
这个问题怎么回答啊,不同问题不一样啊
我遇见过的情况:
1 内存不够了
2 有的相关与network的需要响应时间,network latency要长,等不到就挂了。
3 dead lock也很多
4 mysql达到了最大attempt。。。。
回复 支持 反对

使用道具 举报

ludqianshui 发表于 2015-2-20 17:38:02 | 显示全部楼层
kurtwang 发表于 2015-2-12 23:07
我记得cc150里有这个题

cc150 是Cracking the Coding 150?

谢谢!
回复 支持 反对

使用道具 举报

pro 发表于 2015-2-20 21:17:48 | 显示全部楼层
从程序自身的角度来说,最常见的就是多线程/多进程的情况啊

从外部的角度来说,程序就是根据一个输入给出输出。输入里面包含了当前时间,系统状态,其他程序(数据库,网络接口)的输出等。这些东西变了当然也会导致输出不一致。
回复 支持 反对

使用道具 举报

kurtwang 发表于 2015-2-21 00:41:57 | 显示全部楼层
ludqianshui 发表于 2015-2-20 17:38
cc150 是Cracking the Coding 150?

谢谢!

是的,里面有一道题就是这个,分析了好几种情况
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-9 08:10

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表