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

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


1 问题分析

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

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


2 合理性分析

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

回到这个问题,一头800公斤的牛要通过承重700公斤的桥,这个需求本身合理吗?那么我们可以从为什么、是否紧急、是否可替代这三个维度提出三个问题:

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

第二个问题:如果非要过桥,那么这个过桥需求紧急吗?不紧急可以从长计议

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


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」一起交流学习

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值