IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 2021-10 最新JAVA面试题(按天更新。。。。) -> 正文阅读

[Java知识库]2021-10 最新JAVA面试题(按天更新。。。。)

最近找工作,每天更新面试题目。。。。

2021-10-19

什么是静态代理

所谓静态代理也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就已经确定了。
优点:
静态代理对(代理类)隐藏了被代理类(目标类接口)的具体实现类,在一定程度上实现了解耦合,同时也隐藏了具体的代码实现,提高了安全性!
缺点:
代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,需要为每一种方法都进行代理,就会产生很多的代理类,就会产生类爆炸类过多,静态代理在程序规模稍大时就无法胜任。如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法,增加了代码维护的复杂度。

什么是动态代理

动态代理不同于静态代理在程序运行前就已经存在代理,而是在需要的时候才去创建,而不是提前创建好,比如明星的助理有多个,需要什么就找对应的助理。
动态代理优缺点:
优点:
动态代理与静态代理相比较,最大的好处是接口中声明的所有方法都被转移到调用处理器一个集中的方法中处理(InvocationHandlerinvoke)。这样,在接口方法数量比较多的时候,可以进行灵活处理,而不需要像静态代理那样每一个方法进行中转。而且动态代理的应用使类职责更加单一,复用性更强。
缺点:
1、JDK原生动态代理是Java原生支持的,不需要任何外部依赖,但是它只能基于接口进行代理(因为它已经继承了Proxy了,Java不支持多继承),如果被代理类没有实现接口,则无法被代理。
2、CGLIB通过继承的方式进行代理、无论目标对象没有没实现接口都可以代理,但是无法处理private和final的情况(private和final修饰的方法不能被重写)
在这里插入图片描述

JDK动态代理和CGLIB动态代理区别

Spring 提供了两种方式来生成代理对象: JDKProxy 和 Cglib,具体使用哪种方式生成由AopProxyFactory 根据 AdvisedSupport 对象的配置来决定。默认的策略是如果目标类是接口,则使用 JDK 动态代理技术,否则使用 Cglib 来生成代理。
JDK 动态接口代理

  1. JDK 动态代理主要涉及到 java.lang.reflect 包中的两个类:Proxy 和 InvocationHandler。
    InvocationHandler是一个接口,通过实现该接口定义横切逻辑,并通过反射机制调用目标类
    的代码,动态将横切逻辑和业务逻辑编制在一起。Proxy 利用 InvocationHandler 动态创建
    一个符合某一接口的实例,生成目标类的代理对象。
    CGLib 动态代理
  2. :CGLib 全称为 Code Generation Library,是一个强大的高性能,高质量的代码生成类库,可以在运行期扩展 Java 类与实现 Java 接口,CGLib 封装了 asm,可以再运行期动态生成新的 class。和 JDK 动态代理相比较:JDK 创建代理有一个限制,就是只能为接口创建代理实例,而对于没有通过接口定义业务方法的类,则可以通过 CGLib 创建动态代理。

什么是正向代理,什么是反向代理

正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端
反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端
在这里插入图片描述
正向代理中,proxy和client同属一个LAN,对server透明;
反向代理中,proxy和server同属一个LAN,对client透明。
实际上proxy在两种代理中做的事都是代为收发请求和响应,不过从结构上来看正好左右互换了下,所以把后出现的那种代理方式叫成了反向代理

为什么要用代理

代理就是给目标类提供一个代理对象,由代理对象控制目标对象的引用。(比如从西安买飞机票到厦门,可以去机场买,也可以去代售点买,代售点就代理了机场的售票窗口,我们就不用去机场买票了)
java的代理就是不直接访问目标,而是通过一个中间层来访问目标
在这里插入图片描述

代理有啥好处呢?①通过代理对象的方式间接的访问目标对象,防止直接访问目标对象给系统带来的不必要复杂性,②通过代理对象对原有的业务增强。
当我们需要引入其它一些功能。比如在业务层记录一些方法的调用日志,我们就可以创建一个代理类,每次调用目标方法的时候,先通过代理类记录了当前调用的时间和IP地址,是谁调用此方法用了多长时间。
可能有人会说为什么要加个代理类?直接在原来类的方法里面加上记录日志这个逻辑不就可以了么?
这样就会出现问题了,当某一天有些类的一些方法不需要记录日志了,我们就要去修改这些类的每一个方法。在程序设计中类的单一性原则问题,这个原则很简单,就是每个类的功能尽可能的单一。为什么要单一,因为只有功能单一这个类被改动的可能性才会最小。
如果我们做了代理,我们就可以把目标的代理类删掉就可以了,这样我们也就不用去修改目标类了。

策略模式(策略类膨胀的时候怎么解决),单例模式(几种实现方式),工厂模式,代理模式

GC垃圾回收的几种算法

如保证线程安全

JVM调优的经历

原子包的的实现过程

Redis的几种数据结构

什么是缓存雪崩、什么是缓存穿透,该如何避免

谈谈对spring的认识,springbean的生命周期

IOC原理

Ioc 提供了一个bean容器,容器会帮助我们创建对象,不需要我们手动的创建,IOC容器有个非常强大的功能叫做依赖注入,通过写java代码创建bean,通过type等方式自动的注入,正是有了这个依赖注入使得我们IOC有了一个强大的功能叫解耦,

AOP原理

MVC流程

mybatis缓存

kafka原理及作用

数据结构-位图介绍

spring常用注解中对bean的处理

volatile关键字的作用及和sychronized的区别

如何合理的设置线程池

jvm类加载过程

2021-10-20

事务失效的几种情况

事务嵌套怎么处理

单例模式的实现的原理(为什么每次获取到的都是同一个对象)

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-20 12:21:41  更:2021-10-20 12:22:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:59:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码