java面试题 二

这篇博客主要讨论了Java面试中常见的知识点,包括普通类与抽象类的区别、抽象类与接口的对比、IO流的分类、BIO、NIO、AIO的工作模式,以及Collection和Collections接口的差异。此外,还详细阐述了List、Set、Map之间的特性差异,特别提到了HashMap和HashTable的区别以及它们的实现原理,最后深入解析了HashSet的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.普通类和抽象类有哪些区别?

  • 普通类不能包含抽象方法,抽象类可以包含抽象方法.
  • 抽象类不能直接实例化,普通类可以直接实例化.

2.抽象类能使用final修饰吗?
不能,定义抽象类就是让其他类继承的,如果定义为final该类就不能被继承,这样彼此就会产生矛盾,所以final不能修饰抽象类.

3.接口和抽象类有什么区别?

  • 实现:抽象类的子类使用extends来继承;接口必须使用implements来实现接口
  • 构造函数:抽象类可以有构造函数;接口不能有
  • main方法:抽象类可以有main方法,并且我们能运行它;接口不能有main方法.
  • 实现数量:类可以有多个接口;但是继承只能继承一个抽象类.
  • 访问修饰符:接口中的方法默认使用public修饰;抽象类中的方法是可以任意访问修饰符的

4. java 中 IO 流分为几种?
安功能来分:输入流input,输出流output
按类型来分:字节流,字符流

字节流和字符流的区别是:字节流按8位传输以字节为单位输入输出数据,字符流按16位

5.BIO,NIO,AIO有什么区别?
BIO:同步阻塞IO,就是我们平常使用的传统IO,他的特点是模式简单使用方便,并发处理能力低
NIO:同步非阻塞IO,是传统IO的升级,客户端和服务器端通过 通讯,实现了多路复用.
AIO:是NIO的升级,实现了异步非阻塞IO,异步IO的操作基于事件和回调机制.

6.Collection和Collections有什么区别?
java.util.Collection是一个集合接口.他提供了对集合对象进行基本操作的通用接口方法.Collection接口在java类库中有很多具体的实现.Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set.

Collections则是集合类的一个工具类,其中提供了一系列静态方法,用于对集合元素进行排序,搜索以及线程安全等各种操作.

7.List,Set.Map之间的区别是
Lsit: 继承接口为Collection,实现类是AbstartList常见子类有ArrayList,LinkedList,Vector,元素是可重复的,并且有序的,Vector线程安全
Set: 继承接口为Collection,实现类是AbstartSet常见子类有Hashset,LinkedHashSet,treeSet,元素是不可重复的,无序的.
Map: 常见实现类是HashMap,HashTable,不可重复的,HashTable是线程安全的.

8.HashTable和HashMap的区别?

HashMap去掉了HashTable的contains方法,加上了containsValue和containsKey方法.
HashTable是同步的,HashMap是非同步的,效率上比hashTable要高.
hashMap允许空键值,而hashTable不允许

9.说一下hashMap的实现原理

hashMap概述:hashMap是基于哈希表的Map接口非同步实现,此实现提供所有可选的映射操作,并允许使用null值和null键,此类不保证映射的顺序.

hashMap的数据结构:hashMap实际上是一个"链表散列"的数据结构,及数组和链表的结合体

当我们网hashMap中存放元素时,首先根据key的hashcode重新计算hash值,根据hash值得到这个元素在数组中的下标位置,如果数组中该位置存放了其他值,name在这个位置上元素将以列表的形式存放,新加入的放在链头,先加入的放在链尾,如果数组中该位置没有元素,就直接将该元素放到数组上的该位置.
需要注意的是jdk1.8之后对hashMap进行了优化,当链表中的数据超过八个之后,该链表会转为红黑树来提高查询效率

10.HashSet的实现原理

HashSet底层由HashMap实现
HashSet的值存放于HashMap的key上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值