guide学习笔记

1.枚举类型不能被继承
2.泛型类的所有静态变量是共享的。
3.Iterator 是工作在一个独立的线程中,并且拥有一个 mutex 锁。 Iterator被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照fail-fast 原则 Iterator 会马上抛出java.util.ConcurrentModificationException异常。所以 Iterator 在工作的时候是不允许被迭代的对象被改变的。但你可以使用 Iterator 本身的方法remove()来删除对象,Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。

对NULL key 和NULL value 的支持 :HashMap可以存储null的key和value但null作为键只能有一个,null作为值可以有多个,hashtable不允许有null 键和null值否则会抛出NullPointerException

ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成Segment 是一种可重入锁

不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁

Arrays.asList()`是泛型方法,传递的数组必须是对象数组,而不是基本类型

Arrays.asList() 方法返回的并不是 java.util.ArrayList ,而是 java.util.Arrays 的一个内部类,这个内部类并没有实现集合的修改方法或者说并没有重写这些方法。

变量可见性:在一个线程对变量进行修改了以后,其他线程可以立即获取被修改的值,在普通变量无法做到这点

在lambda表达式对局部变量进行操作时需要加上final,这就是说不能在 lambda 内部修改定义在域外的局部变量。

synchronized同步语句块的实现时monitorentermonitorexit 指令其中 monitorenter 指令指向同步代码块的开始位置,monitorexit 指令则指明同步代码块的结束位置。

synchronized 修饰的方法并没有 monitorenter 指令和 monitorexit 指令,取得代之的确实是 ACC_SYNCHRONIZED 标识,该标识指明了该方法是一个同步方法。不过两者的本质都是对对象监视器 monitor 的获取。

锁的四种状态:无锁状态,偏向锁状态,轻量级锁状态,重量级锁状态

在MySQL的存储引擎中只有innodb是事务性存储引擎,只有innodb支持事务

为不同的数据库表设置不同的存储引擎来适应不同的场景,存储引擎是基于表,不是基于数据库
mysql 查询缓存虽然能够提升数据库的查询性能,但是缓存同事也带来可额外的开销,每次查询后都要做一次缓存操作,失效后还要销毁

事务是逻辑逻辑上的一组操作,要么都执行,要么都不执行
事务有分布式事务和数据库事务,数据库事务可以保证多个数据库的操作构成一个逻辑上的整体
事务的四个特性:
原子性:事务是最小的执行单元,不允许分割,事务的原子性确保动作要么全部完成,要么完全不起作用
一致性:执行事务前后,数据保持移植
隔离性:并发访问数据库时,一个用户的事务不被其他用户所干扰,各并发事务之间数据库还是独立的
持久性:一个事务别提交后,他对数据库中的数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响
acid:通过手段达到目的
并发事务带来的问题:
脏读:修改还未提交数据库另一个事务访问这个数据得到未更新的数据导致操作不正确
幻读:在事务多次读取的时候另一个事务添加了其他数据在数据库里面,导致读取时出现其他数据
丢失修改:一个事务修改数据另一个事务也修改数据,使得第一个事务修改的数据丢失
不可重复读:第一个事务多次读取事务的时候另一个事务在中间时刻对数据进行了修改导致事务读取的数据不一致

事务的隔离级别:
读取未提交:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
读取已提交:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
可重复读:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
可串行化:最高的隔离级别,完全服从 ACID 的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。

MVCC:多版本并发控制
数据库索引相当于书的目录
分布式系统无法满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)

网络限流的方式:
1.java内部也可以通过原子类计数器AtomicInteger、Semaphore信号量来做简单的限流。
2、漏桶算法:漏桶算法思路很简单,我们把水比作是请求,漏桶比作是系统处理能力极限,
水先进入到漏桶里,漏桶里的水按一定速率流出,当流出的速率小于流入的速率时,由于漏桶容量有限
,后续进入的水直接溢出(拒绝请求),以此实现限流
令牌桶算法:系统会维护一个令牌(token)桶,以一个恒定的速度往桶里放入令牌(token)
,这时如果有请求进来想要被处理,则需要先从桶里获取一个令牌(token),当桶里没有令牌(token)可取时,
则该请求将被拒绝服务。令牌桶算法通过控制桶的容量、发放令牌的速率,来达到对请求的限制。
Redis + Lua:
网关限流:

redis事务:
开始事务(MULTI)。
命令入队(批量操作 Redis 的命令,先进先出(FIFO)的顺序执行)。
执行事务(EXEC)。
DISCARD 命令取消一个事务
WATCH 命令用于监听指定的键,当调用 EXEC 命令执行事务时,
如果一个被 WATCH 命令监视的键被修改的话,整个事务都不会执行,直接返回失败。
lua脚本可以弥补Redis事务缺陷

控制:指的是对象创建的(实例化,管理)的权利
反转:将控制权交给外部环境

RBAC基于角色的权限控制访问,一种通过角色关联权限,,角色同时又关联用户的授权方式

单点登录(sso):用户登录多个子系统的其中一个就有权访问与其相关的其他系统

时间轮:一个环形的队列(底层一般基于数组实现),队列中的每一个元素(时间格)都可以存放一个定时任务列表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值