Java基础测试

2023-6-7

  • code

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    package com.example;

    public class Test2 {
    public static int add(int a, int b) {
    try {
    return a + b;
    } catch (Exception e) {
    System.out.println(e);
    } finally {
    System.out.println("finally...........");
    return a - b;
    }
    // TODO: 语法错误
    // return 0;
    }

    public static void main(String[] args) {
    int sum = add(34, 9);
    // 25
    System.out.println(sum);
    }
    }

  • 字符串不可变的考察

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package com.example;

    public class Test1 {
    public static void changeStr(String str) {
    str = "aaaaaaaaaa"; // 将传入的字符串参数str修改为"aaaaaaaaaa"
    }

    public static void main(String[] args) {
    String str = "weclome"; // 定义一个名为str的字符串变量,并赋值为"weclome"
    changeStr(str); // 调用changeStr方法,并将str作为参数传入
    System.out.println(str); // 打印输出str的值 => 因为 String 定义的是不可变的,所以不会影响 main 中的 str
    }
    }

  • code

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package com.example;

    public class Test3 {
    public static void main(String[] args) {
    int i = 1;
    int j = ++i;
    // i: 2 j: 2
    System.out.println(i + " " + j);
    }
    }

  • code

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package com.example;

    public class Test4 {
    {
    System.out.println("实例代码块");
    }
    static {
    System.out.println("静态代码块");
    }
    public static void main(String[] args) {
    // 调用后的输出结果
    // 静态代码块
    // 实例代码块
    // 实例代码块
    new Test4();
    new Test4();
    }
    }

  • set 、list 的区别

  • 线程问题

    • Thread: 父类及其子类
    • Runnable
  • ==

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    package com.example;

    public class Test5 {
    public static void main(String[] args) {
    String str1 = "123";
    String str2 = new String("123");
    String str3 = "123";
    System.out.println(str1 == str2); // false
    System.out.println(str1 == str3); // true
    }
    }
  • && 短路与运算的考察

  • 输出循环后的结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package com.example;

    public class Test6 {
    public static Boolean foo(char c) {
    System.out.print(c + " ");
    return true;
    }

    public static void main(String[] args) {
    int i = 0;
    for (foo('C'); foo('B') && i < 2; i++) {
    foo('A');
    }
    }
    }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for (foo('C'); foo('B') && i < 2; i++) {
    // 循环开始
    // 1. 调用foo方法,传入字符'C',打印输出字符'C'和空格
    // 2. 调用foo方法,传入字符'B',打印输出字符'B'和空格
    // 3. 判断条件foo('B') && i < 2
    // - foo('B') 返回true
    // - i 的值为0,小于2,条件为真
    // 进入循环体
    // 4. 调用foo方法,传入字符'A',打印输出字符'A'和空格
    // 5. i 的值增加1
    // 循环回到第3步,重复执行第3到第5步,直到i 的值增加到2时,条件为假
    // 循环结束
    }

  • StringBuffer

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package com.example;

    public class Test07 {
    public static void main(String[] args) {
    StringBuffer str = new StringBuffer();
    // TODO: 考察的是 append 方法的使用
    str.append("hello");
    // 实现 输出 "hello"
    System.out.println(str);
    }
    }
  • substring 方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package com.example;

    public class Test08 {
    public static void main(String[] args) {
    String str = "我是中国人";
    // TODO: 考察 substring
    System.out.println(str.substring(2, 4)); // 中国 ( , ]
    System.out.println(str.substring(2)); // 中国人
    }
    }
  • Java1.8版本之前的前提,Java 特性中,anstract class interface 有什么区别

    • 抽象类可以有构造方法,接口中不能有构造方法
    • 抽象类中可以有普通成员变量,接口中没有普通成员变量
    • 一个类可以实现多个接口,但只能继承一个抽象类
  • 数据类型的确定

    1
    (short)10/11.2*2) => 输出最终的数据类型
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    public class Main {
    public static void main(String[] args) {
    // 表达式计算结果的数据类型取决于操作数的数据类型和操作符的规则
    // 在这个表达式中,我们进行了以下操作:

    // (short)10:将整数10强制转换为short类型
    // 转换后的结果仍然是short类型
    // short类型的取值范围比int类型小,但我们只是进行类型转换,不会改变数值本身
    short num1 = (short)10;

    // 11.2:这是一个浮点数常量,是一个double类型的字面值
    // 在进行后续运算时,将根据操作数的类型进行自动类型提升
    double num2 = 11.2;

    // 进行除法操作
    // num1 / num2,其中num1short类型,num2double类型
    // 根据Java的自动类型提升规则,short类型会被提升为与double相同的类型,也就是double类型
    // 所以除法操作的结果是double类型
    double divisionResult = num1 / num2;

    // 进行乘法操作
    // divisionResult * 2,其中divisionResultdouble类型,2int类型
    // 根据Java的自动类型提升规则,int类型会被提升为与double相同的类型,也就是double类型
    // 所以乘法操作的结果是double类型
    double finalResult = divisionResult * 2;

    // 打印最终结果及其数据类型
    System.out.println(finalResult);
    System.out.println("最终结果的数据类型:" + Double.TYPE);
    }
    }

  • Linux 权限对应的数值

    权限
    image-20230607214227780
    1
    2
    3
    读取权限(r):数值为 4。
    写入权限(w):数值为 2。
    执行权限(x):数值为 1。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    为了表示一个文件或目录的权限,可以将相应的数值进行组合,并将它们分别分配给所有者、所属组和其他人。这样,就可以用一个三位数表示整个权限设置。

    例如,如果一个文件的权限设置为所有者可读写、所属组只读、其他人只执行,则权限数值表示为 754。这样的权限设置可以解释如下:

    所有者:读取权限(4)+ 写入权限(2)+ 执行权限(1),即 4 + 2 + 1 = 7。
    所属组:读取权限(4)+ 执行权限(1),即 4 + 1 = 5。
    其他人:执行权限(1)。
    这里是一些常见的权限数值及其对应的权限设置示例:

    777:所有者、所属组和其他人都具有读取、写入和执行权限。
    755:所有者具有读取、写入和执行权限,所属组和其他人具有读取和执行权限。
    644:所有者具有读取和写入权限,所属组和其他人只具有读取权限。
    请注意,为了设置权限数值,你可以使用 chmod 命令。例如,chmod 755 filename 将文件 filename 的权限设置为 755。
  • 创建并压缩归档文件

    1
    tar -czvf archive.tar.gz file1 file2 directory1
  • 解压缩并解压缩压缩的归档文件

    1
    tar -xzvf archive.tar.gz
    1
    2
    3
    4
    -x:解压缩归档文件。
    -z:使用 gzip 进行解压缩。
    -v:显示详细的操作过程,即输出被解压缩的文件列表。
    -f archive.tar.gz:指定要解压缩的归档文件。
  • cut 命令可以从文本文件的每一行中截取指定内容的数据

2023-6-10

  • springboot 的原理
  • static 和非static 的区别、生命周期、销毁
  • Map 说一说线程安全和非线程安全有哪些实现
  • MQ 的作用
  • AOP
  • 讲一讲项目
    • 添加一个评论功能