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类

待完善。。。

posted @ 2022-02-13 20:42  lovekey  阅读(36)  评论(0)    收藏  举报