From 3b599c271f8c68b2b201eefa0995ec7fd5149d91 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Mon, 6 Apr 2020 16:55:31 +0800 Subject: [PATCH] fix: resolve encoding problems --- docs/JDK/Executor线程池组件.md | 2 +- docs/JDK/HashMap.md | 2 +- docs/JDK/Lock锁组件.md | 2 +- docs/JDK/String.md | 2 +- docs/JDK/Thread.md | 2 +- docs/JDK/ThreadLocal.md | 2 +- .../Java并发编程在各主流框架中的应用.md | 2 +- .../初级开发者应该从spring源码中学什么.md | 2 +- docs/Netty/AdvancedFeaturesOfNetty/Netty架构设计.md | 2 +- docs/Netty/AdvancedFeaturesOfNetty/Netty高可靠性设计.md | 2 +- docs/Netty/AdvancedFeaturesOfNetty/Netty高性能之道.md | 2 +- docs/Netty/IOTechnologyBase/IO模型.md | 2 +- docs/Netty/IOTechnologyBase/四种IO编程及对比.md | 2 +- .../把被说烂的BIO、NIO、AIO再从头到尾扯一遍.md | 2 +- docs/Netty/IOTechnologyBase/详解selector、poll和epoll.md | 2 +- docs/Netty/Netty主要组件源码分析/ByteBuf组件.md | 2 +- .../ChannelPipeline和ChannelHandler组件.md | 2 +- .../Netty主要组件源码分析/Channel和Unsafe组件.md | 2 +- .../EventLoop和EventLoopGroup组件.md | 2 +- .../Netty主要组件源码分析/Future和Promise组件.md | 2 +- .../Netty多协议开发/基于HTTP协议的Netty开发.md | 2 +- .../Netty多协议开发/基于WebSocket协议的Netty开发.md | 2 +- .../Netty多协议开发/基于自定义协议的Netty开发.md | 2 +- .../Java序列化缺点与主流编解码框架.md | 1 - .../TCP粘拆包问题及Netty中的解决方案.md | 2 +- .../基于Netty的客户端开发.md | 2 +- .../基于Netty的服务端开发.md | 2 +- docs/Redis/Redis.md | 2 +- docs/Spring/AOP/AOP源码实现及分析.md | 2 +- docs/Spring/IoC/1、BeanDefinition的资源定位过程.md | 2 +- docs/Spring/IoC/2、将bean解析封装成BeanDefinition.md | 2 +- docs/Spring/IoC/4、依赖注入(DI).md | 2 +- .../面筋哥IoC容器的一天(上).md | 2 +- docs/Tomcat/servlet-api源码赏析.md | 2 +- docs/Tomcat/servlet容器详解.md | 2 +- docs/Tomcat/一个简单的Web服务器代码设计.md | 2 +- docs/Tomcat/一个简单的servlet容器代码设计.md | 2 +- 37 files changed, 36 insertions(+), 37 deletions(-) diff --git a/docs/JDK/Executor线程池组件.md b/docs/JDK/Executor线程池组件.md index 02df792..d139336 100644 --- a/docs/JDK/Executor线程池组件.md +++ b/docs/JDK/Executor线程池组件.md @@ -1,4 +1,4 @@ -## 线程池核心组件图解 +## 线程池核心组件图解 看源码之前,先了解一下该组件 最主要的几个 接口、抽象类和实现类的结构关系。 ![avatar](/images/JDK1.8/线程池组件类图.png) diff --git a/docs/JDK/HashMap.md b/docs/JDK/HashMap.md index 67fd67d..9a00e09 100644 --- a/docs/JDK/HashMap.md +++ b/docs/JDK/HashMap.md @@ -1,4 +1,4 @@ -作为工作中最重要、最常用的容器之一,当然还是要自己动手写一篇 HashMap 的源码解析来加深对其的印象咯,而且它的设计与实现 也有很多值得学习的地方。 +作为工作中最重要、最常用的容器之一,当然还是要自己动手写一篇 HashMap 的源码解析来加深对其的印象咯,而且它的设计与实现 也有很多值得学习的地方。 ## 源码赏析 JDK1.8 的HashMap 底层使用的是 动态数组,数组中元素存放的是 链表或红黑树。核心源码如下。 diff --git a/docs/JDK/Lock锁组件.md b/docs/JDK/Lock锁组件.md index c4c549a..680392d 100644 --- a/docs/JDK/Lock锁组件.md +++ b/docs/JDK/Lock锁组件.md @@ -1,4 +1,4 @@ -## 类图结构 +## 类图结构 J.U.C 的锁组件中 类相对较少,从JDK相应的包中也能看出来,下图标记了其中最主要的几个接口和类,也是本文要分析的重点。 ![avatar](/images/JDK1.8/JUC的locks包.png) diff --git a/docs/JDK/String.md b/docs/JDK/String.md index 753e53e..fcb5dbe 100644 --- a/docs/JDK/String.md +++ b/docs/JDK/String.md @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git a/docs/JDK/Thread.md b/docs/JDK/Thread.md index a9aa687..51add69 100644 --- a/docs/JDK/Thread.md +++ b/docs/JDK/Thread.md @@ -1,4 +1,4 @@ -本来想看 ThreadLocal 的源码的,但发现其中最重要的 get/set 方法都是操纵的 Thread类 中的 threadLocals变量 (java.lang.ThreadLocal.ThreadLocalMap),索性先来看一下 Thread 的源码吧,可以留意一下其中与 ThreadLocal 相关的属性,这样下次阅读 ThreadLocal 的核心API时,就能够轻易理解其原理咯。不多BB,直接上硬菜。 +本来想看 ThreadLocal 的源码的,但发现其中最重要的 get/set 方法都是操纵的 Thread类 中的 threadLocals变量 (java.lang.ThreadLocal.ThreadLocalMap),索性先来看一下 Thread 的源码吧,可以留意一下其中与 ThreadLocal 相关的属性,这样下次阅读 ThreadLocal 的核心API时,就能够轻易理解其原理咯。不多BB,直接上硬菜。 实现多线程从本质上都是由 Thread类 来完成的,其源码量很多,本次只看一些常见且重要的部分,源码和解析如下。 ```java diff --git a/docs/JDK/ThreadLocal.md b/docs/JDK/ThreadLocal.md index ffe4e4b..6ee083c 100644 --- a/docs/JDK/ThreadLocal.md +++ b/docs/JDK/ThreadLocal.md @@ -1,4 +1,4 @@ -前面我们分析了 Thread类的源码,有了前面的铺垫,通过源码 理解ThreadLocal的秘密就容易多了。 +前面我们分析了 Thread类的源码,有了前面的铺垫,通过源码 理解ThreadLocal的秘密就容易多了。 ThreadLocal类 提供了 get/set线程局部变量的实现,ThreadLocal成员变量与正常的成员变量不同,每个线程都可以通过 ThreadLocal成员变量 get/set自己的专属值。ThreadLocal实例 通常是类中的私有静态变量,常用于将状态与线程关联,例如:用户ID或事务ID。 ```java diff --git a/docs/LearningExperience/ConcurrentProgramming/Java并发编程在各主流框架中的应用.md b/docs/LearningExperience/ConcurrentProgramming/Java并发编程在各主流框架中的应用.md index b2d74bf..6f8e128 100644 --- a/docs/LearningExperience/ConcurrentProgramming/Java并发编程在各主流框架中的应用.md +++ b/docs/LearningExperience/ConcurrentProgramming/Java并发编程在各主流框架中的应用.md @@ -1,4 +1,4 @@ -Spring、Netty、Mybatis 等框架的代码中大量运用了 Java 多线程编程技巧。并发编程处理的恰当与否,将直接影响架构的性能。本章通过对 这些框架源码 的分析,结合并发编程的常用技巧,来讲解多线程编程在这些主流框架中的应用。 +Spring、Netty、Mybatis 等框架的代码中大量运用了 Java 多线程编程技巧。并发编程处理的恰当与否,将直接影响架构的性能。本章通过对 这些框架源码 的分析,结合并发编程的常用技巧,来讲解多线程编程在这些主流框架中的应用。 ## Java内存模型 JVM规范 定义了 Java内存模型 来屏蔽掉各种操作系统、虚拟机实现厂商和硬件的内存访问差异,以确保 Java 程序 在所有操作系统和平台上能够达到一致的内存访问效果。 diff --git a/docs/LearningExperience/PersonalExperience/初级开发者应该从spring源码中学什么.md b/docs/LearningExperience/PersonalExperience/初级开发者应该从spring源码中学什么.md index 7211052..264c696 100644 --- a/docs/LearningExperience/PersonalExperience/初级开发者应该从spring源码中学什么.md +++ b/docs/LearningExperience/PersonalExperience/初级开发者应该从spring源码中学什么.md @@ -1,4 +1,4 @@ -作为一名初入职场的开发者,最开始是在逛 B 站刷视频时看到的一个 Spring 源码阅读解析,当时作为一个只知道 SSH 和 CRUD 的 boy,看完后心里就两个词儿“卧槽!牛 B 啊!”而且在去年秋招面试阿里时几乎每次都会被面试官问道“有阅读过什么开源框架吗?”每次我都只能一脸便秘的“嗯…,呃…,啊…,木得…”。这在我心里埋下了一个想法,硬着头皮也要把 Spring 框架源码读一遍,再不济也要看看猪是怎么跑的。 +作为一名初入职场的开发者,最开始是在逛 B 站刷视频时看到的一个 Spring 源码阅读解析,当时作为一个只知道 SSH 和 CRUD 的 boy,看完后心里就两个词儿“卧槽!牛 B 啊!”而且在去年秋招面试阿里时几乎每次都会被面试官问道“有阅读过什么开源框架吗?”每次我都只能一脸便秘的“嗯…,呃…,啊…,木得…”。这在我心里埋下了一个想法,硬着头皮也要把 Spring 框架源码读一遍,再不济也要看看猪是怎么跑的。 从 7 月份开始到现在,利用业余时间完成了 Spring 核心实现(IoC、DI、AOP)及重要组件实现(MVC、事务、JDBC)的源码阅读,并输出相关博客 7 篇,在 Spring 源码上做的详细注解也维护到了个人 GitHub 上,并且将其整合到了开源学习社区 Doocs 上。 diff --git a/docs/Netty/AdvancedFeaturesOfNetty/Netty架构设计.md b/docs/Netty/AdvancedFeaturesOfNetty/Netty架构设计.md index 8b816b7..67f7423 100644 --- a/docs/Netty/AdvancedFeaturesOfNetty/Netty架构设计.md +++ b/docs/Netty/AdvancedFeaturesOfNetty/Netty架构设计.md @@ -1,4 +1,4 @@ -本博文用于重点分析 Netty 的逻辑架构及关键的架构质量属性,希望有助于大家从 Netty 的架构设计中汲取营养,设计出高性能、高可靠 +本博文用于重点分析 Netty 的逻辑架构及关键的架构质量属性,希望有助于大家从 Netty 的架构设计中汲取营养,设计出高性能、高可靠 性和可扩展的程序。 ## Netty的三层架构设计 diff --git a/docs/Netty/AdvancedFeaturesOfNetty/Netty高可靠性设计.md b/docs/Netty/AdvancedFeaturesOfNetty/Netty高可靠性设计.md index 6ded9ff..d0e8de7 100644 --- a/docs/Netty/AdvancedFeaturesOfNetty/Netty高可靠性设计.md +++ b/docs/Netty/AdvancedFeaturesOfNetty/Netty高可靠性设计.md @@ -1 +1 @@ -努力编写中...... \ No newline at end of file +努力编写中...... \ No newline at end of file diff --git a/docs/Netty/AdvancedFeaturesOfNetty/Netty高性能之道.md b/docs/Netty/AdvancedFeaturesOfNetty/Netty高性能之道.md index 30f24f2..1a84f60 100644 --- a/docs/Netty/AdvancedFeaturesOfNetty/Netty高性能之道.md +++ b/docs/Netty/AdvancedFeaturesOfNetty/Netty高性能之道.md @@ -1,4 +1,4 @@ -作为一个高性能的 NIO通信框架,Netty 被广泛应用于大数据处理、互联网消息中间件、游戏和金融行业等。大多数应用场景对底层的通信框架都有很高的性能要求,作为综合性能最高的 NIO框架 之一,Netty 可以完全满足不同领域对高性能通信的需求。本章我们将从架构层对 Netty 的高性能设计和关键代码实现进行剖析,看 Netty 是如何支撑高性能网络通信的。 +作为一个高性能的 NIO通信框架,Netty 被广泛应用于大数据处理、互联网消息中间件、游戏和金融行业等。大多数应用场景对底层的通信框架都有很高的性能要求,作为综合性能最高的 NIO框架 之一,Netty 可以完全满足不同领域对高性能通信的需求。本章我们将从架构层对 Netty 的高性能设计和关键代码实现进行剖析,看 Netty 是如何支撑高性能网络通信的。 ## RPC 调用性能模型分析 ### 传统 RPC 调用性能差的原因 diff --git a/docs/Netty/IOTechnologyBase/IO模型.md b/docs/Netty/IOTechnologyBase/IO模型.md index dfdecf8..39691a2 100644 --- a/docs/Netty/IOTechnologyBase/IO模型.md +++ b/docs/Netty/IOTechnologyBase/IO模型.md @@ -1,4 +1,4 @@ -## Linux 网络 IO 模型简介 +## Linux 网络 IO 模型简介 Linux 的内核将所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个fd (file descriptor,文件描述符)。而对一个 socket 的读写也会有相应的描述符,称为 socket fd (socket 描述符),描述符就是一个数字,它指向内核中的一个结构体(文件路径,数据区等一些属性)。根据UNIX网络编程对 I/O模型 的分类,UNIX 提供了5种 I/O模型,分别如下。 #### 1、阻塞IO模型 diff --git a/docs/Netty/IOTechnologyBase/四种IO编程及对比.md b/docs/Netty/IOTechnologyBase/四种IO编程及对比.md index 33e483a..083f714 100644 --- a/docs/Netty/IOTechnologyBase/四种IO编程及对比.md +++ b/docs/Netty/IOTechnologyBase/四种IO编程及对比.md @@ -1,4 +1,4 @@ -## 传统的BIO编程 +## 传统的BIO编程 网络编程的基本模型是 Client/Server 模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手建立连接,如果连接建立成功,双方就可以通过网络套接字(Socket) 进行通信。 在基于传统同步阻塞模型开发中,ServerSocket 负责绑定IP 地址,启动监听端口,Socket负责发起连接操作。连接成功之后,双方通过输入和输出流进行同步阻塞式通信。 diff --git a/docs/Netty/IOTechnologyBase/把被说烂的BIO、NIO、AIO再从头到尾扯一遍.md b/docs/Netty/IOTechnologyBase/把被说烂的BIO、NIO、AIO再从头到尾扯一遍.md index b99a5ac..a481757 100644 --- a/docs/Netty/IOTechnologyBase/把被说烂的BIO、NIO、AIO再从头到尾扯一遍.md +++ b/docs/Netty/IOTechnologyBase/把被说烂的BIO、NIO、AIO再从头到尾扯一遍.md @@ -1,4 +1,4 @@ -网上关于各种IO的博文已经多到飞起,如果你是大神,可以跳过我这个菜鸟的拙文,本博文没有什么特别NB的东西,只是集百家之长,并且以自己感到简单舒适的方式输出自己的理解,及学习过程中的经验。 +网上关于各种IO的博文已经多到飞起,如果你是大神,可以跳过我这个菜鸟的拙文,本博文没有什么特别NB的东西,只是集百家之长,并且以自己感到简单舒适的方式输出自己的理解,及学习过程中的经验。 ## IO及基本概念 #### 1、流的概念和作用 **流**:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象。 diff --git a/docs/Netty/IOTechnologyBase/详解selector、poll和epoll.md b/docs/Netty/IOTechnologyBase/详解selector、poll和epoll.md index 753e53e..fcb5dbe 100644 --- a/docs/Netty/IOTechnologyBase/详解selector、poll和epoll.md +++ b/docs/Netty/IOTechnologyBase/详解selector、poll和epoll.md @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git a/docs/Netty/Netty主要组件源码分析/ByteBuf组件.md b/docs/Netty/Netty主要组件源码分析/ByteBuf组件.md index 753e53e..fcb5dbe 100644 --- a/docs/Netty/Netty主要组件源码分析/ByteBuf组件.md +++ b/docs/Netty/Netty主要组件源码分析/ByteBuf组件.md @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git a/docs/Netty/Netty主要组件源码分析/ChannelPipeline和ChannelHandler组件.md b/docs/Netty/Netty主要组件源码分析/ChannelPipeline和ChannelHandler组件.md index 753e53e..fcb5dbe 100644 --- a/docs/Netty/Netty主要组件源码分析/ChannelPipeline和ChannelHandler组件.md +++ b/docs/Netty/Netty主要组件源码分析/ChannelPipeline和ChannelHandler组件.md @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git a/docs/Netty/Netty主要组件源码分析/Channel和Unsafe组件.md b/docs/Netty/Netty主要组件源码分析/Channel和Unsafe组件.md index 753e53e..fcb5dbe 100644 --- a/docs/Netty/Netty主要组件源码分析/Channel和Unsafe组件.md +++ b/docs/Netty/Netty主要组件源码分析/Channel和Unsafe组件.md @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git a/docs/Netty/Netty主要组件源码分析/EventLoop和EventLoopGroup组件.md b/docs/Netty/Netty主要组件源码分析/EventLoop和EventLoopGroup组件.md index 753e53e..fcb5dbe 100644 --- a/docs/Netty/Netty主要组件源码分析/EventLoop和EventLoopGroup组件.md +++ b/docs/Netty/Netty主要组件源码分析/EventLoop和EventLoopGroup组件.md @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git a/docs/Netty/Netty主要组件源码分析/Future和Promise组件.md b/docs/Netty/Netty主要组件源码分析/Future和Promise组件.md index 753e53e..fcb5dbe 100644 --- a/docs/Netty/Netty主要组件源码分析/Future和Promise组件.md +++ b/docs/Netty/Netty主要组件源码分析/Future和Promise组件.md @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git a/docs/Netty/Netty多协议开发/基于HTTP协议的Netty开发.md b/docs/Netty/Netty多协议开发/基于HTTP协议的Netty开发.md index 6ded9ff..d0e8de7 100644 --- a/docs/Netty/Netty多协议开发/基于HTTP协议的Netty开发.md +++ b/docs/Netty/Netty多协议开发/基于HTTP协议的Netty开发.md @@ -1 +1 @@ -努力编写中...... \ No newline at end of file +努力编写中...... \ No newline at end of file diff --git a/docs/Netty/Netty多协议开发/基于WebSocket协议的Netty开发.md b/docs/Netty/Netty多协议开发/基于WebSocket协议的Netty开发.md index 6ded9ff..d0e8de7 100644 --- a/docs/Netty/Netty多协议开发/基于WebSocket协议的Netty开发.md +++ b/docs/Netty/Netty多协议开发/基于WebSocket协议的Netty开发.md @@ -1 +1 @@ -努力编写中...... \ No newline at end of file +努力编写中...... \ No newline at end of file diff --git a/docs/Netty/Netty多协议开发/基于自定义协议的Netty开发.md b/docs/Netty/Netty多协议开发/基于自定义协议的Netty开发.md index 6ded9ff..d0e8de7 100644 --- a/docs/Netty/Netty多协议开发/基于自定义协议的Netty开发.md +++ b/docs/Netty/Netty多协议开发/基于自定义协议的Netty开发.md @@ -1 +1 @@ -努力编写中...... \ No newline at end of file +努力编写中...... \ No newline at end of file diff --git a/docs/Netty/Netty编解码/Java序列化缺点与主流编解码框架.md b/docs/Netty/Netty编解码/Java序列化缺点与主流编解码框架.md index 5f28270..e69de29 100644 --- a/docs/Netty/Netty编解码/Java序列化缺点与主流编解码框架.md +++ b/docs/Netty/Netty编解码/Java序列化缺点与主流编解码框架.md @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/Netty/TCP粘拆包/TCP粘拆包问题及Netty中的解决方案.md b/docs/Netty/TCP粘拆包/TCP粘拆包问题及Netty中的解决方案.md index aeb2c5d..786d8e6 100644 --- a/docs/Netty/TCP粘拆包/TCP粘拆包问题及Netty中的解决方案.md +++ b/docs/Netty/TCP粘拆包/TCP粘拆包问题及Netty中的解决方案.md @@ -1,4 +1,4 @@ -## TCP粘包/拆包 +## TCP粘包/拆包 熟悉 TCP编程 的都知道,无论是服务端还是客户端,当我们读取或者发送消息的时候,都需要考虑 TCP底层 的 粘包/拆包机制。TCP粘包/拆包问题,在功能测试时往往不会怎么出现,而一旦并发压力上来,或者发送大报文之后,就很容易出现 粘包 / 拆包问题。如果代码没有考虑,往往就会出现解码错位或者错误,导致程序不能正常工作。本篇博文,我们先简单了解 TCP粘包/拆包 的基础知识,然后来看看 Netty 是如何解决这个问题的。 ### TCP粘包/拆包问题说明 diff --git a/docs/Netty/基于Netty开发服务端及客户端/基于Netty的客户端开发.md b/docs/Netty/基于Netty开发服务端及客户端/基于Netty的客户端开发.md index 86de433..cb4743b 100644 --- a/docs/Netty/基于Netty开发服务端及客户端/基于Netty的客户端开发.md +++ b/docs/Netty/基于Netty开发服务端及客户端/基于Netty的客户端开发.md @@ -1,4 +1,4 @@ -相对于服务端,Netty客户端 的创建更加复杂,除了要考虑线程模型、异步连接、客户端连接超时等因素外,还需要对连接过程中的各种异常进行考虑。本章将对 Netty客户端 创建的关键流程和源码进行分析,以期读者能够了解客户端创建的细节。 +相对于服务端,Netty客户端 的创建更加复杂,除了要考虑线程模型、异步连接、客户端连接超时等因素外,还需要对连接过程中的各种异常进行考虑。本章将对 Netty客户端 创建的关键流程和源码进行分析,以期读者能够了解客户端创建的细节。 ## 基于 Netty 创建客户端的流程分析 Netty 为了向使用者屏蔽 NIO通信 的底层细节,在和用户交互的边界做了封装,目的就是为了减少用户开发工作量,降低开发难度。Bootstrap 是 Socket 客户端创建工具类,用户通过 Bootstrap 可以方便地创建 Netty 的客户端并发起 异步TCP连接操作。 diff --git a/docs/Netty/基于Netty开发服务端及客户端/基于Netty的服务端开发.md b/docs/Netty/基于Netty开发服务端及客户端/基于Netty的服务端开发.md index 1a6a6a9..adc6c26 100644 --- a/docs/Netty/基于Netty开发服务端及客户端/基于Netty的服务端开发.md +++ b/docs/Netty/基于Netty开发服务端及客户端/基于Netty的服务端开发.md @@ -1,4 +1,4 @@ -## Netty 服务端创建源码分析 +## Netty 服务端创建源码分析 当我们直接使用 JDK 的 NIO类库 开发基于 NIO 的异步服务端时,需要用到 多路复用器Selector、ServerSocketChannel、SocketChannel、ByteBuffer、SelectionKey 等,相比于传统的 BIO开发,NIO 的开发要复杂很多,开发出稳定、高性能的异步通信框架,一直是个难题。Netty 为了向使用者屏蔽 NIO通信 的底层细节,在和用户交互的边界做了封装,目的就是为了减少用户开发工作量,降低开发难度。ServerBootstrap 是 Socket服务端 的启动辅助类,用户通过 ServerBootstrap 可以方便地创建 Netty 的服务端。 ### Netty 服务端创建时序图 diff --git a/docs/Redis/Redis.md b/docs/Redis/Redis.md index 753e53e..fcb5dbe 100644 --- a/docs/Redis/Redis.md +++ b/docs/Redis/Redis.md @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git a/docs/Spring/AOP/AOP源码实现及分析.md b/docs/Spring/AOP/AOP源码实现及分析.md index 1ccb54c..629e5a6 100644 --- a/docs/Spring/AOP/AOP源码实现及分析.md +++ b/docs/Spring/AOP/AOP源码实现及分析.md @@ -1,4 +1,4 @@ -理论性的文字,我觉得就没必要再扯一遍咯,大道理讲这么多,越听越迷糊。不如直接看源码加注释来的明白痛快。所以话不多说,直接上源码。 +理论性的文字,我觉得就没必要再扯一遍咯,大道理讲这么多,越听越迷糊。不如直接看源码加注释来的明白痛快。所以话不多说,直接上源码。 ## 1 主要的接口 ### 1.1 Advice 通知 diff --git a/docs/Spring/IoC/1、BeanDefinition的资源定位过程.md b/docs/Spring/IoC/1、BeanDefinition的资源定位过程.md index 9c20ad7..74b3a2d 100644 --- a/docs/Spring/IoC/1、BeanDefinition的资源定位过程.md +++ b/docs/Spring/IoC/1、BeanDefinition的资源定位过程.md @@ -1,4 +1,4 @@ -## 前言 +## 前言 之前一直想系统的拜读一下 spring 的源码,看看它到底是如何吸引身边的大神们对它的设计赞不绝口,虽然每天工作很忙,每天下班后总感觉脑子内存溢出,想去放松一下,但总是以此为借口,恐怕会一直拖下去。所以每天下班虽然有些疲惫,但还是按住自己啃下这块硬骨头。 spring 源码这种东西真的是一回生二回熟,第一遍会被各种设计模式和繁杂的方法调用搞得晕头转向,不知道看到的这些方法调用的是哪个父类的实现(IoC相关的类图实在太复杂咯,继承体系又深又广),但当你耐下心来多走几遍,会发现越看越熟练,每次都能 get 到新的点。 diff --git a/docs/Spring/IoC/2、将bean解析封装成BeanDefinition.md b/docs/Spring/IoC/2、将bean解析封装成BeanDefinition.md index f27fe5f..f9786c8 100644 --- a/docs/Spring/IoC/2、将bean解析封装成BeanDefinition.md +++ b/docs/Spring/IoC/2、将bean解析封装成BeanDefinition.md @@ -1,4 +1,4 @@ -## 前言 +## 前言 接着上一篇的 BeanDefinition 资源定位开始讲。Spring IoC 容器 BeanDefinition 解析过程就是把用户在配置文件中配置的 bean,解析并封装成 IoC 容器可以装载的 BeanDefinition 对象,BeanDefinition 是 Spring 定义的基本数据结构,其中的属性与配置文件中 bean 的属性相对应。 (PS:可以结合我 GitHub 上对 Spring 框架源码的阅读及个人理解一起看,会更有助于各位开发大佬理解。地址如下。 diff --git a/docs/Spring/IoC/4、依赖注入(DI).md b/docs/Spring/IoC/4、依赖注入(DI).md index 9a1be6a..aa4f173 100644 --- a/docs/Spring/IoC/4、依赖注入(DI).md +++ b/docs/Spring/IoC/4、依赖注入(DI).md @@ -1,4 +1,4 @@ -## 前言 +## 前言 前面我们主要分析了 FileSystemXmlApplicationContext 这个具体的 IoC容器实现类 的初始化源码,在 IoC容器 中建立了 beanName 到 BeanDefinition 的数据映射,通过一个 ConcurrentHashMap。现在我们来看一下 Spring 是如何将 IoC 容器中存在依赖关系的 bean 根据配置联系在一起的。 Spring 中触发 IoC容器“依赖注入” 的方式有两种,一个是应用程序通过 getBean()方法 向容器索要 bean实例 时触发依赖注入;另一个是提前给 bean 配置了 lazy-init 属性为 false,Spring 在 IoC容器 初始化会自动调用此 bean 的 getBean() 方法,提前完成依赖注入。总的来说,想提高运行时获取 bean 的效率,可以考虑配置此属性。 diff --git a/docs/Spring/Spring源码故事(瞎编版)/面筋哥IoC容器的一天(上).md b/docs/Spring/Spring源码故事(瞎编版)/面筋哥IoC容器的一天(上).md index 6197798..0ef5a70 100644 --- a/docs/Spring/Spring源码故事(瞎编版)/面筋哥IoC容器的一天(上).md +++ b/docs/Spring/Spring源码故事(瞎编版)/面筋哥IoC容器的一天(上).md @@ -1,4 +1,4 @@ -引言:庞大的代码量让人心生怠倦,有趣的故事让技术也疯狂。 +引言:庞大的代码量让人心生怠倦,有趣的故事让技术也疯狂。 大家好,我是 IoC 容器家族的第 17 代传人,我们家族世世代代在 spring 商业街上卖烤面筋,大家都叫我“面筋哥”,另外我爹还给我起了个高大上的英文名字,叫“FileSystemXmlApplicationContext”,但有群臭猴子嫌麻烦,就天天叫我的外号,害得我差点忘了自己的本名。不过无所谓咯,只要生意兴隆,这都是小事。 diff --git a/docs/Tomcat/servlet-api源码赏析.md b/docs/Tomcat/servlet-api源码赏析.md index ca8499a..3965b02 100644 --- a/docs/Tomcat/servlet-api源码赏析.md +++ b/docs/Tomcat/servlet-api源码赏析.md @@ -1,4 +1,4 @@ -## Servlet 基础 +## Servlet 基础 ### Servlet 简介 Servlet(Server Applet)是J2EE的内容之一,由 Java 编写的服务器端小程序。它是web请求的入口,主要功能在于交互式地(Request 和 Response)浏览和修改数据,生成动态 Web内容。Servlet 运行于支持 Java的应用服务器中,如 Tomcat。从实现上讲,Servlet 可以响应任何类型的请求,但绝大多数情况下 Servlet 只用来扩展基于 HTTP协议 的 Web服务器。servlet 的工作模式如下: - 客户端发送请求至 WEB服务器; diff --git a/docs/Tomcat/servlet容器详解.md b/docs/Tomcat/servlet容器详解.md index 753e53e..fcb5dbe 100644 --- a/docs/Tomcat/servlet容器详解.md +++ b/docs/Tomcat/servlet容器详解.md @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git a/docs/Tomcat/一个简单的Web服务器代码设计.md b/docs/Tomcat/一个简单的Web服务器代码设计.md index 753e53e..fcb5dbe 100644 --- a/docs/Tomcat/一个简单的Web服务器代码设计.md +++ b/docs/Tomcat/一个简单的Web服务器代码设计.md @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git a/docs/Tomcat/一个简单的servlet容器代码设计.md b/docs/Tomcat/一个简单的servlet容器代码设计.md index 753e53e..fcb5dbe 100644 --- a/docs/Tomcat/一个简单的servlet容器代码设计.md +++ b/docs/Tomcat/一个简单的servlet容器代码设计.md @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file