Skip to content

Commit f625e26

Browse files
committed
change image
1 parent 35a94e6 commit f625e26

13 files changed

Lines changed: 170 additions & 75 deletions

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ Github项目主页:https://github.com/NotFound9/interviewGuide
4242
- [10.Java中的内部类是怎么样的?](docs/JavaBasic.md#Java中的内部类是怎么样的?)
4343
- [11.Java中的注解是什么?](docs/JavaBasic.md#Java中的注解是什么?)
4444
- [12.为什么hashCode()和equal()方法要一起重写?](docs/JavaBasic.md#为什么hashCode()和equal()方法要一起重写?)
45+
- [13.Java 中有哪些数据类型?](docs/JavaBasic.md#Java 中有哪些数据类型?)
46+
- [14.包装类型和基本类型的区别是什么?](docs/JavaBasic.md#包装类型和基本类型的区别是什么?)
4547
* 容器
4648
- [ArrayList和LinkedList](docs/ArrayList.md)
4749
- [1.ArrayList与LinkedList的区别是什么?](docs/ArrayList.md#ArrayList与LinkedList的区别是什么?)

docs/ArrayList.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
因为ArrayList的插入元素的方法就是裸奔的,直接将原数组index及后面的元素拷贝到index+1及后面的位置上,然后将index位置设置为插入的值,并发修改时保证不了数据安全性,所以也不允许并发修改,一旦检测到并发修改,会抛出ConcurrentModificationException异常。
2828

29-
```
29+
```java
3030
//ArrayList的插入元素的方法
3131
public void add(int index, E element) {
3232
rangeCheckForAdd(index);
@@ -70,7 +70,7 @@ SynchronizedList是一个线程安全的包装类。继承于SynchronizedCollect
7070

7171
使用方法如下
7272

73-
```
73+
```java
7474
LinkedList<Integer> linkedList = new LinkedList<Integer>();
7575
//调用Collections的synchronizedList方法,传入一个linkedList,会返回一个SynchronizedList实例对象
7676
List<Integer> synchronizedList = Collections.synchronizedList(linkedList);
@@ -134,6 +134,8 @@ CopyOnWriteArrayList跟ArrayList类似,都是实现了List接口,只不过
134134

135135
注意事项:Object数组都使用transient修饰是因为transient修饰的属性不会参与序列化,ArrayList通过实现writeObject()和readObject()方法来自定义了序列化方法(基于反序列化时节约空间考虑,如果用默认的序列方法,源elementData数组长度为100,实际只有10个元素,反序列化时也会分配长度为100的数组,造成内存浪费。)
136136

137+
**下面是CopyOnWriteArrayList的add()方法:**
138+
137139
```java
138140
public boolean add(E e) {
139141
final ReentrantLock lock = this.lock;
@@ -371,7 +373,7 @@ public void tranverse() {
371373

372374
**Iterator的源代码**
373375

374-
```
376+
```java
375377
private class Itr implements Iterator<E> {
376378
int cursor; // 游标
377379
int lastRet = -1; // index of last element returned; -1 if no such

docs/HashMap.md

Lines changed: 53 additions & 51 deletions
Large diffs are not rendered by default.

docs/JavaBasic.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525

2626
#### [12.为什么hashCode()和equal()方法要一起重写?](#为什么hashCode()和equal()方法要一起重写?)
2727

28+
#### [13.Java 中有哪些数据类型?](#Java 中有哪些数据类型?)
29+
30+
#### [14.包装类型和基本类型的区别是什么?](#包装类型和基本类型的区别是什么?)
31+
2832

2933
### Java中的多态是什么?
3034

@@ -692,4 +696,22 @@ RuntimeException以外的异常可以认为是编译时异常,从程序语法
692696

693697
##### PS:
694698

695-
@Transaction默认检测异常为RuntimeException及其子类,如果有其他异常需要回滚事务的需要自己手动配置,例如:@Transactional(rollbackFor = Exception.class)
699+
@Transaction默认检测异常为RuntimeException及其子类,如果有其他异常需要回滚事务的需要自己手动配置,例如:@Transactional(rollbackFor = Exception.class)
700+
701+
### Java 中有哪些基本数据类型?
702+
703+
704+
| 类型 | 字节数 | 取值范围 |
705+
| ------- | -------------------------------------------------- | ------------------------------------------------------------ |
706+
| byte | 1字节 | -128~127,也就是-2的7次方到2的7次方减1 |
707+
| short | 2字节 | -32768~32767,就是-2的15次方到2的15次方减1 |
708+
| int | 4字节 | -2147483648~2147483647,-2的31次方到2的31次方减1,换算成十进制应该是有10位,也就是十亿的数量级。 |
709+
| long | 8字节 | -2的63次方到2的31次方,换算成十进制的数,是有19位了, |
710+
| boolean | 理论上1字节就可以满足需求,为了内存对齐一般是4字节 | |
711+
| float | 4字节 | |
712+
| double | 8字节 | |
713+
| char | 2字节 | C语言的char类型其实是1字节,使用anscil编码,取值范围是0~127,有一个2进制位作为数据校验位。Java使用的是unicode编码,16个二进制位。取值范围会大一些,所以用的2字节,可以存汉字。 |
714+
715+
### 包装类型和基本类型的区别是什么?
716+
717+
最主要的区别是包装类型是对象,拥有字段和方法,可以很方便地调用一些基本的方法,初始值是null,而且可以使用null代表空值,而基本数据类型只能使用0来代表初始值。其次是基本数据类型是直接存储在栈中,而包装类型是一个对象,对象的引用变量是存储在栈中,存储了对象在堆中的地址,对象的数据是存在堆中。

0 commit comments

Comments
 (0)