1、java的特征有哪些:继承、封装、多态。 增加了代码的复用性和可移植性、健壮性、灵活性
2、ArrayList和LinkedList的区别:本身都实现了类似的接口,但是底层的数据结构是不一样的
Array..底层是用数组来实现的
Linked..不需要像数组那样重新计算大小或者是重新索引
所以插入数据或者是删除数据比较多的时候,可以用LinkedList链表
如果本事访问的数据比较多,可以用Arraylist
3、Java中sleep和wait方法的区别
sleep是属于Thread类中的static方法,wait属于Object类的方法
sleep是属于TIMED_WAITING,自动被唤醒、wait属于WAITING,需要手动唤醒
sleep方法在持有锁是,执行,不会释放资源、wait在执行会,会释放锁资源
sleep可以在持有锁或者不持有锁时执行。wait方法必须在只有锁时才可以执行。
wait方法的关键在于,这个方法必须是持有一个ObjectMonitor对象,如果没有此类操作对象的锁
那么就无法执行。
4、Java接口和抽
象类的区别
抽象类:抽象类中可以定义构造器 接口:接口中不能定义构造器
可以有抽象方法和具体方法 方法全部都是抽象方法
接口中的成员全是public的 抽象类中的成员可以是private、默认等
抽象类中可以定义成员变量 接口中定义的成员变量实际上都是常量
有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法 接口中不能有静态方法
抽象类中可以包括静态方法 一个类可以有多个接口
一个类只能继承一个抽象类
再上一个高度的话就是抽象类对接的就是在我们的脑海或者是印象中已经存在的概念,而接口的话,重点则是在于描述一个物体所具有的一个特征
5、(1)解释一下对象的创建过程
Object o = new Object(),实际上是三部分:分配空间(默认是0)、构造方法、建立关联 即半初始化
(2)DCL要不要加volatile问题
DCL:一种编程模型,
指令重排
(3) 对象在内存中的存储布局
对于一个普通对象来讲,其分为4个板块,是markword(8字节)、类型指针(4字节)(8字节)、类型指针(4字节)、实例数据、对齐
(4)对象头具体包括什么?
markword(8字节)、类型指针或者称之为class pointer(4字节)、以及锁信息
(5)对象怎么定位
1、直接定位:JVM是直接定位 2、间接定位:通过指针指到结构体。 主要体现在垃圾回收的方面
(6)对象怎么分配
1、new一个对象时候首先尝试往栈上建立,好处:在需要回收对象时不需要回收线程的出现,把对象推出栈外即完成
2、如果对象够大就直接进入老年代进行回收
3、尝试线程本地分配 进入伊甸区
4、后进行反复的年龄判断,年龄足够就进入回收,不足够继续循环
(7) Object o = new Object()在内存中占用多少字节?
16字节
markword(8字节)主要包含三个信息,即为锁信息、hashCode、GC