自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 kibana启动报错

1.先成功启动elastic search后,启动kibana,结果报错:[resource_already_exists_exception]2.解决:查看这个网址的响应:http://localhost:9200/_cat/indices结果如果显示:.kibana_task_manager_1 这就是原因了,3.cmd执行命令:curl -X DELETE http://localhost:9200/.kibana*再刷新2步骤中的网址,发现.kibana_task_manage.

2021-03-26 09:38:02 2216 2

原创 mysql-一文搞懂redo log的来龙去脉

要搞清楚mysql的redo log,还是要先从buffer pool说起。1.Buffer Pool众所周知,mysql对数据对存储是以页为单位存储在磁盘上对,每个页面大小为16kb。innodb存储引擎在处理客户端请求时,会将访问到的数据所在的那个数据页整个加载到内存中。而且访问过后,会先该数据页暂存到内存中,而非立即写回磁盘。这么做到目的也很明确,将是为了避免磁盘I/O带来的巨大开销。这块内存,就叫Buffer Pool。它是InnoDB向操作系统申请的一段连续的内存空间。可以通过innodb

2021-03-03 22:25:36 351 1

原创 java虚拟机运行时数据区

虚拟机栈:线程私有。通常所说的“栈”,java方法执行的线程内存模型,每个方法被执行时,java虚拟机都会创建一个栈帧,存储局部变量表(各种基本数据类型,对象引用),操作数栈,动态链接,方法出口等。 每个方法从调用到执行完毕,对应着一个栈帧在虚拟机中从入栈到出栈的过程。本地方法栈:线程私有。服务于虚拟机使用到的本地方法。《java虚拟机规范》对本地方法栈中方法使用的语言,方式及数据结构等没有规定,由各虚拟机自行实现。Hot Spot虚拟机将本地方法栈和虚拟机...

2021-02-03 15:21:20 156

原创 java-局部变量线程安全

局部变量的作用域只存在于某个方法内,虚拟机经过逃逸分析后可以发现其动态作用域是被限制在其所在方法内的,所以局部变量的引用永远不会逃逸到方法之外,因此其他线程无法访问到他,所以是线程安全的。即使该局部变量上有锁,即时编译器编译后,会自动忽略其上的同步措施而直接执行。...

2021-02-01 14:26:12 362

原创 高效准则之位操作

1.除数为2的次方时,可以转换为与操作,来提高效率,1.1整除操作:n / 32 ,同样的 ,通过位移的方式更高效n/32 —> n/2^5 --> n >> 51.2取余操作:取余 n %32 ,(因为除数32位2^5)所以 ,通过位移的方式更高效n%32 —> n%2^5 --> n &(2^5-1) —> n & 31待更新..........

2020-12-21 15:50:03 80

原创 nacos启动报错

win10 ,本地启动nacos报错:1.用命令startup.cmd,刚开始报错:db num=null,io exception。于是去改了配置文件(nacos目录中conf/application.properties),将db num=1注释放开,并配置了数据库信息,且执行了mysql-nacos.sql脚本重新启动,又报错:java.lang.NullPointerException: null at com.alibaba.nacos.common.notify.Defa...

2020-12-17 10:17:57 2168 1

原创 mysql自增主键

自增主键的值,mysql5.7及之前版本 保存到内存中;5.7之后会持久化 保存到redo log.1.mysql自增主键为啥不连续?1)唯一键冲突2)事务回滚3)自增主键的批量申请

2020-11-24 10:28:30 170

原创 mysql日志

select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20;update T set c=c+1 where ID=2redo:write-ahead-logging 先写日志 再写磁盘 -walredo log 固定大小 --innodb的日志 物理日志 记录 在某个数据页上做了什么修改 循环写 会用完 负责事务binlog server层的日志 归档日志 逻辑日志 记录语句的原始逻辑 追加写,不会覆盖之前的日志 负...

2020-11-18 09:50:15 153 1

原创 mysql慢查询分析

1,mysql中,会引发性能问题的慢查询,大概有下述三种可能: 1)索引没设计好; 2)sql语句没有写好; 3)mysql选错了索引1.1 对于索引没设计好导致的慢查询的解决方法:由于mysql 5.6后 创建索引已经支持online ddl了,所以最高效的解决方法是直接执行alter table加索引。具体方法为: 1).在备库b上执行set sql_log_bin=off,即不写binlog,然后执行alter ...

2020-11-17 14:17:11 295

原创 mysql锁问题

waiting for table metadata lockwaiting for table flush若表锁住 或执行没响应 可以通过show processlist命令查看,若出现waiting for table metadata lock或说明是没有获取到metadata lock,可以通过kill pid解决;waiting for table flush也是被阻塞了,可以kill掉该进程mysql 5.7后 通过select * from sys.innodb_lock...

2020-11-13 11:11:49 180

原创 mysql查询流程分析

CREATE TABLE `t` ( `id` int(11) NOT NULL,a `a` varchar(10) NOT NULL, PRIMARY KEY (`id`), KEY `city` (`a`)) 假如表里有100万行数据,其中有10万行数据的a字段值是'1234567890'。那么语句:select * from t where a='1234567890ab' 的执行流程是怎么样的?这条查询语句执行很慢。流程如下:1.在将条件匹配值传给执行引擎的时...

2020-11-09 16:42:57 121

原创 mysql 优化器索引选择

mysql的优化器会根据自己的一些优化算法,去计算及选择实际执行中使用的索引,下列就where条件查询,order by ,limit ,group by情况说明下优化器选择索引的原则:默认要查询的表是有主键的。1.无条件查询,如果只要order by b,即使create_time有索引,也不会去走索引,因为mysql认为二级索引加回表,整个执行成本要比全表扫描更高,所以会走全表扫描。然后会选择一种排序方式来进行排序(全字段排序或rowid排序)2.无条件查询,但是是order by b li

2020-11-09 15:02:01 608

原创 java虚拟机-垃圾回收器

1. 判断对象已死1.1 引用计数法:对象中设置一个计数器,每当有一个对方引用该对象时,该计数器加1,每当有一个引用失效时,该计数器减1. 缺点:不能对象间解决循环y引用的问题。大多数主流的虚拟机都没有用引用计数法来判断对象是否已死1.2 可达性分析法:通过一系列“GC Roots”的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程走过的路径称为“引用链”,如果某个对象到GC Roots之间没有任何引用链相连,或者说从Gc root到这个对象不可达时,则判断该对象...

2020-11-09 13:21:45 115

原创 order by 排序

举例说明order by内部的执行流程:表结构:CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` varchar(16) NOT NULL, `age` int(11) NOT NULL, `addr` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`), KEY `city` (`city`)) ENGINE=InnoDB

2020-11-09 13:20:24 297

原创 mysql 崩溃恢复

1.mysql崩溃恢复时的判断规则:a.如果redo log里的事务是完整的,即已经有了commit标识,则直接提交;b.如果redo log里的事务只有完整的prepare,则判断对应的binlog是否存在并完整: b.1:如果是,则提交事务;b.2:否则,回滚事务...

2020-11-09 09:55:09 139

原创 mysql索引

索引1.给字符串加索引1.1 直接创建完整索引。缺点:占空间1.2 创建前缀索引,节省空间。缺点:会增加查询扫描次数,且不能使用索引覆盖。1.3 倒序存储,再创建前缀索引,可以绕过字符串本身前缀的区分度不够的问题。缺点:只能等值查询,不能范围查询,并且倒序函数 reverse()函数会额外消耗cpu资源。1.4 创建hash字段索引,查询性能稳定。缺点:有额外的存储(多了一个字段)和计算消耗(crc函数),不支持范围查询。以上,实际业务中,根据不同需求,选择合

2020-10-30 15:31:05 102

原创 mvcc

mysql table tid(primary_k) k 1 1 事务A,B,C的执行流程 (RR隔离级别下)事务A 事务B 事务C start transaction with consistent snapshot; start transaction with consistent snapshot; update t set k=k+1 where id=1; up...

2020-10-28 13:35:41 81

原创 java虚拟机-HotSpot虚拟机中的对象的内存布局

在HotSpot虚拟机中,对象在堆内存中的存储布局分为3个部分:对象头(Header),实例数据(Instance Data),对齐填充(padding)。1.对象头HotSpot虚拟机中的对象的对象头包括2部分信息:a.用于存储对象自身的运行时数据,比如:哈希码,GC分代年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳等。这部分数据又叫Mark Word。Mard Word是一个动态的数据结构,根据对象的状态复用自己的存储空间。例如在32位的HotSpot虚拟机中,对象未被锁.

2020-09-25 15:12:48 138

原创 java并发-CAS

java并发中锁可以解决线程安全的问题,但是缺点也是很明显的,当一个线程没有获取到锁时会被阻塞挂起,当锁释放后 ,又会重新调度,这种线程的上下文切换和重新调度带来了一定的性能开销。当然,java也提供了volatile关键字这种非阻塞的方法来解决共享变量在线程间的可见性问题。但是volatile虽然解决了可见性,并且也是非阻塞的,但是却不能保证原子操作。对于读-改-写(比如java的自增操作),使用volatile就会出问题。针对于此,java提供了CAS锁机制--compare and swap。 C

2020-07-24 10:40:07 96

原创 java并发---synchronized和volatile

这两个关键字都可以解决共享变量的可见性问题。但是又有很大不同。如下:1.synchronized是排他锁,悲观锁,线程安全。是java提供的一种原子性内置锁,当一个线程进入synchronized块前时,会自动获取到锁,这时其他线程再来访问该同步代码块时会被阻塞。当线程退出synchronized块时(正常退出,抛出异常退出,在该同步代码块内部调用了共享变量的wait()方法等均可以释放),会释放锁。其内存语义是:进入synchronized代码块时,会将在synchronized中使用的共享变量值

2020-07-23 13:47:21 126

原创 java-io

1.java io总述最主要的四个基类:InputStrem,OutputStream,Reader,Writer .其余大部分io类都是继承这些基类的。按照输入输出分类,分为输入和输出两大类:如InputStream,Reader是输入,OutputStream,Writer是输出。按照格式分类,分为字节流和字符流:InputStream/OutputStream是字节流,适用于非文本文件;Reader/Writer是字符流,适用文本文件。按照功能分类,分为节点流和处理流。节点流即可以直接

2020-06-24 17:39:04 157

原创 java虚拟机----方法调用

方法调用指的是确定被调用方法的版本。java虚拟机中的方法调用指令如下:invokestatic:调用静态方法invokespecial:调用实例构造器<init>() 方法,私有方法和父类方法invokevirtual:调用所有的虚方法invokeinterface:调用接口方法,运行期会确定一个实现该接口的对象invokedynamic:会在运行时动态解析出调用限定符所引用的方法,然后再执行该方法。该指令是jdk7新增的。invokestatic和invokesp

2020-06-02 16:33:45 145

原创 java虚拟机——栈帧结构

1.总述栈帧java虚拟机以方法作为基本的执行单元。这个执行单元的数据结构就是 虚拟机栈 中的 栈元素——栈帧。栈帧的结构如下:如上图所示,栈帧存储了方法的局部变量表,操作数栈,动态连接、方法返回地址和一些额外的附加信息。对于虚拟机的执行引擎来说,在活动线程中,只有位于栈顶的栈帧才是生效的,即只有当前栈帧是生效的,与当前栈帧关联的方法叫当前方法。执行引擎所运行的所有字节码指令都只针对当前栈帧进行操作。在编译java源码时,栈帧中需要多大的局部变链表,操作数栈的深度这些已经被分析出来并

2020-05-27 10:29:32 469 1

原创 java虚拟机-双亲委派模型

jdk9之前的双亲委派模型:jdk9之前的双亲委派模型:加载器收到加载请求时,会优先委派给其父类加载器,即都会到bootstrap ClassLoader这一步,当父加载器加载失败时,会向下交给子加载器去加载。jdk9之后的双亲委派模型:jdk9之后的双亲委派模型:从图中可以看出,jdk9中,取消了扩展类加载器,取代他的是平台类加载器。加载过程:在平台类加载器及应用程序类加载器收到加载请求时,在委派给父类加载器之前,会先判断该类能否归属到一个系统模块中,如果能,就需要优先委派给.

2020-05-26 15:34:54 195

原创 java虚拟机-类加载过程

java类的生命周期如下图:一个类从被加载到虚拟机内存中开始,到卸载出内存为止,其生命周期会经历上图中7个阶段。其中:验证,准备,解析这3个部分统称为连接。除过解析外,加载、验证、准备、初始化、卸载这些属性是固定的。类的加载过程必须按这种顺序开始。解析在某些情况下可以在初始化之后进行,对应java语言的动态绑定特性。接着详细说明java虚拟机中类加载的全过程: 即加载(此处的加...

2020-04-20 18:40:23 165

原创 redis批量删除

测试删除测试库上数据,直接删的表,导致缓存里有大量失效数据,需要将这些缓存都清空,否则实际接口会失效。用redis desktop manager工具只能一个一个删 ,网上有人说 key必须用:分隔才能用该工具批量删,没试过,不知道真假。试了几个redis批量删除的命令,都不能删掉。索性直接写几行代码删吧,如下:Set<String> keys=redisTemplate....

2020-04-20 13:33:47 688

原创 java虚拟机-字节码文件结构

1.java语言与java虚拟机的关系得益于虚拟机,java被称为跨平台的语言。同时,java虚拟机也可以被看作是跨语言的平台。java虚拟机不与任何语言(包括java)绑定,它只与Class文件 这种特定的二进制文件强关联。任何语言,只要能编译成符合特定规则的Class文件,就都可以在java虚拟机上运行。如下图1 所示:图1 java虚拟机与语言的关系2.Class文件结...

2020-04-17 21:15:40 256

原创 虚拟机参数---持续更新ing

-XX:MaxPermSize=256M 设置永久代最大容量

2020-04-17 09:29:32 110

空空如也

空空如也

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

TA关注的人

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