2022.3.30(ConcurrentMap)

一.多线程同步的机制
总体上是4个部分:
1.临界区
2.信号量
3.互斥量(synchrionzed)
4.事件(notify)
二.ConcurrentHashMap如何保证线程安全
1.数组初始化如何保证安全?
cp运用了自旋保证一定可以初始化成功,同时通过CAS设置sizectl变量(-1表明有线程在创建table)的值确保只有一个
线程对数组初始化.
2.put时如何保证?
I.自旋死循环保证一定可以新增成功.
II.如果当前数组下标位置时空的,可以通过CAS新增
确保这个位置没有被其他线程所赋值
III.当前位置(槽点)有值就会锁住当前槽点
synchronized保证只有一个线程进行操作
IIII.在红黑树旋转调整平衡时锁住红黑树的根节点
3.扩容.
与HahsMap一样在put的最后一步检查是否需要扩容.
cp的扩容方法主要是transfer()
I.将所有老数组的值拷贝到扩容后的新数组
II.拷贝数组的槽点时会把原数组槽点锁住,保证不能进行操作,转移后原数组槽点赋值位转移节点
III.如果新数据put时发现这个槽点是转移节点就会一直等待,直到扩容完成
IIII.**注意是从尾部开始拷贝!**每拷贝成功一次就设置原数组位转移节点,直到所有数据都拷贝完成,
4.get方法与hp一样.

三.java的类加载为什么要使用双亲委派机制?
避免类的重复加载,如果父类拥有这个类那么子类就不需要加载,同时可以防止核心API库被随意的篡改.
四.数据库为什么要有主键?
1)保证实体的完整性;
2)加快数据库的操作速度
五.什么是拦截器,拦截器原理是什么?在哪里用?
在这里插入图片描述
java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action
执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。

java里的拦截器提供的是非系统级别的拦截,也就是说,就覆盖面来说,拦截器不如过滤器强大,但是更有针对性。
Java中的拦截器是基于Java反射机制实现的,更准确的划分,应该是基于JDK实现的动态代理。它依赖于具体的接口,在运行期间动态生成字节码。
拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其
执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截然后再之前或
者之后加入某些操作。java的拦截器主要是用在插件上,扩展件上比如 Hibernate Spring Struts2等,有点类似面向切片的技术,在用之前先要在
配置文件即xml,文件里声明一段的那个东西。
六。过滤器与拦截器的区别
过滤器可以简单的理解为“取你所想取”,过滤器关注的是web请求;拦截器可以简单的理解为“拒你所想拒”,拦截器关注的是方法调用,比如拦截
敏感词汇。
4.1,拦截器是基于java反射机制来实现的,而过滤器是基于函数回调来实现的。(有人说,拦截器是基于动态代理来实现的)
4.2,拦截器不依赖servlet容器,过滤器依赖于servlet容器。
4.3,拦截器只对Action起作用,过滤器可以对所有请求起作用。
4.4,拦截器可以访问Action上下文和值栈中的对象,过滤器不能。
4.5,在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时调用一次。
七.NIO
在这里插入图片描述
将多个通道注册到Selector中,通过Selector监听
在这里插入图片描述
NIO有以下三个核心部分:
Channels Buffers Selectors
在这里插入图片描述
在这里插入图片描述
Channel每次读取或者写入数据实际都是通过Buffer
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值