根本的指导方针
1. 首先写代码的时候最好不要有缺陷。最好的修复方法就是让 bug 胎死腹中。
-
良好的单元测试
-
强制数据库约束
-
使用输入验证框架
-
避免未实现的“else”条件
-
在应用到主程序之前知道如何在孤立的情况下使用
日志
2. print 语句。往往额外输出个一两行将有助于隔离问题。
3. 切换至详细的日志记录。详细的日志记录有助于发现更多的线索。
4. 搜索日志。如果日志太多,可采取关键字或错误代码来搜索日志文件。
5. 开启自动换行和关闭自动换行。控制日志的自动换行也非常有用。
6. 搜索不同的日志。主服务器的日志可能并不是唯一有用的日志。
7. Windows 事件日志。日志文件的另一个来源可能是操作系统本身。
8. 制作有用的日志记录。有时,如果你没有得到任何有用的日志记录,那么你可能需要自己写。
与其他人交流
9. 询问一些可能知道问题答案的人。
10. 问”愚蠢“的问题。可能你觉得这些问题很愚蠢,但其实并不是。
11. 将问题解释给队友。他们可能知道答案或者能提出一些你并没有想到过的事情。
12. 将问题解释给你的狗。述说的对象是谁其实没有关系,但是能让你从不同角度分析问题。
写作
13. 描述问题。用最准确和最精确的语句描述问题,有助于你去思考可能的解决方案。
14. 问题日记。创建一个文本文件来记录已经尝试的各种方法,包括代码片段、配置设置以及产生的任何错误。
15. 记录问题和解决方案。有没有这样的情况,突然看到一个似曾相识的问题,只记得解决过但却忘记了是如何解决的?可以将问题和解决方案记录到一个容易搜索的地方,如维基、缺陷跟踪,甚至可以发送电子邮件给自己。
支持
16. 阅读 FAQ。
17. 提交支持请求。如果有可用的产品/库的支持,那么就用。
18. 在你点击 send 之前,请三思。写支持请求能让你再一次思考问题,有时候就在你点击 send 按钮之时,突然灵机一动就想到了解决问题的方法或者是新的线索。
19. 其他方面的支持。可以与开发人员直接面对面交流,最好是实时聊天/ SKYPE/屏幕共享。
离开键盘
20. 散散步。
21. 打个盹。
22. 重置优先级。暂时从键盘上离开还有一个好处就是可以让你重新评估这个问题的重要性,也许这个问题只是个 CSS/布局问题,根本不值得你花上 16 个小时。总之要有效分配和使用时间。
23. 暂时将这个问题放在一边。实在解决不了的话,可以将这个问题先搁置起来。也许几天后你在阅读相关问题的时候,突然一个激灵,解决问题的关键就来了。
隔离
24. 确定是哪行代码。首先要确定是哪行代码导致的问题,以便于插入 print 语句。
25. 将问题分割为一个单独的程序。有时候对于库和产品的问题,我们可以将它的相关代码从主程序中分离开来。这可能需要一点时间,但往往处理一个孤立的程序比应对整个的项目构建过程要容易得多。然后在解决这个单独程序的基础上再去和主程序作比较。
更改代码
即使你一点都不知道如何解决问题,更改代码也是一个挺有效的解决方法。
26. 写新的单元测试。
27. 重构。有问题的代码往往显得有点乱,通过一些简单的重构方法,例如重命名变量或展开嵌套的 if / then/ else 模块等都可以让代码整洁起来。
28. 发现 bug。另一个整洁代码的手段是查阅相关代码的“Find Bugs” 报告,我们之所以首先要整洁代码是因为:作为一个能让我们的大脑专注于代码的方法,既简单又划算。
29. 重写。转存所有的相关代码,从头开始重写。一个全新的视角也许能让你完全规避这个问题。
30. 为一些不必要的代码添加注释——或者至少是你以为是不必要的。然后你会发现可能这些代码流并不像你曾经以为的那样“没有必要”。
31. 实验。如果你不能确定底层产品或库是如何工作的,那么一些小实验,特别是围绕边界条件的实验会非常有用。
32. 回到干净的状态。如果你在代码中做了各种变动,或者是搞了很多配置设置,那么定期回到一个干净的状态就非常重要。否则,实验结果可能会影响正确答案,这样你就永远也找不到正确的解决方案了。
33. 切换技术。
产品
34. 升级到更高的版本。也许你正在处理的问题已经被修复了,可以试试先升级到另一个版本。
35. 降级到以前的版本。也许问题正是由于与你目前正在使用的其他产品/库不兼容而引起的。
36. 打补丁。
37. 下载并安装源代码。
文件
38. 阅读手册。大多数开发人员可能会认为这是一个低概率的策略,但是,嘿嘿,你永远不知道,也许答案就在文档中。
39. 阅读手册的正确版本。
40. 手册是否正确?有时候代码已被更新,但手册还没有。
调试器
41. 了解键盘上的快捷键。
42. 倒退。这是调试器的一个功能,让你的代码退后一步。
43. 编写断点代码。
44. 异常中断。调试器的一个蛮有用的功能就是可以捕捉到任何地方的特定异常。
45. 专业化的调试工具。例如:
-
Plumbr
-
AppDynamics
-
Chronon
-
Wireshark
-
HTTP profilers:Fiddler2、Charles、Live Http Headers
源代码控制
46. 对 bug 缺陷进行编号标记。你有没有碰到过这样的问题:先是用这种方式被修复了,然后几周后又成为了 bug 被其他人用另一种方法修复了。这样问题貌似就有两个正确答案。解决办法就是对源代码中相关的 bug 缺陷进行标记,并记录一些关于为何改变以及谁参与决策等更为详细的说明。
47. Blame 功能。这个可爱的小工具能告诉你是谁最后更改的代码。
48. Git bisect 功能。Git 有一个有意思的“bisect”命令,能自动通过你提交的历史进行二进制搜索发现故障。
寻找答案
49. 谷歌搜索。
50. 论坛帖子。
52. 搜索堆栈交流。
53. 创建堆栈问题。
其他
54. 聘请专家。可能在短时间内成本很高。
55. 招实习生。聘请专家的相反方法就是聘请新手。有时候初学者饱满的热情能让他们从不同的角度来解决问题。
56. 改变要求。如果你不能修复缺陷,那么可以改变要求。通过解释各种成本需要,也许能让客户改变他们的初衷。
57. 更改上/下游系统。
58. 循序渐进地学习技术。
59. 通过断点检查配置。更改关键配置值,并确保已经断点,这样能够让我们无所顾忌地设置配置。
60. 系统化。有时候我们需要将三四件事情组合在一起,那么可以将已经试过的组合记录下来,如果需要的话一定要尝试各种的组合。
相关推荐
如果80端口被其他服务占用,导致无法正常启动Web服务,可以按照以下步骤排查并解决问题: - 打开命令提示符,输入`netstat -ano`,查看占用80端口的进程ID。 - 在任务管理器中找到对应进程,结束该进程。 - 然后在...
这份名为“PHP开发程序员...总的来说,提升PHP开发程序员解决问题的能力,不仅关乎技术深度,还涉及到学习方法、沟通技巧和项目管理等多个维度。持续学习和实践,结合有效的工具和资源,才能在PHP开发道路上不断进步。
强调你的成就和解决问题的能力,使面试官对你产生信心。 2. 优点:你可以提到你的技术专长、团队协作能力、解决问题的能力和学习新知识的速度。用实例来证明你的优点,比如项目经验或奖项。 3. 缺点:聪明的做法是...
本书分析了程序员解决问题的方法,并且教授你其他图书所忽略的一种能力,即如何像程序员一样思考。 全书分为8章。第1章通对几个经典的算法问题切入,概括了问题解决的基本技巧和步骤。第2章通过实际编写c++代码来...
《程序员道路的十个层次》是一份深度探讨程序员职业生涯发展的文档,旨在帮助程序员明确自我定位,规划职业路径。这篇文档从入门新手到顶尖专家,详细描绘了程序员在技术成长过程中的十个不同阶段,每个阶段都有其...
书中提出定期会面时间的重要性,强调架构师必须亲自编写代码,实行代码集体所有制,成为团队指导者,允许团队成员自己想办法解决问题,并在代码准备就绪后进行共享。同时,书中也提到了做代码复查和及时通报进展与...
标题中的“一个程序员的面试感想”意味着这篇文章将聚焦于一个程序员在面试过程中的体验、反思和学习。作为程序员,面试不仅仅是技术技能的展示,也是沟通能力、问题解决能力和个人职业素养的综合体现。这样的文章...
同时,理解不同数据结构(如栈、队列、树、图、哈希表等)的特点及其在解决问题时的应用也是面试中的常考点。 3. **计算机网络**:了解TCP/IP协议栈,包括OSI七层模型和TCP/IP四层模型,以及HTTP、FTP、DNS等常见...
3. 项目经验:详细描述参与过的项目,展示你的实际操作能力和解决问题的能力。 4. 技能列表:列出你的编程语言、框架、工具等专业技能,以及对新技术的敏感度。 二、与猎头公司和人力资源代表沟通 1. 猎头关系:...
《程序员面试宝典》是一本专门为程序员准备面试所编写的参考资料,它覆盖了算法思想、数据结构以及计算等多个方面,针对程序员在面试过程中可能遇到的问题提供了深入的分析和解答。 首先,在算法思想方面,书中介绍...
算法是衡量程序员解决问题能力的重要标准。《程序员面试宝典》包含了排序算法(如冒泡、选择、插入、快速、归并排序)、查找算法(如二分查找、哈希查找)以及动态规划、贪心算法、回溯算法等高级算法。熟练掌握这些...
要阐述你在项目中的角色、职责以及你如何解决问题,展现实际操作能力和团队协作精神。 3. **编程基础**:面试可能会涉及基本的算法和数据结构,如排序、查找、递归、栈、队列等。熟悉这些概念并能用代码实现是必备...
在IT行业中,算法是程序员解决问题的关键工具,它们是编程的基础,能够帮助我们高效地处理数据和执行任务。本文档集合中的四个PHP文档深入探讨了程序员应掌握的一些经典算法,这对于提升编程技能至关重要。 首先,...
基本程序设计--设计解决问题的策略 本讲主题 1 理解什么是程序 2 了解程序设计的基本步骤 3 掌握设计解决问题的策略 程序一词来自生活,通常指完成某些事物的一种既定方式和过程; 什么是程序 在日常生活中,可以将...
这些问题旨在考察程序员的逻辑思维和解决问题的能力。 问题一:如何用一枚硬币等概率地产生一个 1 到 3 之间的随机整数? 这道题考察了程序员对概率论的理解和应用能力。解决这个问题需要使用条件概率和随机事件的...
因为在项目过程中,总会出现各种意料之外的情况,项目经理必须保持冷静,有效引导团队解决问题。 最后,从程序员到项目经理的转型不仅需要不断学习新的管理技能,更需要在实际工作中不断实践和积累经验。只有通过...
再者,二十四史中充满了策略和智慧,如《孙子兵法》中的战略思想,对程序员进行项目管理、优化代码结构、解决问题等方面都有启发。学习历史中的智谋,可以提高程序员在面对复杂问题时的解决能力,更好地规划项目,...
7. **递归与分治策略**:递归是解决问题的一种常用方法,如斐波那契数列、汉诺塔问题等。分治策略将大问题分解为小问题求解,如归并排序、快速排序等。 8. **字符串处理**:KMP算法用于模式匹配,Z函数和Rabin-Karp...