类加载机制介绍一下?
类加载机制是指 Java 虚拟机运行 Java 程序时,将类加载到内存中的过程,包含 3 个阶段:
- 加载:类加载器负责去查找\的字节码,将其加载到内存中。
- 连接:分为 3 个子阶段。
- 验证:验证加载的类的格式是否正确,并且不包含不安全的构造。
- 准备:在内存中为类的静态变量分配空间,并且初始化。数值类型初始化为 0,引用类型初始化为 null
- 解析:将类、方法、接口、字段的符号引用解析为直接引用,即内存地址。
- 初始化:执行类的静态初始化代码。包括静态变量的赋值和静态代码块的执行。静态初始化在类的首次使用时进行,包括创建实例、访问静态字段或调用静态方法。
介绍一下双亲委派机制?
双亲委派机制是 Java 类加载器的一种设计模式。它保证了 Java 核心库的安全性和一致性。双亲委派机制就是当一个类加载器收到加载类的请求后,默认会委托其父级加载器去处理。只有当其父级加载器无法加载该类时,才会尝试自行加载。
双亲委派机制提高了安全性,防止 Java 核心库被篡改。因为所有的类最终都由顶层的类加载器去加载。并且由于类加载器直接从父级加载器那里加载类,也可以避免类的重复加载。
说一说你对 Spring AOP 的了解?
面向切面编程是对面向对象编程的补充和完善。OOP 通过封装、继承和多态等概念建立一种对象层次结构。但它只允许开发者定义纵向的关系,并不适合定义横向的关系。例如日志功能、事务管理、权限管理等。而 AOP 恰好相反,它通过一种"横切"的技术,剖解开封装的对象内部,将那些影响了多个类的公共行为封装到一个可重用模块,成为"切面"。所谓"切面",简单来说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,从而减少系统的重复代码,降低模块之间的耦合度,提高未来的可操作性和可扩展性。
说一说你对 Spring 中 IoC 的理解?
Spring IoC 即控制反转。它的核心思想是将对象的创建和依赖关系由容器来控制。而不需要我们自己去 new 出来。这有利于组件之间保持一种松散的耦合。
Spring 中的容器实际上就是一个 Map。Map 保存了各种对象。通过 DI 依赖注入,Spring 容器可以在运行时动态地将依赖注入到需要它的对象中去。而不是让对象自己去寻找或创建依赖。这可以在很大程度简化应用的开发,将应用从复杂的依赖关系中解放出来。举个例子,在实际项目中,一个 Service 类可能有成百上千个类作为它的底层。如果要实例化一个 Service,那么可能需要搞清它的所有底层类的构造函数。但是通过 IoC 的话,我们只需要配置好,然后在需要的地方引用就可以了。