1、类的装载过程
加载,检查,准备,解析,初始化
加载:根据查找路径查找class文件,进行解析
检查:检查class文件的正确性
准备:对类的静态变量分配内存空间
解析:对常量池中的符号引用替换为直接引用,符号引用是一个标识,直接引用是指向内存地址
初始化:对静态变量和静态代码块进行初始化工作
图:
2、有集合A和集合B,现在需要将两个集合中重复的元素放入到集合C中,请问你会怎么编程实现?
3、深拷贝,浅拷贝区别?
深拷贝:除了对象本身被复制外,对象所包含的所有成员变量都会被复制,包括引用类型的成员对象
浅拷贝:只复制当前对象包含的值类型的成员变量,而引用类型的成员变量没有被复制
4、一个main方法运行,是单线程还是多线程?
多线程:因为java有个重要的特性,垃圾回收机制,主线程(用户线程),垃圾回收线程GC(守护线程),同时存在
5、什么是悲观锁,乐观锁
1、悲观锁:是利用数据库本身的锁机制来实现,会锁记录
例如:select * from t_table where id = 1 for update
2、乐观锁:是一种不锁记录的实现方式,采用CAS模式,采用Version字段来作为判断依据,每次对数据的更新操作,都会对version+1,这样提交操作时,如果version的值被更改,则更新操作。
3、乐观锁的实现为什么要选择version字段,如果选择其他字段,比如业务字段store(库存),那么可能会出现所谓的ABA问题