A. 历史上有哪些因为程序员写出的bug而造成的事故
1. 火箭爆炸,原因:类型强转(64b浮点->16b整数)导致异常
2. 火箭爆炸,原因:Fortran代码笔误(少一个减号)
3. 火星车故障,原因:vxWorks优先级逆转 -
4. 火星探测器坠毁,原因:用错计量单位(磅与牛)
程序员导致的事故挺多,这些是严重点的。还有游戏更新把用户电脑上文件删光的...
B. 优秀的程序员是如何处理技术 Bug 的
从初入职场菜鸟到职场大咖,很多程序员在努力充实自己,有时候我们需要对自己进行一次能力定位,了解自己的优势和没有掌握的技术。芯学苑列出几点作为初入职场的新手评估自己,明了前进学习的方向。
1、技术能力(解决问题的能力)
这是非常重要的事;过硬的技术能让你得到面试机会,并在工作中游刃有余。当公司招聘一个java开发人员时,是会优先考虑能力因素的。在实际的项目开发中,一个程序员的技术能力等于其解决问题的能力。
如果拿一个尺度来衡量这个能力的话,一个程序员的能力可以用能完成任务的数量和难度来衡量。一个程序员能基本无误的完成项目中的一个功能算是合格,但在此之前,他对项目的生产力为负,为他布置的任务,中间环节的沟通,修补bug的时间其实要多于自己直接完成该功能的时间的。能较好完成一个完整模块的程序员才算是较好的程序员,也是项目中的主要开发者。能独立完成整个项目才是优秀的程序员。
2、专业基础(知识的积累)
一个程序员的知识积累很大程度上决定了其解决问题的能力。知道如何编写代码是基本的技能,但是知道Java编程语言的原理,知道代码背后的算法将使你从人群中脱颖而出。
3、主流编程工具
今天,事实是,你不能成为一个样样都懂的人(杂而不精)。你必须选择你要掌握的工具。有时这是由工作的环境决定的,但是按照下面说的去做也是一个很好的选择:
构建工具:Maven或Gradle。
SCM:Git(不是GitHub。大不相同)。
构建自动化:Jenkins。
IDE:Netbeans或Eclipse——不仅用于编写代码,而且还从IDE中重构和调试代码。我遇到了很多没有如何从他们最喜欢的IDE调试的开发人员。
Bug跟踪:Bugzilla或Jira。
4、JSF的知识
应用程序服务器
所有Java开发人员应该知道如何在Apache Tomcat中部署。
当Glassfish开发停止时,下一个最好的事情是J Boss Wild Fly。
5、沟通的能力
沟通是我们做好一切事情的关键。我们必须与我们周围的环境保持互动,无论是在我们的私人还是职业生活中。一个良好的程序员知道如何在各种团体面表达自己。也许对你来说显而易见的东西在他人的角度来看并非如此。
从大的尺度(比如一个人的工作生涯)来看,一个程序员知识积累的多少只决定于其自学能力和他对编程本身的兴趣。
在一个分工明确的项目中,程序员需要理解产品,和领导沟通理解自己的任务,和同事们沟通以正确的方式进行合作。无论哪一个方面沟通出了问题都不是小事情,同时,程序员还需要正确的传达设计的实现难度,以及让别人正确的理解自己设计模块的接口。在不写文档时,正确的口头沟通非常重要,需要写文档时,良好的编辑能力也算做是沟通能力的一部分。
6、自学能力
这是一个非常重要的技能,在你自己的空闲时间学习新的技能。不要等待公司为你提供培训。你需要自己去学习新技术,提升自己在相关领域的水平。从Java后端开发到架构模式,总是有一些新事物值得学习。经常阅读博客和论坛,尝试加入本地聚会小组。你学到的东西可以帮助你的事业。知识刷新频率极快让人无法追赶的这个时代,难免会有超出自己知识范围的时候,此时你的自学能力决定了你能多快的完成任务。
7、良好的团队合作精神
无论是部分编程还是大型项目,所有开发人员都是作为团队的一部分在协同工作。你需要致力于团队的目的,或帮助新的团队成员克服障碍。不要存在这种“我只要做好我的本职工作,下班就直接回家”的态度。成为团队的一部分,帮助周围的同事,对自己的能力也是不小的提升。
就像拿破仑说的不想当元帅的士兵不是好士兵,追求参与一个大型软件系统的开发,是每个程序员的梦想。在此之前,应该学习更多的专业知识,达到优秀程序师的标准。最后希望各位程序员阅读本文后能够得到一些裨益,在这条路上走得更好。
C. 程序员改bug 问题是怎么改好的
其实程序员改bug也是有学问的。程序员改bug跟医生治病是一样一样的,无非一个是给机器看病,一个是给人看病。首先,一定要准确的定位引起bug的真正原因。定位问题,需要程序员去读代码,了解流程,弄明白来龙去脉。其次,定位bug源头之后,就需要去分析解决问题的方法。分析问题,需要综合相关知识,熟悉它所用到的一些机制,找到最佳解决方案。拿Android来说吧,比如修改wifi的bug,就需要弄清楚wifi的流程,stateMachine机制,消息机制,当然最基本的四大组建及其机制是必不可少的,哪里都有用到。然后,才是去coding。当然coding,也应该注意一些问题,比如,风格尽量和源码保持一致。Google那批程序员功底还是可以的。注释一定要清晰,包括作者,改动时间,以及原因。最后,要强调一点,改bug一定要彻底。不能改一个bug一起另外一个或者一堆bug。一定要避免这样的情况发生。我们公司就一个刚毕业没多久的程序员,改bug不彻底,只改了界面显示,弄的实际功能废掉。对于这样的代码,我只想说两个字:垃圾。另外,改bug要和相关模块的工程师讨论,因为他们或许就是这方面的专家,这样才能写出优秀的代码。
有的人改bug改了几个月,就会分开发的任务,或者层次更深一点的任务。有的人从进公司就一直改bug。不能否认公司方面有一定问题。但程序员也应该从自身方面找找问题。你写的代码是最高效的吗?你写的代码让别人很容易看懂吗?你写的bug让别人呲之以鼻还是赞叹不已?如果你做的不够好,就不要整天抱怨:“又让老子改bug,老子从进公司到现在都一直在改bug!”
D. 程序员发现 Bug 的时候是怎样一种心境
我觉得程序员发现bug,应该就有一种学霸发现做错了一道题的感觉,根据这张题出现在自己试卷上还是出现在别人试卷上应该是有不同的心情的,下面就程序猿的心情来简单聊一聊。
有时候觉得程序员真的是很牛逼,那么一大串外星文字写出来,真是完全看不懂,人家还能一心二用,一边写程序,一边看小说。
E. 面试中被问到你遇到的java编程中的bug你如何解决的
首先,要认识 bug。
如果一个程序做了它不应该做的事,或者没有做它应该做的事,那就是 bug。bug 很难避免,尤其在规模化的编程过程中。
我们知道从面向过程的角度来说,一个程序是由数据结构和算法构成的,从面向对象的角度来说,程序可以是由类和对象组成的。因此 bug 我这里分成两类:
在一个 Java 程序中,类和对象的关系可能会造成 bug。这是设计时的问题,例如多实例的同步问题、线程冲突和死锁问题,这是常见的两个潜在的 bug。要尽量避免这类 bug,只能在设计时下功夫。思路一定要清晰,一定要清楚每个类要做些什么,什么时候该做些什么。这类 bug 比较容易发现,但是不易修补,因为牵扯到程序的不同部分,有时候相当麻烦,因此最好一开始就不要让它出现。
然后一些细节上的 bug,属于逻辑漏洞,可能是算法上的漏洞。Java 其实这方面要比 C/C++ 安全,因为后者的某些漏洞是致命的,例如内存泄露、指针冲突、野指针等一系列问题,可能直接导致程序崩溃,但是 Java 绝对不会出现指针问题,内存相对安全。但是 Java 也可能导致内存不断消耗,最终崩溃的情况也是有的。这个问题我也碰到过几次了,如何解决?需要你对你大量使用的类非常熟悉,最好事先仔细看看文档,有的类需要你最后 dispose 的,有的类 add 过后需要 remove 的,有的类的某些方法会间接地创造一些对象。这种 bug 不大容易发现,尤其是我们有时候对 JVM 的绝对信任而忽略了这些细节,甚至造成了不好的习惯。要么不碍事,要么很严重,一但出现问题可能会发现同样的问题几乎出现在所有的地方。所以避免这类 bug 只有谨慎,并且要养长良好的习惯。
顺便说一句,Java 内存溢出后程序就直接退出,可能会导致数据丢失之类的,这个责任担当不起的。
然后逻辑漏洞还没讲完,还有一些和内存无关,但是也是逻辑上的疏忽造成的,例如数组越界、空栈、格式不兼容等等。这些相当难发现,有时候是正常的,有时候就报错了。这个可以说是最普遍的漏洞,也是最难发现的漏洞。这类漏洞要看程序员的水平,经验丰富、思维清晰、反应敏捷、习惯良好的程序员会好一点,但是不是所有的程序员都是这样的,再说人无完人,再怎么水平高也难免犯点小错嘛。这种漏洞基本都是在后期测试(传说中的内测)和已发布的测试版中逐渐被发现。为了尽量早发现,内部的测试要做的好,不过首先负责各个部分的程序员之间要定下默契,程序要符合规范,类和方法尽量简单化,不要一个方法出现 4 个以上的参数,因为那样会巨大的增加测试的麻烦。要写好注释,变量名写完整,等等规范就不一一列举了。然后对测试人员的要求也是比较高的,测试人员必须熟练掌握测试技巧,有的团队这些小 bug 的修复也是测试人员做的,那测试人员也要良好掌握调试技巧,团队内人员要保持良好的沟通。
F. 身为程序员,当程序出现bug时,是一种怎样的体验
当程序出现bug的时候,程序员会有两种感觉,一种是终于可以提现自己的价值了,当自己把bug修复好的时候,就会有一种成就感,但是如果很难修复的话,就会很头疼,所有很多程序员很早就有一部分发际线就会变高。
G. 程序bug出现的原因是什么
原因是多方面的,比如程序逻辑不严谨、程序变量类型设置不当、程序算法不完善等。
H. 程序员为什么要一直改bug不能一次性写好吗
作为一名程序员,我也总是在调试,Bug总是防不甚防的出现,这个过程真是有趣又痛苦,最后我觉得习惯就好,一次性写出完美代码是每个程序员不可实现的梦想。
程序员作为一项工作,是有任务有指标的,比起慢慢写出完美程序解决所有问题,大家更喜欢快速看到一个可以执行解决部分问题的程序,此时完成比完美更重要。
没有哪个程序员可以写出完美的代码,即使高能又伟大的公司也做不到这一点,想想看你的手机软件是不是经常提醒你该更新了,连微软都在三天两头的让你打补丁,不是吗?
I. 世界上第一个将计算机漏洞称为bug的人,是谁
格蕾丝•霍普;她是世界上最早的女程序员之一,1943年他加入美国海军操作马克一号计算机,马克一号是第一部万用型计算机,1947年马克一号升级为马克二号,9月9日这天,马克二号出现故障,无法运行,花了一天时间找到毛病处,是一只飞蛾飞进实验室卡在继电器里面,导致了计算机停运,幽默的格蕾丝把这只飞蛾粘在了马克二号的运行日志上并写道史上第一个被发现的计算机bug,本来只是个玩笑话,格蕾丝却无意间成为史上第一个用bug来形容计算机故障的人。