此套面试题适用于Java开发的各个阶段面试,不过更偏向初级和中级开发人员!由于每一个问题的答案不唯一且都可以在网上搜索到答案,这里只给出问题,不列出参考答案,有兴趣的可以留言讨论,也欢迎大家的补充!
一、基础篇
1.1、Java基础面向对象的特征:继承、封装和多态
继承:子类继承父类,关键字extend,子类可以继承父类所有方法,但是只有子类存在的方法,父类却不能调用。
封装:使用private进行封装,不让外部直接访问,访问需要get,set方法
多态:简单理解就是事物的多种形态。专业的术语说就是:同一个实现接口,使用不同的实例而执行不同的操作。重写,重载等。
final, finally, finalize 的区别?
final:final是一个修饰词,主要修饰常量,被它修饰的都是不可变的常量。
finally:finally是在try{}catch{}finally{}中执行的,主要意思是不论是否异常,都会执行finally其中的方法。
finalize:finalize是gc回收,每当使用,都会自动回收JVM的的对象。(如需深究,请查看强引用,弱引用等)
Exception、Error、运行时异常与一般异常有何异同
Exception:只运行时才会出现的异常,统称为Exception。
Error:是系统启动时报错,这类就是Error。
运行时异常和一般异常的差别是:俩个虽然都是错误,但是一个是在jvm启动好之后出现的,一个是在启动且没启动成功而出现的。
请写出5种常见到的runtime exceptionNullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
int 和 Integer 有什么区别,Integer的值缓存范围
int:默认是+-21亿。
Integer:是在int在包装的对象。
Integer的缓存范围在-128到127。
包装类,装箱和拆箱?
包装类:把一个基本类型包装成一个类,一个是可以使这个类型具有很多可以调用的方法。二个是Java向面像对象语言的靠近。
装箱:将基本类型转换成包装类对象
拆箱:将包装类转换成基本类型对象
String、StringBuilder、StringBuffer?
String是一个字符串,且并不安全。且当你每拼接一个String类型的数据,都等于new了一次String,内存消耗大。
StringBuilder是一个类,但是不是线程安全的,但是效率高,如果只是用在拼接,适用于他。
StringBuffer和StringBuilder一样,但是他是线程安全的,但是效率略微低一点。
重载和重写的区别?
重载:重载用于当前类,如果有一个get()方法,然后再写了一个get(int a);这就是重载。
重写:用在父子继承,当父类的方法被子类继承,就需要重写到子类。
抽象类和接口有什么区别
抽象类:抽象类使用abstract 关键字,有构造方法,可继承, 不能用private,final修饰。
接口:接口使用interface关键字,接口的所有属性和方法必需是公开的,且属性都是公开静态的常量。无构造方法,不可继承,可实现。
说说反射的用途及实现
反射最重要的用途就是开发各种通用框架。因为他可以直接用“.”来调用属性和方法来实现。
实现:
(1).Class.forName(className)
(2).类名.class
(3).this.getClass()。
说说自定义注解的场景及实现
HTTP请求的GET与POST方式的区别
get请求的话,是可以直接在浏览器看到请求参数。安全性低。
post请求的话,是不能自爱浏览器地址上看到请求参数。安全性高。
get传送的数据量较小,不能大于2KB。post传送的数据量较大,默认不受限制。
Session与Cookie区别
session存在服务端,比较安全,但是比较占用内存资源,cookie存在客户端,安全性偏低,cookie单个最大存3k左右的数据。
列出自己常用的JDK包
java.awt.*
java.lang.*
java.sql.date
java.util.date
java.io.*
MVC设计思想
model,view,controller、
提高可视性。但是代码会变得复杂。
equals与==的区别
equals是比较值。
==是比较值的地址。
hashCode和equals方法的区别与联系
1.equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。
2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。
什么是Java序列化和反序列化,如何实现Java序列化?或者请解释Serializable 接口的作用
序列化:把Java对象转换为字节序列的过程。
反序列化:把字节序列恢复为Java对象的过程。
实现方式:
用io流把封装的数据传递给别人的接口,然后别人反序列化解析出对应的数据结构并保存。
Object类中常见的方法,为什么wait notify会放在Object里边?
Java的平台无关性如何体现出来的
JDK和JRE的区别
Java 8有哪些新特性
1.2、Java常见集合List 和 Set 区别
Set和hashCode以及equals方法的联系
List 和 Map 区别
Arraylist 与 LinkedList 区别
ArrayList 与 Vector 区别
HashMap 和 Hashtable 的区别
HashSet 和 HashMap 区别
HashMap 和 ConcurrentHashMap 的区别
HashMap 的工作原理及代码实现,什么时候用到红黑树
多线程情况下HashMap死循环的问题
HashMap出现Hash DOS攻击的问题
ConcurrentHashMap 的工作原理及代码实现,如何统计所有的元素个数
手写简单的HashMap
看过那些Java集合类的源码
1.3、进程和线程线程和进程的概念、并行和并发的概念
创建线程的方式及实现
进程间通信的方式
说说 CountDownLatch、CyclicBarrier 原理和区别
说说 Semaphore 原理
说说 Exchanger 原理
ThreadLocal 原理分析,ThreadLocal为什么会出现OOM,出现的深层次原理
讲讲线程池的实现原理
线程池的几种实现方式
线程的生命周期,状态是如何转移的
1.4、锁机制说说线程安全问题,什么是线程安全,如何保证线程安全
重入锁的概念,重入锁为什么可以防止死锁
产生死锁的四个条件(互斥、请求与保持、不剥夺、循环等待)
如何检查死锁(通过jConsole检查死锁)
volatile 实现原理(禁止指令重排、刷新内存)
synchronized 实现原理(对象监视器)
synchronized 与 lock 的区别
AQS同步队列
CAS无锁的概念、乐观锁和悲观锁
常见的原子操作类
什么是ABA问题,出现ABA问题JDK是如何解决的
乐观锁的业务场景及实现方式
Java 8并法包下常见的并发类
偏向锁、轻量级锁、重量级锁、自旋锁的概念
1.5、JVMJVM运行时内存区域划分
内存溢出OOM和堆栈溢出SOE的示例及原因、如何排查与解决
如何判断对象是否可以回收或存活
常见的GC回收算法及其含义
常见的JVM性能监控和故障处理工具类:jps、jstat、jmap、jinfo、jconsole等
JVM如何设置参数
JVM性能调优
类加载器、双亲委派模型、一个类的生命周期、类是如何加载到JVM中的
类加载的过程:加载、验证、准备、解析、初始化
强引用、软引用、弱引用、虚引用
Java内存模型JMM
1.6、设计模式常见的设计模式
设计模式的的六大原则及其含义
常见的单例模式以及各种实现方式的优缺点,哪一种最好,手写常见的单利模式
设计模式在实际场景中的应用
Spring中用到了哪些设计模式
MyBatis中用到了哪些设计模式
关键字:
无