写点什么

成功拿到大厂 offer 的我熬夜整理了这份 Java 高频面试题(含答案)

发布于: 2 小时前
成功拿到大厂offer的我熬夜整理了这份Java高频面试题(含答案)

今日分享开始啦,请大家多多指教~

Throw 和 throws 的区别?

throws 用在方法定义上,后面跟着的是异常类,可以多个。

而 throw 用在方法内部,后面跟着的是异常对象。

throws 表示这个方法可能会抛出哪些异常,这样调用者可以知道这个方法会抛出什么异常,可以提前进行预处理; throw 表示要抛出什么异常对象,throw 后面的语句不会被执行到,会将异常抛出到调用者。

throws 和 throw 都不处理异常,而是将抛出或者可能抛出异常,由调用者去处理异常。

获取 Class 对象有哪些方法?

调用对象的 getClass() 方法来获取。

Person person = new Person();

Class<? extends Person> aClass = person.getClass();

调用类的 class 属性来获取。

Class<Person> personClass = Person.class;

调用 Class 类的 forName() 静态方法来获取,比较常用,也是性能最好的。

Class<?> aClass = Class.forName("com.chenpi.Person");

什么是 Java 反射机制?

Java 反射机制是在运行期,对于任意一个类,都能够获得这个类的所有属性和方法。对于任意一个对象都能够调用它的任意一个属性和方法。这种在运行时动态地获取信息以及动态调用对象的方法的功能称为 Java 的反射机制。

我们知道,程序运行时,允许改变程序结构或变量类型的语言称为动态语言。例如 Python,Ruby 等是动态语言。而 Java 不是动态语言,但是 Java 的反射机制让它成为准动态语言。反射允许静态语言在运行时检查,修改程序的结构与行为。

final 的作用?

final 修饰类时,说明这个类不能被继承。如果你希望一个不要被继承,就可以用 final 关键字修饰。

final 修饰方法,说明这个方法不能被重写。

final 修饰变量,说明这个变量的值赋值后不能被修改。

Java 集合类哪些是线程安全和线程不安全的?

线程安全的集合

  • Vector

  • HashTable

  • Stack

  • Properties

线程不安全的集合

  • 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 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。

  • volatile 仅能使用在变量级别;synchronized 则可以使用在变量、方法、和类级别的。

  • volatile 仅能实现变量的修改可见性,不能保证原子性;而 synchronized 则可以保证变量的修改可见性和原子性。

  • volatile 不会造成线程的阻塞;synchronized 可能会造成线程的阻塞。

  • volatile 标记的变量不会被编译器优化;synchronized 标记的变量可以被编译器优化。

今日份分享已结束,请大家多多包涵和指点!


如何获取?

转发分享此文,后台私信小编:“1”即可获取。(注:转发分享,感谢大家)

用户头像

还未添加个人签名 2021.04.20 加入

Java工具与相关资料获取等WX: gsh950924(备注来源)

评论

发布
暂无评论
成功拿到大厂offer的我熬夜整理了这份Java高频面试题(含答案)