diff --git a/docs/cs-basics/network/images/http&https/HTTP1.0cache1.png b/docs/cs-basics/network/images/http&https/HTTP1.0cache1.png index 1fde4581..a327583c 100644 Binary files a/docs/cs-basics/network/images/http&https/HTTP1.0cache1.png and b/docs/cs-basics/network/images/http&https/HTTP1.0cache1.png differ diff --git a/docs/cs-basics/network/images/http&https/HTTP1.0cache2.png b/docs/cs-basics/network/images/http&https/HTTP1.0cache2.png index f7faedbc..bef08dad 100644 Binary files a/docs/cs-basics/network/images/http&https/HTTP1.0cache2.png and b/docs/cs-basics/network/images/http&https/HTTP1.0cache2.png differ diff --git a/docs/cs-basics/network/images/http&https/HTTP1.1continue1.png b/docs/cs-basics/network/images/http&https/HTTP1.1continue1.png index 1c5b16c0..97adbde7 100644 Binary files a/docs/cs-basics/network/images/http&https/HTTP1.1continue1.png and b/docs/cs-basics/network/images/http&https/HTTP1.1continue1.png differ diff --git a/docs/cs-basics/network/images/http&https/HTTP1.1continue2.png b/docs/cs-basics/network/images/http&https/HTTP1.1continue2.png index 968d4886..53600aa2 100644 Binary files a/docs/cs-basics/network/images/http&https/HTTP1.1continue2.png and b/docs/cs-basics/network/images/http&https/HTTP1.1continue2.png differ diff --git a/docs/cs-basics/network/images/http&https/OWF.png b/docs/cs-basics/network/images/http&https/OWF.png index 13df90ae..9b467348 100644 Binary files a/docs/cs-basics/network/images/http&https/OWF.png and b/docs/cs-basics/network/images/http&https/OWF.png differ diff --git a/docs/cs-basics/network/images/http&https/attack1.png b/docs/cs-basics/network/images/http&https/attack1.png index 0cd4926f..4c62591d 100644 Binary files a/docs/cs-basics/network/images/http&https/attack1.png and b/docs/cs-basics/network/images/http&https/attack1.png differ diff --git a/docs/cs-basics/network/images/http&https/digital-signature.png b/docs/cs-basics/network/images/http&https/digital-signature.png index 127c7836..54071aa3 100644 Binary files a/docs/cs-basics/network/images/http&https/digital-signature.png and b/docs/cs-basics/network/images/http&https/digital-signature.png differ diff --git a/docs/cs-basics/network/images/http&https/public-key-transmission.png b/docs/cs-basics/network/images/http&https/public-key-transmission.png index 008da8c1..b3eb4a7c 100644 Binary files a/docs/cs-basics/network/images/http&https/public-key-transmission.png and b/docs/cs-basics/network/images/http&https/public-key-transmission.png differ diff --git a/docs/cs-basics/network/images/http&https/symmetric-encryption.png b/docs/cs-basics/network/images/http&https/symmetric-encryption.png index 6f066e0d..f1c80cc5 100644 Binary files a/docs/cs-basics/network/images/http&https/symmetric-encryption.png and b/docs/cs-basics/network/images/http&https/symmetric-encryption.png differ diff --git a/docs/cs-basics/network/images/network-layer/TCP-IP-4-model.png b/docs/cs-basics/network/images/network-layer/TCP-IP-4-model.png index bdbe1c77..7db48d8c 100644 Binary files a/docs/cs-basics/network/images/network-layer/TCP-IP-4-model.png and b/docs/cs-basics/network/images/network-layer/TCP-IP-4-model.png differ diff --git a/docs/cs-basics/network/images/network-layer/smtp.png b/docs/cs-basics/network/images/network-layer/smtp.png index 03ca5c3c..6580bfb2 100644 Binary files a/docs/cs-basics/network/images/network-layer/smtp.png and b/docs/cs-basics/network/images/network-layer/smtp.png differ diff --git a/docs/cs-basics/network/images/osi&tcp-ip-model/TCP-IP-4-model.png b/docs/cs-basics/network/images/osi&tcp-ip-model/TCP-IP-4-model.png index bdbe1c77..7db48d8c 100644 Binary files a/docs/cs-basics/network/images/osi&tcp-ip-model/TCP-IP-4-model.png and b/docs/cs-basics/network/images/osi&tcp-ip-model/TCP-IP-4-model.png differ diff --git a/docs/cs-basics/network/images/osi&tcp-ip-model/application-layer.png b/docs/cs-basics/network/images/osi&tcp-ip-model/application-layer.png index 4a0241bf..a1ec5c7e 100644 Binary files a/docs/cs-basics/network/images/osi&tcp-ip-model/application-layer.png and b/docs/cs-basics/network/images/osi&tcp-ip-model/application-layer.png differ diff --git a/docs/cs-basics/network/images/osi&tcp-ip-model/nerwork-layer.png b/docs/cs-basics/network/images/osi&tcp-ip-model/nerwork-layer.png index 06891386..4c3088c5 100644 Binary files a/docs/cs-basics/network/images/osi&tcp-ip-model/nerwork-layer.png and b/docs/cs-basics/network/images/osi&tcp-ip-model/nerwork-layer.png differ diff --git a/docs/cs-basics/network/images/osi&tcp-ip-model/network-interface-layer.png b/docs/cs-basics/network/images/osi&tcp-ip-model/network-interface-layer.png index 8a8d8f21..5c1d7801 100644 Binary files a/docs/cs-basics/network/images/osi&tcp-ip-model/network-interface-layer.png and b/docs/cs-basics/network/images/osi&tcp-ip-model/network-interface-layer.png differ diff --git a/docs/cs-basics/network/images/osi&tcp-ip-model/osi-model-detail.png b/docs/cs-basics/network/images/osi&tcp-ip-model/osi-model-detail.png index 5fd057df..2d7d69d5 100644 Binary files a/docs/cs-basics/network/images/osi&tcp-ip-model/osi-model-detail.png and b/docs/cs-basics/network/images/osi&tcp-ip-model/osi-model-detail.png differ diff --git a/docs/cs-basics/network/images/osi&tcp-ip-model/transport-layer.png b/docs/cs-basics/network/images/osi&tcp-ip-model/transport-layer.png index 075db73a..ed7bcc21 100644 Binary files a/docs/cs-basics/network/images/osi&tcp-ip-model/transport-layer.png and b/docs/cs-basics/network/images/osi&tcp-ip-model/transport-layer.png differ diff --git a/docs/java/basis/java-basic-questions-01.md b/docs/java/basis/java-basic-questions-01.md index 0222c434..e81f3fed 100644 --- a/docs/java/basis/java-basic-questions-01.md +++ b/docs/java/basis/java-basic-questions-01.md @@ -121,90 +121,13 @@ JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有 ### 字符型常量和字符串常量的区别? -1. **形式** : 字符常量是单引号引起的一个字符,字符串常量是双引号引起的 0 个或若干个字符 -2. **含义** : 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置) -3. **占内存大小** : 字符常量只占 2 个字节; 字符串常量占若干个字节 (**注意: `char` 在 Java 中占两个字节**) +1. **形式** : 字符常量是单引号引起的一个字符,字符串常量是双引号引起的 0 个或若干个字符。 +2. **含义** : 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置)。 +3. **占内存大小** : 字符常量只占 2 个字节; 字符串常量占若干个字节。 -### 使用过可变长参数吗? + (**注意: `char` 在 Java 中占两个字节**) -从 Java5 开始,Java 支持定义可变长参数,所谓可变长参数就是允许在调用方法时传入不定长度的参数。就比如下面的这个 `printVariable` 方法就可以接受 0 个或者多个参数。 - -```java -public static void method1(String... args) { - //...... -} -``` - -另外,可变参数只能作为函数的最后一个参数,但其前面可以有也可以没有任何其他参数。 - -```java -public static void method2(String arg1, String... args) { - //...... -} -``` - -**遇到方法重载的情况怎么办呢?会优先匹配固定参数还是可变参数的方法呢?** - -答案是会优先匹配固定参数的方法,因为固定参数的方法匹配度更高。 - -我们通过下面这个例子来证明一下。 - -```java -/** - * 微信搜 JavaGuide 回复"面试突击"即可免费领取个人原创的 Java 面试手册 - * - * @author Guide哥 - * @date 2021/12/13 16:52 - **/ -public class VariableLengthArgument { - - public static void printVariable(String... args) { - for (String s : args) { - System.out.println(s); - } - } - - public static void printVariable(String arg1, String arg2) { - System.out.println(arg1 + arg2); - } - - public static void main(String[] args) { - printVariable("a", "b"); - printVariable("a", "b", "c", "d"); - } -} -``` - -输出: - -``` -ab -a -b -c -d -``` - -另外,Java 的可变参数编译后实际会被转换成一个数组,我们看编译后生成的 `class`文件就可以看出来了。 - -```java -public class VariableLengthArgument { - - public static void printVariable(String... args) { - String[] var1 = args; - int var2 = args.length; - - for(int var3 = 0; var3 < var2; ++var3) { - String s = var1[var3]; - System.out.println(s); - } - - } - // ...... -} -``` - -### 注释有哪几种?注释越多越好吗? +### 注释有哪几种形式? Java 中的注释有三种: @@ -239,23 +162,25 @@ Java 中的注释有三种: ### 标识符和关键字的区别是什么? -在我们编写程序的时候,需要大量地为程序、类、变量、方法等取名字,于是就有了标识符,简单来说,标识符就是一个名字。但是有一些标识符,Java 语言已经赋予了其特殊的含义,只能用于特定的地方,这些特殊的标识符就是关键字。因此,关键字是被赋予特殊含义的标识符。比如,在我们的日常生活中,如果我们想要开一家店,则要给这个店起一个名字,起的这个“名字”就叫标识符。但是我们店的名字不能叫“警察局”,因为“警察局”这个名字已经被赋予了特殊的含义,而“警察局”就是我们日常生活中的关键字。 +在我们编写程序的时候,需要大量地为程序、类、变量、方法等取名字,于是就有了 **标识符** 。简单来说, **标识符就是一个名字** 。 -### Java 中的 `53` 个关键字 +有一些标识符,Java 语言已经赋予了其特殊的含义,只能用于特定的地方,这些特殊的标识符就是 **关键字** 。简单来说,**关键字是被赋予特殊含义的标识**符 。比如,在我们的日常生活中,如果我们想要开一家店,则要给这个店起一个名字,起的这个“名字”就叫标识符。但是我们店的名字不能叫“警察局”,因为“警察局”这个名字已经被赋予了特殊的含义,而“警察局”就是我们日常生活中的关键字。 + +### Java 语言关键字有哪些? | 分类 | 关键字 | | | | | | | -| :------------------- | -------- | ---------- | -------- | ------------ | ---------- | --------- | ------ | -| 访问控制 | private | protected | public | | | | | +| :------------------- | -------- |-------- | -------- | -------- | --------| --------| -------- | +| 访问控制 | private | protected | public | | | | | | 类,方法和变量修饰符 | abstract | class | extends | final | implements | interface | native | | | new | static | strictfp | synchronized | transient | volatile | enum | -| 程序控制 | break | continue | return | do | while | if | else | +| 程序控制 | break | continue | return | do | while | if | else | | | for | instanceof | switch | case | default | assert | | -| 错误处理 | try | catch | throw | throws | finally | | | -| 包相关 | import | package | | | | | | -| 基本类型 | boolean | byte | char | double | float | int | long | -| | short | null | true | false | | | | -| 变量引用 | super | this | void | | | | | -| 保留字 | goto | const | | | | | | +| 错误处理 | try | catch | throw | throws | finally | | | +| 包相关 | import | package | | | | | | +| 基本类型 | boolean | byte | char | double | float | int | long | +| | short | | | | | | | +| 变量引用 | super | this | void | | | | | +| 保留字 | goto | const | | | | | | > Tips:所有的关键字都是小写的,在 IDE 中会以特殊颜色显示。 > @@ -265,6 +190,10 @@ Java 中的注释有三种: > - 在类,方法和变量修饰符中,从 JDK8 开始引入了默认方法,可以使用 `default` 关键字来定义一个方法的默认实现。 > - 在访问控制中,如果一个方法前没有任何修饰符,则默认会有一个修饰符 `default`,但是这个修饰符加上了就会报错。 +注意 ⚠️:`true`, `false`, 和`null`看起来像关键字但不是关键字。 + +官方文档:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html 。 + ### 自增自减运算符 在写代码的过程中,常见的一种情况是需要某个整数类型变量增加 1 或减少 1,Java 提供了一种特殊的运算符,用于这种表达式,叫做自增运算符(++)和自减运算符(--)。 @@ -626,6 +555,85 @@ public native int hashCode(); 更多关于 `hashCode()` 和 `equals()` 的内容可以查看:[Java hashCode() 和 equals()的若干问题解答](https://www.cnblogs.com/skywang12345/p/3324958.html) +### 什么是可变长参数? + +从 Java5 开始,Java 支持定义可变长参数,所谓可变长参数就是允许在调用方法时传入不定长度的参数。就比如下面的这个 `printVariable` 方法就可以接受 0 个或者多个参数。 + +```java +public static void method1(String... args) { + //...... +} +``` + +另外,可变参数只能作为函数的最后一个参数,但其前面可以有也可以没有任何其他参数。 + +```java +public static void method2(String arg1, String... args) { + //...... +} +``` + +**遇到方法重载的情况怎么办呢?会优先匹配固定参数还是可变参数的方法呢?** + +答案是会优先匹配固定参数的方法,因为固定参数的方法匹配度更高。 + +我们通过下面这个例子来证明一下。 + +```java +/** + * 微信搜 JavaGuide 回复"面试突击"即可免费领取个人原创的 Java 面试手册 + * + * @author Guide哥 + * @date 2021/12/13 16:52 + **/ +public class VariableLengthArgument { + + public static void printVariable(String... args) { + for (String s : args) { + System.out.println(s); + } + } + + public static void printVariable(String arg1, String arg2) { + System.out.println(arg1 + arg2); + } + + public static void main(String[] args) { + printVariable("a", "b"); + printVariable("a", "b", "c", "d"); + } +} +``` + +输出: + +``` +ab +a +b +c +d +``` + +另外,Java 的可变参数编译后实际会被转换成一个数组,我们看编译后生成的 `class`文件就可以看出来了。 + +```java +public class VariableLengthArgument { + + public static void printVariable(String... args) { + String[] var1 = args; + int var2 = args.length; + + for(int var3 = 0; var3 < var2; ++var3) { + String s = var1[var3]; + System.out.println(s); + } + + } + // ...... +} +``` + ## 基本数据类型 ### Java 中的几种基本数据类型了解么?