Skip to content

Commit ed168ae

Browse files
committed
增加&修改:ByteBuf容器部分更新完成&修改jdk部分语义错误
1 parent 37867a3 commit ed168ae

File tree

9 files changed

+417
-81
lines changed

9 files changed

+417
-81
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@
113113

114114
- [Transport传输](netty-learning/Transport传输.md)
115115

116-
- [ByteBuf](netty-learning/ByteBuf.md)
116+
- [ByteBuf容器](netty-learning/ByteBuf容器.md)
117117

118118

119119

SUMMARY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@
101101

102102
- [Transport传输](gitbook_doc/netty-learning/Transport传输.md)
103103

104-
- [ByteBuf](gitbook_doc/netty-learning/ByteBuf.md)
104+
- [ByteBuf容器](gitbook_doc/netty-learning/ByteBuf容器.md)
105105

106106

107107
---

gitbook_doc/jdk-jvm-juc/Java常见基础知识点.md

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,9 @@ openjdk8u:
5252

5353
OpenJdk是基于Sum捐赠的HotSpot的源代码开发的,是开源的。
5454
OracleJdk是Oracle对Jdk的商业化版本,由Oracle发布并维护.
55-
因此OracleJdk比OpenJdk更可靠。
55+
因此OracleJdk比OpenJdk更可靠(不过随着版本的迭代,二者之间的差异正在减少)
5656

57+
'
5758
#### Java与C++的异同
5859

5960
- Java和C++都是基于面向对象思想的语言。
@@ -65,6 +66,7 @@ C++则需要开发者手动释放内存。因此Java在内存管理上相对C++
6566

6667
- Java不支持多继承,而C++支持。
6768

69+
6870
#### JVM,JDK和JRE的区别
6971

7072
- JVM: JVM(java virtual machine)是java虚拟机
@@ -73,6 +75,7 @@ C++则需要开发者手动释放内存。因此Java在内存管理上相对C++
7375

7476
- JDK: JDK(java development kit)是java开发工具包,不仅包含了jre和jvm,还提供了javac编译器和javadoc等其他开发所需的工具
7577

78+
7679
#### Java语言的特点
7780

7881
- 面向对象
@@ -90,6 +93,7 @@ C++则需要开发者手动释放内存。因此Java在内存管理上相对C++
9093
- 安全(个人认为所有语言写出来的代码的安全性是开发者决定的,
9194
而不是语言本身决定的,语言能决定的只是提供方便或不便的安全的API)
9295

96+
9397
#### 面向对象的特征
9498
面向对象三大特征:封装,继承,多态。
9599

@@ -105,6 +109,7 @@ C++则需要开发者手动释放内存。因此Java在内存管理上相对C++
105109
**多态的目的是为了程序的可扩展性和维护性。**
106110
在Java中可以使用继承与接口2大特性实现多态。
107111

112+
108113
#### 重载和重写的区别
109114
个人认为重载和重写完全没有可比性,不知道为啥老有人喜欢拿它们做比较。
110115

@@ -113,6 +118,7 @@ C++则需要开发者手动释放内存。因此Java在内存管理上相对C++
113118
- 重写: 重写是描述子类对父类的某个方法的逻辑进行了重新编写,但重写的只是方法的内容,
114119
方法名,参数,类型,顺序,返回值都是不变的。
115120

121+
116122
#### 接口与抽象类的区别
117123

118124
- 接口需要被实现,而抽象类是需要被继承的。
@@ -123,19 +129,21 @@ C++则需要开发者手动释放内存。因此Java在内存管理上相对C++
123129

124130
- 接口是对类的规范,规范的是行为能力。而抽象类是对类的抽象,抽象的是逻辑。
125131

132+
126133
#### Object类的方法有哪些?
127134
1. getClass
128135
2. equals
129136
3. hashCode
130137
4. toString
131138
5. wait
132-
6. wait(long): 让当前对象进入TIMED_WATING状态
133-
7. wait(long,int):让当前对象进入TIMED_WATING状态
139+
6. wait(long): 让当前Thread进入TIMED_WATING状态
140+
7. wait(long,int):让当前Thread进入TIMED_WATING状态
134141
8. notify
135142
9. nofifyAll
136143
10. clone
137144
11. finalize
138145

146+
139147
#### 静态属性方法和成员属性方法区别
140148
**静态属性和方法属于类Class,而成员属性和方法属于实例化的对象。**
141149

@@ -144,6 +152,7 @@ C++则需要开发者手动释放内存。因此Java在内存管理上相对C++
144152

145153
**简单理解就是不允许一个已存在的事物使用一个不存在的事物。**
146154

155+
147156
#### 子类属性与父类属性初始化顺序
148157
1. 无论如何,静态数据首先加载,所以先初始化父类静态变量和静态初始化块(静态变量和静态初始化块按源码编写的顺序执行,
149158
普通初始化块和普通成员变量也是如此),再初始化子类静态变量和静态初始化块。
@@ -152,6 +161,7 @@ C++则需要开发者手动释放内存。因此Java在内存管理上相对C++
152161

153162
3. 调用子类普通代码块,普通成员变量和构造方法。
154163

164+
155165
#### 自动拆箱和装箱
156166
自动拆箱和装箱实际上是Java编译器的一个语法糖。
157167

@@ -171,6 +181,7 @@ C++则需要开发者手动释放内存。因此Java在内存管理上相对C++
171181
包装类的缓存池缓存的范围基本都为: -128 - 127之间,
172182
除了Character的缓存范围为 0 - 127。
173183

184+
174185
#### String为什么不可变?
175186
先说下我的看法:String是Java中最常使用的类没有之一,如果String是可变的,那么会发生非常多数不清的问题。
176187
如ip地址,人名,邮箱非常多的敏感数据。
@@ -184,6 +195,7 @@ String是不可变的,那么它本质上也是线程安全的。
184195
String内部的字段是用final修饰的(我的jdk版本是11,String由byte[]实现),
185196
并且没有对外提供修改字段的方法。这也是为什么String不可变的原理。**
186197

198+
187199
#### final关键字的作用
188200

189201
- 被final修饰的类,不能被继承,并且这个类所有的成员方法都为final,不能被重写。
@@ -193,13 +205,15 @@ String内部的字段是用final修饰的(我的jdk版本是11,String由byte[]
193205

194206
- 被final修饰的方法不能被子类重写。
195207

208+
196209
#### StringBuilder和StringBuffer区别
197210
**StringBuilder和StringBuffer都是可变的字符串,但是StringBuilder是线程不安全的。**
198211

199212
StringBuffer是安全的,因此单线程情况下考虑使用StringBuilder,多线程情况下考虑使用StringBuffer。
200213

201214
**他们之间的关系就好比HashMap和HashTable的关系。**
202215

216+
203217
#### equals知识点
204218

205219
- **== 和 equals区别**:
@@ -229,27 +243,32 @@ StringBuffer是安全的,因此单线程情况下考虑使用StringBuilder,多
229243
试想下,如果2个对象的值相等,但是由于它们是2个对象,hashcode却不相等。
230244
那么即使放入map,set(map)仍会存在重复数据。
231245

246+
232247
#### 深拷贝与浅拷贝
233248
**深拷贝: 拷贝所有的内容,除了基本数据类型的变量复制一份,连引用类型的变量也复制一份。**
234249

235250
**浅拷贝: 复制基本数据类型的变量,对于引用类型的变量,直接返回这个引用本身。**
236251

252+
237253
#### IO流分类
238254

239255
1. 按照流的流向,分为:输入流和输入流。
240256

241257
2. 按照操作单元,分为:字节流和字符流。
242258

259+
243260
#### 使用字节流还是字符流?
244261
考虑通用性,应该使用字节流。
245262
如果只是文本文件的操作,可以使用字符流。
246263

264+
247265
#### BigDecimal
248266
BigDecimal是Java中表示大浮点数的类型。
249267

250268
在Java中,如果遇到浮点数的判断,可以使用BigDecimal来做计算,
251269
因为如果使用普通数据类型很可能会发生精度丢失的情况,这个时候的结果可能会出乎意料之外.
252270

271+
253272
#### Java异常体系结构
254273
在Java中,异常分为 Exception和Error,这2个类都继承自Throwable。
255274

@@ -295,6 +314,7 @@ add.invoke(list, "kl");
295314
System.out.println(list)
296315
```
297316

317+
298318
#### 泛型通配符
299319

300320
**常用的 T,E,K,V,?**
@@ -377,6 +397,7 @@ animals的泛型是父类对象`Animal`,dogs的泛型是子类对象`Dog`,
377397

378398
这段代码看上去好像没什么问题,但是仔细想想。现在animals指向的是一个泛型为Dog的容器,现在又将Cat放进容器中,就相当于在一堆狗里面放进一只猫,这就矛盾了。所以子类泛型**不能**转换为父类泛型,反过来也是一样。
379399

400+
380401
#### 上界通配符 <? extend E>
381402

382403
上界:用extend关键字指定,表示所指定的类型只能是某个类的子类或者这个类本身
@@ -400,6 +421,7 @@ static <K extends Comparable & Serializable> K test(K arg1) {
400421

401422
有多个限定类型用"&"隔开,有多个类型变量用","逗号隔开
402423

424+
403425
#### 下界通配符 <? super E>
404426
下界:用super关键字指定,表示所指定的类型只能是这个类本身或者某个类的父类,直至Object
405427

@@ -460,6 +482,7 @@ T extends A
460482
而是Arrays类内部实现的ArrayList,这个内部类只支持访问和set操作,
461483
并不支持remove,add,clear等修改操作。**
462484

485+
463486
#### Java中引用的类型
464487

465488
Java中引用类型总共有四种: 强引用,软引用,弱引用,虚引用。

gitbook_doc/netty-learning/ByteBuf.md

Lines changed: 0 additions & 70 deletions
This file was deleted.

0 commit comments

Comments
 (0)