问题解决_问题解决方案 - CSDN
精华内容
参与话题
  • 一个真正的高手,其实应该有能力用一套方法论去解决问题的所有,不管这个问题再难,再新鲜,再简单都能搞定。 什么是问题?一言以蔽之,问题来源于现实与目标的差距。 因此,问题产生的原因可能是: ...

    一个真正的高手,其实应该有能力用一套方法论去解决问题的所有,不管这个问题再难,再新鲜,再简单都能搞定。

    什么是问题?一言以蔽之,问题来源于现实与目标的差距。

    因此,问题产生的原因可能是:

    • 不清楚目标是什么;
    • 还可能是不知道差距产生的原因是什么;
    • 或者虽然知道差距产生的原因,但是不知道如何消除这个差距,以及不确定消除差距的方法对不对。

    这些问题会不断地出现在我们的工作和生活中,能较好解决的问题,我们称之为“问题”,无法较好解决的问题,我们称之为“麻烦”。而一个真正的高手,其实应该有能力用一套方法论去解决问题的所有,不管这个问题再难,再新鲜,再简单都能搞定。

    会解决问题的人和不会解决问题的人,在实际工作和生活当中有什么区别呢?

    比如说你的朋友想找你咨询一个新产品,说,“小王我们开发了一个新产品,这个产品的表现不太好,用户付费转化不够,怎样才能提高用户付费转化率?”

    这个时候,你要是不会解决问题,你要是不会解决问题,你会怎么做呢?很可能你就开始在头脑里想象一些碎片式的解决方案了。比如说是不是产品存在问题、运营是不是存在问题,是不是需要做推广来获得更多的流量等等。

    这里面有没有可能有正确的答案呢?当然有可能的。但是,这肯定不是一个解决问题的高手会做的事情。真正的高手具备解决问题的思考框架,能够采用系统思维的思考方式来解决问题。

    解决问题的四个步骤

    解决问题有以下四个步骤:

    • 第一步,明确和理解问题;
    • 第二步,拆分和定位问题;
    • 第三步,提出解决方案;
    • 第四步,总结问题。

    在这四步里,提出解决方案其实放的很靠后。第二步,也就是拆解和定位问题,反而是整套方法里最重要的。

    如果你想要解决问题,你就必须用80%的精力去拆解和定位这个问题,剩下20%的精力去寻找解决方案,其实就足够了。因为,当问题被拆分得足够细,足够清晰的时候,你就会发现解决方案原来是这么明显,每个人都可以办得到。

    在这里,我们分享了解决问题的四个步骤,这四个步骤非常的重要,我要在这里重复一下。

    1. 第一步 明确及理解问题
    2. 第二步 拆分及定位问题
    3. 第三步 提出解决方案
    4. 第四步 总结问题

    其中拆分和定位问题是最关键的一环。但是,我们总归要从第一步开始做起。所以这篇就从第一步,明确及理解问题讲起。

    明确问题的四个方法

    你可以采用以下四个方法来明确及理解问题:

    方法一、准确地描述问题

    语言(包括口头语言和书面语言)是我们传递信息、交流思想、表达感情的主要工具。每一句话中的文字都会表达一些意思,但往往这些意思并不能传达说话者内心所说的全部观念和意义,正所谓“书不尽言,言不尽意”。

    这种语言中有很多说不出来的意思的情况,既可能是表达者自身局限所导致的,也可能是根本就不可能说出来。但无论是哪种情况,既然你现在已经知道了语言往往不能传达说话者全部的含义,那就需要在分析问题前了解说话者的意图。

    案例——员工流动率高的问题

    假设你新加入一家公司担任人力资源总监。上班第一天,老板跟你说公司员工的流动率高,请你出具一个解决方案,你会怎么做呢?你是不是第一时间又想到了工资低、工作环境恶劣等原因?你有想过不同人对“高”的定义不一样吗?

    假如你的老板是一位偏完美主义的管理者,哪怕1年内100位员工中走了5位,他也会觉得员工流动率高。也有可能你的老板是一位纯结果导向的管理者,3个月内100位员工中走了20位,他并不觉得员工流动率高。你再想想,当你第一时间看到“员工流动率高”的时候,你大脑中的情景是怎样的?如果不先进行澄清,你是不是又会同导入案例一样,做了大部分的无用功。

    “高”、“低”这样的形容词在大部分时候并不能精确地表达说话者的全部含义,因此你必须先用数字澄清。这就好比你对工资的看法:有两个人,一人告诉你他工资高,另一人告诉你他工资很低,你大脑中第一时间想到的是两个人的工资分别是多少。假如第一个人是刚刚毕业的大学生,月薪是6 000元;第二个人工作了10年,月薪是20 000元。情况是不是与你大脑中所想的“高”、“低”不一致?

    方法二、明确问题的构成要素

    我们在平时的工作、生活或学习中,经常接到各种各样的任务?工作中有领导分派的或大或小的任务,生活中有家务、旅游等事情,学习中有班级活动、学习安排等事项,你是应对自如,还是经常手忙脚乱、丢三落四?我们结合下面的案例来分析。

    案例——上海出差

    假设你是某家公司的项目经理。上周六完成了一个项目,周一刚刚回到公司。上午10:00,你的电话铃声突然响了,是公司一位“大神”级的项目总监打过来的。这位项目总监是公司的名人,全公司的年轻项目经理都想跟他一起做项目,你当然也不例外。现在,他在电话里让你当晚赶到上海参与某项目的实施,你要怎样答复他呢?

    你心里会不会这么想:“哇,难得有机会跟仰慕已久的资深项目总监做项目,手头正好又没事,那还不赶紧答应!小心这个机会被其他人抢了。”

    假如你真是这么想的,那么就让我们一起准备去上海的事宜吧。

    首先是订票。是订高铁票还是订飞机票?两种方式好像都能保证当天到上海。假设订飞机票,是订到浦东机场的,还是订到虹桥机场的?忘了问项目的具体地址,有点蒙圈……

    (赶紧打电话跟“大神”确认了项目地址是张江高新区。“大神”很亲切,除告诉地址外,还特别提醒你最好在18:00前到,这样可以一起吃晚饭并交流项目情况。)

    订票问题总算解决了,接下来是准备出差所需的东西。应该带什么过去呢?是带应季的衣服,还是换季的衣服也带过去?似乎忘了问你过去上海做什么,以及会在上海待多久。

    (赶紧再给“大神”打一个电话。虽然知道了要待三个月,但是明显感觉到“大神”在电话中的语气没有上一次亲切。)

    总算打包好了,准备出发。你突然想起来,有没有人一起从深圳过去?项目上都已经有哪些人了?作为新人,带点深圳特产去打个招呼也好啊。可是也忘了问!

    (再打一个电话给“大神”?哎,还是算了吧。上次“大神”似乎就有点不耐烦,再打一次电话,“大神”估计要另请高明。)

    怎么样,通过一起准备出差事宜,是不是发现原来自己有这么多内容都漏了确认?我们在日常的工作、生活和学习中,经过会碰到各种任务类的问题,如果你在第一时间就跟对方确认清楚,一是可以减少反复确认的时间,提高效率,二是可以给对方留下一个“思维缜密”的好印象。反之,你就可能浪费时间,并给对方留下一个“考虑问题不周”的坏印象。

    那么怎样才能在第一时间就确认清楚这类任务式问题的所有要素?非常简单,采用“5W2H”的框架明确问题的构成要素即可。

    5W2H分析法,又称“七何”分析法,第二次世界大战时期由美国陆军兵器修理部首创。它易于理解、使用,富有启发意义,广泛用于企业管理和技术活动,对于决策和执行性的活动非常有帮助,也有助于弥补考虑问题的疏漏。

    回到项目总监让你到上海出差的问题,你可以在电话里运用“5W2H”的框架跟他一次性确认所有关键要素。

    1. 为什么要你去(Why)?
    2. 该项目的情况以及你过去主要做什么(What)?
    3. 具体什么时间到,什么时间结束(When)?
    4. 项目的具体地址,去了住哪儿(Where)?
    5. 都有哪些人在项目上,有人一起去上海吗(Who)?
    6. 去上海可允许乘坐的交通工具有哪些(How)?
    7. 有多少预算可以用(How Much)?

    方法三、探究问题的本质

    “准确地描述问题”和“明确问题构成要素”这两种明确及理解问题的方法容易上手,但真正掌握它们的关键在于,你平时要有意识地多多练习,以尽快形成习惯。下面来讲讲明确问题的深水区,也是威力最大的区域,探究问题的本质。

    日常的工作、生活和学习中,我们总是能碰到各种各样的问题,但是大部分时候,真正的问题并不会自动摆在你的面前,它们会以问题的表象、问题的初步解决方案,或者无关的干扰信息等形式出现。大多数人都会被这些偏差迷惑,从而偏离问题的真正解决之道。

    下面我们还是通过案例来体验。

    区分问题的表象与问题的根本原因

    案例——员工上班聊QQ的问题

    假设你是某个企业的老板,某天你发现公司有一半员工上班时用QQ与朋友闲聊。从彻底解决问题的目的出发,你会怎么做呢?

    你认为直接安装一款QQ屏蔽软件?据我所知,不少知名企业采用了这样的QQ屏蔽措施,工作沟通改用企业内部的IM。

    “这样可能不行吧?”也许你心里有些疑惑。是的,虽然不少知名企业采用了QQ屏蔽措施,但不见得你的企业也适用。万一员工上班用QQ闲聊是因为工作量不足呢?QQ被屏蔽后,他们可以用微信;微信被屏蔽后,可以当面聊天;当面聊天被禁止后,还可以看电子小说。打发时间的方式很多,绝对让你防不胜防!

    既然假设原因是工作量不足,那是不是直接给闲聊的员工多安排工作就可以了?

    “似乎事情没这么简单。”也许你在心里这么嘀咕。

    对的。在考虑给员工多安排工作前,你有想过为什么他们的工作量不饱和吗?是因为经理层工作安排不合理,还是因为压根就没有这么多的工作可安排?

    似乎渐入佳境了。假设你的经理们都很能干,原因出在公司根本就没有足够的任务派给用QQ闲聊的员工的话,你会怎么办呢?

    “裁员!”这个悲壮而又常见的词似乎自个儿蹦入你的脑海中。

    是的,裁员确实是解决公司人员冗余的常用方式之一。可是,你再问问自己为什么公司的人员会过剩。是因为人力资源部门根据公司扩张计划招聘的储备人员多了,还是因为某些原因导致公司的阶段性业务量下降了?

    假设原因是后者,你采用了裁员措施,万一业务量回升,那岂不是刚裁完人又要花费更大的成本去招人,还要再花费额外的时间和成本等待新人的成长。是不是得不偿失了?

    “如果是因为业务量减少,我就不会裁员。我会安排他们去开拓新市场!”也许你会这么回复我。

    但是,开拓新市场的决定真的可行吗?你在做决定之前再问问自己为什么业务量会减少吧。是因为临近春节,是因为市场被竞争对手蚕食,还是因为产品价格过高导致销量减少?

    如果是产品价格过高导致销量减少,你派人去开拓再多的新市场,恐怕都是无效的。

    “那,那我就降价!”你也许有些气急败坏了。

    如果你选择降价,你问一下自己为什么产品价格会偏高。聪明的你可能知道我会这么说。你兴许已经在脑子里想过各种各样的原因:可能是因为定价策略错了,可能是产品过时了,从而竞争对手都在降价清货。如果是后者,那么你的降价举措就无效了,你更应该选择的举措是升级产品。

    员工上班用QQ闲聊的小事,最终的可能解决措施竟然是看似风马牛不相及的升级产品。这是怎么做到的?

    其实很简单,这就是我要教给你的“探究问题本质”的第一种方法——5Why分析法。以上运用5Why分析法的过程如图所示。

    5Why分析法,又称“五问法”,是对一个问题点连续以5个“为什么”自问,探究其根本原因。虽为5个为什么,但使用时不限定只做5次为什么的探讨,有时可能只要3次,有时也许要10次,以达到你所在的层次能解决的根本原因为止。

    以我们刚才一起讨论的案例来说,如果你是公司的网管,那么你的解决方案可以只是安装一款QQ屏蔽软件;但如果你是公司老板,你就必须找到升级产品的方案。

    5Why分析法的关键:鼓励解决问题的人努力避开主观或自负的假设和逻辑陷阱,从结果着手,沿着因果关系链条,顺藤摸瓜,直至找出原有问题的根本原因。

    这种方法是丰田佐吉提出的,后来丰田汽车公司在发展完善其制造方法学的过程中也采用了这一方法。作为丰田生产系统(Toyota Production System)的入门课程的组成部分,这种方法成为其中问题求解培训的一项关键内容。丰田生产系统的设计师大野耐一曾经将五问法描述为“……丰田科学方法的基础……重复五次,问题的本质及其解决办法随即显而易见”。目前,该方法在丰田之外已经得到了广泛采用,并且现在在持续改善法、精益生产法以及六西格玛法中也得到了采用。

    既然5Why分析法起源于找出生产制造问题的根源,那接下来让我们一起看看5Why分析法应用的经典案例“车间油渍问题”,以复习和加深对5Why分析法的理解。

    区分问题的初步解决方案与问题本身

    上面面我们一起了解了“探究问题本质”的第一种类型——区分问题的表象与根本原因,并掌握了5Why分析法。接下来,我们一起了解“探究问题本质”的第二种类型——区分问题的初步解决方案与问题本身。

    案例——历史数据导入问题

    S公司接了某个大客户“财务+供应链”的ERP实施项目。项目金额是S公司有史以来最大的,因此公司特别重视。由于公司在顾问资源上的投入很大,因此截至8月系统上线前,项目的进度、实施质量都挺不错。

    不过,在新旧系统切换上线时,S公司碰到了一个大问题。客户方的项目负责人李总不仅要求将今年1月至7月的所有财务、业务数据导入新系统,还要求将前两年的财务、业务数据也都导入系统中。李总是财务总监,是客户方的二号实权人物,这个项目的成败由她说了算。因此绝对不能得罪她。

    对于李总的这个要求,S公司的项目经理孙经理有点傻眼。如果那样,工作量太大了先不说,可行性也不高。新系统将原先的物料、科目编码都做了优化调整,导入历史数据不是仅仅从旧系统中导出数据,再导入新系统就可以的,还需要做新旧编码的对应,以及调整所有相关历史销售订单、采购订单、出货单、生产订单和入库单等数据。

    孙经理找李总沟通了好几次,反复跟她强调这个要求的可行性风险和工作量。但是李总很强势,跟孙经理强调:“这是我们的核心需求,这些历史数据必须要导入到新系统中。如果连这么简单的事都做不到,我们还怎么使用这套系统呢?”

    孙经理没有办法,只好向公司申请更多顾问资源。结果公司所有在当地的顾问周六周日放弃休息,全部到该项目上帮忙整理历史数据和导入,项目组的顾问更是天天熬夜加班。可惜事与愿违,数据在整理和导入时问题重重,要修改的数据量太巨大了,项目组忙了一个月几乎确定这个方案的不可行性。

    孙经理现在要面临着李总的冲天怒火,公司历史上金额最大的项目看样子就要“烂尾”了。如果让你去拯救孙经理,你会怎么做呢?

    经过以上训练,我相信聪明的你可能已经看到了问题的端倪。

    李总为何一定要将前两年和当年1月至7月的历史数据导入到新系统中?孙经理有深耕李总提这个要求的原因吗?没有,他只是跟李总强调了风险和难度。

    那么真实的原因是什么?原来李总的公司准备在下一年的年中IPO,李总从证交所上市的要求出发,要保证IPO前至少3年的财务和业务数据是可查询的和连贯的,准备IPO也是选择上新系统的主要原因之一。因此,从李总的角度出发,如果新系统对公司IPO产生阻碍,这是绝对不能接受的。

    无解了吗?当然不是!要求将历史的财务和业务数据导入新系统只是李总针对真正问题的初步解决方案,而不是问题本身。从“IPO前3年数据要可查询和连贯”这个问题本身出发,有比李总提出的解决方案简单得多的方案:在新系统中定制开发一个接口,直接查询旧系统的数据即可。李总本身并不懂IT,在这个问题的解决方案上,她并不能提出最有效可行的方案。结果,一给李总提出这个新方案她就欣然接受了,再也不提导入历史数据的要求。

    一个程序员仅仅花两天的时间就完成了新解决方案,不但拯救了整个项目,还节省了大量的顾问人力成本。这就是“探究清楚问题本质”的威力!

    在现实的工作、生活和学习中,很多时候对方提出的问题都是经过他们初步加工后的解决方案,而非真正的问题。将问题的初步解决方案与问题本身混为一谈是最容易犯的错误之一,也是大量时间和精力浪费的根源之一。你需要找到真正的问题,而不是惯性地将初步解决方案当做问题本身来应对。

    方法四、显性化问题隐含的假设

    了解了“准确地描述问题”、“明确问题的构成要素”、“探究问题本质”三种明确及理解问题的方法,我们来到了更高阶的明确问题阶段:显性化问题隐含的假设。

    除了数学家生活的完美世界,我们在工作、生活和学习中碰到的所有问题都有一定程度的假设和应用边界。这句话似乎有点晦涩,暂时没理解没关系,继续往下看就明白了。

    “你是南方人,还是北方人?”

    也许你来自北国哈尔滨,那么我想你的答案肯定是“北方人”。

    也许你来自广西,那么我想你的答案应该是“南方人”。

    如果某人来自安徽淮南或者江苏扬州,那么他是南方人还是北方人呢?可能一部分人认为他是北方人,另一部分人认为是他南方人,这就看他把什么作为中国南北方的划分基准了。如果以秦岭淮河为划分标准,那么安徽淮南人和江苏扬州人就是南方人;如果以长江为划分标准,那么他们就是北方人。

    让我们再看哈尔滨人和广西人,他们就一定是北方人或南方人吗?以西伯利亚人的角度来看,哈尔滨人绝对是南方人;以越南人的角度来看,广西人是北得不能再北的北方人。

    现在你可能大致明白“除了数学家生活的完美世界,我们在工作、生活和学习中碰到的所有问题都有一定程度的假设和应用边界”的意思了。在你看到“你是南方人,还是北方人”这个问题时,你会不自觉地将你成长的环境因素代入进去考虑,你的大脑认为这是理所当然的,这就是“隐含的假设”。

    显性化问题隐含的环境假设

    “冰的熔点是0℃”,你知道这句话中包含了多少个假设吗?

    假如你学过初中物理,我想你可以从上面这句话中找出两个主要假设:一是冰是100%不含杂质的纯冰;二是在标准大气压下。

    我们生活在地球上,从小到大看到的、经历的都是在地球的物理环境下产生的现象。因此,地球的物理环境成为我们思考绝大部分问题时一个隐含的因素,可能我们自己不知道而已。

    你可能会问:“我知道这个有什么用呢?”

    不要着急,接下来让我们一起揭开隐含环境假设的价值。

    现在我们已经知道不是所有冰的熔点都是0℃。那有什么用呢?假如黑龙江省冬天的高速公路结冰了,做法是派人去铲冰吗?绝对不是,是撒盐!为什么?因为饱和的食盐水的熔点低于-20℃,只要温度高于-20℃,撒了盐的高速公路就会解冻。看,这就是用途!

    显性化问题隐含的时间假设

    我们暂且将“性格内向的人不适合做销售”这句话作为一条真理(事实上肯定不是的)。如果你正好是一位性格内向的人,你认为下面这条论断是否正确:“性格内向的人不适合做销售,你是一位性格内向的人,因此你不适合做销售。”

    这条论断从字面上看,逻辑很严谨,几乎无懈可击。因此你因性格不够外向而放弃一份销售工作似乎是理所应当之举。可是如果这条论断的陈述成立,我是否可以追问你一个逻辑类似的问题:“跑步需要能够迈动的双腿,你生下来的时候不会迈动双腿,因此你这辈子都不会跑步。”我想你绝对会认为这是你听过的最滑稽的论断。

    相信聪明的你已经看出了问题所在。“性格内向的人不适合做销售,你是一位性格内向的人,因此你不适合做销售”这句话里面隐含了一个时间假设,即“你这一辈子都性格内向”。找出了这个时间假设后,这个论断就可以改成:“性格内向的人不适合做销售,目前我是一位性格内向的人,我正好可以借助销售工作的锻炼来弥补我内向性格的不足。”看,你得出了一个截然相反的结论,世界上可能将多一位卓越的销售人员。

    隐含时间的假设广泛存在于我们的工作、生活和学习中,我相信你听过很多隐含时间假设的论断,也可能因未能显性化问题隐含的时间假设而错过了不少机会。

    例如,领导给你布置一个相当有挑战性的任务时,你的第一反应是“这个工作需要很强的沟通能力,我的沟通能力不行,因此我不能接这个任务”,还是“这个工作需要很强的沟通能力,目前我的沟通能力不行,正好可以借这个任务锻炼提升”呢?

    若是前者,你不仅辜负了领导的信任,还丧失了一次提升沟通能力的机会。而后者既可以提升沟通能力,又能够得到领导的青睐,即使任务没圆满完成,你的沟通能力的提升也绝对比你不接受这个任务要高得多。

    显性化理论/工具的应用前提和边界

    迈克尔·波特(Michael E. Porter)是哈佛商学院的大学教授。迈克尔·波特在世界管理思想界可谓是“活着的传奇”,他是当今全球的战略权威,是商业管理界公认的“竞争战略之父”。他在20世纪80年代初提出的波特五力竞争模型,可以说是当时企业竞争战略设计的不二选择

    但是,该理论在中国的企业实践应用时却缺陷多多,几乎没有成功的实践案例。是什么出问题了呢?是波特的能力不够,还是五力竞争模型压根就没用?其实都不是,问题是任何的理论和工具都有其使用的前提和假设。

    在不同的背景下使用时,我们需要对理论或工具进行必要的裁剪,有些时候甚至需要重新创造。波特五力竞争模型是波特基于20世纪80年代大规模工业化生产时期的背景提出来的,而且提炼是西方企业的管理经验,应用在互联网时代的中国时,随着时代和应用环境的不同,必然会出现水土不服的现象。

    同样的现象还有丰田的丰田生产体系(TPS)。TPS可以说是丰田管理的基石,促进丰田几十年的辉煌,但是学习TPS的企业却鲜有成功案例,日本之外的企业几乎没有应用成功的,即使在日本也仅有20%的企业成功学习了TPS。

    原因何在?因为TPS有其严苛的使用前提和假设:

    • 一是产品的需求的波动不能太大;
    • 二是企业有很强的执行力。

    这两个使用前提丰田公司完全具备,因此TPS在丰田发挥的作用非常大,但是其他公司很难同时具备这两个前提条件,照搬TPS的结果就是失败多而成功少。

    通过学习三种显性化问题隐含假设——显性化隐含的环境假设、显性化隐含的时间假设、显性化理论/工具的应用前提和边界,我相信你已经意识到了显性化问题隐含的假设是一种威力巨大的界定问题的方法,特别有助于我们发现问题不缜密的部分、拓宽分析问题的思路。

    展开全文
  • 问题解决: multiple definition of XXX

    万次阅读 多人点赞 2015-03-28 01:41:46
    在编译程序的时候,遇到了一个问题,花点时间记录一下:在Qt中创建一个类后,一般是先在.h文件中声明变量与函数,然后在对应的.cpp文件中对各个函数进行...搜寻了网上一些资料,解决了multiple definition of 的问题

    在编译程序的时候,遇到了一个问题,花点时间记录一下:

    在Qt中创建一个类后,一般是先在.h文件中声明变量与函数,然后在对应的.cpp文件中对各个函数进行定义,这在往常使用中没有任何问题,今天在使用Qt时,在各.cpp源文件编译时出现了许多multiple definition of XXX的错误:

    这里写图片描述

    搜寻了网上一些资料,总算是解决multiple definition of 的方法:

    问题解决方法之一:

    根据网上的解释,multiple definition of 原因是因为在多次包含global.h时重复定义了变量和函数。问题是检查过程序后,发现并不存在重复定义的变量和函数,在一条论坛评论中尝试了一种简单粗暴的方法……以Qt项目为例,在项目的Debug文件夹中找到编译时生成的o文件,如:

    这里写图片描述

    c和c++编译.c,cpp文件,每个文件都生成.o文件,再把所有的.o文件链接成最后的执行程序,若o文件有问题,是无法生成执行文件的。将已存在的o文件删除之,重新编译并生成新的o文件,结果在没有其他问题的情况下成功生成执行程序。(我就是属于这种情况…在确认代码中已无明显错误时可以一试)

    问题解决方法之二:

    当多个文件包含同一个头文件时,并且你的.h文件里面没有加上条件编译。

    而当多个文件包含同一个头文件时,而头文件中没有加上条件编译,就会独立的解释,然后生成每个文件生成独立的标示符。在编译器连接时,就会将工程中所有的符号整合在一起,由于,文件中有重名变量,于是就出现了重复定义的错误。

    给每一个头文件加上条件编译,避免该文件被多次引用时被多次解释,这是个应该是习惯。这个方法会解决大部分低级问题。在创建Qt类时已默认生成条件编译:

    #ifndef TEST_H
    #define TEST_H
    ......
    #endif

    就会独立的解释,然后生成每个文件生成独立的标示符。在编译器连接时,就会将工程中所有的符号整合在一起,由于,文件中有重名变量,于是就出现了重复定义的错误。

    因此可以给每一个头文件加上条件编译,避免该文件被多次引用时被多次解释,这是个应该是习惯。这个方法会解决大部分低级问题。

    问题解决方法之三:

    当以上方法无效时,可以把所有的全局变量放入一个头文件 global.h (名字随意起,但要加条件编译)中,每一个变量前面加extern,声明一下这些变量将在其它文件中定义。 然后建立一个和头文件名字对应的.c or .cpp文件 如global.c。在里面声明所有的全局变量。例如:void(*Handl_Display)();

    然后,让涉及到全局变量的文件include ”global.h“。这样编译时,会先对global.c编译生成一个global.o ,然后再和其它文件的.o链接生成可执行文件。

    在一篇文章: http://blog.csdn.net/wu070815/article/details/8781762 中提到的另一种解决方法:

    在变量前加static,声明成静止变量。
    这个方法虽然可以解决multiple definition的问题,但是却会引发其他问题。
    问题如下:
    三个文件,a.h,a.c,b.c;
    在a.c和b.c 都include了a.h。
    在b.c中调用a.c中的函数对a.h中的变量进行赋值,但事实上b.c中的变量仍没被赋值。
    问题分析:
    static的含义是迫使那个变量只在某个文件可见。 
    假定你在头文件定义static x; 
    且这个头文件分别被a.c和b.c包含;
    实质是在a.c和b.c里会分别定义一个名字叫x的变量,两个x毫无关系。
    在a.c里修改x,他不会导致b.c里的x变化。
    展开全文
  • 超卖问题解决

    千次阅读 2019-03-12 20:42:30
    本项目超卖有两种: 1. 不同用户在读请求的时候,发现商品库存足够,然后同时发起请求,进行秒杀操作,减库存,导致库存减为负数。 2. 同一用户在有库存的时候,连续发出多个请求,两个请求同时存在,于是生成了多...

    本项目超卖有两种:

    1. 不同用户在读请求的时候,发现商品库存足够,然后同时发起请求,进行秒杀操作,减库存,导致库存减为负数。

    2. 同一用户在有库存的时候,连续发出多个请求,两个请求同时存在,于是生成了多个订单。

    对于第二种:

    可以在数据库里将用户id和商品id加上唯一索引。

    对于第一种:

    1. 最简单的方法,更新数据库减库存的时候,进行库存限制条件。

      and stock_count > 0;

    可以简单的解决超卖的情况,但不能完全避免

    2. 深层原因是,因为数据库底层的写操作和读操作可以同时进行,而mysq数据库lInnoDB引擎默认的是非锁定一致读,所以当用户A去修改库存的时候,用户B依然可以读到库存>0,所以出现了超卖现象。

    解决:在读操作上加锁,select ....for upfate.这样用户A在进行读操作的同时,用户B就需要等待。

    (悲观锁方法)

    这样当并发量很高的时候,处理效率会大大下降

    乐观锁

    使用数据版本(Version)记录机制实现,即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version” 字段来实现。当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据

    3, 直接将请求放入FIFO队列(First Input First Output,先进先出)中,  强行将多线程变成单线程。

    展开全文
  • FAQ(常见问题解答)

    万次阅读 2018-10-17 21:13:27
    FAQ是英文Frequently Asked Questions的缩写,中文意思就是“经常问到的问题”,或者更通俗地叫做“常见问题解答”。FAQ是当前网络上提供在线帮助的主要手段,通过事先组织好一些可能的常问问答对,发布在网页上为...

    FAQ是英文Frequently Asked Questions的缩写,中文意思就是“经常问到的问题”,或者更通俗地叫做“常见问题解答”。FAQ是当前网络上提供在线帮助的主要手段,通过事先组织好一些可能的常问问答对,发布在网页上为用户提供咨询服务。 

    在很多网站上都可以看到FAQ,列出了一些用户常见的问题,是一种在线帮助形式。在利用一些网站的功能或者服务时往往会遇到一些看似很简单,但不经过说明可能很难搞清楚的问题,有时甚至会因为这些细节问题的影响而失去用户,其实在很多情况下,只要经过简单的解释就可以解决这些问题,这就是FAQ的价值。

    在网络营销中,FAQ被认为是一种常用的在线顾客服务手段,一个好的FAQ系统,应该至少可以回答用户80%的一般问题,以及常见问题。这样不仅方便了用户,也大大减轻了网站工作人员的压力,节省了大量的顾客服务成本,并且增加了顾客的满意度。因此,一个优秀的网站,应该重视FAQ的设计。

    一般是指产品的说明或者使用帮助,如社区软件PHPWind帮助中心:专门介绍phpwind的使用教程和技术分析,使用说明,百度的帮助中心,有的直接当百科全书。其实像百度知道和百度百科就是一个很庞大的FAQ,spacebuilder用户社区中的FAQ就采用了类似百度知道的社会化问答模式。

    FAQ是客户常见的问题,设计的问题和解答都必须是客户经常问到和遇到的。为保证FAQ的有效性,首先要经常更新问题,回答客户提出的一些热点问题;其次是问题要短小精悍,对于提问频率高的常见的简单问题,不宜用很长的文本文件,这样会浪费客户在线时间。而对于一些重要问题应在保证精准的前提下尽可能简短。为保证方便客户使用,首先FAQ应该提供搜索功能,客户通过输入关键字可以直接找到有关问题;其次是问题较多时,可以采用分层目录式的结构组织问题的解答,但目录层次不能太多,最好不要超过四层;第三是将客户最经常提问的问题放到前面,对于其他问题可以按照一定规律排列,常用方法是按字典顺序排列;第四对于一些复杂问题,可以在问题之间设计链接,便于方便地找到相关问题的答案。

    Introduce:日趋增多的网络信息使用户很难迅速从搜索引擎返回的大量信息中找到所需内容。自动问答系统为人们提供了以自然语言提问的交流方式,为用户直接返回所需的答案而不是相关的网页,具有方便、快捷、高效等特点。

    Process:本文的问答系统采用了一个FAQ(Frequently Asked Questions)问答库,并基于句子相似度进行设计。

    1)首先建立一个足够大的问题答案库,即语料库--------建库

    2)然后计算用户提问的问题和语料库中各个问题的相似度-------计算相似度-------余弦定理

    3)最后把相似度较高的问题所对应的答案返回给用户。-------返回结果

    core: 本文的核心是句子相似度的计算,分别使用了TF-IDF和word2vec两种方法对问句进行向量化,并在此基础上使用进行句子相似度的计算。

    Improve:为了提高整个系统的运行速度,本文对算法的计算进行了相应的优化。

    key words:FAQ;句子相似度;TF-IDF;word2vec;余弦定理

    part1: research background and meaning

       基于常问问题集的问答系统是在已有的问题答案对的集合中找到与用户提问相匹配的问题,并将其对应的答案直接返回给用户。

         问答系统是目前自然语言处理领域的一个研究热点

        优点:1)让用户用自然语言句子提问

                  2)为用户返回一个简洁、准确的答案,而不是一些相关的网页。

         与传统的依靠关键字匹配的搜索引擎相比,能够更好地满足用户的检索需求,更准确地找出用户所需的答案,具有方便、快捷、高效等特点。如果用户的提问与以往的记录相符,可直接将对应的答案提交给用户,免去了重新组织答案的过程,可以提高系统的效率。

       常问问题集(FAQ)可以作为自动问答系统中的一个组成部分。它把用户经常提问的问题和相关答案保存起来。对于用户输入的问题,可以首先在常问问题库中查找答案。

        如果能够找到相应的问题,就可以直接将问题所对应的答案返回给用户,而不需要经过问题理解、信息检索、答案抽取等许多复杂的处理过程,提高了效率。我们提出的FAQ(Frequently Asked Questions)系统在根据用户问题建立候选问题集的基础上,建立常问问题集的倒排索引,提高了系统的检索效率,同时,与传统的基于关键词的方法相比,用基于语义的方法计算相似度提高了问题的匹配精度。

    part 2: FAQ Answering System

    2.1 Introduction to FAQ Answering System

        问答式检索系统允许用户用自然语言提问,从大量异构数据中准确而快速查找出提问的答案,是集自然语言处理技术和信息检索技术与一体的新一代搜索引擎。这种提供准确、简洁的信息的方式更接近于人的思维和习惯,是下一代搜索引擎的发展方向。

        FAQ问答系统是一种已有的“问题-答案”对集合中找到与用户提问相匹配的问句,并将其对应的答案返回给用户的问答式检索系统。由于FAQ问答系统免去了重新组织答案的过程,可以提高系统的效率,还可以提高答案的准确性。这其中要解决的一个关键问题是用户问句与“问题-答案”对集合中问句的相似度比较,并把最佳结果返回给用户。

    2.2 The "Questions - Answers" Library

         FAQ问答系统需要一个“问题-答案”库的支撑,库的好坏直接影响问答系统的效果。本设计所用的“问题-答案”库来源于百度知道的问题和对应的答案,共有10000条。用户输入问题,然后从库中匹配相似度符合设计阈值的问题并显示其答案。

         

    部分问题

     

    部分答案

    3 System Design and Implementation

     

    3.1 Design Principles and Flow Charts

    思想:把语料库的问题和用户所提问题预处理,然后向量化,最后通过计算两向量之间的余弦夹角值作为衡量相似度的值。只有该余弦值大于程序设定中的阈值才会将这些问题作为候选问题返回给用户。本设计的阈值设置为0.5,同时并选择相似度最高的前5个问题(Top5)所对应的答案返回给用户。若没有大于阈值的样本,则提示用户当前的提问没有相似的答案。系统的设计框图如图3-1所示。

     

    3.2 Pretreatment of Questions

        预处理是对问句进行初步处理的过程。本文对评论文本依次进行了去空去重、切词分词和停用词过滤操作。

        原始网络评论会存在一些空或重复的问句,须过滤掉这些无价值且影响效率的问句。使用计算机自动地对中文文本进行词语切分的过程称为中文分词(Chinese Word Segmentation),即使中文句子中的词之间有空格标识。若要对一个句子进行分析,就需要将其切分成词的序列,然后以词为单位进行句子的分析,故中文分词是中文自然语言处理中最基本的一个环节。

        分词之后需要对每个词进行词性标注,为接下来的停用词过滤提供便利。停用词(Stop Word)指通常在评论文本中出现的频率较高,但对确定评论的情感类别没有作用的词。停用词过滤指去掉评论文本中停用词的过程。本文使用中科院的“计算所汉语词性标记集”以及哈工大停用词表对评论文本进行停用词过滤。根据“计算所汉语词性标记集”,确定出要过滤掉的词性有:标点符号、介词和代词等,这些词性的词信息量低,无类别区分作用。本文先对评论文本进行词性过滤,再根据哈工大停用词表进一步过滤。

                                 

    预处理后的部分问句

     

    3.3 Text vectorization

    在进行相似度计算之前,需要将每条问句都转换成向量的形式,即将每条问句都映射到一个向量空间,分别使用了两种方法TF-IDF(词频-反向文档频率)和word2vec对问句文本进行向量化。

     

    3.3.1 TFIDF method based on vector space model

    从FAQ中所有预处理后的问句中提取特征后,形成一个词汇表,则FAQ 中的每一个问句都可以用一个n 维的向量来表示。的计算方法为:设在当前问句中出现的次数,为FAQ中含词汇的问句个数,为FAQ中问句的总数,那么

        可以看出,一个问句中出现次数多的词将被赋予较高的值,但这样的词并不一定具有较高的值。

        eg:汉语中“的”出现的频率非常高,TF值(k值)很大,但“的”在很多问句中都出现,它对于分辨各个问句并没有太大的帮助,它的IDF值是一个很小的数。因此,这种方法综合地考虑了一个词的出现频率和这个词对不同问句的分辨能力。

        在计算用户提问问句的n 维向量时,用户提问问句和FQA库中的问句b不是同时向量化的,故在对FQA库中的问句向量化时,需要保存每个特征的ID F值,便于用户提问问句中特征词TFIDF值的计算。

     

    3.3.2 word2vec word vector model

     

    word2vec是用来产生词向量的一组相关模型。它利用输入的语料来产生一个向量空间,在这个向量空间中,每个词对应一个点,语义上相近的词在向量空间上对应的点也相近。

    word2vec中两个重要的模型:

    CBOW模型(Continuous Bag-of-Words Model)和Skip-gram模型(Continuous Skip-gram Model)。

    CBOW模型的思想是用上下文来预测当前词的概率,而Skip-gram模型的思想是用当前词来预测其上下文词的概率。它们的目标函数分别为:

     

    左为CBOW模型,右为Skip-gram模型

    本文使用sougou大语料并基于CBOW模型训练得到词向量,然后使用问句中每个特征词对应词向量的算术平均作为问句的句向量。

     

    3.4Calculation of sentence similarity based on cosine theorem

        问句之间的相似度可以转换为向量之间的距离来进行度量。距离越小问句之间的相似性越大,反之亦然。

        本文采用余弦夹角来计算向量之间的相似度,相似问题一般包含更多相同的特征词,两个问句的主题是否接近,取决于它们的特征向量“长得像不像”。是用户提问的问句向量,得到后,它们所对应的两个问句之间的相似度就可以利用和这两个向量之间夹角的余弦值来表示。相似度的计算公式如下所示:

        由上述公式可知,的值越大,说明两者的相似度越高,反之则越低。

        余弦相似度的定义虽然简单,但是在利用上述公式计算两个向量的夹角时,计算量为,当用户提出一个问题时,需计算次(为语料库中问句的数量,本文的语料库中的问句数为10000条),如果语料库很大,则将答案返回给用户需要很长的时间。

        我们这个方案解答需要大概30秒的时间,这个时间对于用户来说过于长,用户体验效果不佳。为了降低计算量,本文在计算相似度时进行了一些简化:

    1)首先,分母部分(即向量的模)不需要重复计算,即可以将它们进行预计算,并将预计算的结果保存起来,等计算向量模的时候,直接取出来即可。

    2)其次,分子部分,即在计算两个向量的内积时,只需考虑向量中的非零元素,计算复杂度取决于两个向量中非零元素个数的最小值。这两个简化方法在使用TF-IDF向量化时效果比较明显,因为TF-IDF得到的向量极其高维和稀疏,而word2vec得到的向量则是低维和稠密,效果不是很明显。

    4Experimental results and analysis

    4.1 Experiment Settings

     

    表4-1 测试问题集

    具有相似性的问题

    基本无相似度的问题

    1.小米怎么发彩信啊?

    1.大脸剪什么短发好看

    2.如何成为经理?

    2.怎么做拔丝地瓜

    3.怎样在聚划算卖东西

    3.华为自动关机为什么

    4.怎样停止建行卡的短信通知?

    4.去哪买手机比较好

    5.你对知音有什么看法

    5.怎样提高数学成绩

    6.地震你怎么看

    6.什么翻译软件比较好

    7.选哪个快递?顺丰咋样

    7.出国去哪里比较好

    8.湖南长沙要穿防晒服吗

    8.身份证掉了怎么补办

    9.三星I910存储量是多少

    9.怎样种蓝庭芥

    10.CAD的修剪命令怎么操作?

    10.理八栋谁最帅

     

    4.2 Experimental Results and Analysis

    基于TF-IDF算法的句子相似度计算方法基本可以回答表4-1中“具有相似性的问题”,而对于表4-1中“基本无相似度的问题”,则会提示用户该问题基于当前的FAQ问答库无法回答,这说明基于相似度的FAQ问答系统完全依赖于语料库。

     

     

    相似问题测试结果

     

     

     

    基本无相似度问题测试结果

     

        当输入与语料库中问题相似的问题时,能得到较为正确的答案。

        而对于与语料库中问题基本无相似度的问题,系统则会提示用户系统回答不了当前问题。

        本文的TF-IDF算法的问答系统设置了相应的阈值,即当用户提问的问句与问答库中的问句相似度大于阈值时,才输出相应的问句所对应的答案,这里阈值是0.5。除此之外,本文对于阈值过滤后的答案,进行排序,先出阈值最高的前5个(Top5)反馈给用户。

        基于word2vec的句子相似度计算方法,在计算速度上比基于TF-IDF的方法速度快,因为word2vec训练出来的向量要更低维和稠密。但是由于在进行词向量训练的时候,使用的是sougou大语料,该语料与本文的问句没有太大的关系,故训练出来的词向量不能很好的代表问答领域问句的一些语义信息,故在最终进行测试的时候,计算出来的结果无法达到预期的效果。

     

     5 Summary and Outlook

        本文使用了两种句子向量化算法对句子进行向量化:即TF-IDF和word2vec。

        这两种向量化算法都能在一定程度上刻画出句子之间的相似度【余弦相似度】。

        对于TF-IDF算法,其训练出来的句子向量具有高维、稀疏的缺点,故在计算的时候比较慢,本文针对这个问题对其进行了优化,在一定程度上降低了时间复杂度。

        相反,对于word2vec算法,其训练出来的向量具有低维、稠密的优点,计算速度快,但词向量的训练需要大量的语料才能达到好的效果。这次训练语料比较不匹配,得到的向量不能很好地表示句子之间的相似性,效果较差。

        由此可见,在进行word2vec词向量的训练时,需要根据具体的问题,使用合适的语料,这样才能更好的表示句子之间的相似度。

    展开全文
  • 约瑟夫环的问题解决方法与分析

    千次阅读 2017-09-27 17:52:16
    约瑟夫环的问题 相信大家都听过约瑟夫环的问题,据说著名犹太历史学家 Josephus有过以下的故事: 在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹 太人决定宁愿死也不要被敌人抓到...
  • 丢包问题解决

    千次阅读 2019-11-28 15:37:44
    内容如下: 当网络出现有规律的故障,我们...而使用路由器的PPPoE拨号,出现间歇性的丢包与延迟,问题可以复现,说明问题并不是偶发,而是有规律的。 问题症结可能: 电脑拨号产生一虚拟接口,由于有PPPoE头部封...
  • Java 跨域问题解决

    千次阅读 2018-08-30 11:16:59
    1、什么就算跨域了,以下三点中只要有一个不同就是跨域啦。 1)、协议不同;2)、域名不同(IP地址不同)、3)、端口号不同 下图来自百度百科 2、测试案例 ...有两个站点:1)、自定义服务站点(假设为A站点),2...
  • 转自 PheonixHkbxoic 的《前端解决跨域问题的8种方案(最新最全)》 原址:https://www.cnblogs.com/PheonixHkbxoic/p/5760838.html 1.同源策略如下: URL 说明 是否允许通信 http://www.a.com/a.js ...
  • 近期在做项目的时候,遇到了一些JS浮点数精度的问题。这个问题,其实说大不大,说小不小。但是这次因为涉及到一些财务和结算的问题,然后突然...这里把相关的原因的问题解决方案整理一下,也希望给各位提供一些参考。
  • MATLAB闪一下打不开问题解决

    万次阅读 热门讨论 2020-03-19 09:52:39
    上网百度发现很多解决方法都是修改环境变量,但是我按照这些来修改并不能解决问题,重新分配了虚拟内存之后当时重启了能用,之后再打开就还是用不了。 最终解决办法: 我是64位系统,去自己的C:\Windows\SysWOW64...
  • Oracle常见问题解决_ORA-12514

    万次阅读 2018-09-03 09:06:05
    ORA-12514: TNS: 监听程序当前无法识别连接...解决:  1、找到${oracle_home}\network\admin\listener.ora;  2、在SID_LIST增加 (SID_DESC =  (GLOBAL_DBNAME = ORCL)  (ORACLE_HOME = E:\app\oracle\virtu...
  • 开发过程中,难免会遇到各种问题,但是针对问题解决思路有很多,这里记录下,目前使用的方法,以便后续遇到问题不会在慌忙中处理。 1、【日志文件】查看软件记录的日志文件,针对日志和代码结合进行分析,如果针对...
  • JS之经典for循环闭包问题解决方法

    万次阅读 2015-01-30 13:14:47
    JS之经典for循环闭包问题解决方法 像这样一个代码片段,初学者会理所当然地认为依次点击Li会弹出相应的0、1、2、3、4、5,但实际结果却是这样的 我们无论点哪个按钮,最后弹出来的都是6。经典的for循环闭包问题...
  • 在dev环境下的跨域问题解决 1.项目使用的是axios请求网络,将baseUrl修改为/api (这里是使用webpack提供的代理功能将/api代理成目标接口host) axios.defaults.baseURL = '/api'; 2.进入config/index.js里,在dev下...
  • dpkg 被中断问题解决方法

    万次阅读 2017-08-15 20:51:33
    linux系统安装软件是有时会碰到“dpkg 被中断,您必须手工运行 sudo dpkg –configure -a解决问题”,然而按照提示运行却并没能很好的解决问题。其实导致这个问题的主要原因是因为/var/lib/dpkg/updates文件下的...
  • 三、问题解决 3.1 暂时解决 3.2 永久解决 一、问题描述 1.在使用Maven创建web工程的时候发现默认web.xml版本居然是2.4的,这个版本连EL表达式都用不了,所以很是糟心 2.所以为了解决Idea创建Maven Web工程的...
  • 程序中文乱码问题解决大全

    千次阅读 2012-10-28 17:10:38
    本人在学习Java的这段时间里,尤其是学习到J2EE这块内容时,经常遇到的一个问题就是中文乱码问题,特别的头疼,相信大家也会有同感,故在学习的时候不断的总结,发现解决这类问题无非是如下几点(以gb2312为例),和...
  • 百鸡百钱问题解答

    千次阅读 2015-03-12 14:01:22
    鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
  • 看了很多种解决办法,然而并没有解决 如下面这个: Tomcat 控制台UTF-8乱码问题 1、修改cmd的编码格式 快捷键win+R打开运行程序,输入regedit打开注册表,找到以下路劲并且修改。 [HKEY_LOCAL_MACHINE\SOFTWARE...
  • xml的中文乱码问题解决

    万次阅读 2018-07-28 21:32:50
    xml的中文乱码问题解决:   所以,保存时候的编码和设置打开时候的编码一致,就不会出现乱码
1 2 3 4 5 ... 20
收藏数 5,696,668
精华内容 2,278,667
关键字:

问题解决