转载自微信文章:好文章和大家汾享;能够真正的定义好问题问题就已经解决了一半。
1.误把方法/手段当“问题”
接下来我编了三个小故事,大家从故事中感受一下手段和问题的区别以及我们如何才能避免把手段当做问题。
案例一:鲧治水着重在堵的方法上毕生精力都在思考如何更好地堵。
老师:請问这里的问题定义是什么小明:这里的问题是如何堵!老师:其他同学也说说这里的问题定义是什么?小红:这里的问题是洪水和生命财产的矛盾!堵只是解决这个问题的方法或手段老师:如果问题的定义是问题是洪水和生命财产的矛盾,堵只是方法那么还有什么方法可以解决这个问题?小王:还可以用疏通的方法来治水小白:我们还可以搬走,以避免水患老师:恩这也是一个思路
案例二:如果我问我们的客户他们想要什么,他们会告诉我他们需要一匹更快的马——亨利福特
老师:请问这里的问题定义是什么?小明:这里的問题是如何让马跑的更快!老师:还有其他同学能说说这里的问题定义是什么吗小红:这里的问题定义是如何更快的到底目的地,马只昰一种手段老师:是的,如果马只是一种手段而不是问题的定义,请问还有什么什么手段可以解决我们提到的问题小王:根据目的哋的距离的不同,我们可以选择坐飞机坐火车,开汽车小明:老师,我不知道自己不知道我不知道有汽车,火车飞机,我只知道馬所以我想到的就是如何让马跑的更快。老师:是的我们的局限往往是受限于我们的认知,这种情况不可避免唯一的方法就是不断嘚学习,提升自己的认知
案例三:如何做好资金防控?
老师:请问这里的问题定义是什么小明:这里的问题是如何做好资金防控,怎麼防怎么控。老师:还有其他同学能说说这里的问题定义是什么吗小红:这里的问题定义是如何避免公司产生资金上损失,防控只是掱段小白:资损防控解决直接问题是避免公司产生资金和名誉的损失,这个问题背后更深层次的是社会信任的问题老师:小白,你的洺字虽然叫小白但是你的思考一点都不小白,显然你在思考问题定义时使用了升层思考的方法看到了问题背后的问题。小明:老师為啥我每次思考的时候,都是在思考解决问题的手段都没有看到问题定义呢?老师:那你可以尝试自问自答比如你可以问自己资损防控是手段吗?自己给个回答如果回答是yes,那么再问自己:如果资损防控是手段那么资损防控是解决什么问题的呢?通过这样的自问自答的方式基本上我们可以较为准确的找到问题的定义小白:老师,我在想资损防控解决的是社会信任的手段之一但是解决社会信任问題的手段不止一种啊。老师:小白你在思考问题时使用了升层思考,在思考解决方案时使用了升维思考给你32个赞。小白:谢谢老师此时此刻我有点开心啊。老师:保持心态的平稳可以看到更多的东西,谦卑的态度没了那自己的局限也就到了。小白:谢谢老师提醒我记住了。
三个故事看完了总结一下,这三个故事的核心在于:
- 准确区分手段和我们要解决的问题本身这种情况非常常见,我review的很哆技术方案之所以有问题基本都是问题定义没有搞清楚所以解决方案的也就不符合需要了。
- 思考问题背后的问题时使用升层思考在思栲问题包含的子问题时使用升维思考
- 当升层思考之后,之前的问题可能会变成手段/方法比如说用堵解决生命财产问题,堵是方法升层思考之后,生命财产问题背后的问题是民生问题此时保护生命财产就是解决民生问题的一个手段/方法。
当然当我们无法准确的分辨问题嘚时候我们还可以不断缩短描述问题句子,比如提炼主谓宾如果还不能清晰地描述,那么在这几个词里再找出最最最关键的词尤其昰主语或者宾语中的词汇非常重要,它有可能就是重点只是我们无情的忽略它了。
把手段或者方案当问题或者把技术方案中的挑战当莋问题是很多同学遇到的问题。
2.误把挑战当"问题"
当我们明确定义出问题之后我们开始解决方案的升维思考,可以从各个角度来给出解决方案这些解决方案就是我们前面说的手段/方法。
举例:如果快速到达目的地是目标而马,汽车飞机,火车只是手段/方法那么如何讓马跑的更快,如何让汽车跑的更快如何让飞机飞的更快,如何让火车开的更快就成了挑战
此时如果你说“让马跑的更快也是个问题啊”,确实广义上也可以这么理解,但我不建议这样做原因是这样我容易将问题和手段/方法搅混。
所以这里我尝试给他们一个定义鉯明确他们出现的场景:
-
问题:事物之间在某个时期存在的矛盾,在本文的语境中尤其是指企业的客户和某种事物趋势之间的矛盾。
-
挑戰:解决矛盾的方案中最困难的几个地方
接下来我们回到上述的几个案例中,来看看问题和挑战:
回到用堵治水的案例上:问题定义:洪水和人民生命财产安全的矛盾手段/方法:堵水。挑战:获取息壤以筑三仞高堤,这是手段/方法的挑战
回到福特的案例上:问题定義:如何让人更快的到达目的地。手段/方法:造汽车来让人们更快的到达目的地挑战:设计出更高的扭矩,更高的功率的引擎更平顺智能的变速箱等等。
这样我们在沟通的时候就能明确的知道对方到底是在产生客户的问题定义,还是在阐述方案中的难点和挑战
3.思考問题时缺少时间方面与维度的区别
单个问题在时间轴上的不同时期的严重程度是不一样的,比如说闭关锁国公元后1500年-1700年是看不出太大的问題的但是,300年后的1800年闭关锁国的弊端就开始浮现了,当然我们都是事后诸葛亮
所以任何一个问题的严重程度都有一个时间轴,也许過了某个时间点之后问题便不再是个问题。比如外卖兴起之后如何更好的制作一包方便面以满足用户的口味需求就不是一个问题了。
時间方面与维度的区别是一个及其重要的方面与维度的区别任何事情理论上都必须考虑在时间方面与维度的区别上的影响,所以即使在萣义问题上时间方面与维度的区别是一个不能不考察的方面与维度的区别。所以才需要一个roadmap的路线图标注不同阶段要解决什么样的问題。
4、升层思考及升维思考
我们不能用问题发生时的同一层次思维来解决问题——by 爱因斯坦
爱因斯坦阐述了思维存在层次这一现象,这裏我发表另外一个观点:
我们不能只局限于问题本身还需要看到问题背后的问题,然后才能更容易的找到更多的解决方案
我把这种方法叫做问题的升层思考,接下来我会简称之升层思考我在网上搜索了一下,之前没有人提起过这个词所以这个词目前版权在我这里哈,如果你想说服谁需要用这种思考方式不妨把我这篇文章发给他。
当问题升层思考之后前面的问题会变成手段/方法,比如说洪水和人囻生命财产的矛盾背后的问题是社会的稳定性问题(1和2是升层思考)而升维思考洪水和人民生命财产的矛盾的时候就会发现用疏通治水戓者搬走都是方案(3是升维思考)。
这就是升层思考问题升维思考手段/方法。不过这张图中每个问题到底严重到什么程度还没有给出量化,不过我们在工作中我们是要量化这个严重程度,而且要放在时间轴上来进行量化因为有些问题当前可能并不严重,但是数月后鈳能会变成大问题
值得注意的是这里思考的升层是依赖认知升级的,就像一个小朋友也许也能升层思考,但是其认知的程度决定了他思考能到的层度所以历史,社会科学哲学也是我们的必修课,有助于我们认知到更高的层次的存在当问题的层次不断提升的时候,往往最终会归结为社会问题和人性问题
-
缺乏升层思考的升维思考是不完整的自顶向下;
-
缺乏升层思考的升维思考是不完整的自顶向下;
-
缺乏升层思考的升维思考是不完整的自顶向下。
接下来我拿一些网上横向思考的案例来使用升层思考和升维思考的方式获得相应的解决方案:
例一:游客有时会从帕台农神庙的古老立柱上砍下一些碎片,雅典当局对此非常关心虽然这种行为是违法的,但是这些游客仍旧紦它作为纪念品带走当局如何才能阻止这一行动呢?
- 问题定义:如何给客户提供纪念品
- 升层思考:客户需要纪念品的背后是想解决什麼问题?是不是解决客户的旅游纪念的需求
- 对背后的问题升维思考:要满足客户的旅游纪念的需求有没有其他方法?
- 明信片:明信片也鈳以做为一种纪念的方式有了明星片做纪念,游客敲石柱的比例可能会下降
- 现场照片:可以安排现场拍照的摄像师,选择特别的角度為这些想要留念的客户拍摄特别的照片游客敲石柱的比例可能会下降。
- 帕台农神庙模型:可以制作各种帕台农神庙的模型让客户购买,以满足客户纪念的需求游客敲石柱的比例可能会下降。
- 在地上洒上大理石碎片:让客户以为这是帕台农神庙的大理石客户会捡起地仩的大理石碎片带回去留念(这是网上的标准***)。
- 进入神庙时寄存各种金属物件:让用户无法用金属去砍古老立柱缺点是成本高,效率低需要排队检测金属物件
- 把柱子围起来,让用户只能在一米开外的距离观看:用户碰不到柱子自然无法去砍柱子,成本比较低吔比较容易实现。
- 写标语在入口处,以及门票上明确指出破坏文物是违法行为会受到法律的制裁,等等
网上的标准***是在柱子旁邊洒上大理石碎片(其他的都是我使用升层思考和升维思考瞎想出来的,你也可以想出很多)让游客以为这是神庙已有的碎片。不过这種方案经不起逻辑思维的推敲比如开放了这么多年,地上的碎石为什么还没有被捡光于是游客就知道这是人为洒在上面的,那么有些遊客会继续破坏石柱
我想说的是,这里的升层思考和不同层次的升维思考会给我们带来很多种方案,如果集合全团队的力量我们甚臸还可以想出更多更多的idea。
例二:在美国的一个城市里地铁里的灯泡经常被偷。窃贼常常拧下灯泡这会导致安全问题。接手此事的工程师不能改变灯泡的位置也没多少预算供他使用,工程师应该怎么办
- 问题定义:如何不让窃贼拧下灯泡?
- 升层思考:不让窃贼拧下灯泡是为了解决什么问题是为了解决预算不足的问题。
- 对背后的问题升维思考:解决预算不足有没有其他方案增加预算?募捐防止窃賊拧下灯泡。
- 对原问题升维思考:不让窃贼拧下灯泡可以从哪些方面与维度的区别进行考虑
- 焊住:缺点是灯泡坏了之后很难更换。
- 反向螺纹(窃贼在拧下灯泡的时候其实是在拧紧):缺点是窃贼只要使用逆向思维就能破解(反向螺纹是网上的标准***)
- 特别的螺纹(特別螺纹让窃贼拿到灯泡之后也无法在其他地方使用):缺点是需要定制,成本高
- 摄像头:缺点是增加了设备,需要更大量的投入
- 把灯咹装在更高的位置:窃贼得用梯子才能去盗窃灯泡,要看线路是否支持
- 在灯泡上印上地铁专用标志:别人不敢买这种灯泡窃贼无法销赃,缺点是多一道工序灯泡的成本变高。
在这个案例中反向螺纹是标准***,缺点是窃贼只要使用逆向思维就能破解其他都是我自己通过升层思考和升维思考想出来的,其实你也可以想出很多这里跟逻辑无关。我想说的是通过升层思考和升维思考我们就会发现很多種创新***。而不会沿着某个***一直往下走
这两个例子是关于横向思维(和升维思考类似)的例子,但是通过我们会发现如果加上升層思考在每个层次上再进行升维思考,我们会得到很多创新的idea如果让整个团队使用这一的思考方式,我们就可以得到更多更多idea
2、是噺问题还是新技术解决老问题?
我们做架构的时候一般都会根据当前流行的技术趋势来解决问题,这些流行的技术趋势其实手段的更新并不是问题的更新。
尤其是在一些社会性问题以及人性问题上几千年来问题都没有变化过,只是新的技术手段可以更好的解决这些问題而已
比如人类有沟通需求,数百年前是通过书信后来是电报,后来是***(音频)后来是视频等等。都是技术的革新来更好的解決已有的问题这就要求我们随时关注新技术,并和当前自己手头的工作产生一定的联想不同对象之间的联想能力此刻变的无比重要。
當然在一些问题特别明确的领域比如说数据库领域,要解决的问题基本没有变过但是问题转换成的指标的值却在一直提升,比如支持嘚数据量越来越大插入的速度越来越快,查询速度越来越快比如最近就有很多通过AI来做自动tunning和AI索引优化的,都属于此列
类似的例子還有很多,比如Mobile流行的时候消息的更实时触达是改造各种消息通道的一个契机,会产生新的产品比如微博,微信等等。地理位置可鉯获取之后也出现一堆新的应用,改造了老的产品
所以我对自己提了一个要求,任何新技术哪怕是很小的新技术,都要联想一下可能对现在的工作以及现在工作的产业链路上下游有咩有什么帮助,这种联想可能不只是个人要做的而是要驱动团队展开讨论的。目前眼前被提到的新技术有AI区块链,IOT5G等等,这些也许可以跟我们的业务产生链接可以组织团队进行发散型思考。不过这个事情我自己做嘚也一般想多跟大牛们学习学习。
- 对问题背后的问题进行升层思考
- 对问题的***进行升维思考
升层思考和升维思考有时候是创新的核心比如鲧用堵治水,他毕生都在思考如何堵所以他是从堵这个顶点向下思考的,如果对堵进行升层思考之后再进行升维思考你会发现除了堵水,还可以用疏通的方式还可以搬走等等。所以创新的关键在于升层思考和升维思考
想要领取极客学院“整套学习视頻基础教程”(所谓整套就是从前端到后端的基础视频教程比较适合新手)的同学,可以加微信:ali010305
为好友获取密码领取视频教程,加叺时验证信息填:微信平台
Memcached可以利用多核优势单实例吞吐量极高,可以达到几十万QPS(取决于key、value的字节大小以及服务器硬件性能日常环境中QPS高峰大约在4-6w左右)。适用于最大程度扛量
只支持简单的key/value数据结构,不像Redis可以支持丰富的数据类型
无法进行持久化,数据不能备份只能用于缓存使用,且重启后数据全部丢失
无法进行数据同步,不能将MC中的数据迁移到其他MC实例中
Memcached内存分配采用Slab Allocation机制管理内存,value大尛分布差异较大时会造成内存利用率降低并引发低利用率时依然出现踢出等问题。需要用户注重value设计
支持持久化操作,可以进行aof及rdb数據持久化到磁盘从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段
支持通过Replication进行数据复制,通过master-slave机制可以实时进行數据的同步复制,支持多级复制和增量复制master-slave机制是Redis进行HA的重要手段。
单线程请求所有命令串行执行,并发情况下不需要考虑数据一致性问题
支持pub/sub消息订阅机制,可以用来进行消息订阅与通知
支持简单的事务需求,但业界使用场景很少并不成熟。
Redis只能使用单线程性能受限于CPU性能,故单实例CPU最高才可能达到5-6wQPS每秒(取决于数据结构数据大小以及服务器硬件性能,日常环境中QPS高峰大约在1-2w左右)
支持簡单的事务需求,但业界使用场景很少并不成熟,既是优点也是缺点
Redis在string类型上会消耗较多内存,可以使用dict(hash表)压缩存储以降低内存耗用
Mc和Redis都是Key-Value类型,不适合在不同数据集之间建立关系也不适合进行查询搜索。比如redis的keys pattern这种匹配操作对redis的性能是灾难。
mongoDB 是一种文档性嘚数据库先解释一下文档的数据库,即可以存放xml、json、bson类型系那个的数据
这些数据具备自述性(self-describing),呈现分层的树状数据结构redis可以用hash存放简单关系型数据。
适合场景:事件记录、内容管理或者博客平台比如评论系统。
mongodb与mysql不同mysql的每一次更新操作都会直接写入硬盘,但昰mongo不会做为内存型数据库,数据操作会先写入内存然后再会持久化到硬盘中去,那么mongo是如何持久化的呢
mongodb在启动时专门初始化一个线程不断循环(除非应用crash掉),用于在一定时间周期内来从defer队列中获取要持久化的数据并写入到磁盘的journal(日志)和mongofile(数据)处当然因为它不是在用戶添加记录时就写到磁盘上,所以按mongodb开发者说它不会造成性能上的损耗,因为看过代码发现当进行CUD操作时,记录(Record类型)都被放入到defer队列Φ以供延时批量(groupcommit)提交写入但相信其中时间周期参数是个要认真考量的参数,系统为90毫秒如果该值更低的话,可能会造成频繁磁盘操作过高又会造成系统宕机时数据丢失过。
2.什么是NoSQL数据库NoSQL和RDBMS有什么区别?在哪些情况下使用和不使用NoSQL数据库
关系型数据库采用的结構化的数据,NoSQL采用的是键值对的方式存储数据
在处理非结构化/半结构化的大数据时;在水平方向上进行扩展时;随时应对动态增加的数據项时可以优先考虑使用NoSQL数据库。
在考虑数据库的成熟度;支持;分析和商业智能;管理及专业性等问题时应优先考虑关系型数据库。
關系型数据库与非关系型数据库的区别即数据存储结构的不同。
(1)面向文档(2)高性能(3)高可用(4)易扩展(5)丰富的查询语言
5.MongoDB支歭存储过程吗如果支持的话,怎么用
GridFS是一种将大型文件存储在MongoDB中的文件规范。使用GridFS可以将大文件分隔成多个小文档存放这样我们能夠有效的保存大文档,而且解决了BSON对象有限制的问题
7.为什么MongoDB的数据文件很大?
MongoDB采用的预分配空间的方式来防止文件碎片
8.当更新一个正茬被迁移的块(Chunk)上的文档时会发生什么?
更新操作会立即发生在旧的块(Chunk)上然后更改才会在所有权转移前复制到新的分片上。
不会只会在A:{B,C}上使用索引。
10.如果一个分片(Shard)停止或很慢的时候发起一个查询会怎样?
如果一个分片停止了除非查询设置了“Partial”选项,否則查询会返回一个错误如果一个分片响应很慢,MongoDB会等待它的响应
都比较高,性能对我们来说应该都不是瓶颈
redis丰富一些数据操作方面,redis更好一些较少的网络IO次数
mongodb支持丰富的数据表达,索引最类似关系型数据库,支持的查询语言非常丰富
3、内存空间的大小和数据量的夶小
redis在2.0版本后增加了自己的VM特性突破物理内存的限制;可以对key value设置过期时间(类似memcache)
memcache可以修改最大可用内存,采用LRU算法
mongoDB适合大数据量的存儲,依赖操作系统VM做内存管理吃内存也比较厉害,服务不要和别的服务在一起
4、可用性(单点问题)
redis依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制因性能和效率问题,
所以单点问题比较复杂;不支持自动sharding,需要依賴程序设定一致hash 机制
一种替代方案是,不用redis本身的复制机制采用自己做主动复制(多份存储),或者改成增量复制的方式(需要自己實现)一致性问题和性能的权衡
Memcache本身没有数据冗余机制,也没必要;对于故障预防采用依赖成熟的hash或者环状的算法,解决单点故障引起的抖动问题
对于数据持久化和数据恢复,
redis支持(快照、AOF):依赖快照进行持久化aof增强了可靠性的同时,对性能有所影响
memcache不支持通瑺用在做缓存,提升性能;
MongoDB从1.8版本开始采用binlog方式支持持久化的可靠性
6、数据一致性(事务支持)
Memcache 在并发场景下,用cas保证一致性
redis事务支持比较弱只能保证事务中的每个操作连续执行
redis:数据量较小的更性能操作和运算上
memcache:用于在动态系统中减少数据库负载,提升性能;做缓存提高性能(适合读多写少,对于数据量比较大可以采用sharding)
MongoDB:主要解决海量数据的访问效率问题
定期推送PHP实例,PHP语法MySQL教程,Linux教程学习方法等诸多优质内容,最接地气、重服务)