-
设计模式面试路线最全整理(附面试题精选及答案)
设计模式面试路线最全整理,附设计模式高频必考面试题及答案。 搞定设计模式面试题,看这一篇就够了,不用四处找资料,节约大量时间。 1 设计模式面试题及答案 什么是设计模式 为什么要使用设计模式 有多少种设计模式,以及其分类 设计模式有哪些原则 基本的Java编程设计应遵循的规则 设计模式的应用范围 JDK类库常用的设计模式有哪些 IO 使用了什么设计模式 什么是对象粒度 什么是单例模式 单例模…... -
AOP 是什么?有哪些作用?
参考答案 AOP 的概念 AOP 的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程); 是函数式编程的一种衍生泛型,隶属于软工范畴,指导开发者如何组织程序结构; 是面向对象编程(OOP)的一种补充; 是Spring框架中的一个重要内容。 AOP 的作用 在不修改目标类代码的前提下,去增强目标类的功能,通过 预编译方式 或 运行期动态代理实现程序功能的…... -
Spring 如何选择:用 JDK 动态代理还是 CGLIB 动态代理?
参考答案 Spring 如何选择:用 JDK 还是 CGLIB ? 当 Bean 实现接口时,Spring 用JDK 动态代理。 当 Bean 没有实现接口时,Spring 使用CGLIB 动态代理实现。 可以强制使用CGLIB。 以上,是Java面试题【Spring 如何选择:用 JDK 还是 CGLIB ?】的参考答案。 输出,是最好的学习方法。 欢迎在评论区留下你的问题、笔记或…... -
CGLIB 和 JDK ,哪个更快?
参考答案 CGLIB 与 JDK 对比哪个更快,不同的 jdk 版本,会有差异,以下详解。 使用 CGLIB 实现动态代理, CGLIB 底层采用 ASM 字节码生成框架,使用字节码技术生成代理类, 在 jdk6 之前,比使用 Java 反射效率要高。但要注意,由于CGLIB 原理是动态生成被代理类的子类, CGLIB 不能对声明为 final 的方法进行代理 。 从jdk6、jdk7 到 jdk…... -
JDK静态代理、JDK动态代理、CGLIB动态代理的区别/优缺点
参考答案 JDK静态代理、JDK动态代理、CGLIB动态代理的区别以及优缺点,总结如下图: 代理方式 实现 优点 缺点 特点 JDK 静态代理 代理类与委托类实现同一接口,并且在代理类中需要硬编码接口 实现简单,容易理解 代理类需要硬编码接口,在实际应用中可能会导致重复编码,浪费存储空间并且效率很低 JDK 动态代理 代理类与委托类实现同一接口,主要是通过代理类实现InvocationHandle…... -
Fastclass机制是什么,说下
参考答案 Fastclass机制是什么 CGLIB 是采用 FastClass 机制,实现对被拦截方法的调用的。 FastClass 机制,是对一个类的方法建立索引,通过索引直接调用相应的方法。 Fastclass机制的代码实例 public class test10 { //这里,tt可以看作目标对象,fc可以看作是代理对象;首先根据代理对象的getIndex方法获取目标方法的索引, //然后再…... -
JDK 静态代理和 JDK 动态代理的区别
JDK 静态代理和 JDK 动态代理的区别 JDK 静态代理,是通过直接编码创建的。 JDK 动态代理,是利用反射机制在运行时创建代理类的。 在动态代理中,核心是 InvocationHandler。 每一个代理的实例都会有一个关联的调用处理程序( InvocationHandler )。调用代理实例时,将对方法的调用进行编码,并指派到它的调用处理器( InvocationHandler )的in…... -
JDK 动态代理的五大使用步骤(附代码实例)
参考答案 JDK 动态代理的五大使用步骤 通过实现 InvocationHandler 接口,来自定义自己的 InvocationHandler ; 通过 Proxy.getProxyClass,获得动态代理类; 通过反射机制,获得代理类的构造方法,方法签名为getConstructor(InvocationHandler.class); 通过构造函数,获得代理对象,并将自定义的Invocatio…... -
静态代理的使用方法及实现步骤(附源码解析)
参考答案 静态代理的使用方法及实现步骤(附源码解析)如下: 1. 静态代理的使用方法及实现步骤 创建一个接口; 创建被代理的类,实现该接口,并且实现该接口中的抽象方法; 创建一个代理类,同时让这个代理类,也实现这个接口; 在代理类中,持有一个被代理对象的引用。在代理类方法中,调用该对象的方法。 2. 静态代理的源码解析 public interface UserDao { void…... -
手写一个 ArrayList 的动态代理类(笔试题)
参考答案: 手写一个ArrayList 的动态代理类: final List<String> list = new ArrayList<String>(); List<String> proxyInstance = (List<String>) Proxy.newProxyInstance(list.getClass().getClassLoader…... -
设计模式学习进阶路线及资料(附大厂面试题合集)
设计模式是软件工程的基石,如同大厦的根基一样。 在项目中合理运用设计模式,就能优雅地解决很多问题,这是它能被广泛应用的主要原因。 我最新总结的这份设计模式学习进阶路线及资料,包含了设计模式涉及的所有核心知识点,可以用来参考学习、构建知识体系、复盘技术栈。 设计模式学习进阶路线 把图谱放大,就能看清楚了。 《设计模式学习进阶路线》高清原图,到文末直接获取。 设计模式学习进阶资料 什么是设计模式 为什…... -
JDK 动态代理和 CGLIB 动态代理的区别
参考答案 Spring AOP中的动态代理主要有两种方式:JDK 动态代理和 CGLIB 动态代理: JDK动态代理 只提供接口的代理,不支持类的代理。 核心InvocationHandler接口和Proxy类,InvocationHandler 通过invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编织在一起;接着,Proxy利用 InvocationHandler动态创建一个…... -
Spring 的 bean 为什么是单例
参考答案 一、Spring 把bean默认设计成单例的主要原因 1. 少创建实例; 2. 垃圾回收; 3. 缓存快速获取。 二、单例bean的优势 由于不会每次都新创建新对象,所以单例在性能方面有如下优势: 1.减少了新生成实例的消耗 新生成实例消耗包括两方面,第一,spring会通过反射或者cglib来生成bean实例这都是耗性能的操作,其次给对象分配内存也会涉及复杂算法。 2.减…... -
CGLIB 动态代理的实现原理、实现步骤、源码实例
参考答案 CGLIB 动态代理的实现原理 利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 CGLIB 动态代理的实现步骤 先实现一个 MethodInterceptor,方法调用会被转发到该类的intercept() 方法。 在要使用时,通过 CGLIB 动态代理,来获取代理对象。 CGLIB 动态代理的实现源码实例 publi…... -
为什么JDK动态代理必须基于接口
参考答案 jdk动态代理必须基于接口的原因: 生成的代理类继承了Proxy,由于java是单继承,所以只能实现接口,通过接口实现 ; 从代理模式的设计来说,充分利用了java的多态特性,也符合基于接口编码的规范 。 以上,是Java面试题【为什么JDK动态代理必须基于接口】的参考答案。 输出,是最好的学习方法。 欢迎在评论区留下你的问题、笔记或知识点补充~ ---end---... -
静态代理和动态代理的区别(附代码实例)
参考答案 静态代理和动态代理的区别 1. 静态代理 静态代理编译期生成代理类; 静态代理和被代理类以及其业务逻辑耦合,适用性较差,代理逻辑难以扩展; 大多数情况下,静态代理只代理一个类; 静态代理事先知道要代理的是什么。 2. 动态代理 动态代理运行期生成代理类; 动态代理是代理一个接口下的多个实现类; 动态代理只有在运行时,才知道要代理的是什么; 动态代理可以在不知道被代理类的前提下编写代理逻辑…... -
JDK实现动态代理(真实应用案例)
参考答案 JDK实现动态代理(真实应用案例) 实例: package com.lijie; //接口 public interface UserDao { void save(); } package com.lijie; //接口实现类 public class UserDaoImpl implements UserDao { public void save() { System.out.pr…... -
实现动态代理有哪几种方式
参考答案 实现动态代理,主要有两种方式: 1. JDK原生动态代理 JDK原生动态代理是Java原生支持的,不需要外部依赖,但是它只能基于接口进行代理(需要动态代理的对象必须实现与某个接口)。 2. CGLIB 动态代理 CGLIB通过继承的方式进行代理,(让需要代理的类成为Enhancer的父类),无论目标对象有没有实现接口都可以代理,但是无法处理Final的情况。 以上,是Jav…... -
动态代理是什么(附动态代理技术栈图)
参考答案 动态代理的概念 动态代理也叫做,JDK代理、接口代理。 动态代理的对象,是利用JDK的API,动态的在内存中构建代理对象(是根据被代理的接口来动态生成代理类的class文件,并加载运行的过程),这就叫动态代理 动态代理技术栈图 以上,是Java面试题【动态代理是什么】的参考答案。 输出,是最好的学习方法。 欢迎在评论区留下你的问题、笔记或知识点补充~ ---end---... -
如何实现静态代理(真实应用案例)
参考答案 如何实现静态代理(真实应用案例) 下面这段代码,怎样才能在不修改UserDao接口类的情况下开事务、关闭事务。 实例: package com.lijie; //接口类 public class UserDao{ public void save() { System.out.println("保存数据方法"); } } package com.lijie; //运行…... -
代理模式有哪些分类,分类之间的区别是什么
参考答案 一、代理模式的分类 静态代理(静态定义代理类); 动态代理(动态生成代理类,也称为JDK自带动态代理); CGLIB 、javaassist(字节码操作库)。 二、3种代理模式的区别 静态代理:简单代理模式,是动态代理的理论基础。常见使用在代理模式。 JDK动态代理:使用反射完成代理。需要有顶层接口才能使用,常见是Mybatis的mapper文件是代理。 CGLIB 动态代理:也是使用反…... -
代理模式的常见应用场景
参考答案 代理模式的常见应用场景 Spring AOP 日志打印 异常处理 事务控制 权限控制等 以上,是Java面试题【代理模式的常见应用场景】的参考答案。 输出,是最好的学习方法。 欢迎在评论区留下你的问题、笔记或知识点补充~ ---end---...