- 博客(33)
- 收藏
- 关注
原创 MySQL:事务隔离级别
个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读。因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是。事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。(可重读) 事务隔离级别下使用的是Next-Key Lock。: 允许读取并发事务已经提交的数据,可以阻止脏读,但是。: 最低的隔离级别,允许读取尚未提交的数据变更,可。(可重读)已经可以完全保证事务的隔离性要求,即达到了。存储引擎的默认支持的隔离级别是。存储引擎的默认支持的隔离级别是。
2023-08-19 20:53:05
176
原创 MySQL:并发事务带来哪些问题?
在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对。不可重复读的重点是修改比如多次读取一条记录发现其中某些列的值被修改,幻读的重点在于新增。交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。据,那么在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之间,由于第二个事务。指在一个事务读取一个数据时,另外一个事务也访问了该数。还没有提交的数据,那么另外一个事务读到的这个数据是。
2023-08-19 20:40:28
252
原创 MySQL中的数据库引擎
全表锁,拥有较高的执行速度,不支持事务,不支持外键,并发性能差,占用空间。行级锁,提供了具有提交、回滚和崩溃回复能力的事务安全,支持自动增长列,支持。全表锁,存储在内容中,速度快,但会占用和数据量成正比的内存空间且数据在。索引,检索效率非常高,但不适用于精确查找,主要用于。相对较小,对事务完整性没有要求,以。为主的应用基本上可以使用这引擎。外键约束,并发能力强,占用空间是。那些内容变化不频繁的代码表。倍,处理效率相对会差一些。重启时会丢失,默认使用。
2023-08-19 20:35:09
166
1
原创 java并发:Thread中的join方法
join()方法用于等待调用该方法的线程完成执行。当一个线程调用另一个线程的join()方法时,它会暂停自己的执行,直到被调用的线程完成执行才会继续执行。join()
2023-08-15 21:18:31
576
1
原创 B树和B+树
而 B 树是一种多路平衡查找树,它满足平衡二叉树的规则,但是它可以有多个子树,子树的数量取决于关键字的数量,比如这个图中根节点有两个关键字 3 和 5,那么它能够拥有的子路数量=关键字数+1。二叉查找树会出现斜树问题,导致时间复杂度增加,因此又引入了一种平衡二叉树,它具有二叉查找树的所有特点,同时增加了一个规则:”它的左右两个子树的高度差的绝对值不超过 1“。(如图所示)这个是 B+树,B+树的所有数据是存储在叶子节点,并且叶子节点的数据。节点,右子树的所有子节点都大于它的根节点。是用双向链表关联的。
2023-08-09 21:02:42
197
原创 java实现LRU算法,附代码
原理是根据页面的最近使用情况来决定哪些页面应该被置换出去,以便为新的页面腾出空间,是一种常见的页面置换算法,用于操作系统中的页面缓存管理。
2023-08-08 22:14:12
337
原创 CAS算法:乐观锁的并发控制机制
CAS(Compare and Swap)是一种并发算法,用于解决多线程环境下的数据竞争问题。它是一种乐观锁机制,基于原子操作,常用于无锁编程和并发数据结构的实现。CAS 算法的核心思想是比较并交换,通过比较期望值和当前实际值是否相等来确定是否执行交换操作。如果在执行 CAS 操作的过程中,目标值被改变为其他值,然后又变回原来的目标值,这样在比较时会误认为没有被修改过。如果 CAS 操作失败,线程会一直自旋尝试,直到成功为止。CAS 算法的优点是避免了传统锁机制中的竞争和阻塞,提高了并发性能。
2023-08-07 21:54:11
254
原创 java中的双重检查锁,为什么会用到volatile关键字?
双重检查锁(Double-Checked Locking)是一种常见的用于实现线程安全单例模式的技术,它的目标是在保证线程安全的前提下,尽可能地减少锁的使用,从而提高程序的性能。
2023-08-04 22:15:13
283
原创 synchronized锁升级过程
2. 轻量级锁(Lightweight Locking):当多个线程竞争同一个锁时,偏向锁就会失效,此时JVM会将锁的状态标志设置为轻量级锁。当一个线程获取轻量级锁时,JVM会将锁对象的Mark Word复制一份到线程的栈帧中,并将锁对象的Mark Word指向线程的栈帧。在JDK 6及以上版本中,synchronized锁引入了锁升级的机制,包括偏向锁、轻量级锁和重量级锁,这些锁的状态转换也被称为锁升级过程。如果程序中存在大量的锁竞争,那么锁升级的过程就会频繁发生,这会严重影响程序的性能。
2023-08-03 21:14:05
239
原创 java中的内存结构
每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实。域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数。较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行。线程私有的,它的生命周期与线程相同。栈、本地方法栈和程序员计数器是运行是线程私有。务,而本地方法栈则是为虚拟机使用到的。虚拟机所管理的内存中最大的一块。栈中从入栈到出栈的过程。
2023-08-02 21:37:14
188
原创 堆和栈的区别?
栈是运行时单位,代表着逻辑,内含基本数据类型和堆中对象引用,所在区域连续,没有碎片;是存储单位,代表着数据,可被多个栈共享(包括成员中基本数据类型、引用和引用对象),所在。如果栈内存或者堆内存不足都会抛出异常。栈内存用来存储局部变量和方法调用,而堆内存用来存储。量,还是类变量,它们指向的对象都存储在堆内存中。栈内存是线程私有的。堆内存是所有线程共有的。无论是成员变量,局部变。栈的空间大小远远小于堆的。区域不连续,会有碎片。
2023-08-01 21:07:43
159
1
原创 jvm中的垃圾回收器
JVM(Java虚拟机)内存管理的一个关键组成部分是垃圾回收器(Garbage Collector),它负责回收不再使用的内存空间,以便可以重新利用这些内存空间。JVM中的垃圾回收器有不同的实现方式和算法,本文将详细介绍几种常见的垃圾回收器及其特点。新生代单线程收集器,标记和清理都是单线程,优点是简单高效;收停顿时间为目标的收集器,具有高并发、低停顿的特点,追求最短。,而前六种收集器回收的范围仅限于新生代或老年代。新生代并行收集器,追求高吞吐量,高效利用。: 老年代并行收集器,吞吐量优先,
2023-08-01 21:02:04
208
1
原创 jvm中的垃圾收集算法
标记-整理(Mark-and-Compact)算法是根据老年代的特点提出的一种标记算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一端移动,然后直接清理掉端边界以外的内存。当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。标记-清除(Mark-and-Sweep)算法分为“标记(Mark)”和“清除(Sweep)”阶段:首先标记出所有不需要回收的对象,在标记完成后统一回收掉所有没有被标记的对象。
2023-08-01 09:08:54
187
1
原创 java反射之Method类的实现,附代码
Java反射中的Method类表示一个类的方法,可以通过Method类的实例来调用该方法。Method类提供了许多方法,可以获取方法的名称、返回值类型、参数类型等信息,还可以通过invoke方法动态调用方法。3.获取指定方法:该部分代码通过调用Class类的getMethod方法获取指定方法,并打印方法名。4.调用方法:该部分代码通过调用Method类的invoke方法动态调用方法,并传入方法的参数。2.获取所有声明的方法(不包括从父类继承的方法)一、自定义一个Person类,其中有两个方法。
2023-07-30 20:47:29
1087
1
原创 java中的jdk动态代理机制详解,附代码实例
Java中的动态代理机制是一种在运行时生成代理类的技术,它可以在不修改原始代码的情况下对原始对象进行增强或拦截操作。动态代理机制通常用于实现AOP(面向切面编程)等功能。Java中的动态代理机制主要涉及以下三个类:Proxy、InvocationHandler和Method。其中,Proxy类是动态代理类的主类,InvocationHandler是代理类调用处理程序的接口,Method是Java反射中的类,用于描述类中的方法。
2023-07-30 20:35:53
872
1
原创 java学习笔记:IO流
按照流的流向分,可以分为输入流和输出流;按照操作单元划分,可以划分为字节流和字符流;按照流的角色划分为节点流和处理流。Java Io流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java I0流的40多个类都是从如下4个抽象类基类中派生出来的。所有的输入流的基类,前者是字节输入流,后者是字符输入流。所有输出流的基类,前者是字节输出流,后者是字符输出流。
2023-07-29 21:30:41
197
1
原创 java学习笔记:java中抽象类和接口的区别?
抽象类可以包含非抽象方法和抽象方法,其中抽象方法是没有具体实现的方法,需要子类去实现。Java中的继承是单一继承,一个类只能继承一个抽象类,但是可以实现多个接口。在Java中,抽象类可以实现接口,这意味着抽象类可以实现接口中定义的方法。而接口不能实现抽象类,因为接口只是一组方法的集合,没有具体的实现。这是因为接口只是一组方法的集合,它没有具体的实现,所以没有必要定义成员变量。在Java中,抽象类和接口是两个重要的概念,它们都可以用于实现多态性,但它们有一些差别。
2023-07-28 21:50:08
173
1
原创 HashMap 的长度为什么是 2 的 N 次方
hash % length == hash &(length - 1) 的前提是 length 是 2 的 n 次方)。采用二进制位操作 & ,相对于 % 能够提高运算效率。总结:使用长度为 2 的幂次方的 HashMap 可以有效地分布元素、减少哈希冲突,并提高哈希散列的性能。取余(%)操作中如果除数是 2 的幂次,则等价于与其除数减一的与(&)操作(也就是说。hash%length,而数据在计算机中以01形式存储,直接求余效率不如位移运算。存数据和取数据的效率高,尽可能地减少。
2023-07-26 20:29:41
382
1
原创 jdk1.8HashMap中的put流程
如果桶为空则直接插入新节点。如果桶不为空,则需要遍历桶中的链表或红黑树,查找是否存在相同的键,如果存在则更新节点值并返回旧值,否则插入新节点。如果桶中的节点数超过了链表转化为红黑树的阈值,则需要将链表转化为红黑树。如果键值对数量超过了扩容阈值,则需要扩容哈希表。方法,该方法在 LinkedHashMap 中默认为空,不做任何操作。然后根据哈希值找到对应的桶。方法计算键的哈希值,然后调用。中首先获取哈希表数组。,如果数组为空则调用。
2023-07-25 21:10:30
249
原创 为什么重写equals方法时要重写hashCode方法
然后,我们使用两个相等的 Person 对象作为 HashMap 的键,但是由于我们没有重写 hashCode 方法,导致它们的哈希值可能是不同的。例如,如果我们使用一个自定义类型作为 HashMap 的键,并且只重写了 equals 方法而没有重写 hashCode 方法,那么对于相等的对象,它们的哈希值可能是不同的,导致无法正确地查找或删除对象。在 Java 中,对象的哈希值是通过 hashCode 方法计算得到的,这个方法会根据对象的属性值计算出一个 int 类型的哈希值。
2023-07-25 20:56:23
243
原创 java中的Arrays.sort()排序方法
Java中的方法是一种内置的排序方法,用于对数组进行排序。这是一个来自类的静态方法,用于对所有的基本数据类型对象数组以及对象数组进行排序。排序的默认顺序是升序。
2023-07-24 21:42:43
6919
原创 java中的注解
Java 注解(Annotation)是 Java 5 引入的一个重要特性,它是一种元数据,提供给程序员在代码中添加注释和标记的方式。注解不直接影响程序的执行,但是可以为编译器和其他工具提供重要的信息。注解是将元数据与类、方法、字段等程序元素关联的一种简单而强大的方式。在本教程中,我们将探讨 Java 注解的基本概念、使用方法和应用场景。
2023-07-22 20:55:20
1638
原创 一个实例理解java中的值传递和引用传递
八种基本数据类型和String(这样理解可以,但是事实上String也是传递的地址,只是string对象和其他对象是不同的,string对象是不能被改变的,内容改变就会产生新对象。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。,他们的改变不影响外部的sb1和sb2。
2023-07-20 17:37:34
301
1
原创 Java中的“128“陷阱,源码角度解析
当我们用“==”方式在比较Java中Interger类型的数据时,有时候会发现两个明明相同的值,最后比较的结果为false。从这2段代码可以看出,在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,上面的代码中i1和i2的数值为100,因此会直接从cache中取已经存在的对象,所以i1和i2指向的是。输出结果表明i1和i2指向的是同一个对象,而i3和i4指向的是不同的对。同一个对象,而i3和i4则是分别指向不同的对象。否则创建一个新的Integer对象。
2023-07-17 15:28:53
312
1
原创 ssm框架中各层作用
存放业务逻辑处理,也是一些关于数据库处理的操作,但不是直接和数据库打交道,他有接口还有接口的实现方法,在接口的实现方法中需要导入mapper层,mapper层是直接跟数据库打交道的,他也是个接口,只有方法名字,具体实现在mapper.xml文件里,service是供我们使用的方法。而service层需要自己导入Mapper层并实现相应的方法。控制器,导入service层,因为service中的接口方法是我们使用到的,controller通过接收前端传过来的参数进行业务操作,在返回一个指定的路径或者数据表。
2023-06-24 11:28:10
164
1
原创 连接数据库时报错’1067‘
后来网上查了查可能是日志文件的大小已经超过了配置文件的大小,将这日志文件内容都删除就行了。此电脑右键->管理->服务->mysql 右键启动,启动成功后会生成新的“ib_logfile0”、“ib_logfile1”在“my.ini”文件中,将“default-storage-engine”的内容修改为MYISAM;2、在MySQL目录下的data中删除“ib_logfile0”、“ib_logfile1”注意ibdata1不要删,否则原来的表就会打不开了,还得恢复结构。1、打开数据库安装目录。
2023-05-16 17:45:59
385
1
原创 cookie和session
cookie译为“饼干”,是服务器通知客户端(浏览器)保存数据的一种技术,实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户的状态,就使用response向客户端浏览器颁发一个cookie。客户端浏览器会把cookie保存起来。当浏览器再次请求该网站时,浏览器就会把请求地址和cookie一同给服务器。服务器检查该cookie,从而判断用户的状态。服务器还可以根据需要修改cookie的内容。
2023-04-01 14:12:57
96
原创 Linux常用命令
举例:在整个目录下以文件名称查找index.html文件 find / -name index.html。非正常逻辑下异常退出,按【ctrl+z】键,如果想恢复正常编辑逻辑,需要删除交换文件。编辑文件内容了,但是不想保存了,在非编辑状态下,输入【:q!rm -rf * 代表删除所在的目录中所有的文件以文件夹 ,在根目录下谨慎使用。没有编辑文件内容,在非编辑状态下,输入【:q】代表退出文件。如果想退出文件,需要先退出编辑状态,按【ESC】键。进入非编辑状态后,输入【:wq】代表保存并退出文件。
2023-03-12 22:23:23
176
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人