自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

转载 国产数据库安装-达梦数据库linux下的安装

达梦(DM)数据库在linux环境下使用命令行安装、初始化、注册服务_黄焖JimmyFun的博客-CSDN博客

2021-09-23 10:19:38 157

原创 1.java使用类加载器获取注解的值

package com.bda.icetea;import com.google.common.collect.Lists;import javax.persistence.Table;import java.io.File;import java.net.URL;import java.util.List;/** * * @author zhenhai.wan * @Date 2021/7/2 */public class IceTeaClassUtil { /*.

2021-07-02 13:08:45 246

原创 rocketmq学习-2.浅谈解决秒杀情况下架构优化

1.页面数据静态化+多级缓存将页面数据从数据库获取的动态获取方式改成缓存成静态页面获取的形式多级缓存是指CDN+Nginx+Redis的缓存架构2.扣减库存问题答题的方式避免作弊单独部署一套订单系统,由网关控制请求走向将库存数量按照品名数量放入redis中秒杀结束后,Nginx层过滤无效请求大量下单请求处理进入RocketMQ环节,生成队列让订单系统慢慢消费...

2021-06-29 14:19:18 147

原创 rocketmq学习-1.rocketmq基础架构

1.nameServer集群nameserver用来存储每台broker的节点信息,检测broker的心跳,每10s检测一次,超过120s没有心跳的broker会从nameserver注册表中剔除生产者和消费者都会从nameserver中获取broker的节点信息来决定如何写入mq和从mq中消费信息2.brokerbroker分为一主二从即一个master节点两个slave节点,数据有三份一样的采用Dledger主备自动切换每30s会发送心跳给nameserver会把自己的信

2021-06-29 14:18:47 122

原创 mysql学习-10.explain执行计划

explain执行计划重要参数有id,type,key,rows,extra1.id 表示执行的顺序,id越大越先执行,id一样时从上往下执行。2.select_type 表示查询类型,通常有: simple:表示不需要union操作或者不包含子查询的简单查询。 primary:表示最外层查询。 union:union操作中第二个及之后的查询。 dependent union:union操作中第二个及之后的查询,并且该查询依赖于外部查询。 subqu...

2021-06-29 14:18:12 557

原创 mysql学习-9.如何正确的使用索引

1.索引的规则1.1.等值匹配假设索引(A) select * from table where A=xxx就是走索引的1.2.最左侧列匹配假设索引(A,B) select * from table where A=xxx and B=xxx就是走索引的而缺少A select * from table where B=xxx就是不走索引的,因为在B+树中是从A字段最先判断的如果想要走索引那么可以 select * from table where A in (穷举A的值) and B

2021-06-29 14:17:42 1324

原创 mysql学习-8.索引的数据结构

1.索引的基础概念大量插入数据的时候,会有一个数据页分裂的过程.其中的自增主键是从小到大依次排序的,所以每一次的插入都会伴随数据行从一个数据页挪动到另一个数据页.要快速从大量的数据页中找到一行数据,根据主键ID去和每一个数据页的第一行的主键ID做对比就知道这行数据到底是在哪一个数据页中.找到这个数据页之后只需要在这个数据页中遍历即可2.由双向链表演化到B+树一个大数据量的表中,那么他的主键必定是有很多的,那么他的主键的索引也是很多的.一条一条的索引就会组成一个索引页(生成相应的索

2021-06-29 14:17:12 101

原创 mysql学习-7.独占锁和共享锁

1.独占锁(防止脏写)独占锁叫做写锁并发事务修改一行数据时,会先判断这行数据是否有被加锁.如果未加锁就会添加一个独占锁,包含了自己的trx_id和状态和这行数据关联起来第二事务过来的时候判断到有锁了,那么他也加一个独占锁在后面排队只是状态是待执行的状态第一个事务执行完了之后就会检查这行数据是否有其他的锁.他会修改一个锁的状态让他进入执行状态2.共享锁共享锁叫做读锁去读取加了独占锁的值的时候,会自动执行mvcc的规则去undo中读他的快照版本共享锁是查询的时候可以添加的锁,

2021-06-29 14:16:35 542

原创 mysql学习-6.innodb下的mvcc版本控制

1.undo log版本链每一行数据都有两个隐藏字段 一个是trx_id(事务ID),一个是roll_pointer(指向执行事务之前的undo log中的旧值),那么在undo log中会形成一个版本链2.readview机制m_ids--记录生成readview的时候此刻还未提交的trx_id(事务ID)min_trx_id--m_ids中的最小值max_trx_id--是mysql下一个要生成的事务ID,最大事务ID.就是m_ids中最大的下一个creator_trx_

2021-06-29 14:15:34 76

原创 mysql学习-5.mysql中并发事务产生的问题

1.什么是脏读,脏写,不可重复读,幻读1.1.脏读和脏写实际上都是操作到了未提交的数据上导致的问题脏读:A事务在读取数据的同时,B事务在修改数据.而A事务读取到了B事务未提交的值,如果B事务回滚了,再次读取时就发现值被回滚了.脏写:A事务在写数据时,B事务也在写数据.A事务写在B事务的未提交版本上.B事务要反悔,所以回滚了.导致A事务也不明不白的回滚了.1.2.不可重复读在不会发生脏读的前提下,即读到的数据都是已提交的情况有一个事务A是连续不断的对一条数据进行查询,突然中间有事务

2021-06-29 14:15:03 116

原创 mysql学习-4.lru链表中的冷热数据处理

1.导致lru链表中热数据区被挤到尾部节点的可能原因由于mysql有预读的机制,会导致不是热数据的预读页会随着缓存页的读取会被放到lru链表的最头部还有mysql有全量扫描表的可能,也会导致大量本来属于热数据的缓存页会被挤到lru链表的最尾部预读机制中的值设置-- innodb_read_ahead_threshold 默认值是56 ,如果顺序的访问一个区内的数据页超过这个数量,就会触发预读机制,将下一个相邻区中的所有数据页都会加载到缓存页中-- innodb_random_read_a

2021-06-29 14:14:29 565

原创 mysql学习-3.free链表flush链表lru链表基本概念

这三个链表都是基于描述数据块的双向链表 他在buffer pool中占用的内存仅仅只是他的基础结点(40字节左右)1.free链表:buffer pool初始化完成后 将空白数据页的描述数据头尾连接起来2.flush链表:存储增删改之后的脏页3.lru链表:用来存储查询的页,常用的页会在头结点,不常用页会在尾节点.其中还有相应的一些lru的优化来处理预读页4.当缓存页用完的时候会触发lru链表最尾部和flush链表刷入磁盘...

2021-06-29 14:13:15 432

原创 mysql学习-2.buffer pool

1.为啥要使用buffer poolbuffer pool是基于内存的,可以在磁盘中加载一些数据进来,进行增删改操作.以此来减少了直接对磁盘的增删改的io操作,可以让增删改尽量在缓存中进行提升了性能buffer pool如何配置buffer pool默认值大小是128Minnodb_buffer_pool_size=xxx字节设置buffer pool为3G(为128的倍数) buffer pool块数为8mysqld --innodb_buffer_pool_size=3G -

2021-06-28 10:27:04 96

原创 mysql学习-1.mysql架构设计

1.mysql执行sql大致流程web容器中发起sql语句执行的请求->从数据库连接池中拿到连接->连接请求mysql中的sql接口->sql解析器进行sql语句的步骤解析->sql查询优化器进行sql语句的执行计划调优->sql执行器按照执行计划执行sql语句->sql执行器将执行任务交给存储引擎(InnoDb)->存储引擎拿到执行任务后 先从磁盘中加载被执行数据的缓存页数据到Buffer pool->然后生成一条undo

2021-06-28 10:26:09 83

原创 jvm学习-8.问题案例记录及处理方案

1.由于设置了值SoftRefLRUPolicyMSPerMB=0导致频繁触发full gcjvm在反射过程中动态生成的类的class对象,他们都是SoftReference软引用的软引用(SoftReference)在jvm内存不足的情况下会被回收然后这个SoftRefLRUPolicyMSPerMB设置为0的情况下,会造成反射创建出来的软引用过期时间很短在ygc的时候会被回收掉,促使jvm不断的在创建反射所需的对象导到元数据频繁gc,元数据区的gc会触发full gc,从而导致了频繁的ful

2021-06-28 10:23:08 239

原创 jvm学习-7.对象引用类型

1.java对象引用类型https://blog.csdn.net/weixin_31884015/article/details/114082371强引用(不被回收) > 软引用(内存不足的时候会被回收) > 弱引用(随时都可以被回收) > 虚引用(只能在ReferenceQueue引用队列中见到)1.1.强引用public A a = new A();a的值就是强引用,强引用是不会被回收的,且强引用中局部变量也是不会被回收的1.2.软引用(SoftR...

2021-06-28 10:22:37 89

原创 jvm学习-6.G1回收器

1.分为了很多小块region2.动态扩充新生代 从默认初始值的5%扩充到最大的60% 老年代最大是40%3.大对象不会进入老年代还是直接给到小块中存储 既不属于新生代也不属于老年代4.加入了混合回收(Mixed Gc)的概念,在老年代达到了45%的时候进行,目的就是要减少混合回收5.可以限制每次的回收时间6.G1会进行对象回收效益比分析 分析那些回收时间短的被回收的对象多的7.G1适合那种大内存的机器上做回收,适合追求STW短的业务8.正常的回收是类似ParNew的复制清除法

2021-06-28 10:21:58 54

原创 jvm学习-5.ParNew和CMS回收器原理

1.新生代的回收器(Serial和ParNew)新生代的回收器有Serial和ParNewSerial为单线程的回收器,ParNew回收器是多线程的如何开启ParNew回收器:启动参数中添加-XX:+UseParNewGcParNew默认开启的线程就是CPU的核心数强行设置值的话是-XX:ParallelGCThreads2.什么时候用单线程的Serial什么时候用多线程的ParNew呢有个设置值加入 "-server"就是服务器模式,"-client"就是客户端模式一般ja

2021-06-28 10:21:09 144

原创 jvm学习-4.堆内存是如何一步一步GC的

1.新生代GC(复制算法)最开始是将新生代分为两个区域来实现的,每当GC之后都会留下一些不连续的空间,这些碎片不利于新加入的大对象存放,因为大对象存放是需要一块连续空间的.所以每次GC完之后会将这些存活的对象排列复制到另一块空的内存中,然后直接把之前的那一块内存直接清空但分为两块导致内存的利用率只有50%后面对这个设计进行了升级演化出了Eden区和两块Survivor区2.Eden区和Survivor区(简称E区和S区)Eden:翻译过来是伊甸园 一般占比80%内存可以通过参数-

2021-06-28 10:20:08 930

原创 jvm学习-3.GC与JVM分代模型

1.什么是垃圾一般情况下在出栈时,该方法所引用的实例对象就变成了没有任何地方指向他,变成了一个未被引用的对象定义:如果某个实例对象没有任何一个方法的局部变量指向他,也没有任何一个类的静态变量,包含常量等地方指向他就称之为堆中的垃圾2.什么时候触发GC对于堆中的垃圾是在新建对象的时候,发现堆中内存不足时才会去触发GCGC的内存区域包含了堆,方法区在方法区中的类变量没有任何使用的情况下才会被GCGC应当保持频率越少越好3.jvm分代模型分为新生代,老年代,永久代新生代和老

2021-06-28 10:19:30 78

原创 jvm学习-2.jvm内存区域

1.jvm内存分区方法区,程序计数器,java虚拟机栈,java堆内存,其他内存区域1.1.方法区存放.class文件加载进来的类以及常量池在jdk1.8以后这块区域被称做元数据区域,1.7以前是放在虚拟内存中的,1.8以后是放在真正的内存空间中的类加载完成时生成的字节码存放在方法区1.2.程序计数器每一个线程执行到具体方法的某一步都由程序计数器记录下来1.3.java虚拟机栈存放局部变量以及栈帧每一个方法都会在虚拟机栈内创建一个栈帧,栈帧内包含了局部变量表,操作数栈

2021-06-28 10:17:24 75

原创 jvm学习-1.类的加载

1.类加载的顺序加载,验证,准备,解析,初始化,使用,卸载1.1.加载当程序中用到这个类的时候才会去加载1.2.验证加载进来的.class文件是否满足指定的一些规范1.3.准备给被加载进来的类分配一定的内存空间,给里面的类变量也分配内存空间,并且给一个默认的初始值1.4.解析主要是把一些符号引用替换成直接引用1..5.初始化针对准备阶段的类变量引用的值做一个实例化赋值例如A a = new A();在准备阶段只是给一个null值,在初始化的时候才会在堆内存

2021-06-28 10:16:42 80

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除