背景

问题从一杯咖啡开始。

今天我去楼下咖啡机买了一杯「粉黛拿铁」。制作过程中显示:

我取了做好的粉黛拿铁,喝了一口,果然就是一杯热巧克力。咦咦咦,说好的拿铁呢?虽然我对「零点吧」的咖啡评价很高,觉得味道不亚于星爸爸。但是不可否认它确实给了我一杯假的拿铁。

现在很多技术专家好比品鉴咖啡的专家。他们并不需要知道咖啡豆和可可豆的区别,更不知道这两种植物长在树上是什么样子。没关系,这并不影响他们区别一杯咖啡是拿铁、摩卡还是卡布奇诺。就好像工作中遇到团队配合的情况,他们并不需要知道别人团队的产品是怎么实现的,只需要在他们出问题的时候让他们帮忙解决。所以,现在很多工作招高级别的人都要求良好的沟通和推动能力。技术能力反而考察的没有那么细致。

但是作为技术人员,了解底层是很重要的。因为我们不是买咖啡的,而是生产咖啡机的。有一天,咖啡机不工作了,经过分析监控报警和日志大数据,终于找到原因:一粒咖啡豆太小卡到了凹槽里。清理了这粒咖啡豆,咖啡机又正常工作了。这就结束了吗?

不,我们要复盘,用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来做的。

一张图大体表示一下他们的关系:

总结

如果做一件事情很麻烦,那一定有一个好方法。

相关阅读

四象限分析法分析你是否适合做管理

复联4里用到的方法论

年纪大了,是否该往管理方向转型?

架构视角 - DDD、TDD、MDD领域驱动、测试驱动还是模型驱动?

你看不懂的spring原理是因为不知道这几个概念的更多相关文章

  1. 跟vczh看实例学编译原理——一:Tinymoe的设计哲学

    自从<序>胡扯了快一个月之后,终于迎来了正片.之所以系列文章叫<看实例学编译原理>,是因为整个系列会通过带大家一步一步实现Tinymoe的过程,来介绍编译原理的一些知识点. 但 ...

  2. 如何写出同事看不懂的Java代码?

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是没更新就是在家忙着带娃的Hydra. 前几天,正巧赶上组里代码review,一下午下来,感觉整个人都血压拉满了.五花八门的代码 ...

  3. 跟vczh看实例学编译原理——三:Tinymoe与无歧义语法分析

    文章中引用的代码均来自https://github.com/vczh/tinymoe.   看了前面的三篇文章,大家应该基本对Tinymoe的代码有一个初步的感觉了.在正确分析"print ...

  4. 小师妹学JVM之:深入理解JIT和编译优化-你看不懂系列

    目录 简介 JIT编译器 Tiered Compilation分层编译 OSR(On-Stack Replacement) Deoptimization 常见的编译优化举例 Inlining内联 Br ...

  5. 我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。

    业务背景 首先,业务需求是这样的,从第三方电商平台拉取所有订单,然后保存到公司自己的数据库,需要判断是否有物流信息,如果有物流信息,还需要再进行上传. 而第三方接口返回的数据是 JSON 格式的,其中 ...

  6. 探究Spring原理

    探究Spring原理 探究IoC原理 首先我们大致了解一下ApplicationContext的加载流程: 我们可以看到,整个过程极为复杂,一句话肯定是无法解释的,所以我们就从ApplicationC ...

  7. 跟vczh看实例学编译原理——二:实现Tinymoe的词法分析

    文章中引用的代码均来自https://github.com/vczh/tinymoe.   实现Tinymoe的第一步自然是一个词法分析器.词法分析其所作的事情很简单,就是把一份代码分割成若干个tok ...

  8. 跟vczh看实例学编译原理——零:序言

    在<如何设计一门语言>里面,我讲了一些语言方面的东西,还有痛快的喷了一些XX粉什么的.不过单纯讲这个也是很无聊的,所以我开了这个<跟vczh看实例学编译原理>系列,意在科普一些 ...

  9. spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包

    下载spring http://spring.io/ 最重要是在特征下面的这段话,需要注意: All avaible features and modules are described in the ...

随机推荐

  1. Linux命令-grep,sed,awk

    grep (global search regular expression[RE] and print out the line) 正则表达式全局搜索并将行打印出来 在文件中查找包含字符串" ...

  2. 通过 Drone Rest API 获取构建记录日志

    Drone是一款CICD工具,提供rest API,简单介绍下如何使用API 获取构建日志. 获取token 登录进入drone,点头像,在菜单里选择token 复制token即可 API 介绍 Dr ...

  3. 【AHOI 2013】差异

    Problem Description 给定一个长度为 \(n\) 的字符串 \(S\),令 \(T_i\) 表示它从第 \(i\) 个字符开始的后缀.求 \(\sum_{1\leqslant i&l ...

  4. Redis 的常用命令

    Redis 的数据类型 一些命令需要结合 redis 的数据类型来说. Redis 4.0 之前有5种数据类型,分别是:字符串(string).散列(hash).列表(list).集合(set).有序 ...

  5. BOM对象——Location

    BOM对象--location <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...

  6. RecyclerView 添加自定义分割线

    默认的浅灰色的分割线在某些时候并不能满足我们的要求,这时就需要自定义分割线了. 我们可以通过两种方式来实现:调用 DividerItemDecoration.setDrawable 方法或者继承实现 ...

  7. SAP中的数据库表索引

    数据库表中的索引可以加快查询的速度.索引是数据库表字段的有序副本.附加的字段包含指向真实数据库表行的指针.排序可以使访问表行的速度变快,例如,可以使用二分搜索.数据库表至少有一个主索引,由它的key字 ...

  8. 利用keras自带房价数据集进行房价预测

    import numpy as np from keras.datasets import boston_housing from keras import layers from keras imp ...

  9. UWP 利用VisualTreeHelper查找页面中的元素

    一般我们在展示数据的时候,都会采用DataTemplate的预先设置数据模板,再使用Set ItemsSource的方式进行数据绑定 这样就能满足大部分的需求. 不过有时候需要对页面已经展示出来的元素 ...

  10. [转载] redis学习入门 Redis 3.2.100

    参考博客: https://blog.csdn.net/flyer_tang/article/details/80320974 https://blog.csdn.net/weixin_3077313 ...