面试题整理-JavaSE高级
反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
获取字节码的常用方法
- Class.forName
- 类名.class
- this.getClass()
类加载器
- 根类加载器(Bootstrap)
- 扩展类加载器(Extension)
- 系统(应用)类加载器(System\App)
- 自定义加载器(必须继承 ClassLoader)
双亲委托机制
当类加载器加载一个 class 时,它首先不会自己去尝试加载这个类,而是把类加载请求委派给父类加载器去完成,若父类加载器加载失败,在让父类的父类去加载
类的几种初始化
- 创建类的实例,也就是 new 一个对象
- 访问某个类或接口的静态变量,或者对该静态变量赋值
- 调用类的静态方法
- 反射
- 初始化一个类的子类(会首先初始化子类的父类)
- JVM 启动时标明的启动类,即文件名和类名相同的那个类
内存模型
- 堆(可以通过代码分配内存)
- 栈(后进先出,由系统分配内存)
- 方法区
- 常量池
- 程序计数器
设计模式
- 创建型
- 工厂方法模式
- 抽象工厂模式
- 单例模式
- 懒汉式
public class Singleton{ private static volatile Singleton singleton = null; private Singleton(){} public static Singleton getInstance(){ if(singleton == null){ return new Singleton(); } } }
- 饿汉式
public class Singleton{ public static Singleton instance = new Singleton(); private Singleton(){} public static Singleton getInstancce(){ return instance; } }
- 懒汉式
- 建造者模式
- 原型模式
- 结构型模式
- 适配器模式
- 装饰器模式
- 代理模式
- 外观模式
- 桥接模式
- 组合模式
- 享元模式
- 行为型模式
- 策略模式
- 模板方法模式
- 观察者模式
- 迭代子模式
- 责任链模式
- 命令模式
- 备忘录模式
- 状态模式
- 访问者模式
- 中介者模式
- 解释器模式
JVM
GC
主要回收JVM 中的方法区和堆
GC算法
- 标记—清除算法
- 复制算法
- 标记—整理算法
- 分代收集
- 根搜索算法
根搜索算法是通过一些“GC Roots”对象作为起点,从这些节点开始往下搜索,搜索通过的路径成为引用链(Reference Chain),当一个对象没有被 GC Roots 的引用链连接的时候,说明这个对象是不可用的。
GC Roots:
a) 虚拟机栈(栈帧中的本地变量表)中的引用的对象。
b) 方法区域中的类静态属性引用的对象。
c) 方法区域中常量引用的对象。
d) 本地方法栈中 JNI(Native 方法)的引用的对象。