maks kjslkjf sl m;dlbf * * *
1. Java 基础
1.1 成员变量 和 局部变量 的区别
4点
1.2 静态方法 和 实例方法 区别
2点
1.3 基本数据类型 和 包装类 的区别
4点
1.4 不是所有的局部变量都存放在栈中!
1.5 包装类型的缓存机制!比较值有影响!
1.6 浮点数运运算会有精度损失
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;
}
详解:
执行流程:
-
先计算返回值, 并将返回值存储起来, 等待返回
-
执行finally代码块
-
将之前存储的返回值, 返回出去;
需注意:
- 返回值是在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 的扩容机制
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. 多线程
程序计数器为什么是私有的? 程序计数器主要有下⾯两个作⽤:
- 字节码解释器通过改变程序计数器来依次读取指令,从⽽实现代码的流程控制,如:顺序执⾏、
选择、循环、异常处理。 - 在多线程的情况下,程序计数器⽤于记录当前线程执⾏的位置,从⽽当线程被切换回来的时候能
够知道该线程上次运⾏到哪⼉了。
需要注意的是,如果执⾏的是 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 线程池 及其参数
4. 计算机网络
4.1 OSI 七层模型是什么?每⼀层的作⽤是什么?
4.2 TCP/IP 四层模型是什么?每⼀层的作⽤是什么?
4.3 TCP 与 UDP 的区别 什么时候选择 TCP,什么时候选 UDP?
4.4 使⽤ TCP 的协议有哪些? 使用UDP 的协议有哪些?
4.5 TCP 三次握⼿和四次挥手
4.6 TCP 如何保证传输的可靠性?
4.7 从输⼊URL 到⻚⾯展示到底发⽣了什么?
cloud.tencent.com/developer/a…