![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
发奋图强的搬砖人
努力奋斗
展开
-
高并发解决方案
1、单体应用垂直扩容提高硬件配置:CPU、内存、磁盘,但不可能永无止境的提升。2、单体应用水平扩容搭建应用集群(tomcat集群),但入口只有一个,需配置负载均衡,需注意session共享!!!服务器端实现:nginx、F5客户端实现:springcloud的Ribbon、dubbo3、应用拆分单体应用逐步庞大,代码复杂,维护困难,按业务维度拆分应用,使用分布式开发,针对并发量高的应用进行扩容(集群)即可。同一进程内的调用变成远程方法调用远程调用技术:httpclient原创 2022-03-19 11:25:26 · 4185 阅读 · 1 评论 -
String不可变
String不可变String str1 = new String("hello");String str2= str1;System.out.println("str1 == str2:" + (str1 == str2));//trueSystem.out.println("str1.equals(str2):" + str1.equals(str2));//truestr1 = "world";System.out.println("str1的值 = :" + str1);/.原创 2022-03-19 10:03:39 · 72 阅读 · 0 评论 -
脑裂及解决方法
脑裂指一个集群由于网络的故障,被分为至少两个彼此无法通信的单独集群,此时如果两个集群都各自工作,则可能会产生严重的数据冲突和错误。redis哨兵机制-脑裂:主节点由于网络等原因,不能被哨兵感知,选举出新主节点,然后数据仍写入旧主节点,新主节点无法同步数据,旧主节点网络恢复后,被哨兵降级为从节点,从而造成数据丢失。解决:min-slaves-to-write 1 // 要求至少有1个slavemin-slaves-max-lag 10 // 数据复制和同步的...原创 2022-03-18 14:26:55 · 3882 阅读 · 0 评论 -
Mybatis缓存
一级缓存(本地缓存)默认开启sqlSession级别的缓存,每一次会话都对应自己的一级缓存,作用范围比较小,一旦会话关闭就查询不到了;一级缓存默认是一直开启的,是SqlSession级别的一个Map;与数据库同一次会话期间查询到的数据会放在本地缓存中。以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库。失效:1、sqlsession不同(会话不同)2、sqlsession相同,查询缓存中没有的数据3、sqlsession相同,但两次查询之间执行了增删改操作增原创 2022-03-09 16:07:35 · 811 阅读 · 0 评论 -
Mysql日志
undo log主要用于事务回滚时恢复原来的数据mysql在执行sql语句时,会将一条逻辑相反的日志保存到undo log中。undo log中记录的是逻辑日志。undo log与ReadView合作可以实现多版本并发控制MVCC(Mutil-Version Concurrency Control)。...原创 2022-03-08 14:32:59 · 417 阅读 · 0 评论 -
消息队列及注意事项
1、作用异步处理:减少请求等待服务解耦:多个服务间减低依赖流量削峰:请求放入队列,作为缓存,减少高并发的巨多请求的影响2、模式队列模型:RabbitMQ一条消息只能被一个消费者消费发布/订阅模型: kafka、rocketMQ一条消息被多个消费者消费,消息发到topic,谁要谁订阅3、确保消息不丢失4、消息重复消费前置条件判断、版本号控制、数据库的约束:唯一键/关键字段5、消息有序全局有序:不常见一个生产者(producer)生产消息、消息服务原创 2022-03-03 14:19:12 · 1791 阅读 · 0 评论 -
Redis数据类型、持久化
一、数据类型1、String字符串--二进制安全整数等任何数据、最大512M应用:粉丝数、微博数2、hash哈希存field-value结构(k-v),适合存对象信息应用:用户信息3、list列表字符串列表,按插入顺序排序,可左插入、左删除、右插入、右删除应用:粉丝列表4、set集合无序、去重的字符串集合,可取交集、并集、差集,内部是value为null的hashmap,还可以判断某个成员是否在集合里应用:粉丝列表、共同好友5、sorted-set有序集合原创 2022-03-02 20:51:14 · 473 阅读 · 0 评论 -
Redis快在哪里?
1、内存2、高效的数据结构SDS简单动态字符串(使用长度+空闲长度+实际内容)记录了使用长度:时间复杂度o(1),性能提高空闲长度:空间预分配,修改不需要频繁分配长度,使用长度>1M,分配1M,否则多分配自身长度的空闲长度惰性释放:缩短长度,不急着释放,下次增加可直接使用空闲空间二进制安全:SDS记录使用长度,C只认“\0”,二进制数据丢失linkedlist双端列表记录前后节点,list结构有头尾指针,节点数量ziplist压缩列表占用内存字节数+头到尾偏移量原创 2022-03-02 20:15:06 · 516 阅读 · 0 评论 -
Redis
1、缓存击穿大量的请求获取某个 key 对应的值,而这个 key 在某个时间突然失效了,意味着大量的请求就无法在缓存中获取数据了,而是去请求数据库了,这样很有可能导致数据库被击垮。解决:不要设置过期时间了,如果该key的数据更新了,那么就通过互斥锁的方式将其更新。如果不使用互斥锁的方式很容易导致数据不一致的情况,这里为了保证缓存和数据库的一致性,就只能牺牲一点点的效率了。2、缓存穿透某个不存在的key一直被访问,结果发现数据库中也没有这样的数据,最终导致访问该key的所有请求都直接请原创 2022-03-01 21:36:54 · 135 阅读 · 0 评论 -
数据库隔离级别
1、4种隔离级别2、mysql:可重复读oracle:读已提交3、mysql实现可重复读--MVCC(多版本并发控制)基于乐观锁,实现读已提交和可重复读每行记录增加隐藏的两列,trx_id(当前行最新修改的事务id)和roll_pointer(指向更新前的undo log)每开启一个事务,事务版本号会递增read view,包括4个部分可重复读:查询会生成一个read view1、事务id<最小值,说明是之前事务的数据,直接返回2、事务id>最小值,且原创 2022-03-01 20:59:54 · 499 阅读 · 0 评论 -
JVM垃圾回收
1、运行时区域虚拟机栈、本地方法栈、程序计数器、1.8后:本地内存(直接内存+元空间(方法区))+堆1.8前:本地内存(直接内存)+堆(方法区+其他)2、堆是垃圾回收的主要区域判断垃圾引用计数法:(不被使用)有一个引用,对象头+1弊端:循环引用,a引用b,b引用a,无法回收可达性算法:(常用)以GC ROOT为起点的引用链上的对象不被回收3、GC ROOT4、对象可回收,一定会被回收?5、垃圾回收算法标记-清除法:标记需回收对象,再进行清除。.原创 2022-03-01 19:34:51 · 103 阅读 · 0 评论 -
Spring事务失效
@Trancastional注解失效场景:1、被注解描述的方法的修饰符不是public2、通过调用类内部方法间接调用开启事务的方法(直接调用,事务正常)3、异常被捕获,未抛出到方法外原创 2022-02-28 16:37:59 · 167 阅读 · 0 评论 -
Spring
1、AOPjdk代理:基于接口cglib代理:不必基于接口2、传播特性3、数据库隔离级别Oracle:read-commitedMysql:repeatable-read4、spring隔离级别(5种)默认:使用数据库隔离级别与数据库隔离级别一一对应...原创 2022-02-28 16:24:49 · 240 阅读 · 0 评论 -
设计模式-单例
实现方式:1、饿汉:开始就创建对象,造成不必要的内存消耗。2、懒汉:需要时再创建。初始版本:线程不安全,出现创建多个实例对象获取方法加锁:性能低双重判断:先判断是否创建,再加锁,指令重排造成获取未初始化完全的对象(加volicate避免)静态内部类:实例对象为类变量,安全又高效饿汉:可以通过反射创建两个实例对象。3、枚举枚举不能被反射。...原创 2022-02-27 17:14:59 · 120 阅读 · 0 评论 -
Mysql索引
1、索引分类:2、索引失效:3、大数据量表添加索引原创 2022-02-27 16:24:42 · 1026 阅读 · 0 评论 -
Synchrnized升级
无锁升级为偏向锁:线程访问同步代码块,查看对象头是否存储本线程,没有则通过CAS替换markword。偏向锁升级为轻量级锁:轻量级锁升级为重量级锁:原创 2022-02-27 14:32:33 · 211 阅读 · 0 评论 -
HashMap
HashMap-1.7容量:数组大小,也叫哈希表大小(默认1>>4=16)加载因子:元素装多满(默认0.75)阈值:容量*加载因子容量达到阈值则进行扩容原创 2022-02-27 11:54:16 · 342 阅读 · 0 评论