这篇文章记录在准备Java后端面试复习过程中网上常见的考题,同时也会标明题目出现频率,方便大家参考。有缺少、错误的部分欢迎大家补充纠正。–持续更新
图片来源:牛客网面经
Java面试考题锦集之Java基础

数据类型

Java中的八大类型及其包装类型(占用字节数)

Java面向对象

常见

Java 接口\抽象类?
重载和重写?

Java List

高频

ArrayList和LinkedList的区别?分别用在什么场景?

①ArrayList和LinkedList可想从名字分析,它们一个是Array(动态数组)的数据结构,一个是Link(链表)的数据结构,此外,它们两个都是对List接口的实现。
前者是数组队列,相当于动态数组;后者为双向链表结构,也可当作堆栈、队列、双端队列
②当随机访问List时(get和set操作),ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。
③当对数据进行增加和删除的操作时(add和remove操作),LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。
④从利用效率来看,ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。
⑤ArrayList主要控件开销在于需要在lList列表预留一定空间;而LinkList主要控件开销在于需要存储结点信息以及结点指针信息。

场景:
链表,插入删除快,查找修改慢。 适用于频繁增删的场景。
数组,查找快,插入删除慢。 适用于频繁查找和修改的场景。

常见

少见

Java Set

常见

Set是有序的,这句话对吗?

Java Map

高频

hashtable和hashmap的区别及实现原理,

hashmap会问到数组索引,hash碰撞怎么解决?

请你说明HashMap和Hashtable的区别?

HashMap和Hashtable都实现了Map接口,因此很多特性非常相似。但是,他们有以下不同点:
HashMap允许键和值是null,而Hashtable不允许键或者值是null。
Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。
HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(Enumeration)。
一般认为Hashtable是一个遗留的类。

HashMap 和 ConcurrentHashMap?
如何使HashMap变得安全?
ConcurrentHashMap如何保证线程安全的?

常见

请说明Collection 和 Collections的区别?

Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

synchronized?
HashMap底层实现?
hash冲突了解哪些?

少见

equals 和 hashCode ?
volatile?
Collection集合接口和Map接口有什么关系?

没有直接关系,但是一些子类会有依赖,Collection是最基本的集合接口,声明了适用于JAVA集合(只包括Set和List)的通用方法。Map接口并不是Collection接口的子接口,但是它仍然被看作是Collection框架的一部分。

Map的各种实现类,它们有什么区别

JVM

高频

JVM 的内存结构?
垃圾回收(器),各自的优缺点?
分代?
类的实例化顺序?

比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序?

java的.class加载机制,java到class到二进制字节码文件的转化过程?

常见

JVM 调优?
栈、堆和方法区的介绍?
Java中的内存溢出?
内存泄漏?内存泄漏会导致什么?

少见

CGLib
jvm 栈空间分配?
jvm的作用?

Java 并发编程

线程池原理、ThreadLocal?
悲观锁与乐观锁?

常见

synchronized?

底层实现:
进入时,执行 monitorenter,将计数器 +1,释放锁monitorexit 时,计数器-1;
当一个线程判断到计数器为 0 时,则当前锁空闲,可以占用;反之,当前线程进入等待状态。

含义:(monitor 机制)
Synchronized 是在加锁,加对象锁。对象锁是一种重量锁(monitor),synchronized 的锁机制会根据线程竞争情况在运行时会有偏向锁(单一线程)、轻量锁(多个线程访问 synchronized 区域)、对象锁(重量锁,多个线程存在竞争的情况)、自旋锁等。
该关键字是一个几种锁的封装。

volatile?

答:该关键字可以保证可见性不保证原子性。
功能:

  1. 主内存和工作内存,直接与主内存产生交互,进行读写操作,保证可见性;
  2. 禁止 JVM 进行的指令重排序。

异常

高频

Exception 与 Error?

常见

Java异常体系

设计模式

单例
策略

相关文章: