自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AtomicInteger 详细解读

对于共享变量整数的加减操作,当出现并发的情况时,很容易造成线程不安全。

2024-05-15 16:15:50 554

原创 Exchanger的 常用场景及使用示例

Exchanger是Java并发包中的一个工具类,它用于两个线程之间交换数据。当两个线程都到达同步点并调用exchange()方法时,它们会交换数据然后继续执行。Exchanger特别适用于那些需要两个线程进行协作,交换数据或结果的场景。

2024-05-15 16:12:42 383

原创 CyclicBarrier的 常用场景及使用示例

是Java并发编程中的另一种同步辅助工具,它用于控制多个线程相互等待,直到所有线程都到达一个共同的屏障点,然后所有线程才会继续执行。与不同的是,是可以重复使用的,即在所有线程释放后,屏障可以再次用于下一轮的同步。以下是。

2024-05-15 16:12:14 489

原创 CountDownLatch的 常用场景及使用示例

是Java并发编程中一个非常实用的同步工具类,它允许一个或多个线程等待其他线程完成操作后再继续执行。其核心功能在于控制线程的执行流程,确保某些关键操作或准备工作完全就绪后,再释放等待的线程继续执行。以下是一些。

2024-05-14 16:04:15 519

原创 SynchronousQueue 的 常用场景及使用示例

是 Java 并发框架中的一个特殊类型的阻塞队列,它的特点是队列内部容量为零,即不存储元素。每个put操作必须等待一个对应的take操作,反之亦然,因此它主要用作线程间的直接 hand-off(传递)工具,而不是作为一个缓冲区。以下是的一些常用场景及一个简单的使用示例。

2024-05-14 15:45:28 325

原创 DelayQueue 的 常用场景及使用示例

DelayQueue是 Java 并发包中的另一个特殊类型的阻塞队列,它用于存放实现了Delayed接口的元素,并且这些元素在指定的延迟时间到期之前不能从队列中获取。这使得DelayQueue。

2024-05-13 14:10:24 256

原创 PriorityBlockingQueue 的 常用场景及使用示例

是 Java 并发包 () 中的一个线程安全的数据结构,它实现了接口,并具备优先级排序功能。这个队列的特点是无界(除非系统资源耗尽)、线程安全,并且在插入或移除元素时可能会阻塞。

2024-05-13 11:31:19 134

原创 LinkedBlockingQueue 的 常用场景及使用示例

是 Java 并发包 () 中提供的另一种线程安全的阻塞队列实现。与不同的是,默认情况下是一个无界的队列(尽管也可以设置容量上限),它使用双向链表来存储元素。这使得它在频繁插入和删除的场景下具有较好的性能表现。以下是的一些常用场景及使用示例。

2024-05-13 11:10:37 325

原创 ArrayBlockingQueue 的 常用场景及使用示例

是 Java 中的一个线程安全的有界阻塞队列,它实现于包中。这个数据结构非常适合用于生产者-消费者模型,其中多个生产者线程可以向队列中添加元素(放入操作),而多个消费者线程可以从队列中取出元素(移除操作)。当队列为空时,消费者线程将被阻塞,直到有新的元素加入;相反,当队列满时,生产者线程将被阻塞,直到有空间可用。这种设计自然地控制了线程间的并发访问,无需显式地使用锁或同步代码块。

2024-05-13 11:08:56 239

原创 「Mybatis深入五」:动态SQL

文章目录一、应用场景二、代码演示1、动态 **SQL** 之\<if>(1) 需求(2)代码2、动态 **SQL** 之\<choose>(1) 需求(2)代码3、动态 **SQL** 之\<set>(1) 需求(2)代码4、动态 **SQL** 之\<foreach>(1) 需求(2)代码一、应用场景根据不同的条件,来执行不同的 sql 语句的时候,需要用到动态sql。二、代码演示1、动态 SQL 之<if>(1) 需求​ 根据id

2024-03-07 14:39:09 1224

原创 「Mybatis深入四」:插入数据后返回主键

向数据库插入一条记录后,希望能立即拿到这条记录在数据库中的主键值。

2024-03-07 14:08:00 959

原创 「Mybatis深入三」:高级查询-模糊查询

根据username 模糊查询user 表。

2024-03-07 14:05:07 875

原创 「Mybatis深入二」:高级查询-多条件查询

根据id 和username 查询 user 表。

2024-03-05 13:41:55 1011

原创 「Mybatis深入一」:高级查询-ResultMap 属性

【代码】「Mybatis深入一」:高级查询-ResultMap 属性。

2024-03-05 13:37:39 1081

原创 「Mybatis实战九」:Mybatis的dao层开发使用 - 代理开发方式

Mybatis提供的基于接口的代理开发方式是现代企业级应用中广泛采用的标准实践。这种方式允许开发者仅需专注于定义Mapper接口,而无需编写其实现类。Mybatis框架会在运行时依据这些接口自动生成代理对象,负责处理数据访问操作。Mapper.xml映射文件的namespace属性应与对应的Mapper接口的全限定名一致。Mapper接口的方法名必须与Mapper.xml中的每个SQL statement的id相匹配。

2024-03-05 11:06:43 1018

原创 「Mybatis实战八」:Mybatis的dao层开发使用 - 传统开发方式

数据库环境pom依赖</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</</User类。

2024-03-05 11:01:47 792

原创 深入理解与应用工厂方法模式

​ 工厂方法模式是一种经典的设计模式,它遵循面向对象的设计原则,特别是“开闭原则”,通过定义一个用于创建对象的接口,将对象的实例化过程推迟到子类中实现。这种模式与抽象工厂模式类似,但更加专注于对单一接口下产品类型的创建。二、适用场景复杂对象的创建需要大量重复代码时。对象创建依赖于外部资源或信息。需要统一管理对象生命周期,如会话、资源池对象等。需要隐藏对象的具体类型,提高代码的抽象层次。

2024-02-28 11:02:57 1255

原创 迭代器模式:分离遍历逻辑与数据结构,实现统一访问接口与灵活扩展

Iterator(迭代器角色):定义访问和遍历元素的接口,通常包含hasNext()next()等方法。ConcreteIterator(具体迭代器角色):实现Iterator接口,负责跟踪当前遍历位置,并通过调用集合的相关方法来获取下一个元素。Aggregate(聚合角色):定义创建迭代器对象的接口,通常是方法。以遍历集合为例,我们来具体实现迭代器模式:T next();定义具体迭代器类(ConcreteIterator):创建一个名为的类,实现Iterator接口。if(!

2024-02-28 10:25:23 893

原创 深入理解抽象工厂模式:原理、应用与优缺点分析

​ 抽象工厂模式的成功运用关键在于能否找到正确的抽象层次。在实践中,开发者应首先识别出具有高度可复用性的抽象产品,然后再构建相应的具体工厂和产品。尽管在日常业务代码开发中较少直接应用抽象工厂模式,但它在许多优秀的开源框架中扮演了重要角色,体现了设计模式在软件架构层面的重要性。在选择设计模式时,应充分考虑项目需求和长期维护性,合理权衡是否采用抽象工厂模式。若仅需封装单个对象的创建过程,工厂方法模式可能更为合适。

2024-02-28 10:22:49 1192

原创 中介者模式:集中协调对象交互,简化耦合实现灵活可控的系统结构

Mediator(中介者角色):定义一个接口,用于与各个Colleague对象进行通信,集中处理Colleague对象之间的交互。ConcreteMediator(具体中介者角色):实现Mediator接口,它知道并维护各个Colleague对象,并负责协调它们之间的交互关系。Colleague(同事角色):每一个Colleague都知道中介者,并通过中介者与其他Colleague对象进行通信,而不是直接与其他Colleague通信。

2024-02-27 13:51:13 1233

原创 策略模式:封装行为策略,灵活切换实现多态业务逻辑

Strategy(策略接口/抽象类):声明了一系列方法,用于定义所有支持的算法的公共接口。ConcreteStrategy(具体策略类):实现了Strategy接口,提供了具体的算法实现。Context(上下文角色):持有一个Strategy对象引用,用以调用其方法来执行相关算法,并在必要时能够更改所使用的策略。以电商平台的折扣策略为例,来具体实现策略模式:定义策略接口(Strategy):创建一个名为的接口,其中包含一个计算折扣的方法。

2024-02-27 13:48:33 967

原创 模板方法模式:封装不变步骤,引导扩展实现灵活多态的算法流程

AbstractClass(抽象类角色):定义了一个或多个操作的模板方法,这些方法通常包含了一系列已定义好的步骤,同时也可以定义一些抽象方法供子类实现。ConcreteClass(具体类角色):是AbstractClass的子类,实现了在抽象类中声明的抽象方法,从而完成算法中可变部分的定制。​ 模板方法模式通过在抽象类中定义一个算法骨架,并将可变步骤交由子类实现,有效地实现了算法结构的复用以及灵活扩展。

2024-02-26 16:56:00 802

原创 门面模式:简化复杂性,打造统一易用的系统交互界面

Facade(门面角色):为子系统提供一个简化的高层接口,它包含了对各个子系统对象的引用,并负责协调它们之间的交互。Subsystem(子系统角色):实现了子系统的具体功能,通常由多个类组成,各司其职,完成特定任务。​ 门面模式通过为复杂的子系统提供一个更高层的接口,简化了外部用户的使用方式,增强了系统的可维护性和扩展性。在实际应用中,合理运用门面模式能够有效解决复杂系统接口难用的问题,提升代码的复用性和用户体验。然而,在设计时应避免过度抽象,确保模式的应用符合实际需求和场景特点。

2024-02-26 16:39:04 326

原创 桥接模式:解耦抽象与实现,实现灵活多变的扩展结构

Abstraction(抽象化角色):定义抽象接口,维持一个指向Implementor对象的引用。RefinedAbstraction(具体抽象化角色):是Abstraction接口的一个实现,负责调用Implementor对象的方法并提供额外的功能。Implementor(实现化角色):定义实现化角色的接口,供Abstraction角色调用。ConcreteImplementor(具体实现化角色):实现了Implementor接口,提供了具体的实现。

2024-02-23 17:15:43 1514

原创 责任链模式:灵活处理请求,打造高效动态职责分配体系

Handler(抽象处理者):定义了处理请求的接口,同时持有对下一个处理者的引用,以便于传递请求。ConcreteHandler(具体处理者):继承自抽象处理者,实现了处理请求的方法,根据请求的具体内容判断自己是否可以处理该请求,如果可以则处理并返回;如果不可以,则将请求转发给下一个处理者。责任链模式通过分散请求处理的责任,赋予系统高度的灵活性和可扩展性,有效解决了多个对象可能需要处理同一请求的问题。

2024-02-23 10:20:10 831

原创 创建者模式(Builder Pattern):构造复杂对象的通用解决方案

​ 创建者模式通过将构建过程与表示分离,使得客户端只需关注构建过程本身而不必关心具体产品的内部构造细节。这不仅提高了系统的灵活性和可扩展性,也使代码更加清晰易读,降低了模块间的耦合度。然而,过度使用创建者模式可能导致类数量增多,应合理评估是否真正需要创建者模式来处理对象的创建过程。

2024-02-23 09:50:50 1235

原创 装饰者模式:为对象动态添加职责,实现功能的灵活扩展

装饰者模式是一种结构型设计模式,允许在运行时给对象动态地增加新的职责或功能,而无需修改原有类。通过组合而非继承的方式,在不改变对象接口的前提下,增强对象的功能。此模式在实际应用中广泛应用于图形用户界面(GUI)组件、日志记录、权限控制等场景。装饰者模式包含以下核心组成部分:一个简单的咖啡售卖系统,其中存在基础咖啡以及各种调料作为装饰。创建基础咖啡类在这个部分,定义了一个抽象的Coffee类,它是所有咖啡的基础接口。然后创建了一个具体实现——Americano(美式咖啡),它具有描述和价格属性。创建装饰器抽

2024-02-22 16:45:29 1142

原创 状态模式:灵活应对对象行为变化,实现状态驱动的智能设计

状态模式是一种行为设计模式,用于处理一个对象在其内部状态改变时,其行为也随之发生相应变化的情况。例如,在ATM机中,用户操作(取款、存款、查询等)会引发系统状态的变化和对应的操作;游戏角色根据所处状态(行走、奔跑、战斗)执行不同的动作。状态模式包含四个核心组成部分:模拟了一个简单的电商订单系统,这个系统通过状态模式来处理订单从创建到完成或取消的整个生命周期中的不同状态和操作。抽象状态角色(OrderState):定义了所有具体状态类需要实现的方法接口,包括、、和等。具体状态角色::代表订单刚创建的状态

2024-02-22 10:58:59 1043

原创 适配器模式:转换接口,无缝对接不同系统

适配器模式在软件设计中扮演着桥梁角色,解决不同接口之间的兼容问题。该模式通过创建一个适配器类,将原本不兼容的接口转换为预期的目标接口,使得原本无法协同工作的组件得以和谐共存。在现代软件开发中,适配器模式广泛应用于遗留系统升级、跨平台API调用、第三方库整合等场景。系统集成与扩展性:当需要将新的组件或服务融入现有系统时,如果新旧组件接口不匹配,适配器模式能提供一个中间层,无需修改原有代码即可实现对接。复用已有功能:对于一些已经存在的成熟库或框架,适配器模式可以将其接口转换为我们所需的形式,以充分利用其内部的功

2024-02-21 16:09:09 1188

原创 揭秘观察者模式:如何打造实时响应、灵活扩展的软件架构

观察者模式的核心是建立了一种一对多的依赖关系,使得当一个对象(被观察者)状态变化时,所有依赖它的对象(观察者)都能得到自动通知和更新。

2024-02-21 14:44:36 998

原创 架构进阶:代理模式实战指南,打造灵活高效的应用系统

代理模式的原始定义是:让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许将请求提交给对象前后进行一些处理。从这个定义中我们能看出,代理模式是作为对象之间的一种中间结构来使用的,通过构建一个代理对象来对原始的功能进行委托处理,其中有一个很重要的功能就是控制对象的访问。拿现实中的例子来说,假设你有一套房子要卖,可你却正好在外地出差,你不能亲自处理带人看房、过户等购房手续,这时你就可以找一个房产中介来作为你的代理人,委托他来帮你带人看房、处理过户手续。这就是现实中经典的代理模式的例子。

2024-02-07 10:00:00 1251

原创 「Mybatis实战七」:Mybatis的API 和 基本原理 介绍

SqlSessionFactoryBuilder是用于构建SqlSessionFactory对象的核心工具类,它通过解析配置文件来创建工厂对象。主要API为:使用示例:其中,Resources工具类位于包下,其功能是从类路径、文件系统或web URL加载资源文件。SqlSessionFactory 有多个个方法创建SqlSession 实例。常用的有如下两个:SqlSession在MyBatis中扮演了至关重要的角色,提供了执行SQL语句、操作事务以及获取映射器实例的功能。执行SQL语句:事务管理:

2024-02-07 09:30:00 392

原创 「Mybatis实战六」:Mybatis核心文件详解 - MyBatis常用配置typeAliases、mappers

​ 本文代码在所构建的基础代码结构之上,进行修改。MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。

2024-02-06 10:29:54 992

原创 「Mybatis实战五」:Mybatis核心文件详解 - MyBatis常用配置environments、properties

​ 本文代码在所构建的基础代码结构之上,进行修改。MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。

2024-02-06 10:27:11 930

原创 「Mybatis实战四」:Mybatis实现数据删除详析

删除语句使用delete标签Sql语句中使用#{任意字符串}方式引用传递的单个参数删除操作使用的API是sqlSession.delete(“命名空间.id”,Object);

2024-02-06 10:22:41 584

原创 「Mybatis实战三」:Mybatis实现数据更新详析

修改语句使用update标签修改操作使用的API是sqlSession.update(“命名空间.id”,实体对象);

2024-02-05 16:46:25 601

原创 「Mybatis实战二」:Mybatis实现数据新增详析

插入语句使用insert标签在映射文件中使用parameterType属性指定要插入的数据类型Sql语句中使用#{实体属性名}方式引用实体中的属性值插入操作使用的API是sqlSession.insert(“命名空间.id”,实体对象);在映射文件中使用parameterType属性指定要插入的数据类型Sql语句中使用#{实体属性名}方式引用实体中的属性值插入操作使用的API是sqlSession.insert(“命名空间.id”,实体对象);

2024-02-05 16:44:01 704

原创 Mybatis初体验:一小时从入门到运行你的第一个应用

【代码】Mybatis初体验:一小时从入门到运行你的第一个应用。

2024-02-04 17:08:11 566

原创 Mybatis框架介绍

正是为了克服上述原始JDBC存在的不足,MyBatis作为一款优秀的Java持久层框架应运而生。MyBatis是一个优秀的基于ORM的半自动轻量级持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建 statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

2024-02-04 14:30:28 978

原创 pyqt5-QCheckBox控件使用介绍

一、简介作用:用于给用户提供若干选项中的多选操作,比如:爱好可以有多个 等等。继承自 QAbstractButton。1、基础工程from PyQt5.Qt import *import sysapp = QApplication(sys.argv)window = QWidget()window.setWindowTitle("QCheckBox测试")window.resize(400, 400)#*******创建QCheckBox*******开始cb = QChec

2024-02-03 09:16:28 838

空空如也

空空如也

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

TA关注的人

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