背景
问题从一杯咖啡开始.
今天我去楼下咖啡机买了一杯「粉黛拿铁」. 制作过程中显示:
我取了做好的粉黛拿铁, 喝了一口, 果然就是一杯热巧克力. 咦咦咦, 说好的拿铁呢? 虽然我对「零点吧」的咖啡评价很高, 觉得味道不亚于星爸爸. 但是不可否认它确实给了我一杯假的拿铁.
现在很多技术专家好比品鉴咖啡的专家. 他们并不需要知道咖啡豆和可可豆的区别, 更不知道这两种植物长在树上是什么样子. 没关系, 这并不影响他们区别一杯咖啡是拿铁, 摩卡还是卡布奇诺. 就好像工作中遇到团队配合的情况, 他们并不需要知道别人团队的产品是怎么实现的, 只需要在他们出问题的时候让他们帮忙解决. 所以, 现在很多工作招高级别的人都要求良好的沟通和推动能力. 技术能力反而考察的没有那么细致.
但是作为技术人员, 了解底层是很重要的. 因为我们不是买咖啡的, 而是生产咖啡机的. 有一天, 咖啡机不工作了, 经过分析监控报警和日志大数据, 终于找到原因: 一粒咖啡豆太小卡到了凹槽里. 清理了这粒咖啡豆, 咖啡机又正常工作了. 这就结束了吗?
不, 我们要复盘, 用 5Why 分析法找到问题的根因.
Q: 为什么咖啡机会不工作?
A: 因为一粒咖啡豆卡在里凹槽里.
Q: 为什么会卡在凹槽里?
A: 因为这粒咖啡豆太小了, 就掉下去了.
Q: 为什么太小了就会掉下去?
A: 因为咖啡豆基本都是圆形, 咖啡豆之间有很大的空隙, 彼此没有压力. 只是受到重力影响, 就掉下去了.
Q: 为什么咖啡豆都是圆形, 不能生产出方形, 彼此紧密契合的咖啡豆吗?
这时候就是后悔不知道咖啡豆到底长在哪种树上的时间了. 不了解所以没有办法做出合理的改变.
现在我们都喜欢用 SpringBoot. 平时工作的好好的, 突然公司要求做一个基础组件的升级, 咦咦咦, 本地运行的好好的. 发布到服务器上跑不起来. 当初搭建开发基础框架的小哥早已离职, 是看着那堆日志发愣呢? 还是了解一下里面的基础概念顺藤摸瓜呢? 废话到此为止.
概念
SpringBoot 是什么?
SpringBoot 是一个框架和编程规范. 它化简了很多个框架和组件的使用, 一站式简单的完成文件配置和应用部署. 因为它内置服务器并装备启动类代码, 可以快速开启一个 web 容器.
Web 容器是什么?
Web 容器是一种可以处理从客户端发出请求的应用程序. 在服务器中一个端口就对应一个提供相应服务的程序. 在 Java 方面, Web 任凭器一般是指 Servlet 容器.
Servlet 是什么?
Servlet 只是一个接口. 它声明了 Servlet 的生命周期的三个基本方法: init(),service()和 destroy().Web 容器会在特定时间调用这些方法. Servlet 是提供了一个标准, 是 J2EE 的 13 个标准接口规范之一.
J2EE 是什么?
J2EE(Java 2 Platfrom, Enterprise Edition)最初是一个为大企业主机级的计算类似而设计的 Java 平台. 这个标准给提供可重用模块组件组件提供了土壤. 就是定义一系列的接口, 你们要实现什么功能都要在这些接口基础上. 根据场景 Java2 平台主要包括标准版 (J2SE), 企业版(J2EE) 和微缩版 (J2ME) 三个版本.
Java2 平台是什么?
Sun 公司在 1998 年发表 JDK1.2 版本的时候, 使用了新名字 Java 2 Platform. 修改后的 JDK 成为 Java 2 Platfrom Software Developing Kit 即 J2SDK.
Web 容器和 Netty 的关系
Web 容器 (如 tomcat,jetty) 主要处理从客户端传过来的消息, 将消息分给 worker 线程来处理. worker 线程做的事情就是通过 Servlet 来做的. 而接受消息线程和 worker 线程之间的协调沟通工作目前主流是 Netty 来做的.
一张图大体表示一下他们的关系:
总结
如果做一件事情很麻烦, 那一定有一个好方法.
来源: https://www.cnblogs.com/xiexj/p/11057008.html