2021Java面试题二(持续更新中~)

题目

12.ArrayList和LinkList的区别
13.HashMap和HashTable的区别 底层实现是什么
14.concurrentHashMap的原理
15.如何实现IOC容器
16.什么是字节码
17.java类加载器
18.双亲委托模型是什么
19.java中的异常体系
20.JVM的垃圾回收机制
21.线程生命周期和状态

个人理解

12.ArrayList和LinkList的区别

  1. ArrayList基于动态数组,使用的是连续的内存,可以使用下标访问(随机访问)PS:使用尾插法可以极大提升性能。
  2. LinkList基于链表,使用的是分散的内存,遍历必须使用迭代器,适合数据插入和删除。

13.HashMap和HashTable的区别 底层实现是什么
区别:HashMap没有用synchronized修饰,线程不安全,而HashTable是线程安全的,HashMap允许key和value为null,而HashTable不允许。
底层实现:HashMap的底层和HashTable的底层都是用数组+链表实现的,jdk8中,链表高度达到8(低于6时会变回链表),数组长度达到64就会转变成红黑树,数组对应的是key的hash值,链表存元素(元素在内部类以Node节点存在)

14.concurrentHashMap的原理
jdk7中的数据结构是reentrantlock+segment+HashEntry,segment中包含了HashEntry数组,每个HashEntry中又有一个链表结构,查询元素时会先根据Hash定位到segment,再找到元素在链表的位置,锁只会锁住定位到的segment,其他的segment不受影响。
jdk8中的数据结构是synchronized+CAS+Node+红黑树,查找替换赋值操作会用到CAS,锁机制只会锁住Node节点的head节点。

15.如何实现IOC容器

  1. 写配置文件,配置包扫描路径
  2. 递归包获取.class文件
  3. 反射,确定需要交给IOC管理的类
  4. 对需要注入的类进行依赖注入

16.什么是字节码
提供给JVM理解的代码叫做字节码。

17.java类加载器
JDK自带三个类加载器,bootstrap classloader,Extclassloader和appclassloader,bootstrap classloader是Extclassloader的父类加载器,bootstrap classloader会加载JAVAHOME/lib中的jar包和class文件,Extclassloader会加载JAVAHOME/lib/ext文件下的jar包和class文件,appclassloader会加载classpath下的类文件。

18.双亲委托模型是什么
双亲委派是向上委派,向下查找。向上委派即查找缓存,向下查找即查找加载路径。主要的作用是为了安全

19.java中的异常体系
java中所有的异常来自顶级父类Throwable,下面有两个子类—error和exception,error是程序无法处理的错误,exception是可以处理的错误,exception不会导致程序停止。exception又分为两种,runtimeexception和checkedexception,一个是运行时的异常,一个是编译时的异常。

20.JVM的垃圾回收机制
JVM用到的回收方法是可达性分析法,从GC Roots开始向下搜索,搜索走过的路径被称为引用链,当一个对象跟GC Roots不相连时,JVM就可以判断其为可回收对象。可达性分析法中,不可达的对象不会立即死亡,会有第二次机会,若该对象没有覆盖finalize方法就直接死亡,若覆盖了就会被放入F-Queue对象,在finalize执行过后,GC Roots会判断对象是否可达,不可达就直接回收。
GC Roots的对象有栈中引用的对象,方法区静态属性引用的对象,方法区常量引用的对象,Native方法引用的对象。

21.线程生命周期和状态
线程的状态有创建,就绪,运行,阻塞和死亡。
阻塞的情况有三种,等待阻塞,同步阻塞和其他阻塞。

最后

明天还会更新的!
如果有理解不对的地方,欢迎指出。
谢谢

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值