CentOS
查看内存使用率排行
top -o %MEM
查看cpu使用率排行
top -o %CPU
1 | view xxx.log 查看 |
1 | :w 保存文件但不退出vi |
1 |
|
1 | 输出某一段时间内的日志 |
1 | 追加是 >> ,如果用 > 是覆盖 |
dubbo 常见问题
案例1 消费者 多次调用 产生不同的结果
可能原因
1 . 多个不用Ip的生产者 生产者之前的版本不一致 。
确认方案
到Zookeeper可视化界面确认生产者 。
解决方案 :统一版本 。
1 如何计算一个整数的位数
答: 参考:Integer.stringSize()
使用一个9 ,99 999 的数组
远程连接 注意 开放端口 和随机的两个端口
查看cpu和内存分析
如果是cpu 查看是否是有点代码 代码是否有while(true)
如果是内存 查看是否大对象
Java 泛型理解
<? extends T> 表示 限定为 T类 及其子类
有上限 为类 不能添加元素 (无法确定是哪个子类)能获取元素
<? super T> 表示 限定为 T类 及其父类
区别 有下限 为 T类 不能获取元素(无法确定哪个父类)
可以添加元素 因为<? super T>是T的某个父类,将子类T赋值给父类没任何问题
PECS ( Producer Extends Consumer Super )原则
参考博客
MVCC 全称Multi-Version Concurrency Control 即 多版本并发控制。 MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。
MVCC 在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式处理读-写 冲突 ,做到即使有读写冲突是,也能做到不加锁,非阻塞并发读。
快照读就是读取数据的时候会根据一定的规则读取事务可见版本的数据。
当前读 就是读取最新版本的数据 读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。
sellect *from ..where 语句为快照读。、、、
select *from …where …for update
select *from …where … in share mode
当前读。
如果事务中使用快照读,那么不会产生幻读现象,但是快照读和当前读混用就会产生幻读。
参考链接
事务失效场景
一个有@Transactional的方法被没有@Transactional方法调用时,会导致Transactional作用失效。也是最容易出现的情况。
那为啥会出现这种情况?其实这还是由于使用Spring AOP
代理造成的,因为只有当事务方法被当前类以外的代码调用时,才会由Spring
生成的代理对象管理
对非public方法进行事务注解。@Transactional 将会失效
原因:是应为在Spring AOP代理时,事务拦截器在目标方法前后进行拦截,DynamicAdvisedInterceptor
的intercept 方法会获取Transactional注解的事务配置信息,
因为在Spring AOP 代理时,如上图所示 TransactionInterceptor
(事务拦截器)在目标方法执行前后进行拦截,DynamicAdvisedInterceptor
(CglibAopProxy 的内部类)的 intercept 方法或 JdkDynamicAopProxy
的 invoke 方法会间接调用 AbstractFallbackTransactionAttributeSource
的 computeTransactionAttribute
方法会间接调用 AbstractFallbackTransactionAttributeSource
的 computeTransactionAttribute
方法,这个方法会获取Transactional 注解的事务配置信息。他会首先校验事务方法的修饰符是不是public,不是 public则不会获取@Transactional 的属性配置信息。
当propagation属性配置为:
TransactionDefinition.PROPAGATION_SUPPORTS
:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。 TransactionDefinition.PROPAGATION_NOT_SUPPORTED
:以非事务方式运行,如果当前存在事务,则把当前事务挂起。TransactionDefinition.PROPAGATION_NEVER
:以非事务方式运行,如果当前存在事务,则抛出异常
在一个类中A方法被事务注释,B方法也被事务注释。
1 |
|
但在执行B方法是报错,但是异常被A catch 住,此时事务也会失效。
底层原理:
其实原因很简单,Spring在扫描Bean的时候会自动为标注了@Transactional
注解的类生成一个代理类(proxy),当有注解的方法被调用的时候,实际上是代理类调用的,代理类在调用之前会开启事务,执行事务的操作,但是同类中的方法互相调用,相当于this.B()
,此时的B方法并非是代理类调用,而是直接通过原有的Bean直接调用,所以注解会失效。
spring事务的传播机制及原因分析;
propagation_required 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
11 -02 微服务 部署spring Cloud
技术点
1 docker 部署
2 SkyWalking 监控
视频地址
1 | 链接:https://pan.baidu.com/s/14dEB1vXmA099-SGo_Er26g |