《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 网络 「李号双」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

很多过来人都会告诫新人,编程没有捷径可走,不花费几年时间经过大量实践和刻意练习,怎么能领悟编程的精髓呢?

我曾经也是一名“刻苦”的新人,但几年之后我发现,其实在 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 进行调优。性能的提升是实实在在的成果,我也因此得到了领导的认可。这个过程,让我建立起了自己的知识体系,开始独立设计系统、解决技术难题,逐渐具备了独当一面的能力。

文章目录