java面试题

回答内容可能比较简洁,可能有的点也不足(方便理解,更接近语言表达,请不要太较真)

1、多态使用场景:
设备类,下面有烟感设备类和智慧用电设备类,父类可以调用子类

2、抽象:
抽象主要是将行为和实现分离,比如设备有操作和抄表功能,声明就像是目录

3、怎么理解万物皆对象
比如设备告警:是什么设备告警,这个设备告什么警,面向对象理解是A设备类,A告警

4、三种创建线程方式和几种状态,你喜欢那种创建方式?:
1、继承thread 2、runnable接口 3、线程池
我比较喜欢runnable接口,因为他简短,而且可以多实现,使用更加灵活高效
1、就绪(Runnable):线程准备运行,不一定立马就能开始执行。
2、运行中(Running):进程正在执行线程的代码。
3、等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。
4、睡眠中(Sleeping):线程被强制睡眠。
5、I/O阻塞(Blocked on I/O):等待I/O操作完成。
6、同步阻塞(Blocked on Synchronization):等待获取锁。
7、死亡(Dead):线程完成了执行。

5、同步代码块和同步方法区别?
同步方法粗粒度锁,代码块细粒度锁。

6、线程如何指定获取锁的顺序?
比如有两个线程,设置执行完A的线程,才可以执行B线程

7、Java集合类基本接口:
Collection:代表一组对象,每一个对象都是它的子元素
1、Set:不包含重复的Collection
2、List:有顺序的并且可以重复
3、Map主键不能重复

8、为什么集合类没有实现克隆和序列化接口?
克隆或者是序列化的语义和含义是跟具体的实现相关的

9、什么是迭代器(Iterator)?
迭代器接口提供了很多集合的方法,可以在迭代过程中删除底层集合的元素

10、Iterator和ListIterator的区别是什么?
1、Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List
2、Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
3、ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素获取等

11、快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
1、安全失败是基于对底层集合做拷贝,因此,它不受源集合上修改的影响
2、安全失败不会抛出异常,快速失败会抛出异常。 并发异常(ConcurrentModificationException)java.util包下面的所有的集合类都是快速失败的,而java.util.concurrent包下面的所有的类都是安全失败的。快速失败的迭代器会抛出java.util包下面的所有的集合类都是快速失败的,而java.util.concurrent包下面的所有的类都是安全失败的。快速失败的迭代器会抛出

12、什么是Java优先级队列?
优先级队列中的元素可以按照任意的顺序插入,却总是按照排序的顺序进行检索。无论何时调用remove方法,总会获得当前优先级队列中的最小元素,但并不是对所有元素都排序。它是采用了堆(一个可以自我调整的二叉树),执行增加删除操作后,可以让最小元素移动到根。

13、如何权衡是使用无序的数组还是有序的数组?
查找多的用有序,查找少的用无序,添加多的用无序

14、Enumeration接口和Iterator接口的区别有哪些?
Enumeration速度是Iterator的2倍,同时占用更少的内存,Enumeration线程不安全

15、finalize()方法什么时候被调用?
析构函数(finalization)的目的是什么?在释放对象占用的内存之前,垃圾收集器会调用对象的finalize()方法。一般建议在该方法中释放对象持有的资源。

16、Java堆的结构是什么样子的?什么是堆中的永久代(Perm Gen space)?
JVM的堆是运行时数据区,所有类的实例和数组都是在堆上分配内存。它在JVM启动的时候被创建。堆内存是由存活和死亡的对象组成的。存活的对象是应用可以访问的,不会被垃圾回收。死亡的对象是应用不可访问尚且还没有被垃圾收集器回收掉的对象。一直到垃圾收集器把这些对象回收掉之前,他们会一直占据堆内存空间。

17、串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等规模和大规模数据的应用程序。而串行收集器对大多数的小应用。

18、Java中的两种异常类型是什么?他们有什么区别?
受检查的(checked)异常和不受检查的(unchecked)异常。不受检测不需要声明,受监察需要声明

19、Java中Exception和Error有什么区别?
Exception和Error都是Throwable的子类。Exception用于用户程序可以捕获的异常情况。Error定义了不期望被用户程序捕获的异常。

20、throw和throws有什么区别?
throw关键字用来在程序中明确的抛出异常,相反,throws语句用来表明方法不能处理的异常。每一个方法都必须要指定哪些异常不能处理,所以方法的调用者才能够确保处理可能发生的异常,多个异常是用逗号分隔的。

21、Java中的HashMap的工作原理是什么?
Java中的HashMap是以键值对(key-value)的形式存储元素的。HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。

22、hashCode()和equals()方法的重要性体现在什么地方?
Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法。如果没有正确的实现这两个方法,两个不同的键可能会有相同的hash值,因此,可能会被集合认为是相等的。而且,这两个方法也用来发现重复元素。所以这两个方法的实现对HashMap的精确性和正确性是至关重要的。

23、HashMap和Hashtable有什么区别?
HashMap允许键和值是null,而Hashtable不允许键或者值是null。
Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。
HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(Enumeration)。
一般认为Hashtable是一个遗留的类。

24、异常处理的时候,finally代码块的重要性是什么?
无论是否抛出异常,finally代码块总是会被执行。就算是没有catch语句同时又抛出异常的情况下,finally代码块仍然会被执行。最后要说的是,finally代码块主要用来释放资源,比如:I/O缓冲区,数据库连接。

25、异常处理完成以后,Exception对象会发生什么变化?
Exception对象会在下一个垃圾回收过程中被回收掉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值