面试官问金字塔思维如何应用在技术系统,我们聊了三十分钟
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我个人微信「java_front」一起交流学习
0 文章概述
大家想一想工作中有没有遇到以下情况:一位同事用了很长时间罗列了很多事实和数据向你说明一件事情,但是你听完根本不知道他想要说什么。另一位同事用了大量笔墨编写了技术方案,不仅有文字还有图表,但是你看完也不知道这个方案到底要解决什么问题以及如何落地。
上述情况的出现大概率是因为表述者没有使用结构化方法进行阐释,信息看似非常丰富但是杂乱无章,让人很难抓住重点,所以我们需要引入结构化思维方法论。
金字塔原理就是一个由芭芭拉·明托女士提出的结构化思维方法论,风靡世界五十年并在各个行业都取得过很好的效果。本文我们就运用金字塔原理分析一个技术系统优化方案,并看看如何落地执行,最终总结出一个闭环工具。
1 怎么样提好一个问题
我们在工作中做的所有事情,本质上都是为问题提供解决方案。无论我们是提出一个方案,还是优化一种场景,或者是本身就是在解决问题,所以想要阐释清楚我们在做什么,第一步明确我们正在解决什么问题非常关键。
那么应该如何阐释清楚问题呢?我们可以使用金字塔原理提出的结构化表达SCQA工具,这四个字母分别代表背景、冲突、疑问、回答。
背景(Situation)是这个问题出现的环境,我们对环境的描述必须是真实和朴素的,大家对这个描述都是认可的,甚至是可以产生共鸣的。
冲突(Complication)是在上述背景下出现了哪些矛盾,常见的类型有三种:哪些预期未达标、哪些流程不顺畅、哪些隐患还存在。
疑问(Question)是根据背景和冲突自然而然提出的问题,常见的类型有四种:应该做什么、应该如何做、是否应该做、为什么会发生。
回答(Answer)是针对上述四类问题给出的答案,而回答就是金字塔结构的中心思想。
假设现在你想要向同事说明白技术方案应该如何实施,那么第一步就应该阐释清楚到底是在解决什么问题,等到大家对问题达成一定共识之后再谈技术方案:
背景:业务数据量越来越大
冲突:响应经常超时现有系统难以支撑
疑问:应该做什么才能够支撑后续业务
回答:我们应该优化系统
此时技术方案准备解决什么问题就清楚了,而对这个问题的回答就是金字塔结构的中心思想。下面我们就要对这个中心思想使用金字塔原理进行结构化组织。
2 结构化方式组织回答
金字塔原理的核心思想并不复杂:一件事情可以总结出一个中心思想,这个中心思想可以由三至七个论点支持,每个论点再可以由三至七个论据支持,基本结构图如下:
对于金字塔原理仅仅分析到这里是不够的,我们还应该进一步去分析金字塔原理的内在结构,而内在结构可以从纵向和横向两个维度分析:纵向结构体现了结论先行和以上统下两个原则,横向结构体现了归类分组和逻辑递进两个原则。
2.1 纵向结构
2.1.1 结论先行
结论先行是指开宗明义地展示中心思想,让听众一开始就明白沟通主旨,而如果把中心思想隐藏在沟通过程中,听众可能因为走神或者沟通信息太多而失焦,根本不知道你在说什么。结论先行具体有以下六个方面:
先重要后次要
先框架后细节
先总体后细分
先论点后论据
先结论后原因
先结果后过程
假设一个同事代码发布上线后导致系统故障,如果不使用结构化方法是这么表述的:
我看监控发现数据库负载升高,可能是没有加索引导致的。我又发现频繁收到重复消息,是不是消息中间件有什么问题?监控还显示创建了大量线程,是不是线程池使用不当导致的?问题排查很难短时间得到结论,我们还是先回滚代码至上一个版本吧
这位同事中心思想是问题原因比较难排查,应该先回滚代码再分析问题,但是他把最重要的观点放在最后,不听到最后不知道他要做什么,而如果结论先行应该怎么表述呢?
我们应立即当回滚代码,因为问题排查比较复杂,还是先恢复系统再排查问题。可能的问题分三类:第一可能是索引使用不当导致的数据库问题,第二可能是中间件问题导致大量重复接收消息,第三可能是线程池使用不当导致线程大量被创建。等到恢复正常之后我们依次排查这些问题
我们比较两段表述不难发现,第二段表述结构清晰很多,信息传达效率显著提升,这就是结论先行的优势所在。
2.1.2 以上统下
以上统下是指任何一个层的思想必须是其下一层思想的总结概括,我们分析一个例子进行说明:小王今天需要买牛肉、鸡蛋、萝卜、果汁、白菜、牛奶、青菜、鸡肉、酸奶,但这么多菜品他记不住,请你想办法帮助小王。
第一步我们要对菜品自下而上进行聚合归纳,这是一个找规律的过程。第二步再以上统下进行结构化表达从而帮助记忆。
自下而上聚合我们不难发现,牛肉、鸡肉、鸡蛋属于肉蛋类,白菜、青菜、萝卜属于蔬菜类,牛奶、果汁、酸奶属于饮品类,这样聚合之后我们再以上统下进行结构化表达。
上述实例比较简单,因为元素之间的关联性比较容易寻找,但是真实场景是不会这么简单的,元素之间关联性并不容易建立,那么我们应该如何从中心思想展开至第二层?
金字塔原理推荐使用疑问-回答式对话,通过设问的方式向下展开结构。那么应该问哪几个问题从而涵盖中心思想的要点?我们可以参考5W2H分析法,尽量做到要点不缺失:
What:是什么、做什么
Why:为什么、什么原因
Where:在哪里、从哪开始
When:开始结束时间、里程碑
Who:谁负责、谁来做、谁验收
How:怎么做、什么方法、从哪切入
How Much:做多少、各项指标是多少
在这个模型基础上我们可以进行简化从而减少要素数量,这样更加有利于结构化表达和记忆。我们一般选取What、Why、How这三个核心要素组成2W1H模型。
2.1.3 实际应用
我们看看结论先行和以上统下的实际应用。根据第一章节我们使用SCQA工具得到了回答,这个回答就是金字塔结构中心思想,根据结论先行原则在金字塔顶端就要开门见山地展示中心思想。
我们再用2W1H模型组织论点,划分为什么、为什么和怎么做三个维度,这样金字塔的纵向结构就已经搭建完成。
2.2 横向结构
2.2.1 归类分组
(1) 归纳推理
我们一般用归纳推理和演绎推理两种方法进行归类分组,我们先看归纳推理。
归纳推理是指把观察到的事实、规律归纳总结为理论。这种推理方法是不严谨的,因为只要观察事实和信息是有限的,那么归纳推理出来的结论就不一定是正确的。这就是逻辑错误中常见的一种:错误归因。
欧洲人看到的天鹅都是白色的,那么他们就归纳总结说所有的天鹅都是白色的。当一只黑天鹅出现时,这个结论就被证明是错误的,这就是黑天鹅事件。
当然我们不可能观察到所有事实,收集到所有信息,而一般是为了解决某个具体问题,我们会收集侧重于某个角度的信息,建立特定模型去分析解决问题,这也不失为一种有效方法。
金字塔原理归纳推理一般有以下四种维度:时间维度、结构维度、程度维度、经验维度。时间维度是根据天然时间线进行归纳,结构维度根据组织结构进行归纳,程度维度是根据程度级别进行归纳,经验维度是根据已有经验进行归纳。我们分别来看上述四种维度的几种常见类型:
(1) 时间维度
事前、事中、事后
短期、中期、长期
(2) 结构维度
信息部、行政部、人力部
开发组、测试组、运维组
(3) 程度维度
高级、中级、初级
重要、次要、不要
(4) 经验维度
市场战略3C理论
市场决策4P理论
高扩展、高可用、高性能
我们选取时间维度和结构维度分析一个实例:怎样减少代码上线故障。从时间维度分析:事前需要做好代码测试,事中需要监控关键指标,事后需要进行分析复盘。
从结构维度分析:开发人员需要完备单元测试,测试人员需要做好边界测试,运维人员需要完善监控平台。
(2) 演绎推理
演绎推理是指根据公理、定理或者自己相信的观念,做出推理或者判断,得到结论。
这种方法从逻辑上来说是严谨的。命题A是真的,推理出命题B也是真的,那是因为命题B的真实性包含在命题A中。
需要注意在逻辑上严谨,不是说结论一定是正确的。例如自己相信的观念最终被证明是错误的,那么得到结论也就是错误的。
这是一种自上而下的推理方法,由已知的公理、定理或者观念向下推理。使用这种方法,需要在出现问题的领域有一定的经验和积累。
标准式演绎推理分为大前提、小前提和结论:所有小鸟都会飞,这是一只小鸟,所以它会飞。
演绎推理还可以分为现象、原因和解决方案三个要素:现象是开发代码质量不高,原因是没有统一代码规约,解决方案是制定统一代码规约。
2.2.2 逻辑递进
逻辑递进是指每种思想需要按照一定顺序进行排列,时间维度按照事前、事中、事后进行排列,程度级别按照高级、中级、初级进行排列。例如时间维度我们还可以继续使用怎样减少代码上线故障案例,按照事前、事中、事后时间线进行排列,这种顺序更加符合理解和记忆习惯。
3 综合实例
前面章节我们介绍了SCQA和金字塔原理,本章节我们用一个实例将结构化思维方法论落地,并总结出一个闭环工具。
3.1 提出问题
我们还是以系统优化案例进行说明,第一步是使用SCQA提出问题从而引出回答。背景是业务数据量越来越大,冲突是响应经常超时现有系统难以支撑,疑问是应该做什么才能够支撑后续业务,回答是我们应该优化系统,而回答就是金字塔结构的中心思想。
3.2 给出回答
第二步是使用金字塔原理组织回答,在纵向结构上我们通过设问的方式提出2W1H三个问题。
在横向结构上我们按照一定维度去组织论据,我选取了经验维度,在怎么做优化这个问题上选取3H理论指导优化工作,这个理论包含高扩展、高可用、高性能三个维度。
高扩展强调系统可扩展性,包含划分清晰的领域边界,使用合适的设计模式,进行合理的组件抽象,遵守统一的代码规约。
高可用强调对系统的保护,面对大流量可能带来的非线性压力,我们要做好降级、延时、隔离、冗余、告警和响应防止系统崩溃。
高性能强调系统的性能表现,我们首先通过分析时延、负载、压测表现等指标了解系统能力,再从数据层、缓存层、服务层、WEB层、前端层、客户端、代理层等层级思考优化方案。
因为需要组织和表达信息较多,我们可以选择将金字塔旋转90度,这样做只是为了展示信息更加方便,在逻辑上并不改变金字塔结构。
3.3 落地执行
我们已经将回答进行了结构化表达,现在需要思考如何将回答落地执行,我认为可以从以下四个方面思考。
团队(Team):有多少人可以投入这个项目,人员构成是什么,例如有几个服务端和几个前端,人力的投入直接影响执行节奏。
切点(Pointcut):从哪里入手这是需要明确的,例如我们做系统优化,可以先从一个耗时最长,性能最差的接口入手,用这个接口验证技术方案的可行性。
节奏(Rhythm):受限于开发人数和项目排期等因素,系统优化很难一步到位,所以我们可以设置多个里程碑节点,规划短期、中期、长期目标,这样大目标就被拆成几个小目标逐一实现。
结果(Result):系统优化的结果怎么样,投入了这么多时间和精力到底产出是什么,这是必须要回答和面对的问题。我们可以把哪些预期未达标、哪些流程不顺畅、哪些隐患还存在等问题拿出来逐一检视。
我们把SCQA和上述四个维度进行合并,组成SCQATPRR闭环工具,这个工具可以帮助设计方案减少缺失环节从而形成闭环。
4 文章总结
本文首先分析了SCQA结构化工具,提好一个问题是解决问题的第一步。在初步给出答案后我们可以进行第二步使用金字塔结构组织答案,纵向结构要符合结论先行、以上统下原则,横向结构要符合归纳分组、逻辑递进原则。第三步在落地执行层面,我们提出团队、切点、节奏和结果这四个维度,结合SCQA工具进而组成闭环工具。
需要说明的是结构化思考工具只是一个工具,解决问题的关键还是我们要在本专业领域钻研和精进,也要在平时注意将零散的专业知识进行归纳整理,这样专业知识和工具相结合才会发挥更大的作用,希望本文对大家有所帮助。
欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我个人微信「java_front」一起交流学习

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
云原生的进一步具象化
本文转载自公众号:HelloJava。 云原生这个概念已经越来越深入人心,但对“云原生到底是什么?”这个问题,仍然是各种各样的解读,最近对云原生具体是什么有了点感触,于是写下来分享和探讨下。 我现在认为云原生其实是让众多的公司,通过基于云的产品迅速获得在构建一个现在这个时代的应用(是不是有点像 AWS 一直讲的 Modern Applications)所必需的各种基础能力(如:极强的规模伸缩性、极高的可用性、极低的创新/运营成本、大数据的分析/运营能力等等),而不需要像以前的很多公司,为了具备这些能力,投入巨大,或者用另外一句话说:云原生就是专业的基础能力普惠化,随手可得。 当今时代的应用和多年前的应用面临的状况差别太大,这个差异和当今业务面临的激烈竞争和玩法有很大的关系,我以前一直觉得像阿里在发展过程中积累的很多能力,外面很少有公司会需要,就像当年百亿、千亿美金的公司是多么难才出现,但现在看来则完全不一样,所以这也奠定了当今时代的应用在技术层面能力的要求也远不一样,简单说几个点: 对可用性的要求远高于以前的应用:现在的应用通常一上线对可用性要求就已经不低了,因为一旦出问题就很容易把用...
-
下一篇
Java 中 RMI 的使用
RMI 介绍 RMI (Remote Method Invocation) 模型是一种分布式对象应用,使用 RMI 技术可以使一个 JVM 中的对象,调用另一个 JVM 中的对象方法并获取调用结果。这里的另一个 JVM 可以在同一台计算机也可以是远程计算机。因此,RMI 意味着需要一个 Server 端和一个 Client 端。 Server 端通常会创建一个对象,并使之可以被远程访问。 这个对象被称为远程对象。 Server 端需要注册这个对象可以被 Client 远程访问。 Client 端调用可以被远程访问的对象上的方法,Client 端就可以和 Server 端进行通信并相互传递信息。 说到这里,是不是发现使用 RMI 在构建一个分布式应用时十分方便,它和 RPC 一样可以实现分布式应用之间的互相通信,甚至和现在的微服务思想都十分类似。 RMI 工作原理 正所谓 “知其然知其所以然”,在开始编写 RMI 代码之前,有必要了解一下 RMI 的工作原理,RMI 中 Client 端是和 Server 端是如何通信的呢? 下图的可以帮助我们理解RMI 的工作流程。 从图中可以看到,C...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL数据库在高并发下的优化方案
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- MySQL8.0.19开启GTID主从同步CentOS8