面试题:一头牛重800公斤,一座桥承重700公斤,牛应该怎么过桥

欢迎你们关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思惟、职场分享、产品思考等等,同时欢迎你们加我我的微信「java_front」一块儿交流学习java


1 问题分析

在知乎上看到了这个有意思的问题,首先这个问题不是为了考察建筑工程学知识,由于面试者并不是都具备建筑工程学经验。我认为这个问题是在考察三种分析方法:合理性分析、结构化分析、可行性分析。程序员

800公斤牛过承重700公斤桥.jpeg


2 合理性分析

在职场上是容许争论需求和问题合理性的,拒绝掉一个不合理的需求,其实也是在节约资源和成本。例如产品经理提出业务需求,程序员用代码实现业务需求。在代码开发前你们会进行需求评审,首先评估需求合理性,再评估需求实现细节。若是通过充分讨论后,你们以为本次需求不合理或者没法实现,那么本次需求会被拒绝。面试

回到这个问题,一头800公斤的牛要经过承重700公斤的桥,这个需求自己合理吗?那么咱们能够从为何、是否紧急、是否可替代这三个维度提出三个问题:数据库

第一个问题:牛为何要过桥,到底什么事情非要过桥不可,是否具备必要性微信

第二个问题:若是非要过桥,那么这个过桥需求紧急吗?不紧急能够从长计议markdown

第三个问题:有没有什么替代方案,是否能够坐船或者绕路走,若是讨论结果是牛能够绕路走,那么无需再考虑桥的承重问题架构


3 结构化分析

若是通过讨论结果是牛非过桥不可,那么咱们再思考牛怎么过桥的方案。这里可使用结构化思惟,将大问题拆分为小维度,尽可能作到不遗漏和不重复。影响过桥的因素有这几个维度:桥的维度、牛的维度、资源维度、环境维度。框架

桥的维度:加固桥使承重大于800公斤运维

牛的维度:等待牛的体重小于700公斤源码分析

资源维度:使用一台吊机把牛运过去

环境维度:取消环境重力


4 可行性分析

咱们从桥的维度、牛的维度、资源维度、环境维度给出了方案,那么选择哪一个方案呢?这就须要咱们进行可行性评估,因时因地在资源制约下选择当前最合适的方案。

加固桥方案经济成本较高,等待牛的体重小于700公斤时间成本较高,取消环境重力技术难度较高,因此使用一台吊机把牛运过去这个方案目前看来最合适。


5 结构化思惟延伸

结构化思惟的核心思想并不复杂:一件事情能够总结出一个中心思想,这个中心思想能够由三至七个论点支持,每一个论点再能够由三至七个论据支持,基本结构图以下:



对于结构化思惟仅仅分析到这里是不够的,还应该进一步去分析结构化思惟的内在结构,而内在结构咱们能够从横向和纵向两个维度去分析。


5.1 纵向结构

金字塔的纵向结构体现了两个原则:结论先行和以上统下,咱们分别进行分析。

5.1.1 结论先行

结论先行是指开宗明义地展现中心思想,让听众一开始就明白沟通主旨,而若是把中心思想隐藏在沟经过程中,听众可能由于走神或者沟通讯息太多而失焦,根本不知道你在说什么。结论先行具体有如下六个方面:

  • 先重要后次要
  • 先框架后细节
  • 先整体后细分
  • 先论点后论据
  • 先结论后缘由
  • 先结果后过程

假设一个同事代码发布上线后致使系统故障,若是不使用结构化方法是这么表述的:

我看监控发现数据库负载升高,多是没有加索引致使的。我又发现频繁收到重复消息,是否是消息中间件有什么问题?监控还显示建立了大量线程,是否是线程池使用不当致使的?问题排查很难短期获得结论,咱们仍是先回滚代码至上一个版本吧

这位同事中心思想是问题缘由比较难排查,应该先回滚代码再分析问题,可是他把最重要的观点放在最后,不听到最后不知道他要作什么,而若是结论先行应该怎么表述呢?

咱们应当即当回滚代码,由于问题排查比较复杂,仍是先恢复系统再排查问题。可能的问题分三类:第一多是索引使用不当致使的数据库问题,第二多是中间件问题致使大量重复接收消息,第三多是线程池使用不当致使线程大量被建立。等到恢复正常以后咱们依次排查这些问题

咱们比较两段表述不难发现,第二段表述结构清晰不少,信息传达效率显著提高,这就是结论先行的优点所在。


5.1.2 以上统下

以上统下是指任何一个层的思想必须是其下一层思想的总结归纳,咱们分析一个例子进行说明:小王今天须要买牛肉、鸡蛋、萝卜、果汁、白菜、牛奶、青菜、鸡肉、酸奶,但这么多菜品他记不住,请你想办法帮助小王。

第一步咱们要对菜品自下而上进行聚合概括,这是一个找规律的过程。第二步再以上统下进行结构化表达从而帮助记忆。



自下而上聚合咱们不难发现,牛肉、鸡肉、鸡蛋属于肉蛋类,白菜、青菜、萝卜属于蔬菜类,牛奶、果汁、酸奶属于饮品类,这样聚合以后咱们再以上统下进行结构化表达。

上述实例比较简单,由于元素之间的关联性比较容易寻找,可是真实场景是不会这么简单的,元素之间关联性并不容易创建,那么咱们应该如何从中心思想展开至第二层?

金字塔原理推荐使用疑问-回答式对话,经过设问的方式向下展开结构。那么应该问哪几个问题从而涵盖中心思想的要点?咱们能够参考5W2H分析法,尽可能作到要点不缺失:

  • What:是什么、作什么

  • Why:为何、什么缘由

  • Where:在哪里、从哪开始

  • When:开始结束时间、里程碑

  • Who:谁负责、谁来作、谁验收

  • How:怎么作、什么方法、从哪切入

  • How Much:作多少、各项指标是多少

在此模型基础上咱们能够进行简化,从而减小要素的数量,这样更加易于结构化表达和记忆。咱们通常选取What、Why、How这三个核心要素组成2W1H模型。


5.2 横向结构

如今咱们须要思考如何组织论据,这就要使用横向结构的两个原则:归类分组和逻辑递进。咱们分别进行分析。

5.2.1 归类分组

(1) 概括推理

咱们通常用概括推理和演绎推理两种方法进行归类分组,咱们先看概括推理。

概括推理是指把观察到的事实、规律概括总结为理论。这种推理方法是不严谨的,由于只要观察事实和信息是有限的,那么概括推理出来的结论就不必定是正确的。这就是逻辑错误中常见的一种:错误归因。

欧洲人看到的天鹅都是白色的,那么他们就概括总结说全部的天鹅都是白色的。当一只黑天鹅出现时,这个结论就被证实是错误的,这就是黑天鹅事件。

固然咱们不可能观察到全部事实,收集到全部信息,而通常是为了解决某个具体问题,咱们会收集侧重于某个角度的信息,创建特定模型去分析解决问题,这也不失为一种有效方法。

金字塔原理概括推理通常有如下四种维度:时间维度、结构维度、程度维度、经验维度。时间维度是根据自然时间线进行概括,结构维度根据组织结构进行概括,程度维度是根据程度级别进行概括,经验维度是根据已有经验进行概括。咱们分别来看上述四种维度的几种常见类型:

时间维度
  • 事前、事中、过后
  • 短时间、中期、长期
结构维度
  • 信息部、行政部、人力部
  • 开发组、测试组、运维组
程度维度
  • 高级、中级、初级
  • 重要、次要、不要
经验维度
  • 市场战略3C理论
  • 市场决策4P理论
  • 高扩展、高可用、高性能

咱们选取时间维度和结构维度分析一个实例:怎样减小代码上线错误。从时间维度分析事前须要作好代码测试,事中须要监控关键指标,过后须要进行分析复盘。从结构维度分析开发人员须要作好单元测试,测试人员须要作好边界测试,运维人员须要完善监控平台。

(2) 演绎推理

演绎推理是指根据公理、定理或者本身相信的观念,作出推理或者判断,获得结论。

这种方法从逻辑上来讲是严谨的。命题A是真的,推理出命题B也是真的,那是由于命题B的真实性包含在命题A中。

须要注意在逻辑上严谨,不是说结论必定是正确的。例如本身相信的观念最终被证实是错误的,那么获得结论也就是错误的。

标准式演绎推理分为大前提、小前提和结论:全部小鸟都会飞,这是一只小鸟,因此它会飞。

演绎推理还能够分为现象、缘由和解决方案三个要素:现象是开发代码质量不高,缘由是没有统一代码规约,解决方案是制定统一代码规约。



这是一种自上而下的推理方法,由已知的公理、定理或者观念向下推理。使用这种方法,须要在出现问题的领域有必定的经验和积累。


5.2.2 逻辑递进

逻辑递进是指每种思想须要按照必定顺序进行排列,例如时间维度按照事前、事中、过后进行排列,程度级别按照高级、中级、初级进行排列,这样排列的优势是符合理解和记忆的习惯。


6 文章总结

关于更多结构化思考内容请参看个人文章:结构化思惟如何指导技术系统优化,回答这类问题结论不是最重要的,由于本质上是考察思考方法,因此思考过程才是最重要的。

欢迎你们关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思惟、职场分享、产品思考等等,同时欢迎你们加我我的微信「java_front」一块儿交流学习

相关文章
相关标签/搜索