㈠ 程序员遇到百度不出来的bug都是怎么解决的
笔者不同意下面网友的回答。程序员如果解决bug的水平停留在网络,那么本质上只是一个“面向搜索引擎的代码搬运工”,是不合格的程序员。
程序员对面bug,正确的“打开方式”是像福尔摩斯和柯南那样,寻找线索、运用逻辑推理来缩小问题可能的根因范围,最终精准定位。
常用的方法有:
1. 坏境上下文变换法
2. 工具调试法
3. 版本回溯对比法
4. 代码审计法
……
没有编程问题是stack overflow和Google解决不了的,假设你在编程中遇到了问题,你自己解决不了、你周围的的人都解决不了的时候,我觉得stack overflow、Google是你最好、也是最后的帮手。
作为一个程序员,我觉得Google、stack overflow是你必须要学会使用的两个工具,这两个工具本身并没有使用门槛,只不过因为一些众所周知的原因,很多人不能使用Google和stack overflow这两款工具。
Google主要还是方便,而且很多编程问题都需要用到英文搜索,当然现在网络在专业能力上也提升明显,不过跟Google也还是有比较大的差距,因此我还是强烈建议要学会使用Google,这会帮你在工作、学习上事半功倍。假设Google确实因为某些原因没办法很好的使用,我也建议你至少要会使用Bing搜索。
现在可以说stack overflow上没有你找不到的问题了,从IDE环境安装问题,到各类编程语言问题。算法问题,数据结构问题,调试,重构等等,几乎这里就没有你找不到的答案,可以说在stack overflow上你可以找到任何解决方案,并且上面的回答者基本上都是非常有经验,而且都是实际中遇到的问题分享出来的,这个工具一定要会使用。同理,除了stack overflow这个专业的垂直程序员问答社区,你也可以使用Quora这个综合问答社区,这上面也能找到很多问题的答案。
一些比较优秀的文本编辑器: Emacs/Vim,Visual Studio Code,Sublime Text,Atom,Ultraedit,Hbuilder等。
一些比较非常出色的IDE集成开发环境: visual studio,IntelliJ IDEA,PhpStorm,Haskell for Mac ,eclipse,WebStorm,GoLand,CLion,Android Studio,Xcode,QT等。
macOS平台比较好的第三方包管理工具: Fink,Macports,Homebrew等。
一些比较好的终端工具: Zoc7,iTerm2,Cmder,terminus,hyper等。
一些比较好的笔记软件、markdown工具、效率工具: Evernote,有道云笔记,为知笔记,Ulysses,MWeb,FileZilla,Snipaste,Kantu等。
虚拟机软件、容器软件: Parallels Desktop,VMWare Fusion,Virtual Box,Docker等。
我是个程序员,职务是linux底层驱动工程师。平时的主要工作是调试驱动,但产品遇到诸如死机、重启、不开机之类的问题时,也要参与查找原因。一部分问题,确实可以查看相关的log,然后网络这些log的关键字来解决;但更多的问题,牵扯的条件太多,并不是简单的网络就能解决的。
观察了周围同事们的做法,我总结出以下几种解决方法:
网络因为竞价排名的原因,搜索出来的结果有很多广告的成分,所以有时候要翻好几页才能看到一条相关的答案,有些甚至要翻几十页。
因为网络搜索使用的是SEO技术,即普通用户可以通过优化网站内容来提升关键词排名。
而这就会导致一个问题:你搜索关键词后展现出来的结果是有人想要让你看到的,并不是质量最好的。
也就是说,网络搜索结果被人为干预了。所以网络一直被网民所诟病。
但网络搜索不出结果,未必是网络的原因,也有可能是自己输入的搜索词不准确造成的。所以对于网络,我们要做到如下几点:
除此之外,网络搜索还有点小技巧,粥左罗《万字干货,彻底讲透搜索技巧,10倍提升你的搜索力(免费教程)》这篇文章写得非常好,我整理几点,仅供参考:
01 过滤目标内容
命令:“+”“-”
用法:通过“+”和“-”来对搜索结果进行过滤
比如在关键词后加上“-推广 -推广链接”就可以排除搜索结果中包含相应字样的链接。如果你发现广告还没有排除干净,你也可以再加上“-广告”通常就能彻底的消灭广告。
02 搜索包含某关键词的内容
命令:“intitle”
用法:通过“intitle”命令指定搜索结果中要包含的关键词,注意“intitle”后边连接的冒号是英文状态下的。
03 搜索某一个格式的文件
命令:“filetype”
用法:通过“filetype”命令可以限制我们要搜索文件的类型,注意“filetype”后边接的冒号也是英文状态下的。
04 搜索特定时间范围的内容
命令:“时间..时间”
用法:通过“时间..时间”命令可以限制我们要搜索的文件的时间,注意两个时间的中间顿号没有空格。
相对网络,谷歌、必应对于技术搜索,就相对准确许多,所以当你网络搜索不到时,尝试下别的搜索引擎,说不定会有新发现。
现在程序员使用的机器语言,都是国外的,更准确的说,都是美国的。所以很多论坛、资料等,都是英文。如果你只会用中文来搜索,某些小众的问题,当然搜不到啦。
所以,要学会使用英文关键字来搜索。
有时候甚至要去国外的一些论坛来搜索想要的答案,这就要求要有一定的英语阅读能力,不能一看到英文帖就放弃。
有时候不管你如何搜索,都找不到自己想要的答案,该怎么办呢?这种情况下,就只能硬着头皮尝试自己解决了。
或者,寻求同事或朋友的帮助,寻求大脑风暴,说不定就会有思路。
如果有些问题是因为新器件带来的,还可以找到器件供应商,让他们安排技术支持帮忙查找原因。
除此之外,还可以把问题整理好,写清发生的条件、复现步骤、测试方法、相关的LOG截图等资料,去一些技术论坛发求助帖,寻找大牛的帮助。
做技术时间久了,发现有些问题确实无解,根本没有办法去解决它。
这时候,我一般会尝试把它绕过,就是说,想办法让它无法复现,虽然问题还是存在,但是能把它掩盖过去。
比如有些驱动在开机启动时会加载不正常,那么就让它晚点启动,或者手动加载。这也不失为一种解决问题的方法。
以上就是我的建立,希望对你有帮助。
首先作为一个程序员,一个优秀的程序员最最最重要的能力就是解决问题的能力。这里解决问题的能力当然就包含了解决 bug 能力了
毕竟,程序员这一生,可能会写无数个 bug ,没有说哪个程序员敢保证自己写的程序没有 bug 。 所以,写了 bug ,遇到 bug 并不可怕,可怕的是你没有解决 bug 的能力 。
作为一个程序员,解决 bug 的途径有哪些呢?我们来一起聊一聊!
其实,每个程序员在学习编程的时候,都会使用编程工具,而现在的开发工具,其实功能都很强大。如果你自己合理利用编程工具,都了解和懂得开发工具的一些技巧,其实不仅仅能够提高开发效率,而且还能够帮助你解决很多编程中的实际问题。
debug 调试,大部分你常用的开发工具,都会有调试模式的,简而言之,就是你编程的时候,遇到了不是自己所想的结果的时候,你可以使用 debug 模式,来一步一步的调试,在调试模式下一般每一步都会显示所执行的结果,你可以看看在哪一步出错了,执行的结果与你预想的结果不对,那么你就能够找到问题所在了。
还有就是,开发工具的控制台,都会提示出报错信息的,现在的开发工具,都会直接告诉你哪一行,报了什么错。其实,很容易定位到错误的。你只需要在编程的过程中积累经验,知道报什么错,用什么方法来解决就行啦。
可是,提示的报错信息,我不知道用什么方法来解决的时候,该怎么办呢?这就是你需要积累的,也是问题中所描述的,就是通过搜索引擎来找答案。
不对,这里不应该是合理使用搜索引擎,应该是学会正确使用搜索引擎。比如:网络,你就不要用了,搜出一堆重复的信息,而且广告也多。作为程序员,建议你使用谷歌搜索。
其实,你在编程中所遇到的几乎所有的问题和 bug ,别人也同样遇到过,因为不管是经验丰富的老程序员,他技术再牛逼,也是初学者过来的,也都踩过你踩的坑。所以,互联网是个好地方,里面包含了你想要的问题的答案。
你只要把报错信息往搜索引擎上一放,回车一下,很多关于这个 bug 的答案就出来很多,你只需要找到跟你一样的 bug ,就能找到答案了。
在这里必须提一下这个网站,所有的程序员有必要学会使用这个网站,其实,你编程中所遇到的问题,这个网站上几乎都是由解答的。
Stack Overflow 可以说是最好的软件程序类问答网站了,给软件开发人员工作和学习提供了非常大的便利,以至于像小白,离了 Stack Overflow 简直都不会写程序了。
所以,建议大家一定要学会使用这个网站,对你编程肯定会有非常大的帮助的。
通过上面的方法,几乎应该能够解决到你所遇到的问题,但是,实在找不到答案的话,你可以问经验比你丰富的老程序员,实在解决不了,那就换种方法吧!
网络,谷歌,debug,断点调试,业务上的bug就需要问下同事或者产品。如果能知道大致范围,哪一部分错了,就换一种方法呗,一般都不会只有一种方法。
1.reload
2.restart
3.rewrite and then goto 2 or 4
4.reboot
5.rm -rf /
6.原谅我编不下去了[捂脸][捂脸][捂脸][捂脸][捂脸][捂脸][捂脸]
找bug跟医生看病的思路是一样的,要对症下药。得先把问题的根源找到,找到根源以后问题就容易处理了。搜索引擎找不到的问题,说明这个问题不是一个常见的问题,具有独特性,那么从bug出现的路径上一步一步去排查。必要时可以用排除法,尽可能的缩小排查范围。另外,当软件的业务逻辑比较繁多复杂的时候,一个结构清晰的架构能为你节省不少找bug的时间。还有,充分的单元测试能够帮你减少出bug的机会。以上均为个人看法,欢迎讨论!
一般程序员能碰到的bug无外乎其他上游程序员写库时手抖留下些不匹配或者容易溢出的问题,搜一下差不多能解决问题。如果是自己写的,那无非就是时序错误类型错误之类的,用break point一行行的调就好了。
再复杂点的bug就是程序员拿高薪的根本了,只可意会,不可言传~
仅仅靠搜索引擎、其他网站那必然无法解决大量问题,因为很多问题是跟业务逻辑相关的,是没有直接答案的。比如 游戏 开发有个界面一直无法显示,这个问题就不是网络可以解决的。问题需要调试分析,这和破案非常像,但在开发过程中更有利的是问题有机会可以重现。破案是逆向工程,需要反推。解决代码问题不仅仅可以反推,也可以通过阅读代码正向分析。下面说说如何debug一个业务逻辑问题。回到刚刚的例子,有个界面一直出不来,我们如何快速去定位:
1.思考这个问题发生的可能性。比如 游戏 内大量界面都是正常的,那么可以对比正常界面代码和异常界面代码的区别,这是对比法。
2.假设创建正常界面和这个异常界面的逻辑代码是一样的,那么问题就落到了这两个界面内部,继续在内部重复上面的对比法进行判断,直到锁定最终位置。
上面说的方法基本上可以杜绝卡在一个简单问题上,这是摆脱新手的一个过程。选择使用对比法或者其他方法的前提都是基于观察和对项目的认识,所以,搜集“案发现场”是最关键的。
其他的问题,不属于逻辑的,像其他网友说的那样,有些通过到github、stackoverflow等地方解决的。这些问题也不是直接就去查找的,它通常也有个分析过程。比如你使用了一个库,但是目前它不支持你的模块。对于新手,就是直接网络或者google了。实际上这样的问题也是有“案发现场”的。对于作者提供的api接口的统一性和便捷程度去推断作者在相关支持模块的位置以及命名以及拓展,再尝试在文件夹中搜索。如果都找不到,再去Google上获取更多的信息。重复推断、分析,决定如何拓展或者绕过。
综合上面的几种问题,可以看到的是都离不开对现场的观察和推理分析。这种能力也被称为经验。但是一般情况下你看不到它们这个分析过程,你能做的就是在实际环境中反复逼迫自己去思考,去训练。这个推理的培养,不仅仅是对事情,也是对人。
我在入行 游戏 开发的前期,也是类似的情况。卡在不同种类的问题上,有些在简单逻辑,有些在别人的代码支持上。后面解决的问题多了,就会发现里面共通的思维方式。常用的一些方法如下:
1.对比法,比较正常与异常代码区别
2.二分查找法。分段注释找问题,也会用在很多方面。比如最近版本突然出了一个奇怪bug,可以通过svn还原来定位。这个还原不是一个一个版本还原,而是用二分法去还原。
3.增加信息。在怀疑的位置或者过程添加日志或者打断点辅助自己更好的推理。
4.相似推理。比如一个引擎在api、性能使用程度上都非常友好,那么它在别的地方也有可能相对表现比较好。这时候如果有个功能我们的实现需要很复杂才能完成,那么就有可能是我们用错了。相似推理不一定都能正确,但会提供一些帮助。
以上。
㈡ 程序员都会遇到一些职业瓶颈,程序员该如何规划自己的职业生涯
我也有工作上的困难,就我自己的经验来说吧,我是如何渡过的!工作上的困难和体重的困难都有一个共同点,那就是,紧张会让你的情绪变得很糟糕。情绪的高低直接关系到个人的心态,在开心的情况下,工作起来会很放松,而在情绪低落的时候,就像是一年那么漫长。情绪低落大多是因为家庭的事情,人脉,压力。这就要求我们去处理和缓解我们的紧张情绪。让我谈谈如何缓解你的紧张情绪。
亲戚朋友,把自己的情况告诉亲戚和亲戚,让他们帮你解惑,如果你在这个地方,可以和你的好朋友或者家庭成员聊聊工作上的困难,大家一起努力,总要有一个好的办法。要么就是和他们一起工作,然后在外面走走,或者找个时间出来玩一玩,让自己有个放松的机会。
㈢ 互联网前辈总是说“bug是改不完的”,新入职的程序员该怎样应对bug
互联网前辈总陆雀是说“bug是改不完的”,新入职的程序员应对bug:
㈣ 程序员是怎样解决问题的
程序员的五部曲:
第一、理解问题
解决问题的首要前提是客观准确地理解问题,这样我们才能抓住问题的本质,对症下药。
客观
为什么强调客观呢?在生活中,这样的情境很常见。
我们可以很客观地去评价他人,甚至是给他人给出合理的意见,但是同样的一件事情,放到我们自己身上,我们可能就会觉得束手无策。
通常情况下,我们对于自己的评价是带走自我保护心理的。
自己遇到问题,我们会下意识地弱化问题,或者情樱型绪化地来理解问题,造成问题的失真。
魔镜的故事就是一个最典型的卖颂改例子。
准确
当我们对自身的问题评价做不到客观的时候,我们往往也不会准确理解问题。
还有,准确的定义是找到问题的关键所在。这个怎么做呢?
我们仿照时中判间管理的方式。
首先对自己所要解决问题的过程做一个较为详细的记录。
坚持记录几天之后,我们需要将所有的记录结果进行汇总,分析,找出漏洞最大的地方。
那么这个洞也就是所谓的关键,我们也就可以找到解决问题的突破口。
举个例子,笔者前段时间开始用手机软件记录自己的时间花销,记录几天之后,就会发现,自己时间浪费最为严重的是娱乐。
知道了时间浪费的黑洞,那么接下来就该思考时间黑洞产生的原因了。
时间浪费的主要原因是两个
第一,目标流失
当我在网上查资料,或者用手机写作的时候,总会进入其他的浏览页面,等到自己发觉的时候,时间已经过去大半。
这个我称之为目标流失。也就是我们在网页浏览的时候已经忘记了自己最初的目的,比如说你本来想找一本书籍的txt版本,但是后来你发现自己浏览了一下午的娱乐新闻。
第二,多任务处理
这个问题我是经常遇到。比如说,我在进行日更的时候,有新同学发微信,说查一下宿舍的分配情况。
我当时的反应是火急火燎地去其刷微信,信息查询完毕之后,和分配在同一宿舍的同学聊了一下午。
最要命的是,等到你刷完屏的时候,你有很大可能会忘掉你在更这件事。
或者说你还记得,但你的精力已经消耗的差不多了,你会告诉自己,等会再更,然后你有很大的概率会断更。
找到时间黑洞形成的原因,那么就可以寻求解决措施了。
第二、计划
为自己的病症设置一个完整的疗程,根据问题出现的原因,制定每一步要采取的手段。
第三、拆解
这一步是和计划联系在一起的,只不过它的要求更加细化。
它需要我们将计划的每一步都拆解成可以执行的步骤,感兴趣的读者可以参考笔者的另外一篇文章《如何让遥不可及的梦想变得触手可及?》
第四、卡壳
可以说,我们每个人都有改变的想法,也确实有很多人尝试去做了,为什么还有那么多的放弃者。
因为在执行计划的时候,出现的变数让我们卡壳了。卡壳再正常不活了,那为什么会放弃?
答案是自我负罪感。
当我们卡壳的时候,我们大多数人会产生一种负罪感,就是觉得自己定计划的时候,详尽完备,而且自己已经坚持了这么长时间,会陷入一种自我怀疑,也就是负罪感。
解决的办法是立即采取行动,而不是描述问题本身,这也是我们解决所有问题的一个心态。
我们不要紧盯着问题本身,你理解问题的过程就是在采取行动,相反,你逢人就说,我遇到什么问题,我有多痛苦,没有任何意义。
第五、练习
其实这个步骤是对前面几步的一个综合。
这五部曲是一个闭环,是需要反复进行的,因为问题会不断出现。
回头看过去的生活,我们的历程何尝不是这样?不断遇到新问题,不断解决问题,然后获得新的体验。
想看更多文章
欢迎关注大鱼号【小妖影视】
㈤ 程序员改bug 问题是怎么改好的
其实程序员改bug也是有学问的。程序员改bug跟医生治病是一样一样的,无非一个是给机器看病,一个是给人看病。首先,一定要准确的定位引起bug的真正原因。定位问题,需要程序员去读代码,了解流程,弄明白来龙去脉。其次,定位bug源头之后,就需要去分析解决问题的方法。分析问题,需要综合相关知识,熟悉它所用到的一些机制,找到最佳解决方案。拿Android来说吧,比如修改wifi的bug,就需要弄清楚wifi的流程,stateMachine机制,消息机制,当然最基本的四大组建及其机制是必不可少的,哪里都有用到。然后,才是去coding。当然coding,也应该注意一些问题,比如,风格尽量和源码保持一致。Google那批程序员功底还是可以的。注释一定要清晰,包括作者,改动时间,以及原因。最后,要强调一点,改bug一定要彻底。不能改一个bug一起另外一个或者一堆bug。一定要避免这样的情况发生。我们公司就一个刚毕业没多久的程序员,改bug不彻底,只改了界面显示,弄的实际功能废掉。对于这样的代码,我只想说两个字:垃圾。另外,改bug要和相关模块的工程师讨论,因为他们或许就是这方面的专家,这样才能写出优秀的代码。
有的人改bug改了几个月,就会分开发的任务,或者层次更深一点的任务。有的人从进公司就一直改bug。不能否认公司方面有一定问题。但程序员也应该从自身方面找找问题。你写的代码是最高效的吗?你写的代码让别人很容易看懂吗?你写的bug让别人呲之以鼻还是赞叹不已?如果你做的不够好,就不要整天抱怨:“又让老子改bug,老子从进公司到现在都一直在改bug!”
㈥ 程序员面试时,如何机智地回答这些问题
01“唐僧、孙悟空、猪八戒、沙僧, 谁更适合做程序员?”学生内心os:没想到唐僧师徒能和程序员扯上关系。学院负责人表示,互联网从业人员的创新思维能力很重要,此题没标准答案,关键看创意,你的答案及理由很毁纳重要。
02“你能用这张纸做出什么东西?
面试官借这个问题了解在压力下工作时你的创造力如何。如果你做出千纸鹤,那是最妙的;如果你跟大多数人一样没有叠千纸鹤的技巧,那就看你当时能做出什么了;
如果你申请的岗位主要职责是写作——比如记者,那么你可以说你能用这张纸写出很多故事。这样说,比你手忙脚乱地折腾半小时要好得多。
03“如果我们把你缩成一支铅笔大小,然后放进卷笔刀里,你怎样出去?”
这个问题考察的是应聘者是否会对意想不到的问题感到惊慌无措。“应聘者应该记住,这个问题没有正确或错误答案,全在于你如何诠释。”他说。不过,你应该尽可能地回答这个问题,因为它能反映出你解决不熟悉问题的意愿。
04“你的大脑是什么颜色的?“
颜色往往跟一个人的情绪有关。应聘者在被问到这个问题时,要想想自己将怎样工作,以及如何把自己的个性跟工作环境相协调。有些人会选积极张扬的颜色,但一定要忠于自己的个性。如果你是热情奔放的人,那就是红色。
05“把你的生活写成新闻故事,你会选择什么新闻标题?”
面试官问这个问题是想了解你的人生观,要说清楚,说到点子上,用简洁的句子把想法说出来。最重要的是要描述自己积极的一面,老板不喜欢消极的员工。
06“如果赋予你超能力,你选择会隐身还是会飞?”
确实,这两项超能力都很牛,但这里面却包含了一个心理学的小陷阱。
如果你选了隐身,那就意味着你生性胆怯,而且比较腼腆。选择飞行能力则代表你比较勇敢,而且不会怯场,这样才能成为一个好领导。纤悄没不过也许最好的答案不是二选一,而是“运缺这问题很简单
㈦ 程序出现致命错误,程序员应该怎么办
软件有bug 不兼容,或者安装的应用程序软件损坏,更换版本,或最新最新版试试
以及重新安装系统,更换一个电脑安装试试
解决方法:
1.检查电脑系统损坏,文件受损,中了病毒木马,恶意软件等干扰。
2.系统文件损坏或丢失,盗版软件或系统或,很容易出现该问题。建议:使用完整版或正版系统。
3.安装的软件与系统或其它软件发生冲突,找到发生冲突的软件,卸载它。如果更新下载补丁不是该软件的错误补丁,也会引起软件异常,解决办法:卸载该软件,重新下载重新安装试试。顺便检查开机启动项,把没必要启动的启动项禁止开机启动。