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 --- ...\272\277\347\250\213\346\261\240\347\273\204\344\273\266.md" | 2 +- docs/JDK/HashMap.md | 2 +- "docs/JDK/Lock\351\224\201\347\273\204\344\273\266.md" | 2 +- docs/JDK/String.md | 2 +- docs/JDK/Thread.md | 2 +- docs/JDK/ThreadLocal.md | 2 +- ...\236\266\344\270\255\347\232\204\345\272\224\347\224\250.md" | 2 +- ...\240\201\344\270\255\345\255\246\344\273\200\344\271\210.md" | 2 +- .../Netty\346\236\266\346\236\204\350\256\276\350\256\241.md" | 2 +- ...\217\257\351\235\240\346\200\247\350\256\276\350\256\241.md" | 2 +- ...\253\230\346\200\247\350\203\275\344\271\213\351\201\223.md" | 2 +- "docs/Netty/IOTechnologyBase/IO\346\250\241\345\236\213.md" | 2 +- ...\274\226\347\250\213\345\217\212\345\257\271\346\257\224.md" | 2 +- ...\210\260\345\260\276\346\211\257\344\270\200\351\201\215.md" | 2 +- ...246\350\247\243selector\343\200\201poll\345\222\214epoll.md" | 2 +- .../ByteBuf\347\273\204\344\273\266.md" | 2 +- ...peline\345\222\214ChannelHandler\347\273\204\344\273\266.md" | 2 +- .../Channel\345\222\214Unsafe\347\273\204\344\273\266.md" | 2 +- ...ntLoop\345\222\214EventLoopGroup\347\273\204\344\273\266.md" | 2 +- .../Future\345\222\214Promise\347\273\204\344\273\266.md" | 2 +- ...217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" | 2 +- ...217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" | 2 +- ...217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" | 2 +- ...\274\226\350\247\243\347\240\201\346\241\206\346\236\266.md" | 1 - ...\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" | 2 +- ...\256\242\346\210\267\347\253\257\345\274\200\345\217\221.md" | 2 +- ...\234\215\345\212\241\347\253\257\345\274\200\345\217\221.md" | 2 +- docs/Redis/Redis.md | 2 +- ...\256\236\347\216\260\345\217\212\345\210\206\346\236\220.md" | 2 +- ...\272\220\345\256\232\344\275\215\350\277\207\347\250\213.md" | 2 +- ...36\220\345\260\201\350\243\205\346\210\220BeanDefinition.md" | 2 +- ...\201\344\276\235\350\265\226\346\263\250\345\205\245(DI).md" | 2 +- ...31\250\347\232\204\344\270\200\345\244\251(\344\270\212).md" | 2 +- ...vlet-api\346\272\220\347\240\201\350\265\217\346\236\220.md" | 2 +- .../servlet\345\256\271\345\231\250\350\257\246\350\247\243.md" | 2 +- ...\231\250\344\273\243\347\240\201\350\256\276\350\256\241.md" | 2 +- ...\231\250\344\273\243\347\240\201\350\256\276\350\256\241.md" | 2 +- 37 files changed, 36 insertions(+), 37 deletions(-) diff --git "a/docs/JDK/Executor\347\272\277\347\250\213\346\261\240\347\273\204\344\273\266.md" "b/docs/JDK/Executor\347\272\277\347\250\213\346\261\240\347\273\204\344\273\266.md" index 02df792c..d1393361 100644 --- "a/docs/JDK/Executor\347\272\277\347\250\213\346\261\240\347\273\204\344\273\266.md" +++ "b/docs/JDK/Executor\347\272\277\347\250\213\346\261\240\347\273\204\344\273\266.md" @@ -1,4 +1,4 @@ -## 线程池核心组件图解 +## 线程池核心组件图解 看源码之前,先了解一下该组件 最主要的几个 接口、抽象类和实现类的结构关系。 ![avatar](/images/JDK1.8/线程池组件类图.png) diff --git a/docs/JDK/HashMap.md b/docs/JDK/HashMap.md index 67fd67d6..9a00e09e 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\351\224\201\347\273\204\344\273\266.md" "b/docs/JDK/Lock\351\224\201\347\273\204\344\273\266.md" index c4c549ae..680392d7 100644 --- "a/docs/JDK/Lock\351\224\201\347\273\204\344\273\266.md" +++ "b/docs/JDK/Lock\351\224\201\347\273\204\344\273\266.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 753e53e2..fcb5dbe4 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 a9aa6872..51add69f 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 ffe4e4bb..6ee083c7 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\345\271\266\345\217\221\347\274\226\347\250\213\345\234\250\345\220\204\344\270\273\346\265\201\346\241\206\346\236\266\344\270\255\347\232\204\345\272\224\347\224\250.md" "b/docs/LearningExperience/ConcurrentProgramming/Java\345\271\266\345\217\221\347\274\226\347\250\213\345\234\250\345\220\204\344\270\273\346\265\201\346\241\206\346\236\266\344\270\255\347\232\204\345\272\224\347\224\250.md" index b2d74bf9..6f8e128e 100644 --- "a/docs/LearningExperience/ConcurrentProgramming/Java\345\271\266\345\217\221\347\274\226\347\250\213\345\234\250\345\220\204\344\270\273\346\265\201\346\241\206\346\236\266\344\270\255\347\232\204\345\272\224\347\224\250.md" +++ "b/docs/LearningExperience/ConcurrentProgramming/Java\345\271\266\345\217\221\347\274\226\347\250\213\345\234\250\345\220\204\344\270\273\346\265\201\346\241\206\346\236\266\344\270\255\347\232\204\345\272\224\347\224\250.md" @@ -1,4 +1,4 @@ -Spring、Netty、Mybatis 等框架的代码中大量运用了 Java 多线程编程技巧。并发编程处理的恰当与否,将直接影响架构的性能。本章通过对 这些框架源码 的分析,结合并发编程的常用技巧,来讲解多线程编程在这些主流框架中的应用。 +Spring、Netty、Mybatis 等框架的代码中大量运用了 Java 多线程编程技巧。并发编程处理的恰当与否,将直接影响架构的性能。本章通过对 这些框架源码 的分析,结合并发编程的常用技巧,来讲解多线程编程在这些主流框架中的应用。 ## Java内存模型 JVM规范 定义了 Java内存模型 来屏蔽掉各种操作系统、虚拟机实现厂商和硬件的内存访问差异,以确保 Java 程序 在所有操作系统和平台上能够达到一致的内存访问效果。 diff --git "a/docs/LearningExperience/PersonalExperience/\345\210\235\347\272\247\345\274\200\345\217\221\350\200\205\345\272\224\350\257\245\344\273\216spring\346\272\220\347\240\201\344\270\255\345\255\246\344\273\200\344\271\210.md" "b/docs/LearningExperience/PersonalExperience/\345\210\235\347\272\247\345\274\200\345\217\221\350\200\205\345\272\224\350\257\245\344\273\216spring\346\272\220\347\240\201\344\270\255\345\255\246\344\273\200\344\271\210.md" index 7211052b..264c6966 100644 --- "a/docs/LearningExperience/PersonalExperience/\345\210\235\347\272\247\345\274\200\345\217\221\350\200\205\345\272\224\350\257\245\344\273\216spring\346\272\220\347\240\201\344\270\255\345\255\246\344\273\200\344\271\210.md" +++ "b/docs/LearningExperience/PersonalExperience/\345\210\235\347\272\247\345\274\200\345\217\221\350\200\205\345\272\224\350\257\245\344\273\216spring\346\272\220\347\240\201\344\270\255\345\255\246\344\273\200\344\271\210.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\346\236\266\346\236\204\350\256\276\350\256\241.md" "b/docs/Netty/AdvancedFeaturesOfNetty/Netty\346\236\266\346\236\204\350\256\276\350\256\241.md" index 8b816b71..67f7423a 100644 --- "a/docs/Netty/AdvancedFeaturesOfNetty/Netty\346\236\266\346\236\204\350\256\276\350\256\241.md" +++ "b/docs/Netty/AdvancedFeaturesOfNetty/Netty\346\236\266\346\236\204\350\256\276\350\256\241.md" @@ -1,4 +1,4 @@ -本博文用于重点分析 Netty 的逻辑架构及关键的架构质量属性,希望有助于大家从 Netty 的架构设计中汲取营养,设计出高性能、高可靠 +本博文用于重点分析 Netty 的逻辑架构及关键的架构质量属性,希望有助于大家从 Netty 的架构设计中汲取营养,设计出高性能、高可靠 性和可扩展的程序。 ## Netty的三层架构设计 diff --git "a/docs/Netty/AdvancedFeaturesOfNetty/Netty\351\253\230\345\217\257\351\235\240\346\200\247\350\256\276\350\256\241.md" "b/docs/Netty/AdvancedFeaturesOfNetty/Netty\351\253\230\345\217\257\351\235\240\346\200\247\350\256\276\350\256\241.md" index 6ded9ff4..d0e8de79 100644 --- "a/docs/Netty/AdvancedFeaturesOfNetty/Netty\351\253\230\345\217\257\351\235\240\346\200\247\350\256\276\350\256\241.md" +++ "b/docs/Netty/AdvancedFeaturesOfNetty/Netty\351\253\230\345\217\257\351\235\240\346\200\247\350\256\276\350\256\241.md" @@ -1 +1 @@ -努力编写中...... \ No newline at end of file +努力编写中...... \ No newline at end of file diff --git "a/docs/Netty/AdvancedFeaturesOfNetty/Netty\351\253\230\346\200\247\350\203\275\344\271\213\351\201\223.md" "b/docs/Netty/AdvancedFeaturesOfNetty/Netty\351\253\230\346\200\247\350\203\275\344\271\213\351\201\223.md" index 30f24f2a..1a84f609 100644 --- "a/docs/Netty/AdvancedFeaturesOfNetty/Netty\351\253\230\346\200\247\350\203\275\344\271\213\351\201\223.md" +++ "b/docs/Netty/AdvancedFeaturesOfNetty/Netty\351\253\230\346\200\247\350\203\275\344\271\213\351\201\223.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\346\250\241\345\236\213.md" "b/docs/Netty/IOTechnologyBase/IO\346\250\241\345\236\213.md" index dfdecf8d..39691a28 100644 --- "a/docs/Netty/IOTechnologyBase/IO\346\250\241\345\236\213.md" +++ "b/docs/Netty/IOTechnologyBase/IO\346\250\241\345\236\213.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/\345\233\233\347\247\215IO\347\274\226\347\250\213\345\217\212\345\257\271\346\257\224.md" "b/docs/Netty/IOTechnologyBase/\345\233\233\347\247\215IO\347\274\226\347\250\213\345\217\212\345\257\271\346\257\224.md" index 33e483af..083f714d 100644 --- "a/docs/Netty/IOTechnologyBase/\345\233\233\347\247\215IO\347\274\226\347\250\213\345\217\212\345\257\271\346\257\224.md" +++ "b/docs/Netty/IOTechnologyBase/\345\233\233\347\247\215IO\347\274\226\347\250\213\345\217\212\345\257\271\346\257\224.md" @@ -1,4 +1,4 @@ -## 传统的BIO编程 +## 传统的BIO编程 网络编程的基本模型是 Client/Server 模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手建立连接,如果连接建立成功,双方就可以通过网络套接字(Socket) 进行通信。 在基于传统同步阻塞模型开发中,ServerSocket 负责绑定IP 地址,启动监听端口,Socket负责发起连接操作。连接成功之后,双方通过输入和输出流进行同步阻塞式通信。 diff --git "a/docs/Netty/IOTechnologyBase/\346\212\212\350\242\253\350\257\264\347\203\202\347\232\204BIO\343\200\201NIO\343\200\201AIO\345\206\215\344\273\216\345\244\264\345\210\260\345\260\276\346\211\257\344\270\200\351\201\215.md" "b/docs/Netty/IOTechnologyBase/\346\212\212\350\242\253\350\257\264\347\203\202\347\232\204BIO\343\200\201NIO\343\200\201AIO\345\206\215\344\273\216\345\244\264\345\210\260\345\260\276\346\211\257\344\270\200\351\201\215.md" index b99a5ace..a4817578 100644 --- "a/docs/Netty/IOTechnologyBase/\346\212\212\350\242\253\350\257\264\347\203\202\347\232\204BIO\343\200\201NIO\343\200\201AIO\345\206\215\344\273\216\345\244\264\345\210\260\345\260\276\346\211\257\344\270\200\351\201\215.md" +++ "b/docs/Netty/IOTechnologyBase/\346\212\212\350\242\253\350\257\264\347\203\202\347\232\204BIO\343\200\201NIO\343\200\201AIO\345\206\215\344\273\216\345\244\264\345\210\260\345\260\276\346\211\257\344\270\200\351\201\215.md" @@ -1,4 +1,4 @@ -网上关于各种IO的博文已经多到飞起,如果你是大神,可以跳过我这个菜鸟的拙文,本博文没有什么特别NB的东西,只是集百家之长,并且以自己感到简单舒适的方式输出自己的理解,及学习过程中的经验。 +网上关于各种IO的博文已经多到飞起,如果你是大神,可以跳过我这个菜鸟的拙文,本博文没有什么特别NB的东西,只是集百家之长,并且以自己感到简单舒适的方式输出自己的理解,及学习过程中的经验。 ## IO及基本概念 #### 1、流的概念和作用 **流**:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象。 diff --git "a/docs/Netty/IOTechnologyBase/\350\257\246\350\247\243selector\343\200\201poll\345\222\214epoll.md" "b/docs/Netty/IOTechnologyBase/\350\257\246\350\247\243selector\343\200\201poll\345\222\214epoll.md" index 753e53e2..fcb5dbe4 100644 --- "a/docs/Netty/IOTechnologyBase/\350\257\246\350\247\243selector\343\200\201poll\345\222\214epoll.md" +++ "b/docs/Netty/IOTechnologyBase/\350\257\246\350\247\243selector\343\200\201poll\345\222\214epoll.md" @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git "a/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/ByteBuf\347\273\204\344\273\266.md" "b/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/ByteBuf\347\273\204\344\273\266.md" index 753e53e2..fcb5dbe4 100644 --- "a/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/ByteBuf\347\273\204\344\273\266.md" +++ "b/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/ByteBuf\347\273\204\344\273\266.md" @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git "a/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/ChannelPipeline\345\222\214ChannelHandler\347\273\204\344\273\266.md" "b/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/ChannelPipeline\345\222\214ChannelHandler\347\273\204\344\273\266.md" index 753e53e2..fcb5dbe4 100644 --- "a/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/ChannelPipeline\345\222\214ChannelHandler\347\273\204\344\273\266.md" +++ "b/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/ChannelPipeline\345\222\214ChannelHandler\347\273\204\344\273\266.md" @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git "a/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/Channel\345\222\214Unsafe\347\273\204\344\273\266.md" "b/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/Channel\345\222\214Unsafe\347\273\204\344\273\266.md" index 753e53e2..fcb5dbe4 100644 --- "a/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/Channel\345\222\214Unsafe\347\273\204\344\273\266.md" +++ "b/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/Channel\345\222\214Unsafe\347\273\204\344\273\266.md" @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git "a/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/EventLoop\345\222\214EventLoopGroup\347\273\204\344\273\266.md" "b/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/EventLoop\345\222\214EventLoopGroup\347\273\204\344\273\266.md" index 753e53e2..fcb5dbe4 100644 --- "a/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/EventLoop\345\222\214EventLoopGroup\347\273\204\344\273\266.md" +++ "b/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/EventLoop\345\222\214EventLoopGroup\347\273\204\344\273\266.md" @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git "a/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/Future\345\222\214Promise\347\273\204\344\273\266.md" "b/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/Future\345\222\214Promise\347\273\204\344\273\266.md" index 753e53e2..fcb5dbe4 100644 --- "a/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/Future\345\222\214Promise\347\273\204\344\273\266.md" +++ "b/docs/Netty/Netty\344\270\273\350\246\201\347\273\204\344\273\266\346\272\220\347\240\201\345\210\206\346\236\220/Future\345\222\214Promise\347\273\204\344\273\266.md" @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git "a/docs/Netty/Netty\345\244\232\345\215\217\350\256\256\345\274\200\345\217\221/\345\237\272\344\272\216HTTP\345\215\217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" "b/docs/Netty/Netty\345\244\232\345\215\217\350\256\256\345\274\200\345\217\221/\345\237\272\344\272\216HTTP\345\215\217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" index 6ded9ff4..d0e8de79 100644 --- "a/docs/Netty/Netty\345\244\232\345\215\217\350\256\256\345\274\200\345\217\221/\345\237\272\344\272\216HTTP\345\215\217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" +++ "b/docs/Netty/Netty\345\244\232\345\215\217\350\256\256\345\274\200\345\217\221/\345\237\272\344\272\216HTTP\345\215\217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" @@ -1 +1 @@ -努力编写中...... \ No newline at end of file +努力编写中...... \ No newline at end of file diff --git "a/docs/Netty/Netty\345\244\232\345\215\217\350\256\256\345\274\200\345\217\221/\345\237\272\344\272\216WebSocket\345\215\217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" "b/docs/Netty/Netty\345\244\232\345\215\217\350\256\256\345\274\200\345\217\221/\345\237\272\344\272\216WebSocket\345\215\217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" index 6ded9ff4..d0e8de79 100644 --- "a/docs/Netty/Netty\345\244\232\345\215\217\350\256\256\345\274\200\345\217\221/\345\237\272\344\272\216WebSocket\345\215\217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" +++ "b/docs/Netty/Netty\345\244\232\345\215\217\350\256\256\345\274\200\345\217\221/\345\237\272\344\272\216WebSocket\345\215\217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" @@ -1 +1 @@ -努力编写中...... \ No newline at end of file +努力编写中...... \ No newline at end of file diff --git "a/docs/Netty/Netty\345\244\232\345\215\217\350\256\256\345\274\200\345\217\221/\345\237\272\344\272\216\350\207\252\345\256\232\344\271\211\345\215\217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" "b/docs/Netty/Netty\345\244\232\345\215\217\350\256\256\345\274\200\345\217\221/\345\237\272\344\272\216\350\207\252\345\256\232\344\271\211\345\215\217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" index 6ded9ff4..d0e8de79 100644 --- "a/docs/Netty/Netty\345\244\232\345\215\217\350\256\256\345\274\200\345\217\221/\345\237\272\344\272\216\350\207\252\345\256\232\344\271\211\345\215\217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" +++ "b/docs/Netty/Netty\345\244\232\345\215\217\350\256\256\345\274\200\345\217\221/\345\237\272\344\272\216\350\207\252\345\256\232\344\271\211\345\215\217\350\256\256\347\232\204Netty\345\274\200\345\217\221.md" @@ -1 +1 @@ -努力编写中...... \ No newline at end of file +努力编写中...... \ No newline at end of file diff --git "a/docs/Netty/Netty\347\274\226\350\247\243\347\240\201/Java\345\272\217\345\210\227\345\214\226\347\274\272\347\202\271\344\270\216\344\270\273\346\265\201\347\274\226\350\247\243\347\240\201\346\241\206\346\236\266.md" "b/docs/Netty/Netty\347\274\226\350\247\243\347\240\201/Java\345\272\217\345\210\227\345\214\226\347\274\272\347\202\271\344\270\216\344\270\273\346\265\201\347\274\226\350\247\243\347\240\201\346\241\206\346\236\266.md" index 5f282702..e69de29b 100644 --- "a/docs/Netty/Netty\347\274\226\350\247\243\347\240\201/Java\345\272\217\345\210\227\345\214\226\347\274\272\347\202\271\344\270\216\344\270\273\346\265\201\347\274\226\350\247\243\347\240\201\346\241\206\346\236\266.md" +++ "b/docs/Netty/Netty\347\274\226\350\247\243\347\240\201/Java\345\272\217\345\210\227\345\214\226\347\274\272\347\202\271\344\270\216\344\270\273\346\265\201\347\274\226\350\247\243\347\240\201\346\241\206\346\236\266.md" @@ -1 +0,0 @@ - \ No newline at end of file diff --git "a/docs/Netty/TCP\347\262\230\346\213\206\345\214\205/TCP\347\262\230\346\213\206\345\214\205\351\227\256\351\242\230\345\217\212Netty\344\270\255\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" "b/docs/Netty/TCP\347\262\230\346\213\206\345\214\205/TCP\347\262\230\346\213\206\345\214\205\351\227\256\351\242\230\345\217\212Netty\344\270\255\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" index aeb2c5d2..786d8e6f 100644 --- "a/docs/Netty/TCP\347\262\230\346\213\206\345\214\205/TCP\347\262\230\346\213\206\345\214\205\351\227\256\351\242\230\345\217\212Netty\344\270\255\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" +++ "b/docs/Netty/TCP\347\262\230\346\213\206\345\214\205/TCP\347\262\230\346\213\206\345\214\205\351\227\256\351\242\230\345\217\212Netty\344\270\255\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" @@ -1,4 +1,4 @@ -## TCP粘包/拆包 +## TCP粘包/拆包 熟悉 TCP编程 的都知道,无论是服务端还是客户端,当我们读取或者发送消息的时候,都需要考虑 TCP底层 的 粘包/拆包机制。TCP粘包/拆包问题,在功能测试时往往不会怎么出现,而一旦并发压力上来,或者发送大报文之后,就很容易出现 粘包 / 拆包问题。如果代码没有考虑,往往就会出现解码错位或者错误,导致程序不能正常工作。本篇博文,我们先简单了解 TCP粘包/拆包 的基础知识,然后来看看 Netty 是如何解决这个问题的。 ### TCP粘包/拆包问题说明 diff --git "a/docs/Netty/\345\237\272\344\272\216Netty\345\274\200\345\217\221\346\234\215\345\212\241\347\253\257\345\217\212\345\256\242\346\210\267\347\253\257/\345\237\272\344\272\216Netty\347\232\204\345\256\242\346\210\267\347\253\257\345\274\200\345\217\221.md" "b/docs/Netty/\345\237\272\344\272\216Netty\345\274\200\345\217\221\346\234\215\345\212\241\347\253\257\345\217\212\345\256\242\346\210\267\347\253\257/\345\237\272\344\272\216Netty\347\232\204\345\256\242\346\210\267\347\253\257\345\274\200\345\217\221.md" index 86de4334..cb4743bb 100644 --- "a/docs/Netty/\345\237\272\344\272\216Netty\345\274\200\345\217\221\346\234\215\345\212\241\347\253\257\345\217\212\345\256\242\346\210\267\347\253\257/\345\237\272\344\272\216Netty\347\232\204\345\256\242\346\210\267\347\253\257\345\274\200\345\217\221.md" +++ "b/docs/Netty/\345\237\272\344\272\216Netty\345\274\200\345\217\221\346\234\215\345\212\241\347\253\257\345\217\212\345\256\242\346\210\267\347\253\257/\345\237\272\344\272\216Netty\347\232\204\345\256\242\346\210\267\347\253\257\345\274\200\345\217\221.md" @@ -1,4 +1,4 @@ -相对于服务端,Netty客户端 的创建更加复杂,除了要考虑线程模型、异步连接、客户端连接超时等因素外,还需要对连接过程中的各种异常进行考虑。本章将对 Netty客户端 创建的关键流程和源码进行分析,以期读者能够了解客户端创建的细节。 +相对于服务端,Netty客户端 的创建更加复杂,除了要考虑线程模型、异步连接、客户端连接超时等因素外,还需要对连接过程中的各种异常进行考虑。本章将对 Netty客户端 创建的关键流程和源码进行分析,以期读者能够了解客户端创建的细节。 ## 基于 Netty 创建客户端的流程分析 Netty 为了向使用者屏蔽 NIO通信 的底层细节,在和用户交互的边界做了封装,目的就是为了减少用户开发工作量,降低开发难度。Bootstrap 是 Socket 客户端创建工具类,用户通过 Bootstrap 可以方便地创建 Netty 的客户端并发起 异步TCP连接操作。 diff --git "a/docs/Netty/\345\237\272\344\272\216Netty\345\274\200\345\217\221\346\234\215\345\212\241\347\253\257\345\217\212\345\256\242\346\210\267\347\253\257/\345\237\272\344\272\216Netty\347\232\204\346\234\215\345\212\241\347\253\257\345\274\200\345\217\221.md" "b/docs/Netty/\345\237\272\344\272\216Netty\345\274\200\345\217\221\346\234\215\345\212\241\347\253\257\345\217\212\345\256\242\346\210\267\347\253\257/\345\237\272\344\272\216Netty\347\232\204\346\234\215\345\212\241\347\253\257\345\274\200\345\217\221.md" index 1a6a6a91..adc6c26d 100644 --- "a/docs/Netty/\345\237\272\344\272\216Netty\345\274\200\345\217\221\346\234\215\345\212\241\347\253\257\345\217\212\345\256\242\346\210\267\347\253\257/\345\237\272\344\272\216Netty\347\232\204\346\234\215\345\212\241\347\253\257\345\274\200\345\217\221.md" +++ "b/docs/Netty/\345\237\272\344\272\216Netty\345\274\200\345\217\221\346\234\215\345\212\241\347\253\257\345\217\212\345\256\242\346\210\267\347\253\257/\345\237\272\344\272\216Netty\347\232\204\346\234\215\345\212\241\347\253\257\345\274\200\345\217\221.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 753e53e2..fcb5dbe4 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\346\272\220\347\240\201\345\256\236\347\216\260\345\217\212\345\210\206\346\236\220.md" "b/docs/Spring/AOP/AOP\346\272\220\347\240\201\345\256\236\347\216\260\345\217\212\345\210\206\346\236\220.md" index 1ccb54ca..629e5a6c 100644 --- "a/docs/Spring/AOP/AOP\346\272\220\347\240\201\345\256\236\347\216\260\345\217\212\345\210\206\346\236\220.md" +++ "b/docs/Spring/AOP/AOP\346\272\220\347\240\201\345\256\236\347\216\260\345\217\212\345\210\206\346\236\220.md" @@ -1,4 +1,4 @@ -理论性的文字,我觉得就没必要再扯一遍咯,大道理讲这么多,越听越迷糊。不如直接看源码加注释来的明白痛快。所以话不多说,直接上源码。 +理论性的文字,我觉得就没必要再扯一遍咯,大道理讲这么多,越听越迷糊。不如直接看源码加注释来的明白痛快。所以话不多说,直接上源码。 ## 1 主要的接口 ### 1.1 Advice 通知 diff --git "a/docs/Spring/IoC/1\343\200\201BeanDefinition\347\232\204\350\265\204\346\272\220\345\256\232\344\275\215\350\277\207\347\250\213.md" "b/docs/Spring/IoC/1\343\200\201BeanDefinition\347\232\204\350\265\204\346\272\220\345\256\232\344\275\215\350\277\207\347\250\213.md" index 9c20ad7e..74b3a2d4 100644 --- "a/docs/Spring/IoC/1\343\200\201BeanDefinition\347\232\204\350\265\204\346\272\220\345\256\232\344\275\215\350\277\207\347\250\213.md" +++ "b/docs/Spring/IoC/1\343\200\201BeanDefinition\347\232\204\350\265\204\346\272\220\345\256\232\344\275\215\350\277\207\347\250\213.md" @@ -1,4 +1,4 @@ -## 前言 +## 前言 之前一直想系统的拜读一下 spring 的源码,看看它到底是如何吸引身边的大神们对它的设计赞不绝口,虽然每天工作很忙,每天下班后总感觉脑子内存溢出,想去放松一下,但总是以此为借口,恐怕会一直拖下去。所以每天下班虽然有些疲惫,但还是按住自己啃下这块硬骨头。 spring 源码这种东西真的是一回生二回熟,第一遍会被各种设计模式和繁杂的方法调用搞得晕头转向,不知道看到的这些方法调用的是哪个父类的实现(IoC相关的类图实在太复杂咯,继承体系又深又广),但当你耐下心来多走几遍,会发现越看越熟练,每次都能 get 到新的点。 diff --git "a/docs/Spring/IoC/2\343\200\201\345\260\206bean\350\247\243\346\236\220\345\260\201\350\243\205\346\210\220BeanDefinition.md" "b/docs/Spring/IoC/2\343\200\201\345\260\206bean\350\247\243\346\236\220\345\260\201\350\243\205\346\210\220BeanDefinition.md" index f27fe5ff..f9786c87 100644 --- "a/docs/Spring/IoC/2\343\200\201\345\260\206bean\350\247\243\346\236\220\345\260\201\350\243\205\346\210\220BeanDefinition.md" +++ "b/docs/Spring/IoC/2\343\200\201\345\260\206bean\350\247\243\346\236\220\345\260\201\350\243\205\346\210\220BeanDefinition.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\343\200\201\344\276\235\350\265\226\346\263\250\345\205\245(DI).md" "b/docs/Spring/IoC/4\343\200\201\344\276\235\350\265\226\346\263\250\345\205\245(DI).md" index 9a1be6a8..aa4f1735 100644 --- "a/docs/Spring/IoC/4\343\200\201\344\276\235\350\265\226\346\263\250\345\205\245(DI).md" +++ "b/docs/Spring/IoC/4\343\200\201\344\276\235\350\265\226\346\263\250\345\205\245(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\346\272\220\347\240\201\346\225\205\344\272\213\357\274\210\347\236\216\347\274\226\347\211\210\357\274\211/\351\235\242\347\255\213\345\223\245IoC\345\256\271\345\231\250\347\232\204\344\270\200\345\244\251(\344\270\212).md" "b/docs/Spring/Spring\346\272\220\347\240\201\346\225\205\344\272\213\357\274\210\347\236\216\347\274\226\347\211\210\357\274\211/\351\235\242\347\255\213\345\223\245IoC\345\256\271\345\231\250\347\232\204\344\270\200\345\244\251(\344\270\212).md" index 6197798c..0ef5a706 100644 --- "a/docs/Spring/Spring\346\272\220\347\240\201\346\225\205\344\272\213\357\274\210\347\236\216\347\274\226\347\211\210\357\274\211/\351\235\242\347\255\213\345\223\245IoC\345\256\271\345\231\250\347\232\204\344\270\200\345\244\251(\344\270\212).md" +++ "b/docs/Spring/Spring\346\272\220\347\240\201\346\225\205\344\272\213\357\274\210\347\236\216\347\274\226\347\211\210\357\274\211/\351\235\242\347\255\213\345\223\245IoC\345\256\271\345\231\250\347\232\204\344\270\200\345\244\251(\344\270\212).md" @@ -1,4 +1,4 @@ -引言:庞大的代码量让人心生怠倦,有趣的故事让技术也疯狂。 +引言:庞大的代码量让人心生怠倦,有趣的故事让技术也疯狂。 大家好,我是 IoC 容器家族的第 17 代传人,我们家族世世代代在 spring 商业街上卖烤面筋,大家都叫我“面筋哥”,另外我爹还给我起了个高大上的英文名字,叫“FileSystemXmlApplicationContext”,但有群臭猴子嫌麻烦,就天天叫我的外号,害得我差点忘了自己的本名。不过无所谓咯,只要生意兴隆,这都是小事。 diff --git "a/docs/Tomcat/servlet-api\346\272\220\347\240\201\350\265\217\346\236\220.md" "b/docs/Tomcat/servlet-api\346\272\220\347\240\201\350\265\217\346\236\220.md" index ca8499a8..3965b023 100644 --- "a/docs/Tomcat/servlet-api\346\272\220\347\240\201\350\265\217\346\236\220.md" +++ "b/docs/Tomcat/servlet-api\346\272\220\347\240\201\350\265\217\346\236\220.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\345\256\271\345\231\250\350\257\246\350\247\243.md" "b/docs/Tomcat/servlet\345\256\271\345\231\250\350\257\246\350\247\243.md" index 753e53e2..fcb5dbe4 100644 --- "a/docs/Tomcat/servlet\345\256\271\345\231\250\350\257\246\350\247\243.md" +++ "b/docs/Tomcat/servlet\345\256\271\345\231\250\350\257\246\350\247\243.md" @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git "a/docs/Tomcat/\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204Web\346\234\215\345\212\241\345\231\250\344\273\243\347\240\201\350\256\276\350\256\241.md" "b/docs/Tomcat/\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204Web\346\234\215\345\212\241\345\231\250\344\273\243\347\240\201\350\256\276\350\256\241.md" index 753e53e2..fcb5dbe4 100644 --- "a/docs/Tomcat/\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204Web\346\234\215\345\212\241\345\231\250\344\273\243\347\240\201\350\256\276\350\256\241.md" +++ "b/docs/Tomcat/\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204Web\346\234\215\345\212\241\345\231\250\344\273\243\347\240\201\350\256\276\350\256\241.md" @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file diff --git "a/docs/Tomcat/\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204servlet\345\256\271\345\231\250\344\273\243\347\240\201\350\256\276\350\256\241.md" "b/docs/Tomcat/\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204servlet\345\256\271\345\231\250\344\273\243\347\240\201\350\256\276\350\256\241.md" index 753e53e2..fcb5dbe4 100644 --- "a/docs/Tomcat/\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204servlet\345\256\271\345\231\250\344\273\243\347\240\201\350\256\276\350\256\241.md" +++ "b/docs/Tomcat/\344\270\200\344\270\252\347\256\200\345\215\225\347\232\204servlet\345\256\271\345\231\250\344\273\243\347\240\201\350\256\276\350\256\241.md" @@ -1 +1 @@ -努力编写中... \ No newline at end of file +努力编写中... \ No newline at end of file