对称加密
信息的发方和接收方使用同一个密钥去加密和解密数据,它的最大优势是加/解密速度快,
非对称加密:
生成RSA密钥工具:https://docs.open.alipay.com/291/105971/
Do one thing, do it well.
对称加密
信息的发方和接收方使用同一个密钥去加密和解密数据,它的最大优势是加/解密速度快,
非对称加密:
生成RSA密钥工具:https://docs.open.alipay.com/291/105971/
电影:模仿游戏
推荐系统
https://mp.weixin.qq.com/s/bc2YcVeBglZkeHdASg3wXw
1.为什么使用消息队列?
引入MQ好处:
2.使用消息队列有什么缺点?
AOP()
实现AOP的语言为AOL(Aspect-Oriented Language)
JDK1.3之后,引入了动态代理(Dynamic Proxy)
Joinpoint
在系统运行之前,AOP的功能模块需要织入到OOP的功能模块中,我们需要知道在系统的哪些执行点上进行织入操作,
这些将要在其上进行织入操作的系统执行点就称之为Joinpoint。
Pointcut
Pointcut 概念代表的是Joinpoint的表述方式。将横切逻辑织入当前系统的过程中,需要参照Pointcut规定的Joinpoint信息,
才可以知道应该往系统的哪些Jointpoint上织入横切逻辑。
Pointcut 指定了系统中符合条件的一组Jointput。
Advice
Advice 是单一横切关注点逻辑的载体,它代表将会织入到Joinpoint 的横切逻辑。
Advice 实现了将被织入到Pointcut规定的Joinpoint 处的横切逻辑。
“叵” 字
中间的那一“口” 就是Joinpoint
上下一横就是要执行的逻辑
Aspect
Aspect 是对系统中的横切关注点逻辑进行模块化封装的AOP概念实体。通常情况下,Aspect 可以包含多个Pointcut 以及相关的Advice。
Spring AOP
Spring AOP 采用动态代理机制和字节码生成技术实现。在运行期间为目标对象生成一个代理对象,将横切逻辑织入到这个代理对象中,系统
最终使用的是织入了横切逻辑的代理对象,而不是真正的目标对象。
代理模式(Proxy Pattern)
动态代理(Dynamic Proxy)(基于接口的代理)
InvocationHandler 就是我们要实现横切逻辑的地方,它是横切逻辑的载体,作用跟Advice是一样的。
动态代理机制只能对实现了相应interface 的类使用,如果某个类没有实现任何interface,就无法使用动态代理机制为其生成相应的动态代理对象。
默认情况下,Spring AOP 发现目标对象如果实现了相应interface,则采用动态代理机制为其生成代理对象实例,如果目标对象没有实现任何interface,
Spring AOP 会尝试使用CGLIB(Code Generation Library)动态字节码生成技术为目标对象生成动态的代理对象实例。
org.springframework.aop.BeforeAdvice 所实现的横切逻辑将在相应的Joinpoint 之前执行,在Before Advice 执行完成之后,程序执行流程将从Joinpoint 处继续执行。
所以Before Advice 通常不会打断程序的执行流程,如果需要,可以通过抛出异常的形式中断程序流程。
org.springframework.aop.ThrowsAdvice 对应通常AOP概念中的 AfterThrowingAdvice。
ProxyFactory 织入器,进行横切逻辑的织入,生成代理对象。
基于接口的代理
基于类的代理
如果目标类没有实现任何接口,那么默认情况下,ProxyFactory会对目标类进行基于类的代理,即使用CGLIB。
可以通过设置ProxyFactory的proxyTargetClass 或optimize 属性值为true,强制ProxyFactory采用基于类的代理。
FactoryBean
如果容器的某个对象持有FactoryBean 的引用,它取得的不是FactoryBean 本身,而是FactoryBean 的getObject方法所返回的对象。
如果同一个类中有方法:methodA(); methodB()。methodA()没有开启事务,methodB()开启了事务
且methodA()会调用methodB()。
那么,methodA()调用methodB()时,不会开启事务!!!
即:同一个类中,无事务的方法调用有事务的方法,结果就是没有事务!!!
声明式事务配置详解
https://blog.csdn.net/jiadajing267/article/details/81056057
下载地址
检查当前系统是否安装mysql
rpm -qa|grep -i mysql
如果已经安装,卸载
sudo yum -y remove mysql-libs*
安装mysql服务端和客户端
sudo rpm -ivh MySQL-server-5.5.62-1.el6.x86_64.rpm
sudo rpm -ivh MySQL-client-5.5.62-1.el6.x86_64.rpm
查看mysql安装时创建的mysql用户和mysql组
cat /etc/passwd| grep mysql
cat /etc/group | grep mysql
或者通过mysqladmin –version命令查看
启动mysql
sudo service mysql start
直接连上
$ mysql
查看进程下的线程数:ps -Lf pid | wc -l
查看cpu核数:执行top命令后 按数字1
系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路
查看cpu消耗过高的进程
top
查看该进程中有哪些线程cpu过高,一般超过80%就是比较高的。
top -Hp pid
输入线程的十六进制值
printf “%x\n” tid
jstack pid | grep tid对应的十六进制
线程池大小设置多大合适
https://mp.weixin.qq.com/s/G0toGUjKQRcCpskheR32vA
https://mp.weixin.qq.com/s/YbyC3qQfUm4B_QQ03GFiNw
https://segmentfault.com/a/1190000022296465
CPU密集型
IO密集型
程序在进行IO操作时,CPU是处于空闲状态的。
线程等待时间所占比例越高,需要越多线程;
线程CPU时间所在比例越高,需要越少线程。
防止指令重排序;
确保线程之间共享变量的立即可见性。
Lock 指令
在多处理器系统上,将当前处理器缓存行的内容写回到系统内存
CPU缓存
volatile 无法保证原子性操作。
https://www.jianshu.com/p/bc84b2b71c1c
https://juejin.im/post/5c3b4c4b518825253806335e
Redis 是 Remote Dictionary Service 的首字母缩写,也就是远程字典服务。
redis 生产环境启动方案
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
1 | $ hexo new "My New Post" |
More info: Writing
1 | $ hexo server |
More info: Server
1 | $ hexo generate |
More info: Generating
1 | $ hexo deploy |
More info: Deployment