Java基础知识面试总结(一)
Java基础知识面试总结(一)
一、 Java面向对象特征
面向对象的三大特征:封装、继承、多态。
- 封装说明一个类行为和属性与其他类的关系,低耦合,高内聚
- 继承是父类和子类的关系
- 多态是类与类的关系
1、封装
- 定义:在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问
- 方法:利用权限修饰符来描述方法体或属性
2、继承
- 定义:继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力
- 方法:Java通过extends关键字来实现继承,父类中通过private定义的变量和方法不会被继承,不能在子类中直接操作父类通过private定义的变量以及方法
3、多态
- 定义:同一消息可以根据发送对象的不同而采用多种不同的行为方式。可以用于消除类型之间的耦合关系
- 方法:Java 中可以使用父类、接口变量引用子类、实现类对象
二、ArrayList和LinkedList区别
1、主要区别
- ArrayList是基于数组实现的,LinkedList是基于双链表实现的
- LinkedList还实现了Deque接口,Deque接口是Queue接口的子接口,它代表一个双向队列,因此LinkedList可以作为双向队列
- LinkedList需要更多内存,因为ArrayList的每个索引的位置是实际的数据,而LinkedList中的每个节点中存储的是实际的数据和前后节点
2、使用场景
- 一般来说,对数据有较多的随机访问,ArrayList要优于LinkedList
- 一般来说,对数据有较多的插入或删除操作,较少的随机访问,LinkedList要优于ArrayList
- 若在靠近末尾的地方插入,ArrayList只需要移动较少的数据,LinkedList则需要查找到列表尾部,反而耗费较多时间,这时ArrayList就比LinkedList快
三、高并发中的集合有哪些问题
1、线程安全集合类
- 类:Vector、HashTable
- 缺点:通过synchronized关键字保证线程安全,但效率较低
2、非线程安全集合类
- 类:ArrayList、HashMap
- 线程安全方法:使用Collections.synchronizedList(list)、Collections.synchronizedMap(map)方法。底层还是使用synchronized锁,效率略微提升
3、新线程安全集合类
-
类:ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet
-
底层采用Lock锁,效率提升较大
四、JDK的新特性(略)
- 接口默认方法
- Lambda表达式
- 函数式接口
五、抽象类和接口区别
1、抽象类
- 可以定义构造器
- 可以有抽象方法和具体方法
- 成员可以是private、default、protected、public修饰
- 可以定义成员变量
- 有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法
- 抽象类中可以包含静态方法
- 一个类只能继承一个抽象类
2、接口
- 不能定义构造器
- 方法全是抽象方法
- 成员全是public修饰
- 成员变量实际都是常量
- 不能有静态方法
- 一个类可以实现多个接口
六、HashMap和HashTable区别
- HashTable线程同步,HashMap非线程同步
- HashTable不允许key和value有空值,HashMap中允许key有一个空值,value可以有多个空值
- HashTable使用Enumeration,HashMap使用Iterator
- HashTable中hash数组默认大小为11,增加方式为old*2+1,HashMap中hash数组默认大小为16,增长方式为2的指数倍
- HashTable继承Dictionary类,HashMap继承AbstractMap类
七、HashMap线程安全方式
1、使用Collections.synchronizedMap()方法
Collections.synchronizedMap()方法返回一个线程安全的map,但返回的并不是HashMap,而是一个Map的实现。在synchronizedMap中,传入的HashMap被赋值给了Map类型的变量m,变量m返回为Map类型,而非HashMap。源码如下图所示:

synchronizedMap类所有方法中,将需要同步的对象mutex用synchronized修饰,保证其同步。
2、使用ConcurrentHashMap类
待完善。。。

浙公网安备 33010602011771号