自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MVCC原理

3 .但这里有个问题,为什么数据不直接刷新到磁盘呢,是因为数据存储的时候是要维护索引结构b+树的,而且刷新磁盘会有io连接,如果频繁增加数据会有性能问题,所以buffer pool的数据会一批一批存入而不是一个一个。然后找到上一条trx_id为 2,代入到右侧公式,发现trx_id < min_trx_id 2<3 所以可以访问trx_id为2的这个版本,所以查出。m_ids(活跃id):事务2已经提交,显然不是,事务3,事务4,事务5还未提交,所以是 3,4,5。后面的复用前面的,一样套公式进去。

2024-03-13 20:50:43 378

原创 虚拟机里Linux开启docker后无法ping通主机,但主机可以ping通虚拟机

关闭网段跟你主机一样网段的网桥(192.168.x.x) 例:# 关闭br-34ecd09fc101网桥ip link set dev br-34ecd09fc101 down# 删除br-34ecd09fc101网桥brctl delbr br-34ecd09fc101

2022-02-10 20:18:04 1098

原创 Ribbon负载均衡之轮询算法

轮询算法上次请求下标值(第一次默认为0)加1%服务器集群总数量=实际调用服务下标,每次重启服务从1开始计时源码分析Ribbon实现负载均衡实在RoundRobinRule类中完成的choose方法为轮询算法,在这个方法里面,我们得到了集群里服务数量serverCount将serverCount传入incrementAndGetModulo方法里面incrementAndGetModulo方法里,我们得到之前下标,然后加1,然后与当前服务数量取模,就得到了需要调用服务的下

2021-07-13 10:56:05 715

原创 spring循环依赖

什么是spring循环依赖在创建bean的过程中,类a需要类b才能创建,类b也需要类a才能创建造成死循环缓存怎么解决bean的创建有三步,实例化,填充属性,初始化我们将实例化这种半成品放入一个缓存a实例化把a放入,b实例化要a在缓存中有,可解决循环依赖spring三级缓存spring通过三级缓存来避免循环依赖创建a对象时发现需要b,把a放入三级缓存创建b时需要a,把a放入二级缓存并删除三级中的ab直接晋升一级缓存并删除三级中的ba晋升至一级缓存,创建完成为什么不能用二级缓

2021-07-05 15:23:32 191 4

原创 Docker搭建RabbitMq镜像集群

Docker搭建RabbitMq镜像集群创建容器创建三个RabbitMq容器docker run -d -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 --hostname rabbitmq1 -p 5672:5672 -p 15672:15672 --name rabbitmq1 rabbitmq:3-management docker run -d -e RABBITMQ_DEFAULT_USER=root -e

2021-05-15 21:09:42 908 5

转载 使用docker时访问报curl: (56) Recv failure: Connection reset by peer错误

# 停止dockersystemctl stop docker# 安装bridge-utilsyum install -y bridge-utils # 关闭docker0网桥ip link set dev docker0 down# 删除docker0网桥brctl delbr docker0# 添加docker0网桥brctl addbr docker0# 添加网桥信息ip addr add 172.16.10.1/24 dev docker0# 启动docker0网桥ip l

2021-05-09 15:12:31 2205 3

原创 AQS源码探究

aqs此时main函数有a,b两个线程public class AQSDemo { public static void main(String[] args) { ReentrantLock lock = new ReentrantLock(); new Thread(()->{ lock.lock(); try { System.out.println("-----A t

2021-05-02 09:30:09 111

原创 几种OOM(OutOfMemoryError)

Java heap space堆内存溢出,创建对象超过堆的容量即可报错GC overhead limit exceeded程序在垃圾回收上花费了98%的时间,却收集不回2%的空间汇报这种错误Metaspace元空间耗尽unable to create new native thread线程创建太多,超过负荷,比如运行如下代码9万多次后就报错了package com.xiaojie;public class MyTest { public static void m

2021-04-24 14:47:57 151

原创 阻塞队列的生产者消费者

阻塞队列的生产者消费者利用atomicInteger,阻塞队列来完成package com.xiaojie.jiehe.my;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;/** *

2021-04-22 20:36:34 69

原创 CountDownLatch,CyclicBarrier,Semaphore

CountDownLatchcountDownLatch这个类是通过一个计数器来实现的,计数器的初始值是线程的数量。当一个线程执行完毕后,计数器减一,当计数器的值为0时,表示所有线程都执行完毕,然后在等待的线程就可以恢复工作了package com.xiaojie.readwrite.ReadWriteLock;import jdk.nashorn.internal.objects.annotations.Getter;import java.util.concurrent.CountDow

2021-04-21 19:51:02 79

原创 手写自旋锁

手写自旋锁需要AtomicReference类的cas操作加锁方法cas占用则循环,没有就拿到解锁直接置为null就行具体代码有注释package com.xiaojie.haha;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicReference;/** * 实现自旋锁 */public class SpinLock { AtomicReference<T

2021-04-20 20:25:01 104

原创 桥接模式

桥接模式情景分析,当前有不同品牌,不同样式的手机,有打电话开关机的功能,如和增加样式,品牌最为便捷,如果我们直接加品牌的话意为着要为每个样式里多加一个品牌,加样式的话又要新样式下写手机品牌我们使用桥接模式定义桥梁接口Brand,各大品牌实现Brand定义手机列Phone,Phone聚合Brand并且调用Brand里的手机功能样式类继承Phone,并重写父类功能方法,加入样式这样就达到如果要加手机和样式,我们只需要再加一个相应的类就行Brandpackage com.xiaojie.qia

2021-04-16 19:37:53 84

原创 单例模式

单例模式饿汉式类加载时完成实例化,保证线程安全没有Lazy Loding(懒加载)的效果,如果没用此实例,则会资源浪费package singlecase;/** * 静态常量饿汉式 * 优点,类加载时完成实例化,避免了线程同步问题 * 缺点,在类装载的时候实例化,没有Lazy Loding(懒加载)的效果,如果没用此实例,则会资源浪费 */public class type1 { public static void main(String[] args) {

2021-04-16 18:24:13 160 1

原创 LeetCode_15. 三数之和

三数之和先对传过来的数组排序定格1个元素,其余两个元素用左右两个指针控制相加为0则赋值,大于0则右边指针左移,小于左指针右移(因为排过序,大了左移,小了右移动),这样可以查出某个定格元素对应其他元素的值外层定格元素变值循环代码class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> list = new A

2021-04-12 20:26:17 81

原创 LeetCode_12. 整数转罗马数字

整数转罗马数字1 . 定义两数组对应关系,把题目的4,9,10,90,400,900也加上去2 . 创建循环判断输入数据对应能用哪个符号3 . while里面把当前符合能用的都拼接掉,跳出网小符号继续执行class Solution { public String intToRoman(int num) { if(num<=0){ return null; } int[] number = {1,4,5,9,1

2021-04-11 15:28:47 103

原创 LeetCode_11. 盛最多水的容器

盛最多水的容器class Solution { public int maxArea(int[] height) { int l = 0; int r = height.length - 1; int maxArea = 0; while(l<r){ int area = Math.min(height[l],height[r])*(r-l); maxArea = Math.max

2021-04-11 15:00:36 64

原创 LeetCode_9. 回文数

回文数class Solution { public boolean isPalindrome(int x) { if(x<0){ return false; } int y = x; int b = 0; while(y!=0){ int a = y%10; y /= 10; b = b*10 +a; }

2021-04-11 14:44:17 78

原创 LeetCode_184. 部门工资最高的员工

184. 部门工资最高的员工1 . 联表查询2 . 判断工资和部门是否相同3 . 根据部门id分组查询每个部门的最大工资select d.name as 'Department',e.name as 'Employee',e.salary as 'Salary' from Department d,Employee ewhere e.DepartmentId = d.id and (e.Salary,e.DepartmentId) in ( SELECT

2021-04-10 20:37:55 79

原创 LeetCode_7整数反转

注意超出int的问题,返回结果最好定义为long然后强转代码class Solution { public int reverse(int x) { long r = 0; while(x != 0){ int a = x%10; x /=10; r = r*10 + a; } if(r> -(1<<31) && r&lt.

2021-04-10 19:59:33 69

原创 Java手写红黑树

手写红黑树此代码学习与哔哩哔哩点击视频链接代码内有注释注: 有插入,没有删除,视频没讲emmmmpackage com.xiaojie;import javax.xml.soap.Node;public class RBTree<K extends Comparable<K>,V> { private static final boolean RED = true; private static final boolean BLACK=false

2021-04-09 20:33:26 404 2

原创 JVM类加载与字节码技术_运行期优化

运行期优化分层编译JVM 将执行状态分成了 5 个层次:0层:解释执行,用解释器将字节码翻译为机器码1层:使用 C1 即时编译器编译执行(不带 profiling)2层:使用 C1 即时编译器编译执行(带基本的profiling)3层:使用 C1 即时编译器编译执行(带完全的profiling)4层:使用 C2 即时编译器编译执行profiling 是指在运行过程中收集一些程序执行状态的数据,例如【方法的调用次数】,【循环的 回边次数】等即时编译器(JIT)与解释器的区别解释器将字

2021-03-24 11:49:32 192 1

原创 JVM类加载与字节码技术_类加载器

类加载器Java虚拟机设计团队有意把类加载阶段中的**“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”**(ClassLoader)类与类加载器类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远超类加载阶段对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。这句话可以表达得更通

2021-03-24 11:47:29 226

原创 JVM类加载与字节码技术_类加载阶段

类加载阶段加载将类的字节码载入方法区(1.8后为元空间,在本地内存中)中,内部采用 C++ 的 instanceKlass 描述 java 类,它的重要 field 有:_java_mirror 即 java 的类镜像,例如对 String 来说,它的镜像类就是 String.class,作用是把 klass 暴露给 java 使用_super 即父类_fields 即成员变量_methods 即方法_constants 即常量池_class_loader 即类加载器_vtable

2021-03-24 11:45:31 225

原创 JVM类加载与字节码技术_编译期处理

编译期处理所谓的 语法糖 ,其实就是指 java 编译器把 *.java 源码编译为 *.class 字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是 java 编译器给我们的一个额外福利注意,以下代码的分析,借助了 javap 工具,idea 的反编译功能,idea 插件 jclasslib 等工具。另外, 编译器转换的结果直接就是 class 字节码,只是为了便于阅读,给出了 几乎等价 的 java 源码方式,并不是编译器还会转换出中间的 java 源码,切记。默认构造函

2021-03-24 11:42:33 173

原创 JVM类加载与字节码技术_字节码指令

字节码指令可参考https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5javap工具Oracle 提供了 javap 工具来反编译 class 文件javap -v F:\Thread_study\src\com\nyima\JVM\day01\Main.classCopyF:\Thread_study>javap -v F:\Thread_study\src\com\nyima\JVM\day5\De

2021-03-24 11:38:19 224

原创 LeetCode06_Z字形变换

LeetCode06_Z字形变换先定义StringBuilder的List集合,第一个字母存在第一个StringBuilder中,依次第二行存第二个字母,然后当在最终行数反转存储,实现z形存储,最后把三个StringBuilder合在一起便是答案,下面上代码class Solution { public String convert(String s, int numRows) { if(numRows == 1) return s; List<Strin

2021-03-16 20:05:13 81

原创 JVM垃圾回收_5.GC调优

GC 调优查看虚拟机参数命令"C:\Program Files\Java\jdk1.8.0_181\bin\java" -XX:+PrintFlagsFinal -version | findstr "GC"可以根据参数去查询具体的信息调优领域内存锁竞争CPU占用IOGC确定目标低延迟/高吞吐量? 选择合适的GC科学运算追求高吞吐量(ParallelGC)互联网项目需要追求低延迟((CMS G1 ZGC))确定目标选择合适垃圾回收器最快的GC是不发生GC首先排

2021-02-04 09:59:44 131

原创 JVM垃圾回收_4.垃圾回收器

垃圾回收器相关概念并行收集:指多条垃圾收集线程并行工作,但此时用户线程仍处于等待状态。并发收集:指用户线程与垃圾收集线程同时工作(不一定是并行的可能会交替执行)。用户程序在继续运行,而垃圾收集程序运行在另一个CPU上吞吐量:即CPU用于运行用户代码的时间与CPU总消耗时间的比值(吞吐量 = 运行用户代码时间 / ( 运行用户代码时间 + 垃圾收集时间 )),也就是。例如:虚拟机共运行100分钟,垃圾收集器花掉1分钟,那么吞吐量就是99%串行单线程内存较小,个人电脑(CPU核数较少)安全

2021-02-03 09:50:41 190

原创 JVM垃圾回收_3.分代回收

分代回收回收流程新创建的对象都被放在了新生代的伊甸园中当伊甸园中的内存不足时,就会进行一次垃圾回收,这时的回收叫做 Minor GCMinor GC 会将伊甸园和幸存区FROM存活的对象先复制到 幸存区 TO中, 并让其寿命加1,再交换两个幸存区再次创建对象,若新生代的伊甸园又满了,则会再次触发 Minor GC(会触发 stop the world, 暂停其他用户线程,只让垃圾回收线程工作),这时不仅会回收伊甸园中的垃圾,还会回收幸存区中的垃圾,再将活跃对象复制到幸存区TO中。回收以后

2021-01-31 19:47:04 145 1

原创 JVM垃圾回收_2.三种垃圾回收算法

三种垃圾回收算法1 . 标记-清除 算法定义:标记清除算法顾名思义,是指在虚拟机执行垃圾回收的过程中,先采用标记算法确定可回收对象,然后垃圾收集器根据标识清除相应的内容,给堆内存腾出相应的空间这里的腾出内存空间并不是将内存空间的字节清0,而是记录下这段内存的起始结束地址,下次分配内存的时候,会直接覆盖这段内存缺点:容易产生大量的内存碎片,可能无法满足大对象的内存分配,一旦导致无法分配对象,那就会导致jvm启动gc,一旦启动gc,我们的应用程序就会暂停,这就导致应用的响应速度变慢2 . 标记-

2021-01-31 19:28:30 129

原创 JVM垃圾回收_1 . 如何判断对象可以回收(五种引用)

如何判断对象可以回收引用计数法弊端:循环引用时,两个对象的计数都为1,导致两个对象都无法被释放可达性分析算法JVM中的垃圾回收器通过可达性分析来探索所有存活的对象扫描堆中的对象,看能否沿着GC Root对象为起点的引用链找到该对象,如果找不到,则表示可以回收可以作为GC Root的对象虚拟机栈(栈帧中的本地变量表)中引用的对象。方法区中类静态属性引用的对象方法区中常量引用的对象本地方法栈中JNI(即一般说的Native方法)引用的对象五种引用强引用只有GC Root都

2021-01-25 09:58:02 518

原创 直接内存

直接内存属于操作系统,常见于NIO操作时,用于数据缓冲区分配回收成本较高,但读写性能高不受JVM内存回收管理文件读写流程[使用了DirectBuffer直接内存是操作系统和Java代码都可以访问的一块区域,无需将代码从系统内存复制到Java堆内存,从而提高了效率释放原理直接内存的回收不是通过JVM的垃圾回收来释放的,而是通过unsafe.freeMemory来手动释放通过//通过ByteBuffer申请1M的直接内存ByteBuffer byteBuffer = ByteBuf

2021-01-25 09:08:32 107

原创 堆和方法区

堆的定义通过new关键字,创建对象都会使用堆内存他是线程共享的,堆中对象都需要考虑线程安全的问题有垃圾回收机制堆内存的溢出(OutOfMemoryError)无限创建有效对象则可使堆内存溢出排查堆内存溢出时可把堆内存设置小一点用来即时排查堆内存的诊断1 . jps工具查看当前系统中有哪些java进程2 . jmap工具查看堆内存占用情况3 . jconsole工具图形界面的,多功能的监测工具,可连续监测方法区结构内存溢出1.8以前会导致永久代内存溢出

2021-01-24 11:26:44 754 2

原创 Java虚拟机栈

Java虚拟机栈栈定义每个线程运行时需要的内存,称为虚拟机栈每个栈由多个栈帧组成,对应着每次方法调用时所占用的内存每个线程只能由一个活动栈帧.对应着当前正在执行的方法问题辨析1 . 垃圾回收是否涉及栈内存?不会,栈中会自己出栈,栈中没有垃圾回收2 . 栈内存越大越好吗?栈内存划分越大反而会使你的线程数越少,因为物理内存的大小是一定的,每个线程的栈内存多,会使得线程数目变少,不建议过大3 . 方法内的局部变量是否线程安全?如果没有逃离线程的作用范围(没有返回变量,也不和外面变

2021-01-24 10:06:32 213 1

原创 程序计数器

程序计数器程序计数器的位置程序计数器的作用寄存器(程序计数器)的作用是记住下一条jvm指令的地址,图中可以看到,当我们只想0指令时,会把3的执行地址放入到我们寄存器,然后解释器从寄存器拿到3的地址执行,同时寄存器存入4,以此类推程序计数器的定义每个寄存器都是私有的,不会存在内存溢出,如图在多线程的状态下,线程一的时间片用完时,寄存器会存下一条指令的地址,同时线程2执行,回来时只需读取寄存器变可知执行到哪里,所以每一个线程都会有他的一个私有的寄存器...

2021-01-24 08:39:10 609 1

原创 JVM的体系架构

JVM的体系架构虚拟机的介绍虚拟机的概念所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。大名鼎鼎的Virtual Box,VMware就属于系统虚拟机,它们完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台。程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令。无论是系统虚拟机还是程序虚拟机,

2021-01-24 08:32:45 212 1

原创 谷粒学院项目总结

项目概览项目用的b2c模式,有前台管理系统和后台管理系统后台系统的功能登录功能(集成SpringSecurity框架)权限管理模块(1) 菜单管理:列表,添加,修改,删除(2) 角色管理:列表,添加,修改,删除,为角色分配菜单(3) 用户管理:列表,添加,修改,删除,为用户分配角色(4) 权限管理表的关系讲师管理模块(1) 条件查询分页列表,添加,修改,删除课程分类模块(1)添加课程分类 (读取Excel中里面课程分类数据,添加到数据库中)(2)课程分类列表显示(使

2021-01-24 08:23:43 4700 5

原创 SpringCloud笔记

单体应用存在的问题随着业务的发展,开发变得越来越复杂。修改、新增某个功能,需要对整个系统进行测试、重新部署。一个模块出现问题,很可能导致整个系统崩溃。多个开发团队同时对数据进行管理,容易产生安全漏洞。各个模块使用同一种技术进行开发,各个模块很难根据实际情况选择更合适的技术框架,局限性很大。模块内容过于复杂,如果员工离职,可能需要很长时间才能完成工作交接。分布式、集群集群:一台服务器无法负荷高并发的数据访问量,那么就设置十台服务器一起分担压力,十台不行就设置一百台(物理层面)。很多人干同一

2021-01-24 08:18:51 137 1

原创 SpringBoot笔记

Spring BootSpring Boot 是一个快速开发框架,可以迅速搭建出一套基于 Spring 框架体系的应用,是 Spring Cloud 的基础。Spring Boot 开启了各种自动装配,从而简化代码的开发,不需要编写各种配置文件,只需要引入相关依赖就可以迅速搭建一个应用。特点1、不需要 web.xml2、不需要 springmvc.xml3、不需要 tomcat,Spring Boot 内嵌了 tomcat4、不需要配置 JSON 解析,支持 REST 架构5、个性化配置

2021-01-24 08:16:21 164

原创 Redis笔记

redis笔记redis几大基本类型基础语法set key1 v1 设置值get key1 取值keys * 获得所有的keyexists key1 判断key是否存在append key1 hello 追加字符串,如果key不存在,相当于set keystrlen key1 获得字符串长度incr key1 加一decr key1 减一incrby key1 10 加10 decrby key1 1

2021-01-24 08:13:20 116 1

空空如也

空空如也

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

TA关注的人

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