一、Java 基础
1、什么是面向对象?
2、JDK JRE JVM
3、==和 equals 比较
4、hashCode 与 equals
5、final
6、String、StringBuffer、StringBuilder
7、重载和重写的区别
8、接口和抽象类的区别
9、List 和 Set 的区别
10、ArrayList 和 LinkedList 区别
11、HashMap 和 HashTable 有什么区别?其底层实现是什么?
12、ConcurrentHashMap 原理,jdk7 和 jdk8 版本的区别?
13、什么是字节码?采用字节码的好处是什么?
14、Java 中的异常体系
15、Java 类加载器
16、双亲委托模型
17、GC 如何判断对象可以被回收
选择 Java 基础里的其中一道解答
JDK JRE JVM
JDK:
Java Develpment Kit java 开发工具
JRE:
Java Runtime Environment java 运行时环境
JVM:
java Virtual Machine java 虚拟机
二、线程、并发相关
1、线程的生命周期?线程有几种状态
2、sleep()、wait()、join()、yield()的区别
3、对线程安全的理解
4、Thread、Runable 的区别
5、对守护线程的理解
6、ThreadLocal 的原理和使用场景
7、ThreadLocal 内存泄露原因,如何避免
8、并发、并行、串行的区别
9、并发的三大特性
10、volatile
11、为什么用线程池?解释下线程池参数?
12、简述线程池处理流程
13、线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?
14、线程池中线程复用原理
选择 Java 线程与并发里的其中一道解答
volatile
(1)保证被 volatile 修饰的共享变量对所有线程总是可见的,也就是当一个线程修改了一个被 volatile 修饰共享变量的值,新值总是可以被其他线程立即得知。
//线程1
boolean stop = false;
while(!stop){
doSomething();
}
//线程2
stop = true;
复制代码
如果线程 2 改变了 stop 的值,线程 1 一定会停止吗?不一定。当线程 2 更改了 stop 变量的值之后,但是还没来得及写入主存当中,线程 2 转去做其他事情了,那么线程 1 由