![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
回顾专栏
文章平均质量分 54
回顾专栏
翅膀君
每天点滴记录总结。
展开
-
Spring Cloud基础回顾
eureka 服务治理如果没有这个,那么之前可以用httpclient,webservice等显示调用,如果后续改了ip,那么也是很麻烦的,所以启动eureka来当作一个服务注册中心,让其他的服务都注册进来统一管理Ribbon 客户端负载均衡可以用spring提供的RestTemplate来通过服务命调用,如果服务做了集群,那么默认采用轮询策略来进行负载的,nginx是服务器负载,Ribbon是各个微服务之间负载Hystrix 熔断器如果在高并发情况下微服务调用的过程中,若单.原创 2021-05-18 05:57:11 · 207 阅读 · 0 评论 -
RabbitMQ延时队列,消息重复、堆积、丢失、顺序
主要用来做异步、削峰、解耦rabbitmq延时队列可以设置队列延时,也可以设置消息延时生产者->延时队列交换机->延时队列->死信队列->死信队列交换机->消费者 如果是不同梯度的延时并且梯度很少,例如 5s, 10s, 30s只有3个,可以设置不同的队列和交换机中间的坑重复消费解决方法:造成重复消费有可能是生产段发多了或者消费段方法没有做幂等导致超收了。生产段:在发送前可以为每个消息设置一个唯一id作为幂等判断的条件,如果有重复的去重后原创 2021-05-18 05:57:35 · 1852 阅读 · 0 评论 -
MySQL调优
优化流程先用explain查询,看下是否用到了索引 排除缓存sql nocache 看下Extra是否存在回表,如果确实需要那么多列那就忽略,否则就考虑索引覆盖 查看下每个on语句是否都有索引建立 如果建立了,查看下两张表对应的列的字符集是否一样,因为mysql会自己做隐式转换 如果有排序字段,可以看情况用where后字段+order by字段建立联合索引 如果有联合索引,sql要按照最左匹配原则来改 查看你索引字段是否加了函数处理,如果加了不会走索引 5.6之后 索引下推 减少回表次原创 2021-05-18 05:55:40 · 188 阅读 · 0 评论 -
Redis基础回顾
基本数据类型StringListHash -- 类似mapSet -- 无序,不能重复Sort Set -- 有序,不能重复,要传个分数作为排序setnxsetnx「SET if Not eXists」和expire合成一条指令Lua支持Lua脚本,例如同IP下1秒内只能调用一次持久化RDB, 快照形式写入磁盘,实际是通过fork一个子进程去执行,只能存一段时间AOF, 以日志的形式记录redis的一系列操作,AOF的运行效率要慢于RDB...原创 2021-05-17 17:02:30 · 128 阅读 · 0 评论 -
Nginx负载均衡算法
3种算法都是配置到upstream中轮询权重IP Hash (如果上次接口调用到A服务器器,那么下次还是会调用到这台服务器)原创 2021-05-17 17:01:57 · 64 阅读 · 0 评论 -
JVM内存模型,类加载机制,性能调优等
JVM内存模型堆:主要存存储对象实例和数组,属于线程共享方法区:常量池,类型信息(包名,类的修饰符,实现类等),域信息(成员变量信息,名称,类型,修饰符),方法信息(方法名称,返回值,参数等),属于线程共享虚拟机栈:由一个个栈帧组成,每个栈都会存储局部变量,程序运行的状态,返回值,例如a()方法里面调用一个b()方法,入栈顺序就a()->b(), 出栈就是b()->a(), 如果是a()调用b(),b()又调用a(),最终就是递归死循环,会把栈占满,最终抛出StackOv原创 2021-05-17 17:01:14 · 268 阅读 · 3 评论 -
Spring基础回顾
生命周期1. 加载配置文件或者通过配置文件扫描java文件2. 然后会将每个java文件的beanClass,是否是Lazy,是否是单例(Single),多例(prototype)放到一个BeanDefinintion对象中,然后将BeanDefinition对象放入map中3. 循环遍历BeanDefinition对象然后对beanClass进行实例化操作,属性填充4. 之后就进入初始化阶段,在进行初始化阶段的时候可以做一些初始化前和初始化后的一下前置或后置操作,以及赋值spring访问容器中原创 2021-05-17 17:00:42 · 69 阅读 · 0 评论 -
ReentrantLock
1.属于可重入锁(代表某个线程获取到某个锁之后,可以重复获得到这个锁)2.需要手动加锁和解锁3.实现Lock接口,有个Sync内部类,继承AQS(双向队列)4.ReentrantLock默认使用非公平锁,可以通过构造参数设置为公平锁非公平锁1. 当线程A发现state是0,CAS改为1,然后加锁线程2. 线程B来了发现被锁了,然后进入到列头3. 线程A用完后,将state置为0,释放锁,准备通知位于列头的B来操作,结果此时C线程刚好又来,发现state为0就占用,结果B去...原创 2021-05-17 16:59:05 · 76 阅读 · 0 评论 -
Map之ConcurrentHashMap
1.底层都是数组+链表,1.7和1.8中不一样2.1.7中是使用segment数组+hashentity组成,segment是一个内部类,继承ReentrantLock类,hashentity中value的值是用volatile修饰的(volatile保证了不同线程对变量操作的可见性,同时也禁止指令重排序(有序性))3.1.7使用了分段锁技术,理论下它的并发度就是它的长度,例如初始值是16,理论上可以同时支持16个线程操作,put操作时会先尝试获取锁,如果获取失败就进入自旋,如果自旋达到了一...原创 2021-05-17 16:57:48 · 368 阅读 · 0 评论 -
Map之HashMap
1.HashMap的底层结构是数组+链表,1.7中和1.8中又不一样,1.8中加入了红黑树2. 每个数组都是以key-value形式存储的,1.7中叫entry,1.8中叫node3.HashMap一开始默认长度是16,put的时候会将key值通过公式得到一个index,index = HashCode(key)& (length - 1),这个index就是在数据中的位置4. put的时候也会判断是否需要扩容resize,是否需要resize有两个因素影响,一个是capacity(..原创 2021-05-17 16:57:13 · 142 阅读 · 0 评论 -
List之ArrayList
1.ArrayList底层其实是动态数组,在jdk1.8中没有指定capacity默认为空数组,1.7直接默认为10个大小。2. 数组add的时候如果已经长度是10了,那么它就会触发扩容,扩容部分为之前大小的一半,在1.7中是直接 10 + 10/2, 在1.8中优化了下使用位运算10 + (10 >> 1),在计算机种位运算比算术运算快。3.指定位置add和指定位置remove都会用到数组复制。4.ArrayList的线程不安全,Vector才是线程安全的,Vecto...原创 2021-05-17 16:56:35 · 200 阅读 · 0 评论