一、Java基础篇
1.接口和抽象类的区别
2.重载和重写的区别
3.==和equals的区别
4.异常处理机制
5.HashMap原理
6.想要线程安全的HashMap怎么办?
7.ConcurrentHashMap原如何保证的线程安全?
8.HashTable与HashMap的区别
9.ArrayList和LinkedList的区别
10.如何保证ArrayList的线程安全?
11.String、StringBuffer、StringBuilder的区别
12.hashCode和equals
13.面向对象和面向过程的区别
4.深拷贝和浅拷贝
15.多态的作用
16.什么是反射?
17.Java创建对象得五种方式?
二.Java多线程篇
1.进程和线程的区别,进程间如何通信
2. 什么是线程上下文切换
3.什么是死锁
4.死锁的必要条件
5.Synchrpnized和lock的区别
6.什么是AQS锁?
8.有哪些常见的AQS锁
10.yield()和join()区别
11.线程池七大参数
12.Java内存模型
13.保证并发安全的三大特性?
14.volatile
15.线程使用方式
16.ThreadLocal原理
17.什么是CAS锁
18.Synchronized锁原理和优化
19.如何根据 CPU 核心数设计线程池线程数量
三.JVM篇
1.JVM运行时数据区(内存结构)
2.什么情况下会内存溢出?
3.JVM有哪些垃圾回收算法?
4.GC如何判断对象可以被回收?
5.典型垃圾回收器
6.类加载器和双亲委派机制
7.JVM中有哪些引用?
8.类加载过程
9.JVM类初始化顺序
10..对象的创建过程
11.对象头中有哪些信息
对象头中有两部分:Mark Word(标记字段)和 Klass Pointer(类型指针)
- Mark Word(标记字段):Mark Word 是对象头中的一部分,用于存储对象的特定状态信息,比如哈希码、锁状态、GC分代年龄等。Mark Word 在实现对象的同步和并发控制时起着重要作用,包括轻量级锁、重量级锁等。它通常占据对象头的前几个字节,并且其具体结构和含义可能会因不同的 JVM 实现而有所不同。
- Klass Pointer(类型指针):Klass Pointer 是指向对象所属类元数据的指针,用于确定该对象的类型信息,包括方法表、字段表等。通过 Klass Pointer,JVM 可以快速定位对象所属的类,从而进行方法调用和属性访问。
12.JVM内存参数
13.GC的回收机制和原理
四.Mysql篇
1.MyIsAm和InnoDB的区别
2.mysql事务特性
3.事务靠什么保证
4.事务的隔离级别
读未提交(Read Uncommitted):允许一个事务读取另一个事务未提交的数据,这样可能会导致脏读(Dirty Read)、不可重复读(Non-repeatable Read)和幻影读(Phantom Read)的问题。
读已提交(Read Committed):确保一个事务只能读取到另一个已提交事务的数据,避免了脏读,但仍可能出现不可重复读和幻影读的问题。
可重复读(Repeatable Read):确保一个事务在执行过程中多次读取同一数据时,能够看到同样的数据,从而避免了不可重复读的问题,但仍可能出现幻影读的问题。
序列化(Serializable):最高的隔离级别,通过强制事务串行执行来避免脏读、不可重复读和幻影读,确保了最高的数据完整性,但也降低了并发性能。
- 脏读(Dirty Read):脏读指的是一个事务读取了另一个事务未提交的数据。当一个事务在读取数据的同时,另一个事务可能正在对该数据进行修改或删除操作,导致读取到的数据是不一致的、临时的或无效的。如果未提交的事务回滚,那么脏读就会造成读取了不存在的数据。
- 不可重复读(Non-repeatable Read):不可重复读指的是在同一个事务中,多次读取同一数据时,得到的结果不一致。这是由于在读取期间,另一个事务修改了该数据并提交了,导致在后续读取中,同一个事务看到了不同的数据值。这种情况下,事务在两次读取之间发生了数据不一致的变化。
- 幻影读(Phantom Read):幻影读指的是在同一个事务中,多次执行相同的查询,但得到的结果集不一致。与不可重复读不同的是,幻影读主要发生在并发事务中插入或删除数据的场景。例如,在一个事务中首先查询某个范围内的数据,然后在此范围内的另一个事务执行了插入或删除操作,再次查询时,会出现新增或减少的记录,就好像出现了幻影一样。
这些问题都是由于并发事务之间的相互影响导致的数据一致性问题,可以通过调整事务的隔离级别来解决。不同的隔离级别提供了不同的数据隔离程度,可以根据具体的业务需求来选择适当的隔离级别来避免脏读、不可重复读和幻影读的问题。