自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 问答 (2)
  • 收藏
  • 关注

原创 【MYSQL】

单列索引情况:根据下图可以看到,查询条件中有phone和name,他们都有单列索引,但是执行explain后发现真正只走了phone的索引,因为phone索引中没有name值,故还需回表走一次聚簇索引。为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。表级锁,每次操作锁住整张表。

2024-09-06 10:38:03 1026

原创 【Xshell7公测版及Xshell8测试版下载】

提取码:n072。

2024-07-17 17:26:21 717

原创 【行为型模式-观察者模式】

又被称为发布-订阅(Publish/subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。

2024-07-09 16:05:52 408

原创 【结构性型模式-适配器模式】

将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类适配器模式和对象适配器模式,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。

2024-07-09 15:00:13 559

原创 【结构型模式-代理模式】

由于某些原因需要给某对象提供一个代理以控制该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象与目标对象之间的中介。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。

2024-07-09 10:34:36 1082

原创 【创建者模式-建造者模式】

将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。

2024-07-01 21:57:52 317

原创 【创建者模式-工厂模式】

提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。这种方式适用于当系统需要创建多个系列的产品时,如一个制造汽车系统可能需要创建SUV和BMW等多种车型。抽象工厂模式包含抽象工厂、具体工厂、抽象产品和具体产品等角色,通过这种方式可以进一步提高代码复用和提高系统的可扩展性。(也称为静态工厂模式)由一个工厂对象负责创建所有产品类的实例。这种模式的优点在于客户端不需要知道具体的产品类,只需要知道对应的参数即可。缺点是当需要添加新产品时,需要修改工厂类的判断逻辑,这违背了开闭原则。

2024-06-27 18:08:33 187

原创 【创建者模式-单例设计模式】

这种模式设计到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象方式,可以直接访问,不需要实例化该类的对象。

2024-06-27 16:06:37 291

原创 【软件设计原则】

高层模块不应该依赖于低层模块,它们都应该依赖于抽象。抽象不应该依赖于实现细节,实现细节应该依赖于抽象。类应该对扩展开放,对修改关闭。这意味着你应该能够不修改现有代码的情况下添加新的功能。一个类应该只负责一个功能领域中的相应职责,不要尝试让一个类承担多个职责。类不应该实现它不需要的接口,即一个类应该实现尽可能小的接口。一个软件实体应当尽可能少地与其他实体发生相互作用。子类应该能够替换掉它们的基类,保证程序的正确性。

2024-06-25 18:15:51 153

原创 【VisualVM远程监控Linux Java进程】

(4)启动jstatd:jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=true & 这时执行jps命令就可以看到jstatd线程已经启动了。(5)打开visualVM,选择远程连接,选择jstatd模式,输入服务器ip点确认即可在左侧看到Java进程。(3)给文件777权限:chmod 777 jstatd.all.policy。

2024-05-30 12:24:38 307 1

原创 【执行引擎】

但编译未本地代码后,执行效率高。所以,当Java虚拟机启动时,解释器可以首先发挥作用,而不必等待即时编译器全部编译编译完成后再执行,这样可以省去许多不必要的编译时间,随着时间的推移,编译器发挥作用,把越来越多的代码编译成本地代码,获得更高的执行效率。热点代码:一个被多次调用的方法,或者是一个方法体内部的循环次数较多的循环体都可以称之为“热点代码”。在Java虚拟机运行时,解释器和即时编译器能够互相协作,各自取长补短,尽力去选择最合适的方式来权衡编译本地代码的时间和直接解释执行代码的时间。

2024-03-28 21:39:02 238

原创 【对象实例化】

对象实例化的方式对象的内存布局对象的访问定位补充:直接内存不是虚拟机运行时数据库的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存空间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存。通常,访问直接内存的速度会优于Java堆。即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区。由于虚拟机栈、程序计数器内存空间太小,

2024-03-24 13:09:23 253

原创 【方法区】

Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾手机或者进行压缩。”但对于HotSportJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java堆的内存空间。在jdk7之前,习惯上把方法区,称为永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。补充说明:被声明为final的类变量的处理方式则不同,每个全局常量在编译的时候就会被分配了。

2024-03-23 15:17:44 308

原创 【堆空间】

一个JVM实例只存在一个堆内存,堆也是java内存管理的核心区域。java堆区在jvm启动的时候即被创建,其空间大小也就确定了。是jvm管理的最大的一块内存区域(堆内存的大小是可以调节的)。《java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享java堆,在这里还可以划分线程私有的缓冲区。“几乎”所有的对象实例都在这里分配内存—从实际使用角度看。

2024-02-25 12:10:00 503

原创 【虚拟机栈】

即只有当前正在执行的方法的栈帧是有效的,这个栈帧被称为当前栈帧,与当前栈帧相对应的方法就是当前方法,定义这个方法的类就是当前类。如果当前方法调用了其他方法,方法返回之际,当前栈帧会传回此方法的执行结果给前一个栈帧,接着,虚拟机会丢弃当前栈帧,是的前一个栈帧重新成为当前栈帧。堆解决的是数据的存储,即数据怎么放,放哪儿。不同线程中所包含的栈帧是不允许存在相互引用的,即不可能在一个栈帧之中引用另外一个线程的栈帧。如果该方法中调用了其他方法,对应的新的栈帧会被创建出来,放在栈的顶端,成为新的当前栈。

2024-02-21 15:04:09 340 1

原创 JDK8(windows、linux)安装并配置环境变量【附安装包】

键盘上【windows】+【R】一起按弹出【运行】命令框,输入CMD回车。选择【开发工具】,可以自定义安装路径(路径不能带中文名),随后点击【下一步】,jdk就安装完成啦。我之前安装过,这里就不继续安装了。点击【新建】,配置【JAVA_HOME】,如图所示,变量值就是第4步的jdk安装路径。随后配置环境变量,鼠标右键【此电脑】,选择属性。点击【新建】,配置如图所示属性值即可,随后保存。安装步骤同第二步相同,但是安装包不同,注意区分。点击【高级系统设置】,选择【环境变量】。找到【Path】,点击【编辑】。

2023-11-21 12:01:52 344

原创 【程序计数器】

如上图使用反编译【javap -verbose .\PCRegisterTest.class】即可看到现示的看到程序计数器的作用。程序计数器(也称PC寄存器),用来存储指向下一条指令的地址,也即将要执行的指令代码。有执行引擎读取下一条指令。

2023-11-16 17:31:46 79

原创 【双亲委派机制】

三者承上下级关系。

2023-10-25 17:12:47 104

原创 【docker默认网段与主机网段冲突导致服务器崩溃解决办法】

bridge:桥接模式,此模式下容器可以通过Docker0网卡和外网通信,也可以和宿主机的其他容器进行通信,但是不能和其他主机的容器进行通信,因为可以会造成ip地址冲突,此模式是docker的默认网络模式。每个容器都有ip,而这个ip是由Docker生成的Docker0网卡分配的,默认分配的网段就是172.17.0.0/16的网段,这个网段是可以自定义的,并且只有容器是bridge模式时,会自动分配。:(docker inspect 容器id),可以看到也是172网段,并且指向docker0网卡。

2023-03-25 13:15:51 1863

原创 linux磁盘满载,查看那个文件占用最多

linux查看那个文件占用磁盘多首先df-h查看磁盘使用情况使用du -s /* | sort -nr命令查看那个目录占用空间大从上图可以看到home目录占用最多,可以继续du -s /home/* | sort -nr来查看磁盘使用情况以此类推,继续使用以上命令排查即可。补充:使用du -h --max-depth=1查看当前目录下文件夹大小情况。

2023-03-17 11:05:14 1325

原创 数据结构-树

树是由n(n>=1)个有限节点组成一个具有层次关系的集合。每个节点有零个或多个子节点。没有父节点的节点为根节点。每一个非根节点只有一个父节点。每一个节点及其后代节点整体上可以看做是一棵树,成为当前节点的父节点的一个子树。

2022-09-18 18:04:29 197

原创 线性表概述

顺序表:顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元,依次存储线性表中的各个元素,使得线性表中在逻辑结构上相邻的数据元素在相邻的物理存储单元中。(3) 有环链表入口问题:当快慢指针相遇时,可以判断链表中有环,这时可以设定一个新指针指向链表的起点,且速率和慢指针一样,则慢指针与新指针相遇的地方就是环的入口。链表:链表是一种物理存储单元上非连续、非线性的存储结构,其物理结构不能直观的表示数据元素的逻辑顺序,数据元素的逻辑顺序是通过链表中的指针链依次实现的。

2022-09-18 16:23:35 183

原创 排序-算法

排序算法

2022-08-20 10:42:32 160

原创 时间复杂度

O(1)

2022-08-20 09:50:55 85

原创 垃圾收集算法

其中标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向内存一端移动,然后直接清理掉边界以外的内存。这种算法在当有大量存活对象的情况下,移动存活对象并更新所有引用这些对象的地方将会是一种极为负重的操作,而且这种对象移动操作必须全程暂停用户应用程序才能进行,因此也被形象的描述为“StopTheWorld”顾名思义,算法分为“标记”和“清除”两个阶段首先标记出所有需要回收的对象,在标记完成后,统一回收被标记的对象。2).内存空间的碎片化问题。...

2022-07-17 16:37:37 115

原创 可达性分析算法

虚引用也被成为“幽灵引用”或者“欢影引用”,最弱的一种引用,一个对象是否有虚引用的存在完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象的实例。–强引用是最传统的“引用”的定义,是指在代码中普遍存在的引用赋值,即类似“Objectobj=newObject()”这种引用关系。节点开始,根据引用关系向下搜索,搜索过程所走过的“路程”称为引用链,如果某个对象到GCRoots间没有任何引用链相连接,或者换句话说对象到GCRoots不可达时,说明此对象是不可在被引用了。...

2022-07-17 16:13:06 662

原创 运行时数据区域

java虚拟机在执行java代码的过程中会把它所管理的内存划分为若干个不同的数据区域,分别是方法区、虚拟机栈、本地方法栈、堆、程序计数器程序计数器:每个线程都需要有一个独立的程序计数器,它可以看作是当前线程所执行的字节码的行号指示器 。各线程之前的计数器互不影响,独立存储。虚拟机栈:java虚拟机栈也是线程私有的,其生命周期与线程相同。每个方法被执行的时候,java虚拟机就会同步创建一个栈帧,用于存储局部变量表等信息。每个方法被调用直到执行完毕的过程,就对应一个栈帧在虚拟机栈中从入栈到出栈的过程。本.

2022-05-28 19:28:52 107

原创 JAVA集合之Hashtable

存放的元素是键值对Hashtable的键和值都不能为null,否则会抛出空指针异常 public synchronized V put(K var1, V var2) { if (var2 == null) { throw new NullPointerException(); } Hashtable使用方法基本和HashMap一样Hashtable线程安全(synchronized),HashMap线程不安全底层有数组 Ha.

2022-05-18 16:51:22 350 2

原创 JAVA集合之HashMap

HashMap底层是数组+链表+红黑树,HashSet底层即是HashMap,在前面《JAVA集合之HashSet》已记录过,故此只做一些分析。调用HashMap()的无参构造方法时,会初始化加载因子,并且此时table数组是null。 public HashMap() { this.loadFactor = 0.75F; }当第一次向HashMap中添加元素时,会扩容到16,元素会存放在HashMap$Node对象中。我们知道HashMap是K-V的形式,其实最.

2022-05-18 16:05:11 252

原创 JAVA集合之HashSet

HashSet集合底层是HashMap public HashSet() { this.map = new HashMap(); }HashSet添加步骤:添加元素时,先得到这个元素的hash值,并转化索引值(并不等于实际放的位置的索引,真正的索引值还会进行下图二运算(var9)),这里我注意到了一点,当添加进集合的值是null时,该算法计算出来的索引值为0,所以null放进去的位置始终在集合第一位。 static final int hash(Objec.

2022-05-16 16:53:18 462

原创 JAVA集合之LinkedHashSet

LinkedHashSet是HashSet的子类public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable {LinkedHashSet底层是一个LinkedHashMap,底层维护了一个 数组+双向链表 HashSet(int var1, float var2, boolean var3) { this.ma.

2022-05-16 16:52:04 576

原创 JAVA集合之LinkedList

LinkedList底层是一个双向链表,他维护了两个属性fist和last分别指向首节点和尾节点,每个节点(Node对象)中又维护的prev、next、item三个属性,通过prev指向前一个节点,next指向后一个节点,item就是具体的值当使用无参构造器去构造LinkedList集合时,其实只是做了一个初始化,并没有其他作用。而当使用有参构造器去构造LinkedList,它只有一个参数,参数类型是集合类。有参构造方法调用了无参构造方法,并调用了addAll方法。addAll方法的主要作用是:将指定集.

2022-05-13 11:28:49 339

原创 JAVA集合之Vector

Vector底层同ArrarList一样,也是一个名叫 elementData 的数组this.elementData = new Object[var1];当使用无参构造器去构造Vector时,他会调用有参构造器,并赋初始容量为10大小。 public Vector() { this(10); }后续扩容时,每次扩大的容量为原有容量的两倍 int var2 = this.elementData.length; int v.

2022-05-13 10:31:05 134

原创 JAVA集合之ArrayList

1.ArrayList底层是一个名叫 elementData 的数组;2.当我们使用无参构造函数去构造一个ArrarList集合时,他的初始容量为0,源码为:new Object[0]当第一次使用add方法想集合里面添加元素时,源码会首先判断集合是否需要扩容(正是因为每次添加数据时都需要判断,所以这也是ArrayList集合效率低下的原因之一)如果原有elementData数组容量为0,则扩容elementData容量为10。随后若需要再次扩容,则每次扩容为原来的1.5倍;3.当我们使用指

2022-05-12 16:57:53 239

原创 跨域自己理解

以nginx方式理解前提知道:跨域是浏览器之间同源策略限制的原因,所以服务器之前通信是不会产生跨域的自己的跨域理解:用户第一次访问页面时向nginx服务器发起请求,nginx向后台服务器发起请求处理后返回页面给用户,此时用户能看到页面,也有了地址,比如127.0.0.1:8080/aa,这时如果用户点击其他按钮发请求,也会是向nginx发的,nginx的地址一直是127.0.0.1:8080,所以用户此次点击按钮发请求的地址还是127.0.0.1:8080/bb,满足同源策略,不同的只是端口后面的url

2021-10-22 16:08:26 156

原创 Docker

docker停止所有正在运行的容器docker kill $(docker ps -a -q)(若容器处于restarting状态无法杀死,可以先重启docker-----systemctl restart docker,再执行kill)docker删除所有容器docker rm $(docker ps -a -q)docker删除所有镜像docker rmi -f $(docker images -q)...

2021-10-15 11:36:38 93

原创 关于linux的一些命令

docker重启docker:systemctl restart docker删除镜像:docker rmi [id]删除容器:docker rm [id]查看docker当前已有镜像:docker images查看正在运行的容器:docker ps (查看退出状态的容器,后跟参数 -a)启动容器:docker start [id]停止容器:docker stop [id]重启容器:docker restart [id]进入正在运行容器内部:docker exec -it [id] /bi

2021-10-14 16:17:29 99

原创 RabbitMQ简单demo

@shen工具类生产者消费者

2021-10-13 09:19:50 67

原创 vue知识点小结

VUE引入vue.js在需要vue渲染的部分,套上一个div并给一个div实例化一个Vue对象指令vue除了使用{{}}来给标签绑定内容以外也提供了v-语法,这是vue的指令 v-bind:用于绑定标签的属性值 v-bind:属性名=“属性值” v-bind:属性名,可以简写为 :属性名 使用$前缀可以访问vue对象属性vue.$el可以获取vue渲染的doc对象 v-if: 当值为true时,才显示当前元素,即只加载true的标签,其他为f

2021-03-25 16:05:34 122

原创 TreeSet排序

两种排序Comparable与Comparator接口Comparable(内部)一般让类去实现,然后重写compareTo方法public class Human implements Comparable<Human>---------------public int compareTo(Human o) { return this.englishName.compareTo(o.englishName); }Comparator(外部)重新定义...

2021-03-25 16:03:32 89

空空如也

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

TA关注的人

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