1、如何实现一个IOC容器
- 在配置文件中配置包的扫描路径
- 递归扫描获取.class文件,添加到一个set集合中
- 遍历集合确定类上是否有注解,并交给IOC管理
- 遍历IOC容器,获取到每一个类的实例,判断是否存在依赖,然后注入。
2、什么是字节码,使用字节码的好处是什么
在java中,虚拟机可以理解的代码就是字节码,生成的字节码以.class的文件方式存在。
使用字节码可以让java代码实现多平台使用。
3、java中的类加载器
JDK中有三个自带的类加载器,BookStrapClassLoader、EXTClassLoader、APPClassLoader
BookStrapClassLoader是EXTClassLoader的父类加载器,负责加载%JAVA_HOME%/lib中的jar包和class文件。
EXTClassLoader是APPClassLoader的父类加载器,负责加载%JAVA_HOME%/lib/ext中的jar包和class文件。
APPClassLoader是自定义加载器的父类,可以用来加载classpath下的类文件。
继承classpath可以实现自定义类加载器。
4、双亲委派模型
实质就是:向上查找,查找缓存。向下查找,查找路径
5、java中的异常类
java中的所有异常类的顶级类是Throwable.
Throwable下有两个类分别是Error和Exception
当出现Error时,是程序无法处理的错误,一旦出现,则程序立马停止。
Exception可以分为两大类
- RunTimeException(运行时异常),尝尝发生在程序运行时,会导致当前程序运行失败。
- CheckedException(编译时异常),发生在编译阶段,发生该异常是往往编译不会通过。可以选择捕获或者上抛处理,一般选择捕获。
6、GC如何判断对象可以被回收
1、引用计数法:每一个对象都有一个引用计数属性,新增一个引用时,计数加一,释放一个引用时,计数减一。当计数为0时被回收。
- 注意:在java中可能出出现A引用B,B引用A,这时就算它们都不在使用,也不会被回收,因此在java中不使用
2、可达性分析法:从GC Roots对象开始向下搜索,当某个对象与GC Roots之间没有引用链,则证明该对象不可用,虚拟机就判定是可回收对象。但并不会立即回收。
- GC Roots对象有哪些:
- 虚拟机栈中引用的对象。
- 方法区中类静态属性引用的对象。
- 方法区中常量引用的对象。