- 博客(32)
- 收藏
- 关注
原创 设计模式之模板方法模式
模板方法模式是一种行为型设计模式,它定义了一个算法骨架,将算法的一些步骤延迟到子类中实现。模板方法允许子类在不改变算法结构的情况下重新定义算法的某些步骤。它提供了一种模板或蓝图,用于创建具有相似行为但具体实现有所不同的一组相关对象。
2023-10-10 17:12:07
105
原创 设计模式之策略模式
策略模式是一种行为型设计模式,它允许在运行时选择算法的行为,使得一个类的行为或算法可以在不修改其源代码的情况下发生变化。策略模式定义了一系列算法,将每个算法封装成一个独立的策略类,并使这些策略类可以相互替换。这使得客户端代码可以选择并切换不同的算法,而不影响客户端的代码。
2023-10-10 16:11:38
117
原创 设计模式之状态模式
状态模式是一种行为型设计模式,它用于在一个对象的内部状态发生变化时,改变对象的行为。状态模式允许对象在其内部状态发生变化时改变其行为,看起来就像是对象类在运行时改变了其类一样。这种模式将状态抽象成独立的类,并允许对象在这些状态之间切换。
2023-10-10 15:32:43
103
原创 设计模式之备忘录模式
备忘录模式是一种行为型设计模式,它用于捕获一个对象的内部状态,并将其保存在一个外部对象中,以便在以后能够将对象恢复到先前的状态。备忘录模式允许在不暴露对象的内部结构的情况下,保存和还原对象的状态。
2023-10-08 17:21:24
80
原创 设计模式之中介者模式
中介者模式是一种行为型设计模式,用于减少对象之间的直接通信,从而降低系统的耦合性。中介者模式通过引入一个中介者对象,集中处理对象之间的交互,使对象之间不需要直接相互引用,而是通过中介者进行通信。
2023-10-08 16:40:08
53
原创 设计模式之迭代器模式
迭代器模式是一种行为型设计模式,它提供了一种顺序访问集合(如列表、数组、树等)中元素的方法,而不暴露集合的内部表示。迭代器模式将集合的遍历行为封装在一个独立的迭代器对象中,让客户端可以通过统一的接口迭代访问集合中的元素,而无需了解集合的内部结构。
2023-10-08 16:03:43
44
原创 算法:三数之和
给你一个整数数组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
98
原创 设计模式之命令模式
命令模式是一种行为型设计模式,它将请求封装成一个对象,从而允许使用不同的请求、队列或者日志来参数化其他对象。通过将请求发送者和接收者解耦,命令模式使得发送者无需知道请求的具体处理方式。
2023-06-06 08:00:00
60
原创 设计模式之责任链模式
责任链模式是一种行为型设计模式,它将请求的发送者和接收者解耦,并通过一条链式结构来处理请求。在责任链模式中,每个处理者都有机会处理请求,或者将请求传递给下一个处理者。
2023-06-06 02:13:09
55
原创 设计模式之外观模式
外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口,以简化客户端与子系统之间的交互。
2023-06-06 01:33:36
54
原创 设计模式之桥接模式
桥接模式是一种结构型设计模式,它将抽象部分与其实现部分分离,使它们可以独立地变化。桥接模式通过将继承关系转化为关联关系,实现了抽象部分和实现部分的解耦。
2023-06-06 00:41:01
60
原创 设计模式之适配器模式
适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以协同工作。
2023-06-05 20:00:00
68
1
原创 设计模式之原型模式
原型模式是一种创建型设计模式,它通过复制(克隆)现有对象来创建新对象,而不是通过使用构造函数创建。原型模式允许通过复制现有对象的属性来创建新对象,从而避免了昂贵的对象创建过程。
2023-06-05 14:04:40
52
原创 设计模式之建造者模式
建造者模式是一种创建型设计模式,它提供一种创建复杂对象的解决方案,通过将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。
2023-06-05 06:26:25
55
原创 设计模式之抽象工厂模式
抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或依赖对象的接口,而无需指定具体类。抽象工厂模式通过抽象工厂和具体工厂的组合,实现了对象的创建与使用代码的解耦。
2023-06-04 04:33:02
71
原创 设计模式之工厂方法模式
工厂方法模式是一种创建型设计模式,它提供了一种将对象的创建与使用代码解耦的方式。在工厂方法模式中,定义了一个创建对象的接口,但具体的对象创建由实现该接口的具体工厂类来完成。
2023-06-01 03:20:31
64
原创 Java中indexOf()的用法
从某个下标位置开始查找某个字符串所在的位置,查找失败结果为-1;从某个下标位置开始查找某个字符所在的位置,查找失败结果为-1;查找某个字符串所在的位置,查找失败结果为-1;查找某个字符所在的下标位置,查找失败结果为-1;
2023-04-18 15:10:37
10483
1
原创 Java抽象类
使用关键字abstract的方法,被定义为抽象方法,拥有抽象方法的抽象类必须用abstract来修饰,抽象方法是指没有方法体的方法,它的方法体在子类被重写。抽象类无法被实例化,抽象类的抽象方法没有方法体,因此无法被调用。
2023-04-17 23:56:39
961
原创 String、stringBuilder和StringBuffer的区别
String类是不可变类,创建对象后,该对象的字符串是不可变的,直到该对象被销毁,但我们平时在用String的时候,String不是可以修改的吗?我们在修改String的字符串时,其实是整个对象都换了,修改后的String对象不再是原来的那个String对象。这里==的比较的是对象的指向是否一样。可以看出,修改后String对象的指向发生了变化,这是因为String类的字符串修改的过程中,JVM把之前的那个String对象销毁了,然后又创建了一个新的String对象,对象名是一样的。
2023-04-16 19:06:01
197
原创 BlockQuene阻塞队列
阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。Blocks:一直阻塞,当队列满时,如果生产者线程往队列put元素,会阻塞生产者线程,直到成功或者响应中断,当队列空时,消费者线程从队列里take元素,这时会阻塞线程获取元素,直到获取成功或响应中断。当队列满,生产者线程无法继续往队列添加,只有消费者线程消费了队列的元素,生产者线程才能继续在队列里添加元素。Throws exception:异常抛出,当队列满时插入元素和当队列空时取元素,这两种情况都会抛异常;
2023-04-16 01:49:10
237
原创 集合类不安全之并发修改异常
加,而是先将当前容器Object[]进行Copy,复制出一个新的容器Object[] newElements,然后新的容器Object[] newElements里添加元素,添加完元素之后,再将原容器的引用指向新的容器setArray(newElements);在并发情况下,一些集合类会出现并发的写问题,例如ArrayList,HashMap,HashSet这三种,以下对这三种进行分析,其他的也是如此。4.1 Vector是JDK1.0添加的类,是线程安全的,但性能不行,这里不进行详细分析。
2023-04-15 20:15:16
545
原创 CountDownLatch、CyclicBarrier和Semaphore
CountDownLatch 和 CyclicBarrier都能实现线程间的等待,CountDownLatch 用于某个线程等待其他线程执行完任务后再开始执行,而CyclicBarrier则是所有线程等待至某个状态再同时开始执行任务。Semaphore这个用于资源的竞争,
2023-04-15 16:52:13
222
原创 CAS引发的ABA问题
我们在使用CAS时,当两个线程要修改同一个值,第一个修改初始数值为100,而第二个线程修改初始数值100为101,然后又将101修改为100。如果第二个进行了100->101->100这个过程的修改后,第一个线程再修改,此时就出现了ABA问题,第一个线程修改的100不是原来的100,而是被第二个线程修改过的100。我们发现它成功修改为2021,而此刻的100时被第一个线程修改过的,不是原来的那个值,这就是ABA问题。我们可以加个版本号,这样就可以通过版本号来判断它是否被修改过。
2023-04-15 16:05:43
259
原创 CAS底层原理
这是一种完全依赖于硬件的功能,通过它实现了原子操作。由于CAS是一种系统原语,原语属于操作系统用语范畴,是由若干条指令组成的,用于完成某个功能的一个过程,并且原语的执行必须是连续的,在执行过程中不允许被中断,也就是说CAS是一条CPU的原子指令,不会造成所谓的数据不一致问题。根据对象和偏移量得到在主内存的快照值var5,再使用compareAndSwapInt方法通过var1和var2得到当前主内存的实际值,若相等,则更新var5 + var4的值到主内存中并返回true,若不相等,则再次进入循环中。
2023-04-15 15:55:52
273
原创 volatile的关键字
volatile 具有可见性,但它不保证原子性,解决原子性的问题时,我们优先选择JUC锁的Atomic,synchronized是重量级锁,一般情况下不优先使用,上面的例子可以用Atomic解决,我们就用Atomic解决它的原子性问题。volatile是Java虚拟提供的轻量级同步机制,具有可见性,不保证原子性,禁止指令重排的特点。
2023-04-11 00:51:27
288
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人