山东大学移动信息门户07

2021SC@SDUSC

双亲委派模式

类加载器有三种:在java8里

1:启动类加载器:由c++编写,系统首先创建的就是启动类加载器   加载路径:jre/lib/xxx.jar 和 jre/classes/bbb.class

2:扩展类加载器:加载jre/ext/yyy.jar 只能加载jar包

3:应用类加载器 : 包含 启动类加载器和扩展类加载器的范围

这里的双亲指的是一个类里面的一个存放父加载器的实例变量

在java14里,扩展类加载器变了

什么是双亲委派模式?
如果其中一个类加载器收到了类加载的请求,它并不会自己去加载而是会将该请求委托给父类的加载器去执行,如果父类加载器还存在父类加载器,则进一步向上委托,如此递归,请求最终到达顶层的启动类加载器。如果父类能加载,则直接返回,如果父类加载不了则交由子类加载,

类加载的过程
当加载一个类的时候,从应用类加载器开始,

1:应用类加载器首先让自己的 parent (扩展累加载器)加载

2:扩展类加载器则让自己的parent (启动类加载器)加载

3: 如果启动类加载器 路径 里面有,则由启动类加载器 加载

4:如果没有,则从扩展累加载器路径里寻找,如果有则由

扩展类加载器加载

5:如果没有,则由应用类加载器加载

类的加载是有方向的,如果 A类 被扩展类加载器,那么A类依赖的其他类,只能在扩展类加载器 或者 启动类加载器 路径里寻找,即使没找到,也不能再应用类加载器路径里寻找

为什么要用双亲委派模式?
1:避免类的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次。

2:其次是考虑到安全因素,java核心api中定义类型不会被随意替换,假设用户创建了一个全限定类名为java.lang.Integer的类,

    通过双亲委托模式传递到启动类加载器,而启动类加载器在核心Java API发现这个名字的类,发现该类已被加载,并不会重新加载用户自己的java.lang.Integer,而直接返回已加载过的Integer.class,这样便可以防止       核心API库被随意篡改。

为何包名要域名反写?
双亲委派模式中某个类加载器 判断某个类是否在该类加载路径下,依据应该是类的全限定类型(也就是有包名前缀!!!

我们不能创建跟jdk中一样的包,这一是我们域名反写创建包的原因之一,保证唯一性。

proxy.newProxyInstance 为什么要传入参数类加载器?

确保加载被代理类的类加载器不是null
 

if (VM.isSystemDomainLoader(loader) && !VM.isSystemDomainLoader(ccl)) {
    sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION);
}

public static boolean isSystemDomainLoader(ClassLoader var0) {
    return var0 == null;
}

img

 

如何防止sql注入?

1:前端比如可以过滤掉“;”分号

2:后端可以用PrepareStatment 预编译sql语句,用 ? 占位符

     mybatis #{} 就是这个原理  ${} 没有预编译,所以需要做前端参数校验

3:正则表达式?

 什么是 CSRF 攻击,如何避免?

try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
会。

执行顺序是:try catch finally

1:返回值类型是普通类型

     如果finally 中有return,无论try或者catch中有没有return 则以finally 的返回结果为准

     如果finally中没有 return,catch中有return,则以catch中return时的返回值为准,后来执行的finally无论怎样都不会改变返回值结果(因为结果已经在执行finally之前的 catch 中返回过去了)

    如果finally中没有 return,try中有return,则以try返回的值为准。

2:返回值类型是引用类型

   引用是一个,无论是在try catch finally 那个步骤中 对引用的对象做了修改,都会影响返回的最后结果

 其实就不能说是“返回”结果了,只能说是返回后再修改
 

常见的Spring注入方式有几种?

比如我们要在UserServiceimpl层里注入userDOMapper

1:用注解 @Autowried (+@Qualifieri)  @Resource

2:setter方法注入(需要写xml

3:构造方法注入(需要写xml
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值