⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《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 进行调优。性能的提升是实实在在的成果,我也因此得到了领导的认可。这个过程,让我建立起了自己的知识体系,开始独立设计系统、解决技术难题,逐渐具备了独当一面的能力。

文章目录