File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -87,10 +87,10 @@ Netty 的 Zero-copy 体现在如下几个个方面:
8787
8888![ image] ( images/922e67970b6ac7bf78cd43ac61f7aec0.png )
8989
90- ## Epool 触发
90+ ## Epoll 触发
9191
9292 - ` NioChannel ` :是水平触发
93- - ` EpollChannel ` :是边缘触发,Netty 自己触发 Epoll Event
93+ - ` EpollChannel ` :是边缘触发,Netty 为保证数据完整会触发 Epoll Event
9494
9595## [ JDK NIO BUG] ( https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6403933 )
9696
Original file line number Diff line number Diff line change 1+ # Mybatis
Original file line number Diff line number Diff line change 1515
1616理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:
1717
18- - ** 谁依赖于谁** :当然是应用程序依赖于IoC容器;
19- - ** 为什么需要依赖** :应用程序需要IoC容器来提供对象需要的外部资源;
20- - ** 谁注入谁** :很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
21- - ** 注入了什么** :就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。
18+ - ** 谁依赖于谁** :当然是应用程序依赖于IoC容器;
19+ - ** 为什么需要依赖** :应用程序需要IoC容器来提供对象需要的外部资源;
20+ - ** 谁注入谁** :很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
21+ - ** 注入了什么** :就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。
2222
2323IoC和DI由什么关系呢?其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,** 相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”** 。
2424
Original file line number Diff line number Diff line change 55在传统 OOP 编程里以对象为核心,整个软件系统由系列相互依赖的对象所组成,而这些对象将被抽象成一个一个的类,并允许使用类继承来管理类与类之间一般到特殊的关系。随着软件规模的增大,应用的逐渐升级,慢慢出现了一些 OOP 很难解决的问题。
66
77我们可以通过分析、抽象出一系列具有一定属性与行为的对象,并通过这些对象之间的协作来形成一个完整的软件功能。由于对象可以继承,因此我们可以把具有相同功能或相同特性的属性抽象到一个层次分明的类结构体系中。随着软件规范的不断扩大,专业化分工越来越系列,以及 OOP 应用实践的不断增多,随之也暴露出了一些 OOP 无法很好解决的问题。
8+
9+ 现在假设系统中有 3 段完全相似的代码,这些代码通常会采用“复制”、“粘贴”方式来完成,通过这种“复制”、“粘贴”方式开发出来的软件如图 1 所示。
10+
11+ ![ image] ( images/3bef1bcb3f17058a37b698ed19f5d269.png )
12+
13+ 看到如上图所示的示意图,可能有的读者已经发现了这种做法的不足之处:如果有一天,上图中的深色代码段需要修改,那是不是要打开 3 个地方的代码进行修改?如果不是 3 个地方包含这段代码,而是 100 个地方,甚至是 1000 个地方包含这段代码段,那会是什么后果?
14+
15+ 为了解决这个问题,我们通常会采用将如上图所示的深色代码部分定义成一个方法,然后在 3 个代码段中分别调用该方法即可。在这种方式下,软件系统的结构如下图所示。
16+
17+ ![ image] ( images/ce93a1de7bf20653cea82987d6a9f9a4.png )
Original file line number Diff line number Diff line change @@ -64,3 +64,7 @@ default:
6464}
6565...
6666```
67+
68+ ## 参考链接
69+
70+ - [ java注解是怎么实现的?] ( https://www.zhihu.com/question/24401191 )
Original file line number Diff line number Diff line change @@ -31,9 +31,9 @@ HotSpot 内存模型 -- JDK8
3131
3232## 参考链接
3333
34- [ JEP 122: Remove the Permanent Generation] ( http://openjdk.java.net/jeps/122 )
35- [ Java JVM Run-time Data Areas - Javapapers] ( https://javapapers.com/core-java/java-jvm-run-time-data-areas/#Run_time_Constant_Pool )
36- [ JVM Internals] ( http://blog.jamesdbloom.com/JVMInternals.html#constant_pool )
37- [ 深入探究 JVM | Java 的内存区域解析] ( https://www.sczyh30.com/posts/Java/jvm-memory/ )
38- [ The Java Virtual Machine] ( http://www.artima.com/insidejvm/ed2/jvm2.html )
39- [ The Java HotSpot Performance Engine Architecture] ( https://www.oracle.com/technetwork/java/whitepaper-135217.html )
34+ - [ JEP 122: Remove the Permanent Generation] ( http://openjdk.java.net/jeps/122 )
35+ - [ Java JVM Run-time Data Areas - Javapapers] ( https://javapapers.com/core-java/java-jvm-run-time-data-areas/#Run_time_Constant_Pool )
36+ - [ JVM Internals] ( http://blog.jamesdbloom.com/JVMInternals.html#constant_pool )
37+ - [ 深入探究 JVM | Java 的内存区域解析] ( https://www.sczyh30.com/posts/Java/jvm-memory/ )
38+ - [ The Java Virtual Machine] ( http://www.artima.com/insidejvm/ed2/jvm2.html )
39+ - [ The Java HotSpot Performance Engine Architecture] ( https://www.oracle.com/technetwork/java/whitepaper-135217.html )
You can’t perform that action at this time.
0 commit comments