主要面试层面来组织
一、 Java平台的理解、编译解释执行的理解
Java平台的理解
1、跨平台特性(Java编译解释执行)
.java文件通过JDK中的Javac编译为 .class字节码文件通过JVM解释为二进制机器码
编译解释执行—这个过程中,会有JIT也就是动态编译器将频繁使用到的代码,直接编译为二进制机器码;后来的AOP会直接将全部代码编译为机器码
2、垃圾回收机制
内存空间+堆中的GC回收方法
二、Exception和Error区别
1、Exception和Error的关系
补张图关系图
扩展:
ClassNotFoundException:通过反射机制class.forName()动态加载类,但是路径中没有。
**NoClassDefFoundError:**编译时类信息还有,但是运行时类定义信息就没有了,常见情况就是打包丢失了部分文件。
2、Exception的处理
异常捕获尽量具体
不要生吞异常
三、final、finally、finalize区别
final:变量、方法、类
finally:保障重点代码一定会被执行
finalize:在GC之前完成某些特定资源的回收
四、强引用、软引用、弱引用、虚引用
强引用:GC不回收
软引用:OOM之前会被清除
弱引用:用来做缓存,对象存在就使用;不存在就重新创建
虚引用:被finalize之后,用来实现清理的某些机制
五、String、StringBuffer、StringBuilder
回答思路:从可变 新对象的产生 线程安全问题-----是否频繁拼接、修剪产生新对象引出abstractStringBuilder------是否考虑安全 多线程中使用StringBuffer ,单线程中使用StringBuilder
六、动态代理原理
目前没有找到想要的答案
反射
运行时可以访问类的属性、方法;调用类的属性和方法;修改类的定义
也就是说,利用Java的反射机制可以加载一个运行时才得知名称的class,获得其构造方法,生成其对象实体,能对其设值并唤起其method。
七、Int Integer
回答方法是:基本类型 适合运算
包装类型 适合业务操作+弥补计算能力的不足,使用value of缓存机制弥补
具体: 原始数据类型和Java泛型不能配合使用,所以设计了自动装箱和自动拆箱,本质是primitive value 和 object之间的隐式转换机制。Primitive value存储的在内存中的位置就是值,而Object 存储的是reference 需要找下一个内存空间,需要更多的IO,所以计算性能比原始类型差,但针对于业务问题,Object具有generic的能力。总结就是计算问题使用原始类,处理业务问题用Object,为弥补计算能力不足问题,设计了static valueOf()方法提供缓存机制。
八、Vector ArrayList LinkedList
回答方式:
总说:都是元素可重复的有序List集合
分点:底层结构、增加删除的操作时间复杂度、查找的时间复杂度、线程是否安全
深入刨析:ArrayList LinkedList底层的源码分析—很简单,自己可以看懂
九、HashMap HashTable TreeMap
回答方式:
总说:都位于Map集合下
分说:键值可不可以用null、容量、线程安全
深入刨析:HashMap底层源码的实现
这个博主讲的很好:HashMap源码解析
十、ConcurrentHashMap底层源码的实现
深入刨析:ConcurrentHashMap源码实现
目前没有看到特别合适的讲解