java面试题

常见的java面试题

基础篇

(1)重载和覆写的区别:

NO 区别 重载 覆写
1 英语单词 Overloading Override
2 概念 方法名称相同,参数的类型及个数不同 方法名称、返回类型、参数的类型及个数完全相同
3 范围 发生在一个类之中 继承关系中
4   没有权限要求 被覆写的方法不能拥有比父类更严格的访问权限

方法重载的时候返回值可以不同,但是良好的设计要求返回类型一致。

(2)抽象类与接口

NO 区别 抽象类 接口
1 关键字 abstract class 类名称{} interface 接口名字{}
2 结构组成 抽象方法、普通方法、构造方法、全局常量、全局变量、属性 抽象方法和全局变量
3 权限 可以使用各种权限 只能是public
4 子类使用 子类用extends关键字来继承抽象类 子类用implements关键字来实现接口
5 关系 一个抽象类可以实现若干个接口 一个接口不能继承抽象类,但是可以使用extends类继承多个父接口
6 子类限制 一个子类只能继承一个抽象类 一个子类可以实现多个接口

(3)throw和throws的区别

throw 用于方法内部,主要表示进行手工的异常抛出
throws 主要在方法声明上使用,明确的告诉用户本方法可能产生异常,此时,调用该方法的函数需要使用try..catch进行异常捕获。注意:使用RuntimeException定义的异常类可以不需要强制性进行异常处理。

 

(4)sleep()和wait()的区别

sleep() 是Thread类中定义的方法,到了一定的时间后休眠的线程可以自动唤醒
wait() 是Object类中定义的方法,如果想要唤醒,必须使用notify(),notifyAll()方法才可以唤醒.

1)wait方法必须正在同步环境下使用,比如synchronized方法或者同步代码块。如果你不在同步条件下使用,会抛出IllegalMonitorStateException异常。另外,sleep方法不需要再同步条件下调用,你可以任意正常的使用。

2)调用wait()的时候方法会释放当前持有的锁,而sleep方法不会释放任何锁,sleep会暂停、释放CPU资源和给其他线程有执行的机会。一般wait()和notify()方法使用于线程间的通信;sleep()方法用于暂停当前线程的执行。

3)wait方法最好在循环里面调用,是为了处理错误的通告,比如说,即使线程唤醒了,等待状态仍然适用。(可以理解为有多个线程调用了wait,但是此时只有一个notify,可能唤醒的线程是不是当前这个wait的线程),然而sleep方法没这样的限制。最好别在循环里面调用sleep方法。

 

(5)String、StringBuffer、StringBuilder区别

String的内容不可变,StringBuffer和StringBuilder的内容可变
StringBuffer采用同步处理,属于线程安全操作,而StringBuilder采用异步处理,属于线程不安全操作

StringBuffer 保证线程安全的手段是在所有的方法中添加关键字 synchronized 实现的。

 

(6)final、finally、finalize的区别

final 是一个关键字,用于定义不能被继承的父类,不能被覆写的方法、常量
finally 是异常处理的同一接口
finalize 是Object类中的一个方法,用于在对象回收前进行调用。

(7)Comparable、Comparator的区别

java.lang.Comparable:是在一个类定义的时候默认实现好的接口,里面存在有comparableTo()方法
java.util.Comparator:是挽救的比较接口,需要单独定义一个比较规则类,定义有compare()、equals()方法

 

java算法题:java常见面试题算法

 

java并发

java 高并发面试题

 

java网络

 

JVM

ava常见面试题及答案 11-20(JVM篇)

JVM(8):JVM知识点总览-高级Java工程师面试必备

JVM相关面试题及答案

 

类加载

Java 类加载机制(阿里面试题)-何时初始化类

从经典面试题看java中类的加载机制

JVM(四)—一道面试题搞懂JVM类加载机制

 

 

你可能感兴趣的:(java)