Skip to content

Commit 5d0fc73

Browse files
committed
Update Java Notes
1 parent e65cac2 commit 5d0fc73

File tree

2 files changed

+34
-23
lines changed

2 files changed

+34
-23
lines changed

Java.md

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,14 @@ G-->H[double]
132132
float f2 = (float) d2;//向下转型需要强转
133133
```
134134

135+
```java
136+
int i1 = 1245;
137+
long l1 = i1;
138+
139+
long l2 = 1234;
140+
int i2 = (int) l2;
141+
```
142+
135143
* 隐式类型转换:
136144

137145
字面量 1 是 int 类型,它比 short 类型精度要高,因此不能隐式地将 int 类型向下转型为 short 类型
@@ -144,14 +152,6 @@ G-->H[double]
144152
s1 = (short) (s1 + 1);
145153
```
146154

147-
```java
148-
int i1 = 1245;
149-
long l1 = i1;
150-
151-
long l2 = 1234;
152-
int i2 = (int) l2;
153-
```
154-
155155

156156

157157

@@ -4956,7 +4956,7 @@ public static void main(String[] args){
49564956

49574957
#### HashMap
49584958

4959-
##### 集合概述
4959+
##### 基本介绍
49604960

49614961
HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,主要用来存放键值对
49624962

@@ -4968,6 +4968,13 @@ HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,
49684968
* HashMap中的映射不是有序的,即存取是无序的
49694969
* **key要存储的是自定义对象,需要重写hashCode和equals方法,防止出现地址不同内容相同的key**
49704970

4971+
JDK7对比JDK8:
4972+
4973+
* 7 = 数组 + 链表,8 = 数组 + 链表 + 红黑树
4974+
* 7中是头插法,多线程容易造成环,8中是尾插法
4975+
* 7的扩容是全部数据重新定位,8中是位置不变或者当前位置 + 旧size大小来实现
4976+
* 7是先判断是否要扩容再插入,8中是先插入再看是否要扩容
4977+
49714978
底层数据结构:
49724979

49734980
* 哈希表(Hash table,也叫散列表),根据关键码值(Key value)而直接访问的数据结构。通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做散列函数,存放记录的数组叫做散列表
@@ -12604,7 +12611,7 @@ Java语言提供了对象终止(finalization)机制来允许开发人员提
1260412611

1260512612
### 垃圾回收器
1260612613

12607-
#### GC概述
12614+
#### 概述
1260812615

1260912616
垃圾收集器分类:
1261012617

@@ -12784,7 +12791,8 @@ CMS收集器的关注点是尽可能缩短垃圾收集时用户线程的停顿
1278412791

1278512792
* `-XX:CMSInitiatingoccupanyFraction`:设置堆内存使用率的阈值,一旦达到该阈值,便开始进行回收
1278612793

12787-
* JDK5及以前版本的默认值为68,即当老年代的空间使用率达到68%时,会执行一次CMS回收,JDK6及以上版本默认值为92%
12794+
* JDK5及以前版本的默认值为68,即当老年代的空间使用率达到68%时,会执行一次CMS回收
12795+
* JDK6及以上版本默认值为92%
1278812796

1278912797
* `-XX:+UseCMSCompactAtFullCollection`:用于指定在执行完Full GC后对内存空间进行压缩整理,以此避免内存碎片的产生,由于内存压缩整理过程无法并发执行,所带来的问题就是停顿时间变得更长
1279012798

@@ -12846,7 +12854,7 @@ G1对比其他处理器的优点:
1284612854

1284712855
G1垃圾收集器的缺点:
1284812856

12849-
* 相较于CMS,G1还不具备全方位、压倒性优势。比如在用户程序运行过程中,G1无论是为了垃圾收集产生的内存占用(Footprint)还是程序运行时的额外执行负载(overload)都要比CMS要高
12857+
* 相较于CMS,G1还不具备全方位、压倒性优势。比如在用户程序运行过程中,G1无论是为了垃圾收集产生的内存占用还是程序运行时的额外执行负载都要比CMS要高
1285012858
* 从经验上来说,在小内存应用上CMS的表现大概率会优于G1,而G1在大内存应用上则发挥其优势。平衡点在6-8GB之间
1285112859

1285212860
应用场景:
@@ -19834,19 +19842,19 @@ AQS 核心思想:
1983419842

1983519843
state设计:
1983619844

19837-
* state **使用 volatile 配合 cas** 保证其修改时的原子性
1983819845
* state 使用了 32bit int 来维护同步状态
19839-
* state 表示允许的进入的线程数
19846+
* state **使用 volatile 修饰配合 cas** 保证其修改时的原子性
19847+
* state 表示已经进入的线程数或者许可进入的线程数
1984019848
* state API:
1984119849
`protected final int getState()`:获取 state 状态
1984219850
`protected final void setState(int newState)`:设置 state 状态
1984319851
`protected final boolean compareAndSetState(int expect,int update)`:**CAS**设置 state
1984419852

1984519853
waitstate设计:
1984619854

19847-
* 使用**volatile 配合 cas**保证其修改时的原子性
19855+
* 使用**volatile 修饰配合 cas**保证其修改时的原子性
1984819856

19849-
* Node 节点的几种状态
19857+
* 表示Node节点的状态,有以下几种状态
1985019858

1985119859
```java
1985219860
//由于超时或中断,此节点被取消,不会再改变状态
@@ -21817,7 +21825,7 @@ class ThreadA extends Thread{
2181721825
public void run() {
2181821826
try{
2181921827
sout("线程A,做好了礼物A,等待线程B送来的礼物B");
21820-
//如果等待了5s还没有交换它就去死(抛出异常)!
21828+
//如果等待了5s还没有交换就死亡(抛出异常)!
2182121829
String s = exchanger.exchange("礼物A",5,TimeUnit.SECONDS);
2182221830
sout("线程A收到线程B的礼物:" + s);
2182321831
} catch (Exception e) {
@@ -21833,7 +21841,7 @@ class ThreadB extends Thread{
2183321841
@Override
2183421842
public void run() {
2183521843
try {
21836-
System.out.println("线程B,做好了礼物B,等待线程A送来的礼物A.....");
21844+
sout("线程B,做好了礼物B,等待线程A送来的礼物A.....");
2183721845
// 开始交换礼物。参数是送给其他线程的礼物!
2183821846
sout("线程B收到线程A的礼物:" + exchanger.exchange("礼物B"));
2183921847
} catch (Exception e) {
@@ -22580,13 +22588,16 @@ ConcurrentHashMap 对锁粒度进行了优化,**分段锁技术**,将整张
2258022588

2258122589

2258222590

22583-
### LinkedQueue
22591+
### LinkedQueue
22592+
22593+
(待更新)
2258422594

2258522595
ConcurrentLinkedQueue 的设计与 LinkedBlockingQueue 相似:
2258622596

2258722597
* 两把锁,同一时刻,可以允许两个线程同时(一个生产者与一个消费者)执行
2258822598
* dummy 节点的引入让两把锁将来锁住的是不同对象,避免竞争
22589-
* 只是这锁使用了 cas 来实现
22599+
* 锁使用了 cas 来实现
22600+
* 此队列不允许使用 null 元素
2259022601

2259122602

2259222603

SSM.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1305,9 +1305,9 @@ PageInfo相关API:
13051305

13061306

13071307

1308-
### Assocation实现延迟加载
1308+
### Assocation
13091309

1310-
一对多,多对多
1310+
一对多多对多
13111311

13121312
* 核心配置文件
13131313

@@ -1399,7 +1399,7 @@ PageInfo相关API:
13991399

14001400

14011401

1402-
### Collection实现延迟加载
1402+
### Collection
14031403

14041404
同样在一对多关系配置的<collection>结点中配置延迟加载策略。 <collection>结点中也有select属性,column属性。
14051405

0 commit comments

Comments
 (0)