来面试的都是什么妖魔,中间件都不会
共 3307字,需浏览 7分钟
·
2021-11-15 05:51
大家好,我是Guide!
今天推荐一个质量很高的 Tomcat 相关的极客时间专栏!实话说,这个专栏真心不错,强烈安利!👍
不光可以加深自己对于 Tomcat 的理解,还能提高自己对于系统架构、性能优化等领域的认识。
下面是我自己学习这个专栏的时候做的笔记:
下面是正文。
很多过来人都会告诫新人,编程没有捷径可走,不花费几年时间经过大量实践和刻意练习,怎么能领悟编程的精髓呢?
我曾经也是一名“刻苦”的新人,但几年之后我发现,其实在 Java 的学习上,同样逃不开”二八原则“,即掌握 20% 的知识,就能解决 80% 的问题。说实话,这样的思维方式让我在之后的 Java 学习之路上受益很大。
想来,实习那会儿我还没搞 Java,后来觉得机会多才转过去,发现上手还挺快,API 比较齐全,也不需要自己来管理内存。毕业后顺利找到了一份 Java 开发工作,主要就是实现一些小模块,很多时候通过代码复制粘贴,再稍微改改就能完成,这样的状态大概持续了一年。
这个过程,虽然让我对 Java 语法更加熟悉了,但很少有机会运用一些 Java 的高级特性,那时如果让我独立设计一个系统,我肯定懵逼。Web 框架也一样,我也只是知道这样用是 ok 的,但不知道它背后的原理,更不用提类似「浏览器的请求是怎么跟 Spring 中的代码联系起来的」这样的问题了。
这时我才发现,自己在知识体系上的欠缺。但 Java 知识体系很庞大,我该专注于哪一方面呢?
后来,一个偶然的机会,我知道了 Tomcat 和 Jetty 这样的 Web 容器,觉得很神奇,只要把 Web 应用打成 WAR 包放到它的目录下,启动起来就能通过浏览器来访问了。
那 Web 容器是如何工作的呢?带着这份好奇心,我决定深入研究 Tomcat。在掌握了原理之后,我才知道,Servlet 技术是 Web 开发的原点,几乎所有 Java Web 框架(比如 Spring)都是基于 Servlet 的封装,Spring 应用本身就是一个 Servlet,而 Tomcat 和 Jetty 这样的 Web 容器,就是负责加载和运行 Servlet 的。
通过下面这张图,你可以理解 Tomcat/Jetty 在 Web 开发中的位置。
随着学习的深入,我发现 Tomcat 和 Jetty 用到了不少 Java 高级技术,比如 Java 多线程并发编程、Socket 网络编程以及反射等等。之前为了面试,我也背过一些题,但总感觉“知道”和“会用”之间存在一道鸿沟。而通过学习 Tomcat 和 Jetty 源码,让我了解到,该在什么样的场景下去用这些技术,这一点至关重要。
在掌握了 Web 容器和 JVM 工作原理后,我开始解决线上的疑难杂症,并尝试对线上的 Tomcat 进行调优。性能的提升是实实在在的成果,我也因此得到了领导的认可。这个过程,让我建立起了自己的知识体系,开始独立设计系统、解决技术难题,逐渐具备了独当一面的能力。
如果我能做到,那么,你也可以。为了让你少走弯路,分享一个帮了我不少的专栏《深入拆解 Tomcat & Jetty》,作者是 eBay 技术主管李号双,他在 eBay 负责付款系统的可靠性、稳定性和高可用,系统采用定制版的 Tomcat 运行大规模微服务实例,对 Tomcat 和 Jetty 源码非常了解,具有丰富的容器化上云,线上问题定位和调优经验。
第二阶段:掌握 Tomcat 和 Jetty 的整体架构:从 Tomcat 的 Jetty 的总体架构全貌逐步深入到各个组件,重点关注组件的工作原理和设计思路,通过源码的剖析,加深你的理解,实战优化 Tomcat 启动速度。
第三阶段:深入讲解连接器、容器和通用组件的详细设计和工作原理:
连接器:
Tomcat 如何实现非阻塞和异步 I/O 通信、如何扩展 Java 原生线程池、如何支持 WebSocket; 详解 Jetty 的线程策略 EatWhatYouKill; 总结 Tomcat 和 Jetty 的对象池技术以及高并发高性能之道。
容器:
讨论 Tomcat 的热加载热部署、类加载机制、Web 应用的隔离以及如何实现 Servlet 规范、如何实现异步 Servlet; 探讨 Jetty 如何实现带有上下文信息的责任链; 总结 Tomcat 和 Jetty 运用的设计模式。