Skip to content

Commit 9b2e066

Browse files
committed
Update Java Notes
1 parent 790c625 commit 9b2e066

File tree

4 files changed

+53
-52
lines changed

4 files changed

+53
-52
lines changed

DB.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4728,7 +4728,14 @@ Innodb_xxxx:这几个参数只是针对InnoDB 存储引擎的,累加的算
47284728

47294729
#### 定位低效
47304730

4731-
慢 SQL 由三种原因造成:索引没有设计好、SQL 语句没写好、MySQL 选错了索引
4731+
慢 SQL 由三种原因造成:
4732+
4733+
* 偶尔慢:DB 在刷新脏页
4734+
* redo log 写满了
4735+
* 内存不够用,要从 LRU 链表中淘汰
4736+
* MySQL 认为系统空闲的时候
4737+
* MySQL 关闭时
4738+
* 一直慢的原因:索引没有设计好、SQL 语句没写好、MySQL 选错了索引
47324739

47334740
通过以下两种方式定位执行效率较低的 SQL 语句
47344741

Java.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2856,8 +2856,8 @@ public class MyArraysDemo {
28562856
1. 导入包:`import java.util.Random`
28572857
2. 创建对象:`Random r = new Random()`
28582858
3. 随机整数:`int num = r.nextInt(10)`
2859-
* 解释:10 代表的是一个范围,如果括号写 10,产生的随机数就是 0-9,括号写 20 的随机数则是 0-19
2860-
* 获取 0-10:`int num = r.nextInt(10 + 1)`
2859+
* 解释:10 代表的是一个范围,如果括号写 10,产生的随机数就是 0 - 9,括号写 20 的随机数则是 0 - 19
2860+
* 获取 0 - 10:`int num = r.nextInt(10 + 1)`
28612861

28622862
4. 随机小数:`public double nextDouble()` 从范围 `0.0d` 至 `1.0d` (左闭右开),伪随机地生成并返回
28632863

@@ -12217,7 +12217,7 @@ ClassLoader 类常用方法:
1221712217
* `loadclass(String name)`:加载名为 name 的类,返回结果为 Class 类的实例,**该方法就是双亲委派模式**
1221812218
* `findclass(String name)`:查找二进制名称为 name 的类,返回结果为 Class 类的实例,该方法会在检查完父类加载器之后被 loadClass() 方法调用
1221912219
* `findLoadedClass(String name)`:查找名称为 name 的已经被加载过的类,final 修饰无法重写
12220-
* `defineClass(String name, byte[] b, int off, int len)`:将字节流解析成 JVM 能够识别的类对象
12220+
* `defineClass(String name, byte[] b, int off, int len)`:将**字节流**解析成 JVM 能够识别的类对象
1222112221
* `resolveclass(Class<?> c)`:链接指定的 Java 类,可以使类的 Class 对象创建完成的同时也被解析
1222212222
* `InputStream getResourceAsStream(String name)`:指定资源名称获取输入流
1222312223

@@ -12424,21 +12424,21 @@ public class MyClassLoader extends ClassLoader{
1242412424
BufferedInputStream bis = null;
1242512425
ByteArrayOutputStream baos = null;
1242612426
try {
12427-
//获取字节码文件的完整路径
12427+
// 获取字节码文件的完整路径
1242812428
String fileName = classPath + className + ".class";
12429-
//获取一个输入流
12429+
// 获取一个输入流
1243012430
bis = new BufferedInputStream(new FileInputStream(fileName));
12431-
//获取一个输出流
12431+
// 获取一个输出流
1243212432
baos = new ByteArrayOutputStream();
12433-
//具体读入数据并写出的过程
12433+
// 具体读入数据并写出的过程
1243412434
int len;
1243512435
byte[] data = new byte[1024];
1243612436
while ((len = bis.read(data)) != -1) {
1243712437
baos.write(data, 0, len);
1243812438
}
12439-
//获取内存中的完整的字节数组的数据
12439+
// 获取内存中的完整的字节数组的数据
1244012440
byte[] byteCodes = baos.toByteArray();
12441-
//调用 defineClass(),将字节数组的数据转换为 Class 的实例。
12441+
// 调用 defineClass(),将字节数组的数据转换为 Class 的实例。
1244212442
Class clazz = defineClass(null, byteCodes, 0, byteCodes.length);
1244312443
return clazz;
1244412444
} catch (IOException e) {
@@ -12507,7 +12507,7 @@ public static void main(String[] args) {
1250712507

1250812508
### 执行过程
1250912509

12510-
Java文件编译执行的过程
12510+
Java 文件编译执行的过程
1251112511

1251212512
![](https://gitee.com/seazean/images/raw/master/Java/JVM-Java文件编译执行的过程.png)
1251312513

SSM.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,7 @@ Mapper 接口开发需要遵循以下规范:
628628

629629
<resultType>:返回的是一个集合,要写集合中元素的类型
630630

631-
<resultMap>:返回一条记录的Map,key 是列名,value 是对应的值,用来配置字段和对象属性的映射关系标签,结果映射(和 resultType 二选一)
631+
<resultMap>:返回一条记录的 Map,key 是列名,value 是对应的值,用来配置字段和对象属性的映射关系标签,结果映射(和 resultType 二选一)
632632

633633
* id 属性:唯一标识
634634
* type 属性:实体对象类型
@@ -650,7 +650,7 @@ Mapper 接口开发需要遵循以下规范:
650650

651651
* <discriminator>:鉴别器,用来判断某列的值,根据得到某列的不同值做出不同自定义的封装行为
652652

653-
自定义封装规则可以将数据库中比较复杂的数据类型映射为 javaBean 中的属性
653+
自定义封装规则可以将数据库中比较复杂的数据类型映射为 JavaBean 中的属性
654654

655655

656656

@@ -1374,14 +1374,14 @@ Mapper 接口开发需要遵循以下规范:
13741374

13751375
学生和课程
13761376

1377-
* SQL查询语句
1377+
* SQL 查询语句
13781378

13791379
```mysql
13801380
SELECT DISTINCT s.id,s.name,s.age FROM student s,stu_cr sc WHERE sc.sid=s.id
13811381
SELECT c.id,c.name FROM stu_cr sc,course c WHERE sc.cid=c.id AND sc.sid=#{id}
13821382
```
13831383

1384-
* CourseMapper接口
1384+
* CourseMapper 接口
13851385

13861386
```java
13871387
public interface CourseMapper {
@@ -1391,7 +1391,7 @@ Mapper 接口开发需要遵循以下规范:
13911391
}
13921392
```
13931393

1394-
* StudentMapper接口
1394+
* StudentMapper 接口
13951395

13961396
```java
13971397
public interface StudentMapper {
@@ -2901,7 +2901,7 @@ Spring 容器中 Bean 的**线程安全**问题:
29012901

29022902
* 原型 Bean,每次创建一个新对象,线程之间并不存在 Bean 共享,所以不会有线程安全的问题
29032903

2904-
* 单例Bean,所有线程共享一个单例实例 Bean,因此是存在资源的竞争,如果单例 Bean是一个**无状态 Bean**,也就是线程中的操作不会对 Bean 的成员执行查询以外的操作,那么这个单例 Bean 是线程安全的
2904+
* 单例 Bean,所有线程共享一个单例实例 Bean,因此是存在资源的竞争,如果单例 Bean是一个**无状态 Bean**,也就是线程中的操作不会对 Bean 的成员执行查询以外的操作,那么这个单例 Bean 是线程安全的
29052905

29062906
解决方法:开发人员来进行线程安全的保证,最简单的办法就是把 Bean 的作用域 singleton 改为 protopyte
29072907

@@ -14089,7 +14089,7 @@ SpringBoot 功能:
1408914089

1409014090
#### SpringBoot
1409114091

14092-
@SpringBootApplication():启动注解,实现 SpringBoot 的自动部署
14092+
@SpringBootApplication:启动注解,实现 SpringBoot 的自动部署
1409314093

1409414094
* 参数 scanBasePackages:可以指定扫描范围
1409514095
* 默认扫描当前引导类所在包及其子包

Web.md

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2089,8 +2089,8 @@ HTTP 作用:用于定义 WEB 浏览器与 WEB 服务器之间交换数据的
20892089

20902090
浏览器和服务器交互过程:浏览器请求,服务请求响应
20912091

2092-
* 请求(请求行,请求头,请求体)
2093-
* 响应(响应行,响应头,响应体)
2092+
* 请求请求行请求头请求体
2093+
* 响应响应行响应头响应体
20942094

20952095
URL 和 URI
20962096

@@ -2101,8 +2101,7 @@ URL 和 URI
21012101
* URI:统一资源标志符
21022102
格式:/request/servletDemo01
21032103

2104-
* 区别:`URL-HOST=URI`,URI是抽象的定义,URL用地址定位,URI 用名称定位。
2105-
**只要能唯一标识资源的是URI,在URI的基础上给出其资源的访问方式的是URL**
2104+
* 区别:`URL-HOST=URI`,URI是抽象的定义,URL用地址定位,URI 用名称定位。**只要能唯一标识资源的是 URI,在 URI 的基础上给出其资源的访问方式的是 URL**
21062105

21072106
短连接和长连接:
21082107

@@ -2132,20 +2131,18 @@ URL 和 URI
21322131

21332132
## 版本区别
21342133

2135-
87691457
2136-
21372134
版本介绍:
21382135

2139-
* HTTP/0.9 仅支持 GET 请求,不支持请求头
2136+
* HTTP/0.9 仅支持 GET 请求,不支持请求头
21402137
* HTTP/1.0 默认短连接(一次请求建议一次 TCP 连接,请求完就断开),支持 GET、POST、 HEAD 请求
2141-
* HTTP/1.1 默认长连接(一次 TCP 连接可以多次请求);支持 PUT、DELETE、PATCH 等六种请求;增加 host 头,支持虚拟主机;支持断点续传功能
2138+
* HTTP/1.1 默认长连接(一次 TCP 连接可以多次请求);支持 PUT、DELETE、PATCH 等六种请求;增加 host 头,支持虚拟主机;支持**断点续传**功能
21422139
* HTTP/2.0 多路复用,降低开销(一次 TCP 连接可以处理多个请求);服务器主动推送(相关资源一个请求全部推送);解析基于二进制,解析错误少,更高效(HTTP/1.X 解析基于文本);报头压缩,降低开销。
21432140

21442141
HTTP 1.0 和 HTTP 1.1 的主要区别:
21452142

21462143
* 长短连接:
21472144

2148-
**在HTTP/1.0中,默认使用的是短连接**,每次请求都要重新建立一次连接。HTTP 基于 TCP/IP 协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个长连接,可以用个长连接来发多个请求
2145+
**在HTTP/1.0中,默认使用的是短连接**,每次请求都要重新建立一次连接。HTTP 基于 TCP/IP 协议的,每一次建立或者断开连接都需要三次握手四次挥手,开销会比较大
21492146

21502147
**HTTP 1.1起,默认使用长连接** ,默认开启 `Connection: keep-alive`,HTTP/1.1 的持续连接有非流水线方式和流水线方式 ,流水线方式是客户端在收到 HTTP 的响应报文之前就能接着发送新的请求报文,非流水线方式是客户端在收到前一个响应后才能发送下一个请求
21512148

@@ -2157,13 +2154,13 @@ HTTP 1.0 和 HTTP 1.1 的主要区别:
21572154

21582155
HTTP 和 HTTPS 的区别:
21592156

2160-
* 端口 :HTTP 默认使用端口 80,HTTPS 默认使用端口443
2161-
* 安全性: HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份;HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议,SSL/TLS 运行在 TCP 之上,所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密
2162-
* 资源消耗:HTTP 安全性没有 HTTPS高,但是 HTTPS 比 HTTP 耗费更多服务器资源
2157+
* 端口 :HTTP 默认使用端口 80,HTTPS 默认使用端口 443
2158+
* 安全性:HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份;HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议,SSL/TLS 运行在 TCP 之上,所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密
2159+
* 资源消耗:HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源
21632160

21642161
**对称加密和非对称加密**
21652162

2166-
* 对称加密:加密和解密使用同一个秘钥,把密钥转发给需要发送数据的客户机,中途会被拦截(类似于把带锁的箱子和钥匙给别人,对方打开箱子放入数据,上锁后发送),典型的对称加密算法有DES、AES等
2163+
* 对称加密:加密和解密使用同一个秘钥,把密钥转发给需要发送数据的客户机,中途会被拦截(类似于把带锁的箱子和钥匙给别人,对方打开箱子放入数据,上锁后发送),典型的对称加密算法有 DES、AES 等
21672164
* 优点:运算速度快
21682165
* 缺点:无法安全的将密钥传输给通信方
21692166

@@ -2228,12 +2225,12 @@ HTTP 和 HTTPS 的区别:
22282225
* 安全的方法除了 GET 之外还有:HEAD、OPTIONS
22292226
* 不安全的方法除了 POST 之外还有 PUT、DELETE
22302227

2231-
幂等性:同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。所有的安全方法也都是幂等的。在正确实现条件下,GET,HEAD,PUT 和 DELETE 等方法都是幂等的,POST 方法不是
2228+
幂等性:同样的请求**被执行一次与连续执行多次的效果是一样的**,服务器的状态也是一样的。所有的安全方法也都是幂等的。在正确实现条件下,GET,HEAD,PUT 和 DELETE 等方法都是幂等的,POST 方法不是
22322229

22332230
可缓存:如果要对响应进行缓存,需要满足以下条件
22342231

2235-
* 请求报文的 HTTP 方法本身是可缓存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可缓存,POST 在多数情况下不可缓存的
2236-
* 响应报文的状态码是可缓存的,包括:200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501
2232+
* 请求报文的 HTTP 方法本身是可缓存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可缓存,POST 在多数情况下不可缓存
2233+
* 响应报文的状态码是可缓存的,包括:200203204206300301404405410414 and 501
22372234
* 响应报文的 Cache-Control 首部字段没有指定不进行缓存
22382235

22392236

@@ -2309,24 +2306,23 @@ HTTP 和 HTTPS 的区别:
23092306
* 响应状态码:
23102307
![](https://gitee.com/seazean/images/raw/master/Web/HTTP状态响应码.png)
23112308

2312-
| 状态码 | 说明 |
2313-
| ------- | ------------------------------------------------ |
2314-
| 200 | 一切都OK>,与服务器连接成功,发送请求成功 |
2315-
| 302/307 | 请求重定向(客户端行为,两次请求,地址栏发生改变) |
2316-
| 304 | 请求资源未改变,使用缓存 |
2317-
| 400 | 客户端错误,请求错误,最常见的就是请求参数有问题 |
2318-
| 403 | 客户端错误,但forbidden权限不够,拒绝处理 |
2319-
| 404 | 客户端错误,请求资源未找到 |
2320-
| 500 | 服务器错误,服务器运行内部错误 |
2309+
| 状态码 | 说明 |
2310+
| ------- | -------------------------------------------------- |
2311+
| 200 | 一切都 OK,与服务器连接成功,发送请求成功 |
2312+
| 302/307 | 请求重定向客户端行为,两次请求,地址栏发生改变 |
2313+
| 304 | 请求资源未改变,使用缓存 |
2314+
| 400 | 客户端错误,请求错误,最常见的就是请求参数有问题 |
2315+
| 403 | 客户端错误,但 forbidden权 限不够,拒绝处理 |
2316+
| 404 | 客户端错误,请求资源未找到 |
2317+
| 500 | 服务器错误,服务器运行内部错误 |
23212318

23222319
面试题:
23232320

2324-
* 301 redirect: 301 代表永久性转移(Permanently Moved)。
2325-
* 302 redirect: 302 代表暂时性转移(Temporarily Moved )
2326-
2327-
* 响应头
2328-
响应头以key:vaue存在, 可能多个value情况。
2321+
* 301 redirect: 301 代表永久性转移 (Permanently Moved)
2322+
* 302 redirect: 302 代表暂时性转移 (Temporarily Moved )
23292323

2324+
* 响应头:以 key:vaue 存在,可能多个 value 情况。
2325+
23302326
| 消息头 | 说明 |
23312327
| ----------------------- | ------------------------------------------------------------ |
23322328
| Location | 请求重定向的地址,常与302,307配合使用。 |
@@ -2345,9 +2341,7 @@ HTTP 和 HTTPS 的区别:
23452341

23462342

23472343

2348-
* 响应体
2349-
2350-
页面展示内容, 类似网页的源码
2344+
* 响应体:页面展示内容, 类似网页的源码
23512345

23522346
```html
23532347
<html>
@@ -2360,7 +2354,7 @@ HTTP 和 HTTPS 的区别:
23602354
</body>
23612355
</html>
23622356
```
2363-
2357+
23642358

23652359

23662360

0 commit comments

Comments
 (0)