自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【设计模式】建造者模式

这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。:这些模式关注对象之间的组合和关系,旨在解决如何构建灵活且可复用的类和对象结构。:这些模式关注对象之间的通信和交互,旨在解决对象之间的责任分配和算法的封装。

2024-07-23 15:28:00 611

原创 【数据库】Explain关键字

Explain 是 SQL 中的一个命令,它用于显示 SQL 查询的执行计划。执行计划是数据库系统如何执行查询的详细步骤,包括查询的各个部分如何被优化和执行。

2024-07-23 10:00:00 881

原创 【数据库】联合索引在b+树如何存储

联合索引是一种数据库索引类型,它允许你基于表中两个或多个列的组合来创建索引。这种索引可以提高数据库查询的性能,特别是当查询条件涉及到这些列时。非叶子节点:存储索引关键字信息,是线性排列的,每个系欸但的数据排列顺序和创建索引字段的顺序一致。叶子节点:存储索引列的值和主键id,排列规则与非叶子节点一致。

2024-07-22 21:17:14 259

原创 【数据库】最左前缀原则

如User表的name和city加联合索引就是(name,city),而最左前缀原则指的是,如果查询的时候查询条件精确匹配索引的左边连续一列或几列,则此列就可以被用到。这里需要注意的是,查询的时候如果两个条件都用上,但是顺序不同,如 city = xx and name = xx,那么现在的查询引擎会自动优化为匹配联合索引的顺序,这样是能够命中索引的。由于最左前缀的原则,在创建联合索引时,索引字段的顺序需要考虑字段值去重之后的个数,较多的放前面。order by子句也遵循此规则。

2024-07-22 17:25:47 131

原创 【数据库】那些操作会引起索引失效

例如:WHERE column1 = value1 OR column2 = value2,如果column1 和column2 都没有索引,或者没有同时为这两列创建复合索引,查询可能会全表扫描。如果JOIN条件的列没有索引,或者索引不适合当前的查询条件,可能会导致索引失效。如果排序或分组的列没有索引,或者索引不适合当前的查询条件,可能会导致索引失效。如果子查询的结果集很大,或者子查询的列没有索引,可能会导致索引失效。如果列没有索引,或者索引不适合当前的查询条件,可能会导致索引失效。

2024-07-21 21:22:59 306

原创 【设计模式】抽象工厂模式

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。抽象工厂模式提供了一种创建一系列相关或相互依赖对象的接口,而无需指定具体实现类。通过使用抽象工厂模式,可以将客户端与具体产品的创建过程解耦,使得客户端可以通过工厂接口来创建一族产品。

2024-07-21 11:46:58 929

原创 【设计模式】工厂模式

工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。通过使用工厂模式,可以将对象的创建逻辑封装在一个工厂类中,而不是在客户端代码中直接实例化对象,这样可以提高代码的可维护性和可扩展性。简单工厂模式(Simple Factory Pattern):工厂方法模式(Factory Method Pattern):抽象工厂模式(Abstract Factory Pattern):每次增加一个产品时,都需要增加一个具体类和对应的工厂,使系统中类的数量成倍增加,增加了系统的复杂度和具体类的依赖。工厂模式包含以下

2024-07-20 23:34:21 577

原创 【并发编程】 JMM

jmm是Java内存模型,它确保了在并发编程中,不同线程对共享变量的访问能够按照一定的规则进行,以避免内存一致性错误。在 JDK1.2 之前,Java 的内存模型实现总是从(即共享内存)读取变量,是不需要进行特别的注意的。而在当前的 Java 内存模型下,线程可以把变量保存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成。

2024-07-20 09:00:00 224

原创 【并发编程】CAS

CAS,即Compare-And-Swap,是一种用于实现无锁编程的原子操作。它通常用于多线程环境中,确保对共享数据的安全访问和修改。CAS操作包含三个参数:内存位置(V)、预期原值(A)和新值(B)。:首先,CAS检查内存位置的当前值是否与预期原值A相等。:如果当前值与预期原值相等,CAS将内存位置的值更新为新值B。:CAS操作返回一个布尔值,指示操作是否成功。如果成功,返回true;如果失败,返回false。

2024-07-19 15:34:26 156

原创 [并发编程] synchronized锁的膨胀

锁膨胀的过程是自动的,JVM 会根据线程的争用情况来决定是否需要升级锁。锁主要存在四种状态,依次是:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态,他们会随着竞争的激烈而逐渐升级。(Lock Inflation)是指锁从一种较轻量级的锁状态逐渐升级到更重量级的锁状态的过程。:当线程第一次访问同步代码块时,JVM 会将锁标记为偏向锁,并偏向第一个获取锁的线程。:在轻量级锁和重量级锁之间,JVM 可能会尝试自旋锁。:如果轻量级锁竞争失败,或者线程在轻量级锁状态下被阻塞,JVM 会将锁升级为重量级锁。

2024-07-19 15:13:42 598

原创 死锁产生的条件以及解决死锁的几种方式

所谓死锁是指在多道程序系统中,一组进程中的每一个进程均无限期地等待被该组进程中的另一个进程所占有且永远不会释放的资源;不剥夺条件:线程已获得的资源在未使用完之前不能被其他线程强行剥夺,只有自己使用完毕后才释放资源。:这个条件我们没有办法破坏,因为我们用锁本来就是想让他们互斥的(临界资源需要互斥访问)。:占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源。按某一顺序申请资源,释放资源则反序释放。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

2024-07-19 15:08:32 239

原创 【设计模式】单例模式

懒汉式适合单线程环境或资源消耗不是主要考虑因素的场景。饿汉式适合多线程环境,且单例对象的创建成本不高或需要尽早初始化的场景。双重检查锁定适合多线程环境,需要在需要时才创建实例,同时保证线程安全的场景。静态内部类适合多线程环境,需要延迟加载单例对象的场景。枚举适合需要单例对象,且对扩展性要求不高的场景,同时支持序列化。

2024-07-18 18:32:46 829

原创 【JVM】再谈引用--强、软、弱、虚

在Java中,引用类型主要有四种:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference),这4种引用强度依次逐渐减弱。

2024-07-17 11:11:35 333

原创 银行家算法

银行家算法是一种避免死锁的著名算法,由艾兹格·迪科斯彻(Edsger Dijkstra)在1974年提出。它主要用于操作系统的资源分配系统中,通过确保系统在任何时候都不会进入一个死锁状态来实现资源的合理分配。

2024-07-17 10:53:04 1085

原创 单核条件下会不会出现线程安全问题?

即使在单核处理器上,如果操作系统的调度策略允许多个线程交替执行,那么线程安全问题仍然可能发生。:两个或多个线程在等待对方释放资源,导致它们都无法继续执行。:多个线程同时读写同一内存位置,可能导致数据不一致。:线程的执行顺序影响程序结果,而这种顺序是不确定的。:一些线程由于资源分配不当而长时间得不到所需资源。

2024-07-17 10:18:45 296

原创 数据结构--树

是一种抽象数据类型,它是由节点组成的层次结构。每个节点包含数据和指向其他节点的链接(称为子节点)。二叉树:一个节点上可以分出两个叉多叉树:一个节点上可以分出多个叉下面是树的一些基本概念:1、节点:树当中存储数据的单元2、根节点:一种没有父节点的节点3、父节点:一个节点的上级节点叫做它的父节点,一个节点最多只能有一个父节点 子节点:一个节点的下级节点叫做它的子节点,一个节点可以有多个子节点4、叶子结点:没有子节点的节点5、节点的权:节点值。

2024-07-16 18:06:14 694

原创 命令提示符中输入jps显示“’jps‘不是内部或外部命令,也不是可运行的程序或批处理文件”

编辑系统环境变量,按图片顺序添加系统变量。

2024-07-16 00:15:00 169

原创 数据结构--链表

链表是一种由节点组成的集合,每个节点包含数据部分(value)和只想下一个节点的链接(next)。JAVA中的LinkedList实现了List类,允许添加、删除和访问元素。

2024-07-15 10:34:14 347

原创 数据结构--ArrayList集合及其应用

remove(Object o) 从List集合中移除第一次出现的指定元素,移除成功返回true,否则返回false。get(i)==null : o.equals(get(i)))条件的最低索引i的元素时才会返回true。.set(int i, Object element) 使用元素element替换索引i位置的元素,并返回替换元素。.remove(int index) 移除列表中指定位置的元素,并返回被删元素,删除位置后面的元素(如果有)向前移。.size() 返回列表中的元素个数。

2024-07-15 10:03:19 1302

原创 JAVA基础--可变字符串StringBuffer与StringBuilder

StringBuffer 支持并发操作 线程安全 适合多线程 ,慢(两者都比String快)StringBuilder 不支持并发操作 线程不安全 适合单线程 快。

2024-07-14 21:52:12 182

原创 JAVA基础--String及其使用方法

1、裁剪子串substring(start,end),start从0开始;10、查找 indexOf()第一次的位置 lastIndexOf()最后一次的位置。StringBuilder:可变字符序列、效率高、线程不安全 支持并发操作。StringBuffer:可变字符序列、效率低、线程安全 不支持并发操作。4、获取字符串指定字符的编码值(代码点)codePointAt()3、获取字符串指定字符(代码单元)charAt()7、是否以什么字符串开头 startsWith()11、去除空格字符串 trim()

2024-07-14 21:42:21 122

原创 【力扣】判断链表是否成环 JAVA

指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。来表示链表尾连接到链表中的位置(索引从 0 开始)。如果链表中有某个节点,可以通过连续跟踪。仅仅是为了标识链表的实际情况。,判断链表中是否有环。给你一个链表的头节点。

2024-07-12 11:39:09 188

原创 idea报错--java:无效的目标发行版: 19

再次运行。

2024-07-12 11:19:30 194

原创 JAVA基础--参数传递方式

在方法调用时,实参通过把他的内容副本传入方法内部,/形参接收到的实际时是实参的一个副本,因此正在方法内部对实参的任何操作,仅仅是对该副本的操作,不会影响原始实参的值。在方法调用时,把实参真正的值的地址传递给形参,方法内部形参和实参指向同一块内存地址,对方法内部实参的操作会影响原始实参的值。结论:java中方法的参数都是值传递。

2024-07-12 10:52:24 204

原创 JAVA基础--super关键字

【代码】JAVA基础--super关键字。

2024-07-12 10:25:34 193

原创 JAVA基础--this关键字

【代码】JAVA基础--this关键字。

2024-07-12 10:17:45 187

原创 JAVA基础--构造器

【代码】JAVA基础--构造器。

2024-07-12 10:08:18 117

原创 JAVA基础--类加载的先后顺序

如果一个类 B 继承了类 A,那么 JVM 会首先加载并初始化 A,然后再加载并初始化 B。如果类中有多个静态初始化块,它们将按照它们在类中出现的顺序执行。:如果类 A 中包含对类 B 的引用,那么在 A 的初始化过程中,如果需要,JVM 会先初始化 B。:Java 类加载是按需进行的,即只有在真正需要使用该类时,JVM 才会对其进行加载。:在类加载过程中,如果遇到静态变量或者静态初始化块,会首先执行这些静态初始化代码。:类的实例化会触发该类的构造函数方法的执行,这通常发生在类加载的初始化阶段之后。

2024-07-12 09:58:42 261

原创 JAVA基础--static关键字

static关键字是JAVA中非常重要的修饰符,它可以用来修饰类的方法、变量、代码块或初始化块。

2024-07-12 09:45:49 102

原创 JAVA基础--a++与++a的区别

【代码】JAVA基础--a++与++a的区别。

2024-07-12 09:34:19 115

原创 JAVA基础--定义数组

【代码】JAVA基础--定义数组。

2024-07-12 09:27:29 94

原创 JAVA基础--为什么重写equals( )方法时一定要重写hashCode( )方法

对于对象集合的判重,如果一个集合含有 100个对象,仅仅使用equals( )方法的话,那么对于一个对象判重就需要比较4950次, 随着集合规模的增大,时间开销是很大的,但是同时使用哈希表的话,就能快速定位对象的大概存储位置,后续比较过程中,如果两个对象的hashCode不同,也不再需要调用equals( )方法,从而大大减少equals方法的调用次数。

2024-07-12 09:09:11 203

原创 JAVA基础--equals和==的区别

equals只能判断引用类型,调用object中的equals方法,判断地址是否相等,子类往往会重写该方法。判断引用类型:判断地址是否相等(是否是同一个对象)==既可以判断基本类型又可以判断引用类型。判断基本类型:判断值是否相等。

2024-07-12 09:05:01 67

原创 Idea报错:类文件具有错误的版本 61.0, 应为 52.0 请删除该文件或确保该文件位于正确的类路径子目录中。

pom.xml文件中springboot的版本与jdk版本不兼容,修改version(3.0一下)

2024-07-11 16:27:54 243

原创 JAVA基础--封装、继承、多态

继承:继承是一种机制,允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。多态前提:1.继承、2.方法重写、3.父类引用指向子类对象,自动类型转换。封装:将对象的数据(属性)和行为(方法)作封装在一个单元中,对外部隐藏具体实现细节。多态:同一种行为的不同表现形式或者形态的能力。面向对象编程基本特征 :封装、继承、多态。能够提高了代码的安全性和易于维护性。

2024-07-11 15:40:52 151

原创 JAVA基础--抽象类和接口的区别

定义的关键字不同,抽象类: abstract,接口: interface(默认方法defult)。使用语义:接口更多的是描述某种行为和能力,抽象类更多的是描述事务本身的特质。接口可以实现多个,只能继承一个抽象类。抽象类可以包含实例变量和静态变量,而接口只能包含常量。抽象类是一个类,能有构造方法,接口不能有。

2024-07-11 15:16:55 372

原创 JAVA基础--final关键字

final可以修饰变量→常量(不可修改),final可以修饰基本类型的变量,也可以修饰引用类型,都是固定的是一个地址。final可以修饰方法 final修饰的方法不能被重写。final可以修饰类 final修饰的类不能被继承。fianl可以防止指令重排序,保证多线程下数据安全。

2024-07-08 18:02:25 233

原创 JAVA基础--控制流程语句

块作用域:块中定义的东西只能在块中使用。控制流程语句:分支语句 循环语句。

2024-07-08 16:30:39 126

原创 JAVA基础--认同第一次赋值

【代码】JAVA基础--认同第一次赋值。

2024-07-08 16:27:58 399

原创 JAVA基础--定义数组

【代码】JAVA基础--定义数组。

2024-07-08 16:27:11 93

空空如也

空空如也

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

TA关注的人

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