再谈问题分析和解决思路
标签:
随笔文章
| 发表时间:2011-09-29 22:06 | 作者:人月神话 Typhoon
出处:http://blog.sina.com.cn/cmmi
如果从问题层面来将工作中的能力,那么一个是独立解决问题的能力,一个是自己提出假设创造问题自己解决的能力。前者足以应对复杂多变的内外环境,后者足以提出有价值的创新。而独立解决问题的本身又包括两块,一个是针对问题现象提出应急解决方法,一个是针对问题根源提出的风险管理和预警机制。问题分析和解决本身就应该是一种通过迭代不断收敛的过程,因此根源分析和机制建立就显得更加重要。
独立解决问题的能力最核心的还是遇到问题后的思维方式,思维方式包括了对问题的定义,场景的分析,可能的假设,尝试的路径等诸多内容。而这些内容是很重要的隐性知识,很多需要靠个人的经验,你在解决一个问题的时候你并没有把这些写出来,这些内容会很快在你脑海里面通过思考完成,最后你选择了一种假设或尝试了一种方法,解决了问题。
那么这种意识和思维的方法本身又如何形成?个人觉得这个相当简单,一定要意识到思考方法是因人而宜的,别人的不一定是最好的,只有适合自己的才是最重要的。而适合自己的标准就是不一定有明确套路,但是你按该方面能快速独立的解决问题。
当我们面对一个新问题的时候,不管是查找帮助文档,还是上网找资料等自学方式,一定要先自己去尝试解决,并记录下自己思考的大概轨迹,你可能还是无法解决问题,但是这个记录和尝试相当重要。其次当别人告诉你解决方法后,不要停留在结果上?简单加问一句你是如何想到这里的?你是如何搜索到解决方法的?你是根据问题什么输入做出判断的?这种发问相当重要,通过这种发问其实你是在问别人解决问题的思考方式,别人的思考方式再和你自己的一印证,再问问自己我当时为什么没有想到那个点上呢?我下次再遇到类似问题我应该多考虑点什么呢?如此步骤有个1,2年积累,你肯定可以从被动执行解决结果到独立解决问题。
上面谈了思考方式的转变,下面接着谈实践和自我验证,从点到面的扩展。还是那句话,你不可能从思维养成一种实践习惯,而只能从不断实践养成一种思维方式。所以只有通过自我实践证悟的方法才是对你最有用的经验。点到面扩展往往是最难的,同样问题下次遇到了可能会解决,但是问题稍微有点变化自己又不会了?这也正是我们讲的独立解决问题的重点。那要应对问题域本身变化后带来的解决方式变化,那么就先要考虑当我解决前一个问题时候问题域本身所涉及的知识体系结构。任何问题解决后都要考虑拓展关键知识,一个问题解决用到了文件存取函数,那么就要拓展到整个IO相关类和方法的学习。解决问题过程中经常用到Oracle
相关系统表,权限,角色和用户,那就把Oracle
系统管理和权限知识系统学习。只有这个思路才可能举一反三。工作以后的学习基本都是围绕问题驱动的拓展学习为主,这种学习方法不空洞,易实践,容易在工作中自然加深。
最后不得不谈互联网搜索,很多技术问题基本上都可以在网上搜索到相关的解决方法,首先搜索引擎选择Google或Google英文,技术资料收录远远多于百度。其次搜索前得准备,必须要搞清楚问题的定义,问题发生的场景,内外环境因素都必须考虑进去。任何一个问题都可能是由多种不同的因素导致,不能精确定义问题自然搜索范围很大,查找时间长。
在精确定位问题后,重点即变为关键字的选择,关键字的选择一定要屏蔽技术问题的个性化特点,比如源代码行数,你自己命名的代码文件名称等都要去掉。其次找最有价值的关键字,包括我们看到得异常名称,异常典型说明,ORA-错误等都是典型关键字。关键字上再配合你出现问题的软硬件环境,如java环境,中间件选择的什么出现的问题等。在搜索过程中许多网页虽然没有明确提供解决答案,但是会提供有价值的补充关键字和帮助你精确定位问题,所以还需要不断调整搜索关键字多次尝试。
另外就是查找网页的快速浏览和匹配了,这个更多是历史技术经验积累。快速的模式匹配,解决问题效率高的往往就是一看就知道哪些内容有用?哪些快速抛弃?精读和泛读的快速切换和应用,都直接影响到效率。
相关 [问题 分析 和解] 推荐:
- Typhoon - 人月神话的BLOG
如果从问题层面来将工作中的能力,那么一个是独立解决问题的能力,一个是自己提出假设创造问题自己解决的能力. 前者足以应对复杂多变的内外环境,后者足以提出有价值的创新. 而独立解决问题的本身又包括两块,一个是针对问题现象提出应急解决方法,一个是针对问题根源提出的风险管理和预警机制. 问题分析和解决本身就应该是一种通过迭代不断收敛的过程,因此根源分析和机制建立就显得更加重要.
- - 掘金 后端
Redis阻塞原因以及问题排查. 尽管我们在日常工作中经常使用Redis作为数据库的缓存,以大大减轻数据库压力并提升用户体验,但Redis也可能出现阻塞情况,导致整个系统变慢,进而影响用户体验. 因此,在面对Redis阻塞的情况下,我们可以从以下七个方面进行全面的分析,以确定造成Redis阻塞的具体原因.
- - 搜索技术博客-淘宝
Redis在分布式应用中占据着越来越重要的地位,短短的几万行代码,实现了一个高性能的数据存储服务. 最近dump中心的cm8集群出现过几次redis超时的情况,但是查看redis机器的相关内存都没有发现内存不够,或者内存发生交换的情况,查看redis源码之后,发现在某些情况下redis会出现超时的状况,相关细节如下.
- - 博客 - 伯乐在线
Redis的事件循环在一个线程中处理,作为一个单线程程序,重要的是要保证事件处理的时延短,这样,事件循环中的后续任务才不会阻塞;. 当redis的数据量达到一定级别后(比如20G),阻塞操作对性能的影响尤为严重;. 下面我们总结下在redis中有哪些耗时的场景及应对方法;. keys、sort等命令.
- - 企业架构 - ITeye博客
凌晨 3:00 点某公司(网站业务)的一个 IDC 机房带宽流量突然从平时高峰期 150M 猛增至 1000M ,如下图:. 该故障的影响:直接导致数百台服务器无法连接,该机房全部业务中断. 某年某月某日夜老男 1 孩接到学生紧急求助,公司网站( web 游戏业务)平时几十 M 带宽,结果突然跑满 100M ,持续 100M 已经很久.
- - 数据库 - ITeye博客
缓存一般作为RDS的前置组件,将常用的资源缓存,用来减少RDS的读取压力,也是诸多系统常用的一种方案,如果允许访问缓存失败直接访问数据库,然后再将数据回写到缓存中,那么就会存在缓存击穿的问题,. 缓存击穿:缓存中的数据未被命中,进而请求直接对数据库进行查询,当大量的类似查询瞬间出现,就会出现数据库的压力爆炸甚至引起数据库的雪崩,本质就是一种缓存失效引发的极端问题.
- 蓝皮 - 博客园-旁观者
大多数工程师进入公司,当进入实作之后,都会有很多想法,这很好. 但做到更好的是,给出具体的改进操作步骤,而不仅仅停留在模糊的、似是而非的指出问题上. 从职场角度来看,一般来说,在下面几个点上,不建议新人仅仅凭借自己的印象提出意见:. 1、当你是非专业人士时,比如如果你是一个Java开发工程师,那么不建议对UE、UI、色系搭配做出类似“不好看、配色不好、不如XXX好看”的简单意见.
- Alex - IBM developerWorks 中国 : 文档库
编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多. 本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Java 中经常遇到的几种编码格式的区别;Java 中经常需要编码的场景;出现中文问题的原因分析;在开发 Java web 程序时可能会存在编码的几个地方,一个 HTTP 请求怎么控制编码格式.
- - OurMySQL
mysql数据库在做查询时候,有时候是英文字母大小写敏感的,有时候又不是的,主要是由mysql的字符校验规则的设置决定的,通常默认是不支持的大小写字母敏感的. 校对规则是在字符集内用于比较字符的一套规则. 任何一个给定的字符集至少有一个校对规则,它可能有几个校对规则. 要想列出一个字符集的校对规则,使用SHOW COLLATION语句.
- - Web前端 - ITeye博客
针对某个java程序cpu占用过高问题分析,要想找到问题的真正原因,首先要明确cpu过高的进程,通过对进程下线程的分析,定位到具体的应用代码,从而定位问题的原因所在. 在jdk自带的分析工具中,通过jconsole只能分析到应用程序的相关系统资源使用情况,但无法定位应用程序,故通过此工具了解到应用程序存在问题,但要具体定位到哪块程序不合理造成的是很困难的.