JAVA

83 阅读4分钟

maks kjslkjf sl m;dlbf * * *

1. Java 基础

1.1 成员变量 和 局部变量 的区别

4点

1.2 静态方法 和 实例方法 区别

2点

1.3 基本数据类型 和 包装类 的区别

4点

1.4 不是所有的局部变量都存放在栈中!

1.5 包装类型的缓存机制!比较值有影响!

1.6 浮点数运运算会有精度损失

javaguide.cn/java/basis/…

1.7 构造方法特点 & 不能被重写

3点

1.8 接口和抽象类的异同

共同点3点 区别3点

1.9 Object 类的常见方法

11 个

1.10 hashCode() 有什么用 为什么要有 hashCode()

1.11 为什么重写 equals() 时候必须重写 hashCode()

1.12 字符串常量池

1.13 字符串中的 intern() 方法

1.14 try-catch-finally

注意:不要在 finally 语句块中使用 return! 当 try 语句和 finally 语句中都有 return 语句时,try 语句块中的 return 语句会被忽略。这是因为 try 语句中的 return 返回值会先被暂存在一个本地变量中,当执行到 finally 语句中的 return 之后,这个本地变量的值就变为了 finally 语句中的 return 返回值。

以下代码会输出啥:

int a = 10;
try {
    int b = a / 0;
    return a;
}catch (Exception e){
    return 20;
}finally {
    a =  30;
    return a;
}
int a = 10;
try {
    int b = a / 0;
    return a;
}catch (Exception e){
    return 20;
}finally {
    a =  30;
}
int a = 10;
try {
    int b = a / 1;
    return a;
}catch (Exception e){
    return 20;
}finally {
    a =  30;
}

详解:

执行流程:

  1. 先计算返回值, 并将返回值存储起来, 等待返回

  2. 执行finally代码块

  3. 将之前存储的返回值, 返回出去;

需注意:

  1. 返回值是在finally运算之前就确定了,并且缓存了,不管finally对该值做任何的改变,返回的值都不会改变。

1.15 finally 中的代码不一定会执行

1.16 BIO NIO AIO

1.17 反射

snowman.yuque.com/kgk8pg/eaxc…

1.18 注解

snowman.yuque.com/kgk8pg/eaxc…

2. Java 集合

2.1 ArrayList 和 Vector 的区别

2.2 ArrayList 与 LinkedList 区别

2.3 ArrayList 的扩容机制

javaguide.cn/java/collec…

2.4 比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同

2.5 HashMap 和 Hashtable 的区别

2.6 HashMap 和 HashSet 区别

2.7 HashMap 和 TreeMap 区别

2.8 HashSet 如何检查重复

2.9 HashMap 的底层实现

2.10 HashMap 的⻓度为什么是 2 的幂次方

2.11 ConcurrentHashMap 和 Hashtable 的区别

2.12 ConcurrentHashMap 线程安全的具体实现⽅式/底层具体实现

2.13 JDK 1.7 和 JDK 1.8 的 ConcurrentHashMap 实现有什么不同

3. 多线程

程序计数器为什么是私有的? 程序计数器主要有下⾯两个作⽤:

  1. 字节码解释器通过改变程序计数器来依次读取指令,从⽽实现代码的流程控制,如:顺序执⾏、
    选择、循环、异常处理。
  2. 在多线程的情况下,程序计数器⽤于记录当前线程执⾏的位置,从⽽当线程被切换回来的时候能
    够知道该线程上次运⾏到哪⼉了。
    需要注意的是,如果执⾏的是 native ⽅法,那么程序计数器记录的是 undefined 地址,只有执⾏的
    是 Java 代码时程序计数器记录的才是下⼀条指令的地址。
    所以,程序计数器私有主要是为了线程切换后能恢复到正确的执⾏位置。

虚拟机栈和本地⽅法栈为什么是私有的?

虚拟机栈: 每个 Java ⽅法在执⾏的同时会创建⼀个栈帧⽤于存储局部变量表、操作数栈、常量 池引⽤等信息。从⽅法调⽤直⾄执⾏完成的过程,就对应着⼀个栈帧在 Java 虚拟机栈中⼊栈和 出栈的过程。 本地⽅法栈: 和虚拟机栈所发挥的作⽤⾮常相似,区别是: 虚拟机栈为虚拟机执⾏ Java ⽅法 (也就是字节码)服务,⽽本地⽅法栈则为虚拟机使⽤到的 Native ⽅法服务。 在 HotSpot 虚 拟机中和 Java 虚拟机栈合⼆为⼀。 所以,为了保证线程中的局部变量不被别的线程访问到,虚拟机栈和本地⽅法栈是线程私有的。

3.1 线程的生命周期和状态

3.2 sleep() ⽅法和 wait() ⽅法对比

3.3 为什么 wait() ⽅法不定义在 Thread 中?

3.4 volatile 如何保证变量的可⻅性?

3.5 volatile 可以保证原⼦性么?

3.6 synchronized 关键字

3.7 synchronized 和 volatile 的区别

3.8 synchronized 和 ReentrantLock 的区别

3.9 线程池 及其参数

javaguide.cn/java/concur…

4. 计算机网络

4.1 OSI 七层模型是什么?每⼀层的作⽤是什么?

4.2 TCP/IP 四层模型是什么?每⼀层的作⽤是什么?

4.3 TCP 与 UDP 的区别 什么时候选择 TCP,什么时候选 UDP?

4.4 使⽤ TCP 的协议有哪些? 使用UDP 的协议有哪些?

4.5 TCP 三次握⼿和四次挥手

javaguide.cn/cs-basics/n…

4.6 TCP 如何保证传输的可靠性?

javaguide.cn/cs-basics/n…

4.7 从输⼊URL 到⻚⾯展示到底发⽣了什么?

segmentfault.com/a/119000000…

cloud.tencent.com/developer/a…

4.8 HTTP 和 HTTPS 有什么区别?

javaguide.cn/cs-basics/n…

4.9 HTTP 是不保存状态的协议, 如何保存⽤户状态?

5. 操作系统

6. 数据库

6.1 数据库三范式

www.cnblogs.com/shangping/p…

6.2 drop、delete 与 truncate 区别?

6.3 MySQL 基础架构

6.4 MySQL 存储引擎

6.5 MyISAM 和 InnoDB 的区别是什么?

6.6 索引

javaguide.cn/database/my…

6.7 事务 & 四个特性

6.8 Redis 分布式锁

mp.weixin.qq.com/s/CbnPRfvq4…