成功拿到大厂 offer 的我熬夜整理了这份 Java 高频面试题(含答案)
线程不安全的集合
ArrayList
LinkedList
HashMap
HashSet
TreeMap
TreeSet
JAVA 线程创建方式有哪些?
继承 Thread 类,重写 run 方法。
实现 Runnable 接口,重写 run 方法。
实现 Callable 接口,重写 call 方法,这是一个由返回值的方法。
怎么实现动态代理?
JDK 原生动态代理
Cglib 动态代理
什么是死锁?
======
线程 A 持有独占锁 a,并且还尝试获取独占锁 b 的同时,线程 B 持有独占锁 b,并且还尝试获取独占锁 a 的情况下,这时 A 和 B 线程都在等待对方释放需要的锁,从而发生的阻塞现象,我们称为死锁。
ArrayList 和 LinkedList 的区别?
ArrayList 底层是基于动态数组的数据结构实现,而 LinkedList 是基于双向链表的数据结构实现。
因为 ArrayList 底层是基于数组实现的,所以 ArrayList 比 LinkedList 随机访问效率快。而 LinkedList 是链表线性的数据结构,所以需要移动指针从前往后依次查找,效率比较慢。
在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高。
需要频繁读取集合中的元素时,推荐使用 ArrayList;在插入和删除操作较多时,推荐使用 LinkedList。
并行和并发有什么区别?
并行是指两个或者多个事件在同一时刻发生;并发是指两个或多个事件在同一时间间隔发生。
并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
Java 访问修饰符有哪些?
构造器(constructor)是否可被重写(override)?
=======================
==========
构造器是不能被继承的,所以不能被重写,但是可以被重载。
String 属于基础的数据类型吗?
String 不属于基础类型,String 属于引用类型。基础类型有 8 种:byte、boolean、char、short、int、float、long、double。
普通类和抽象类有哪些区别?
普通类不能包含抽象方法,抽象类可以包含抽象方法。
抽象类不能直接实例化,普通类可以直接实例化。
BIO、NIO、AIO 有什么区别?
BIO:Block IO 同步阻塞式 IO,平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
NIO:New IO 同步非阻塞 IO,传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。
JDK 和 JRE 区别?
JDK:Java Development Kit,java 开发工具包,提供了 java 的开发环境和运行环境。
JRE:Java Runtime Environment,java 运行环境,提供了 java 的运行环境。
什么是守护线程?
========
守护线程(daemon thread),是一个服务线程,即服务其他线程的线程。
线程的 run() 和 start() 有什么区别?
线程真正执行的操作是定义在 run() 方法中的,也称为线程体。而通过调用 Thread 类的 start() 方法来启动一个线程。
synchronized 和 volatile 的区别?
volatile 可以告诉告诉 jvm 当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
评论