自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 wait——虚假唤醒

我们的需求是如果是0就+1, 如果是1就-1.class Share { private int num = 0; //+1操作 public synchronized void incre() throws InterruptedException { if(num != 0) { //如果不等于0,释放锁进行等待。 this.wait(); } num++; Sys

2022-03-13 18:44:03 599 4

原创 JVM有哪些区域会发生内存溢出OOM?

文章目录1.运行一个java系统就是运行一个java进程2.执行哪些代码:JVM得加载你的类3.Java虚拟机栈:让线程执行各种方法4.堆内存:存放创建的对象总结1.运行一个java系统就是运行一个java进程public class HelloWorld { public static void main(String[] args) { String message = "Hello World"; System.out.println(message);

2022-02-18 16:01:15 768

原创 MVCC——可重复度(RR)

可重复度(RR):仅在第一次执行快照时生成ReadView,后续快照复用。(例外:当本次事务两次快照读之间有当前读,那么第二次快照读会重新生成ReadView)对应的undo log版本链为:我们来分析一下事务D两次快照读的ReadView:第一次ReadView:根据版本链数据访问规则,第一条数据(trx_id = 3)不满足规则;第二条数据(trx_id = 2)不满足规则;第三条数据(trx_id = 1)满足 trx_id(1) < min_trx_id(2),说明数据.

2022-02-10 17:50:17 914 1

原创 MVCC——读已提交(RC)

读已提交(RC)在每次执行快照读时生成ReadView。对应的undo log版本链为:版本链数据访问规则:1.判断当前事务id 是否等于 creator_trx_id,等于说明这个数据是我自己的事务修改的,可以访问。2.判断trx_id < min_trx_id ? 成立说明数据已经提交了,可以访问。3.判断trx_id > max_trx_id ? 成立说明该事务是在ReadView生成之后开启的,不能访问。4.min_trx_id < trx_id <

2022-02-10 17:03:51 1220 1

原创 基于undo log版本链实现的ReadView机制

ReadView是什么?ReadView是“快照读”SQL执行时MVCC提取数据的依据,快照读就是最普通的Select查询语句,当你执行时,就会生成ReadView。当前读指执行下列语句时进行数据读取的方式:Insert、Update、Delete、Select…for update、Select…lock in share modeReadView有四个关键变量:① m_ids:活跃事务(未提交的事务)集合。 ② min_trx_id:活跃事务中最小的id。 ③max_trx_id:

2022-02-10 16:33:28 554

原创 MVCC前序——undo log版本链

undo log 版本链我们每条数据有两个隐藏字段,trx_id 和 roll_pointer,trx_id表示最近一次事务的id,roll_pointer表示指向你更新这个事务之前生成的undo log。举例:如有事务A(id=50),修改了这条数据,那么这条数据的隐藏字段以及指向的undo log如下图:因为是第一次修改,那么更新这个事务之前生成的undo log是空的。接着,事务B(id = 60)修改了这条数据,把值改为了值B,这条数据的trx_id = 60 ,roll_pointer

2022-02-10 11:40:52 953

原创 mysql脏写、脏读、不可重复读、幻读

脏写有两个事务A、B同时更新一条数据,事务A先更新为A值,事务B接着把A值更新为B值。如图:事务A更新数据后会写入一条undo log日志,会记录事务A修改前原先的数值是NULL。当事务A进行回滚后,把这行数据更新回了NULL,事务B一看,我更新的值是B值呀,怎么没了?这就是脏写!脏读事务A把这行数据修改为了A值,事务B进行查询,读到的也是A值。但是事务A突然进行回滚了,这行数据又回到了NULL值,接着,事务B读取这数据发现怎么和之前读到的A值不一样了,这就是脏读。事务B由于事务A的回滚读不

2022-02-04 19:18:31 1005

原创 undo log回滚日志

1.事务执行一般回滚怎么办?undo log日志当我们进行增删改操作时,会在undo log日志中记录。用于事务的回滚。如果我们在缓存页执行了insert语句,对这个操作就对应有个主键和delete操作,返回之前的状态;同理,你执行的是delete语句,undo log日志就对应了insert操作;执行update语句,记录你更新前的值,回滚时重新update,把旧值更新回去。2.INSERT语句的undo log回滚日志长什么样?以下是undo log日志insert语句的回滚日志结构。

2022-02-04 14:42:32 1036

原创 72. 编辑距离

题目描述给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符 删除一个字符 替换一个字符示例输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)输入:word1 = “intention”,

2022-02-03 14:10:28 402

原创 redo log日志

redo logredo log日志也叫重做日志,记录某个数据页修改操作,如:对表空间xx中的数据页xx中的偏移量xxx的地方更新了数据xxx。当系统宕机后用来恢复至最后一次事务提交的时候。

2022-02-01 18:52:53 2214

转载 jvm查看gc频率

jdk版本1.8查看java进程]#jps24019 user.jar25885 Jps26958 Main目标进程24019监控jvm,每5秒打印一次]# jstat -gc 24019 5000 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 5324

2022-01-18 21:39:33 794

原创 IDEA键位

1.Ctrl + h : 打开接口的实现类

2022-01-17 16:38:33 249

原创 Oauth2.0学习——角色、授权流程

Oauth2.0 角色资源所有者(Resource Owner):本身资源信息的用户,客户端访问用户的权限仅限于用户所授权的范围。客户端(Client): 访问资源的第三方应用。授权服务器(Authorization Server ): 授权服务器用来验证用户提供的信息是否正确,并返回一个令牌(token)给第三方应用。资源服务器(Resource Server): 资源服务器提供用户资源的服务器,例如头像、照片、视频等。Oauth2.0 授权流程步骤1:客户端(第三方应用)向用户请求授权。

2022-01-15 12:00:40 2582

原创 session与token简单区别

Session机制Session是存储在服务端的,每次请求客户端Cookie中携带sessionId,服务器进行验证,sessio是有状态的。缺点:如果服务器做了负载均衡有多个,用户的请求到达某个服务器时,这个服务器没有用户的session信息,就会会话失败。所以Session默认机制下是不适合分布式部署的。TokenToken我们一般称为令牌,一般通过MD5、SHA算法将密钥、公钥、时间戳等元素加密产生的加密字符串。浏览器访问服务器后认证成功会返回token给客户端,客户端后续请求会携带这个to

2022-01-14 12:07:21 1437

转载 使用 @Autowired 的时候,到底是写接口还是实现类?

场景:使用 @Autowired 的时候,到底是写接口还是实现类?答案:写的接口当实现类唯一时,表面上注入接口,其实注入实现类当实现类多个时,通过@Service(“menuService1”)指定实现类解析:这个其实是创建了实现类的对象但引用了接口类型,即 “InjectionDao injectionDao = new InjectionDaoImpl ()”, 是 Java 多态性(向上转型)的一种应用。在实现类处加 @Repository 注解,意思就是 new InjectionDa

2022-01-13 15:56:04 4158

原创 vue启动项目8080端口被占用

1.查看占用8080端口占用的进程netstat -ano | findstr 80802.直接杀死占用8080的端口号taskkill -pid 15168(进程号) -f

2022-01-13 14:55:37 775

原创 表空间与数据区

表空间:我们创建的表,在磁盘都对应“表名.ibd”磁盘文件。物理层面上,表空间就是对应一些磁盘上的文件。数据区:一个表空间的磁盘文件有很多数据页(16kb),不方便管理,所以在表空间引入了数据区(extent)的概念。一个数据区有64个连续数据页,每个数据页16kb,所以一个数据区是1mb,256个数据区分为一组。表空间有多组数据区,他的第一组数据区的前三个数据页是存放一些特殊信息的。其他组的第一个数据区的前两个数据页存放特殊信息。...

2022-01-12 23:56:46 335

原创 G1垃圾回收器学习2

1.什么时候触发新生代与老年代的混合垃圾回收?“-XX:InitiatingHeapOccupancyPercent”参数,默认为45%。当老年代的Region占了45%时,会触发新生代+老年代混合回收阶段。2.回收过程①初始标记——“Stop the World”标记GC Roots(栈的局部变量、方法区的类静态变量)直接引用的对象。②并发标记进行追踪,从GC Roots开始追踪所有存活对象。并发标记阶段与系统程序并发运行,所以对程序影响不大。这个阶段还会记录对象的新建与失去引用。③最终标记

2021-12-24 13:53:36 734

原创 G1垃圾回收器学习1

G1垃圾回收器的设计思想:把堆内存拆分为大小相同的多个Region,老年代和新生代各自对应一些Region,回收的时候选择停顿时间少的和能回收较多对象的Region,尽可能减少系统停顿时间。1.每个Region多大?JVM最大可以有2048个Region,每个Region大小为2的倍数。==Region的大小=堆内存 / 2048。==如堆内存4GB(4096MB),除2048,那么每个Region大小为2M。或者通过-XX:G1HeapRegionSize指定Region大小。2.新生代包含多少

2021-12-24 10:20:50 152

原创 每日总结day10

题:动态规划:121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II(动态规划)总结Minor GC 与 FUll GC触发时机等问题。

2021-12-18 22:57:20 132

原创 Minor GC 与 Full GC触发时机等问题总结

1.什么时候触发Minor GC?答:当新生代的Eden区或其中一个Survivor区空间不足时。2.触发Minor Gc之前会如何检查老年代大小,涉及几个步骤和条件?答:①判断新生代中所有对象大小是否小于老年代可用大小,如果小于就进行Minor Gc,如果大于进行②操作。②如果设置了-XX:HandlePromotionFailure这个参数,就进行③操作,如果没设置则会触发Ful GC。(jdk1.6以后这个参数就没了,直接进行③操作)③判断Minor GC历次进入老年代的平均对象大小是否小于

2021-12-18 21:42:46 524

原创 每日总结day9

题:198. 打家劫舍;213. 打家劫舍 II

2021-12-17 22:20:34 102

原创 每日总结day8

题:动态规划:139. 单词拆分专栏:写入数据库的一行数据,在磁盘上怎么存储的?

2021-12-13 22:27:19 375

原创 每日总结day7

题:动态规划:70. 爬楼梯(完全背包)71. 完全平方数(完全背包)322. 零钱兑换(完全背包)

2021-12-12 22:21:49 180

原创 每日总结day6

专栏:1.根据chunk机制动态调整buffer poll大小。题:动态规划518. 零钱兑换 II(求装满背包的递推方程一般是dp[j] += dp[j - 此间商品的重量] (组合)377. 组合总和 Ⅳ(排列)

2021-12-11 22:08:51 289

原创 每日总结day5

专栏:1.lru链表带来的问题(预读机制可能把不常用的数据页加载进buffer pool中,而把常用的缓存页给刷到磁盘进行淘汰);2.mysql的预读机制(用来淘汰尾部不常用的缓存页);3.lru算法优化(冷热数据分离)4.基于冷热数据分离的lru链表解决了全表扫描和预读机制加载进来不常用的数据页问题。5.lru链表热数据区优化:后3/4部分数据被访问才移动到链表头,前面1/4部分数据被访问不会移动。这样就节省了结点移动。题:动态规划:1049. 最后一块石头的重量 II;494. 目标和

2021-12-08 22:26:43 987

原创 每日总结day4

题:动态规划96. 不同的二叉搜索树(对于推导方程不是很理解);343 整数拆分;01背包问题(优化);416. 分割等和子集

2021-12-05 22:27:06 100

原创 每日总结day3

题:动态规划62 不同路径;63 不同路径 II

2021-12-01 22:02:46 96

原创 每日总结day2

复习:1.继承中成员方法的访问特点。在父子继承关系中,创建子类对象,访问成员方法的规则:创建的对象是谁,就优先用谁,如果没有则向上找(父类)。注意:无论是成员方法或成员变量的访问,如果没有都向上找(找父类)。2.继承中构造方法的访问特点。子类构造方法默认有一个隐式的super()。子类构造可以通过super关键字来调用父类重载的构造方法。子类构造方法中,super只能有一个并且要在第一位。子类普通方法不能使用super()调用父类构造方法。3.super关键字的三种用法,访问父类成员变量

2021-11-30 22:27:22 179

原创 每日总结day1

题:贪心:968. 监控二叉树;714. 买卖股票的最佳时机含手续费(还没理解透)动态规划:746 使用最小花费爬楼梯;70 爬楼梯;509 斐波那契数复习:继承中成员变量的访问方法。在父子类继承中,如果成员变量同名,创建子类对象时,访问有两种方法:1.直接通过子类对象访问成员变量:new对象的时候,等号左边是谁,就优先使用谁,如果没有则向上找(找父类看有没有).public class Father { int num = 200; int len = 20;}pu

2021-11-29 22:17:50 181

原创 fastDFS 无法获取服务端连接资源:找不到可用的tracker

解决方案:systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall开机启动

2021-11-22 16:32:03 4019

原创 JVM整体运行原理图

1.第一步,我们把写好的.java文件进行打包成jar包或war包,打包过程中会把.java编译成.class字节码文件。2.我们JVM需要运行.class文件,通过类加载器把这些文件加载到JVM中,供后续代码运行来使用。类加载器遵从双亲委派模型。应用程序类加载器会问扩展类加载器是不是你的,扩展类加载器会问上层启动类加载器是不是你的类。如果启动类加载器有,则进行类加载到jvm内存方法区。如果没有就向下委派给扩展类加载器,去寻找是不是它的类,如果不是继续向下委派给应用程序类加载器。如果每一层都没.

2021-10-25 21:24:59 338

原创 JZ4 重建二叉树

题目描述给定某二叉树的前序遍历和中序遍历,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。思路前序遍历中,第一个数字是该数的根节点,但在中序遍历中,根节点在序列的中间,根节点的左边序列为左树,右边序列为右树。如前序结点1,在中序中472就是结点1的左子树,5386就是1结点的右子树。由前序的结点1我们确定了中序的左右子树。如:递归时如何确定要递归的范围?我们可用k来记录中序结点的左边

2021-09-10 13:46:04 325

原创 排序算法之归并排序

定义归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。实现思路递归方法。终止条件:元素只有一个时,本身有序。end - start == 0;像二叉树一样进行递归。递归完成后,需要做两步,1:将当前要归并的左右区间元素放入创建的辅助数组中。2:进行归并(放入arra

2021-09-08 17:48:29 113

原创 排序算法之堆排序

原理基本原理也是选择排序,只是不在使用遍历的方式查找无序区间的最大的数,而是通过堆来选择无序区间的最大的数。注意:升序建大根堆,降序建小根堆。思路1.先把数组建成大根堆。2.堆顶元素和最后一个元素交换。交换完后再进行大根堆,后续交换时长度每次-1,相当于每次交换完后,有序长度+1。代码实现/** * @Author: huang * @Date: 2021/9/5 9:58 * @Description: 堆排序 */public class Main7 { public

2021-09-05 19:55:00 233

原创 二叉树的最近公共祖先

题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。示例 2:输入:root = [3,5,1,6,2,0,8,

2021-09-04 17:32:36 99

原创 排序算法之选择排序

定义每一次从无序区间选出最大(或最小)的一个元素,存放在无序区间的最后(或最前),直到全部待排序的数据元素排完 。有两层for循环。第一层for表示执行多少次能完全有序。第二层for表示要从无序区间找出最大的元素。代码实现/** * @Author: huang * @Date: 2021/8/31 15:05 * @Description: 选择排序 */public class Main6 { public static void main(String[] args) {

2021-08-31 16:08:22 83

原创 二叉树的层序遍历

题目描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],3 / \ 9 20/ \15 7返回其层序遍历结果:[[3],[9,20],[15,7]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal著作权归领扣网络所有。商业转载请联系官方授权,

2021-08-29 23:19:32 100 1

原创 hashCode()和equals()区别

1.hashCode()和equals()都是Object类中的方法。如果不重写:hashCode():返回的是对象的地址值,通过地址值来映射。equals():用来比较两个对象的地址是否相等。如果重写:hashCode():根据对象的成员变量,计算出一个整数来映射。equals():比较两对象内容是否相同。2.重写比较两对象是否相等。如果equals()比较相等,则hashCode()一定相等。如果hashCode()比较相等,则equals()不一定相等。3.通过hashCode()

2021-08-29 20:53:31 289

原创 Get和Post区别

GetPost数据参数存放位置url后请求体明文密文明文明文或密文安全性不安全安全长度限制有限制无限制应用场景查询数据修改数据编码方式application/x-www-form-urlencodedapplication/x-www-form-urlencoded 或 multipart/form-data...

2021-08-27 17:10:44 66

空空如也

空空如也

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

TA关注的人

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