自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式之模板方法模式

模板方法模式是一种行为型设计模式,它定义了一个算法骨架,将算法的一些步骤延迟到子类中实现。模板方法允许子类在不改变算法结构的情况下重新定义算法的某些步骤。它提供了一种模板或蓝图,用于创建具有相似行为但具体实现有所不同的一组相关对象。

2023-10-10 17:12:07 72

原创 设计模式之策略模式

策略模式是一种行为型设计模式,它允许在运行时选择算法的行为,使得一个类的行为或算法可以在不修改其源代码的情况下发生变化。策略模式定义了一系列算法,将每个算法封装成一个独立的策略类,并使这些策略类可以相互替换。这使得客户端代码可以选择并切换不同的算法,而不影响客户端的代码。

2023-10-10 16:11:38 75

原创 设计模式之状态模式

状态模式是一种行为型设计模式,它用于在一个对象的内部状态发生变化时,改变对象的行为。状态模式允许对象在其内部状态发生变化时改变其行为,看起来就像是对象类在运行时改变了其类一样。这种模式将状态抽象成独立的类,并允许对象在这些状态之间切换。

2023-10-10 15:32:43 73

原创 设计模式之备忘录模式

备忘录模式是一种行为型设计模式,它用于捕获一个对象的内部状态,并将其保存在一个外部对象中,以便在以后能够将对象恢复到先前的状态。备忘录模式允许在不暴露对象的内部结构的情况下,保存和还原对象的状态。

2023-10-08 17:21:24 53

原创 设计模式之中介者模式

中介者模式是一种行为型设计模式,用于减少对象之间的直接通信,从而降低系统的耦合性。中介者模式通过引入一个中介者对象,集中处理对象之间的交互,使对象之间不需要直接相互引用,而是通过中介者进行通信。

2023-10-08 16:40:08 25

原创 设计模式之迭代器模式

迭代器模式是一种行为型设计模式,它提供了一种顺序访问集合(如列表、数组、树等)中元素的方法,而不暴露集合的内部表示。迭代器模式将集合的遍历行为封装在一个独立的迭代器对象中,让客户端可以通过统一的接口迭代访问集合中的元素,而无需了解集合的内部结构。

2023-10-08 16:03:43 18

原创 算法:三数之和

给你一个整数数组nums,判断是否存在三元组[nums[i], nums[j], nums[k]]满足i != j、i != k且j != k,同时还满足nums[i] + nums[j] + nums[k] == 0。请你返回所有和为0且不重复的三元组。

2023-06-10 05:23:09 58

原创 算法:最长公共前缀

题目:最长公共前缀,描述:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。

2023-06-06 20:40:35 53

原创 设计模式之命令模式

命令模式是一种行为型设计模式,它将请求封装成一个对象,从而允许使用不同的请求、队列或者日志来参数化其他对象。通过将请求发送者和接收者解耦,命令模式使得发送者无需知道请求的具体处理方式。

2023-06-06 08:00:00 33

原创 设计模式之解释器模式

解释器模式是一种行为型设计模式,它定义了一种语言和解释器,用于解释该语言中的表达式,从而实现特定的操作。

2023-06-06 08:00:00 48

原创 设计模式之责任链模式

责任链模式是一种行为型设计模式,它将请求的发送者和接收者解耦,并通过一条链式结构来处理请求。在责任链模式中,每个处理者都有机会处理请求,或者将请求传递给下一个处理者。

2023-06-06 02:13:09 29

原创 设计模式之代理模式

代理模式是一种结构型设计模式,它提供了一个代理对象,控制对真实对象的访问,并在访问真实对象前后添加额外的功能。

2023-06-06 01:56:08 28

原创 设计模式之享元模式

享元模式是一种结构型设计模式,它通过共享对象来有效地支持大量细粒度的对象共享,以减少内存占用和提高性能。

2023-06-06 01:41:40 32

原创 设计模式之外观模式

外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口,以简化客户端与子系统之间的交互。

2023-06-06 01:33:36 26

原创 设计模式之装饰器模式

装饰器模式是一种结构型设计模式,它允许在不改变现有对象结构的前提下,动态地向对象添加新的行为和功能。

2023-06-06 01:13:45 31

原创 设计模式之组合模式

组合模式是一种结构型设计模式,它允许将对象组合成树状结构,并使得客户端对单个对象和组合对象的使用具有一致性。

2023-06-06 01:05:17 30

原创 设计模式之桥接模式

桥接模式是一种结构型设计模式,它将抽象部分与其实现部分分离,使它们可以独立地变化。桥接模式通过将继承关系转化为关联关系,实现了抽象部分和实现部分的解耦。

2023-06-06 00:41:01 31

原创 设计模式之适配器模式

适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以协同工作。

2023-06-05 20:00:00 36 1

原创 设计模式之原型模式

原型模式是一种创建型设计模式,它通过复制(克隆)现有对象来创建新对象,而不是通过使用构造函数创建。原型模式允许通过复制现有对象的属性来创建新对象,从而避免了昂贵的对象创建过程。

2023-06-05 14:04:40 27

原创 设计模式之建造者模式

建造者模式是一种创建型设计模式,它提供一种创建复杂对象的解决方案,通过将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。

2023-06-05 06:26:25 29

原创 设计模式之单例模式

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点以访问该实例。

2023-06-04 04:39:19 30

原创 设计模式之抽象工厂模式

抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或依赖对象的接口,而无需指定具体类。抽象工厂模式通过抽象工厂和具体工厂的组合,实现了对象的创建与使用代码的解耦。

2023-06-04 04:33:02 38

原创 设计模式之工厂方法模式

工厂方法模式是一种创建型设计模式,它提供了一种将对象的创建与使用代码解耦的方式。在工厂方法模式中,定义了一个创建对象的接口,但具体的对象创建由实现该接口的具体工厂类来完成。

2023-06-01 03:20:31 43

原创 Java中indexOf()的用法

从某个下标位置开始查找某个字符串所在的位置,查找失败结果为-1;从某个下标位置开始查找某个字符所在的位置,查找失败结果为-1;查找某个字符串所在的位置,查找失败结果为-1;查找某个字符所在的下标位置,查找失败结果为-1;

2023-04-18 15:10:37 8487 1

原创 Java抽象类

使用关键字abstract的方法,被定义为抽象方法,拥有抽象方法的抽象类必须用abstract来修饰,抽象方法是指没有方法体的方法,它的方法体在子类被重写。抽象类无法被实例化,抽象类的抽象方法没有方法体,因此无法被调用。

2023-04-17 23:56:39 745

原创 String、stringBuilder和StringBuffer的区别

String类是不可变类,创建对象后,该对象的字符串是不可变的,直到该对象被销毁,但我们平时在用String的时候,String不是可以修改的吗?我们在修改String的字符串时,其实是整个对象都换了,修改后的String对象不再是原来的那个String对象。这里==的比较的是对象的指向是否一样。可以看出,修改后String对象的指向发生了变化,这是因为String类的字符串修改的过程中,JVM把之前的那个String对象销毁了,然后又创建了一个新的String对象,对象名是一样的。

2023-04-16 19:06:01 176

原创 BlockQuene阻塞队列

阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。Blocks:一直阻塞,当队列满时,如果生产者线程往队列put元素,会阻塞生产者线程,直到成功或者响应中断,当队列空时,消费者线程从队列里take元素,这时会阻塞线程获取元素,直到获取成功或响应中断。当队列满,生产者线程无法继续往队列添加,只有消费者线程消费了队列的元素,生产者线程才能继续在队列里添加元素。Throws exception:异常抛出,当队列满时插入元素和当队列空时取元素,这两种情况都会抛异常;

2023-04-16 01:49:10 190

原创 集合类不安全之并发修改异常

加,而是先将当前容器Object[]进行Copy,复制出一个新的容器Object[] newElements,然后新的容器Object[] newElements里添加元素,添加完元素之后,再将原容器的引用指向新的容器setArray(newElements);在并发情况下,一些集合类会出现并发的写问题,例如ArrayList,HashMap,HashSet这三种,以下对这三种进行分析,其他的也是如此。4.1 Vector是JDK1.0添加的类,是线程安全的,但性能不行,这里不进行详细分析。

2023-04-15 20:15:16 444

原创 CountDownLatch、CyclicBarrier和Semaphore

CountDownLatch 和 CyclicBarrier都能实现线程间的等待,CountDownLatch 用于某个线程等待其他线程执行完任务后再开始执行,而CyclicBarrier则是所有线程等待至某个状态再同时开始执行任务。Semaphore这个用于资源的竞争,

2023-04-15 16:52:13 193

原创 CAS引发的ABA问题

我们在使用CAS时,当两个线程要修改同一个值,第一个修改初始数值为100,而第二个线程修改初始数值100为101,然后又将101修改为100。如果第二个进行了100->101->100这个过程的修改后,第一个线程再修改,此时就出现了ABA问题,第一个线程修改的100不是原来的100,而是被第二个线程修改过的100。我们发现它成功修改为2021,而此刻的100时被第一个线程修改过的,不是原来的那个值,这就是ABA问题。我们可以加个版本号,这样就可以通过版本号来判断它是否被修改过。

2023-04-15 16:05:43 203

原创 CAS底层原理

这是一种完全依赖于硬件的功能,通过它实现了原子操作。由于CAS是一种系统原语,原语属于操作系统用语范畴,是由若干条指令组成的,用于完成某个功能的一个过程,并且原语的执行必须是连续的,在执行过程中不允许被中断,也就是说CAS是一条CPU的原子指令,不会造成所谓的数据不一致问题。根据对象和偏移量得到在主内存的快照值var5,再使用compareAndSwapInt方法通过var1和var2得到当前主内存的实际值,若相等,则更新var5 + var4的值到主内存中并返回true,若不相等,则再次进入循环中。

2023-04-15 15:55:52 237

原创 volatile的关键字

volatile 具有可见性,但它不保证原子性,解决原子性的问题时,我们优先选择JUC锁的Atomic,synchronized是重量级锁,一般情况下不优先使用,上面的例子可以用Atomic解决,我们就用Atomic解决它的原子性问题。volatile是Java虚拟提供的轻量级同步机制,具有可见性,不保证原子性,禁止指令重排的特点。

2023-04-11 00:51:27 245

空空如也

空空如也

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

TA关注的人

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