自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 结构型设计模式-适配器模式

如上代码中的sd(StreamDecoder类对象),在Sun的JDK实现中,实际的方法实现是对sun.nio.cs.StreamDecoder类的同名方法的调用封装。适配器模式分为类适配器模式和对象适配器模式,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。实现方式:对象适配器模式可釆用将现有组件库中已经实现的组件引入适配器类中,该类同时实现当前系统的业务接口。实现方式:定义一个适配器类来实现当前系统的业务接口,同时又继承现有组件库中已经存在的组件。

2024-07-25 20:07:00 485

原创 结构型模式-代理模式

在JDK1.6、JDK1.7、JDK1.8逐步对JDK动态代理优化之后,在调用次数较少的情况下,JDK代理效率高于CGLib代理效率,只有当进行大量调用的时候,JDK1.6和JDK1.7比CGLib代理效率低一点,但是到JDK1.8的时候,JDK代理效率高于CGLib代理。Java中提供了一个动态代理类Proxy,Proxy并不是我们上述所说的代理对象的类,而是提供了一个创建代理对象的静态方法(newProxyInstance方法)来获取代理对象。这也就印证了我们之前说的真实类和代理类实现同样的接口。

2024-07-25 20:05:25 566

原创 结构型模式-分类

结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。

2024-07-25 20:03:54 166

原创 创建者模式对比

我们举个简单例子来说明两者的差异,如要制造一个超人,如果使用工厂方法模式,直接产生出来的就是一个力大无穷、能够飞翔、内裤外穿的超人;抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式则是不需要关心构建过程,只关心什么产品由什么工厂生产即可。如果将抽象工厂模式看成汽车配件生产工厂,生产一个产品族的产品,那么建造者模式就是一个汽车组装工厂,通过对部件的组装可以返回一辆完整的汽车。工厂方法模式注重的是整体对象的创建方式;

2024-07-23 19:54:17 108

原创 创建型模式-建造者模式

上面示例是 Builder模式的常规用法,指挥者类 Director 在建造者模式中具有很重要的作用,它用于指导具体构建者如何构建产品,控制调用先后次序,并向调用者返回完整的产品类,但是有些情况下需要简化系统结构,可以把指挥者类和抽象建造者进行结合。建造者模式除了上面的用途外,在开发中还有一个常用的使用方式,就是当一个类构造器需要传入很多参数时,如果创建这个类的实例,代码可读性会非常差,而且很容易引入错误,此时就可以利用建造者模式进行重构。生产自行车是一个复杂的过程,它包含了车架,车座等组件的生产。

2024-07-23 19:53:30 898

原创 创建型模式-原型模式

stu对象和stu1对象是同一个对象,就会产生将stu1对象中name属性值改为“李四”,两个Citation(奖状)对象中显示的都是李四。这就是浅克隆的效果,对具体原型类(Citation)中的引用类型的属性进行引用的复制。Cloneable 接口是上面的类图中的抽象原型类,而实现了Cloneable接口的子实现类就是具体的原型类。将上面的“三好学生”奖状的案例中Citation类的name属性修改为Student类型的属性。原型模式的克隆分为浅克隆和深克隆。用原型模式生成“三好学生”奖状。

2024-07-23 19:51:33 243

原创 创建型模式-工厂模式

在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。这些工厂只生产同种类产品,同种类产品称为同等级产品,也就是说:工厂方法模式只考虑生产同等级的产品,但是在现实生活中许多工厂是综合型的工厂,能生产多等级(种类) 的产品,如电器厂既生产电视机又生产洗衣机或空调,大学既有软件专业又有生物专业等。纵轴是产品族,也就是同一品牌的产品,同一品牌的产品产自同一个工厂。

2024-07-22 20:00:11 682

原创 创建型模式-单例设计模式

双重检查锁模式是一种非常好的单例实现模式,解决了单例、性能、线程安全问题,上面的双重检测锁模式看上去完美无缺,其实是存在问题,在多线程的情况下,可能会出现空指针问题,出现问题的原因是JVM在实例化对象的时候会进行优化和指令重排序操作。枚举类实现单例模式是极力推荐的单例实现模式,因为枚举类型是线程安全的,并且只会装载一次,设计者充分的利用了枚举的这个特性来实现单例模式,枚举的写法非常简单,而且枚举类型是所用单例实现中唯一一种不会被破坏的单例实现模式。instance对象是随着类的加载而创建的。

2024-07-22 19:52:57 1725

原创 设计模式-分类

行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。结构型模式描述如何将类或对象按某种布局组成更大的结构。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。以上 11 种行为型模式,除了模板方法模式和解释器模式是类行为型模式,其他的全部属于对象行为型模式。

2024-07-21 09:31:14 290

原创 设计模式-软件设计原则

面向对象的开发很好的解决了这个问题,一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。上面代码可以看到已经组装了一台电脑,但是似乎组装的电脑的cpu只能是Intel的,内存条只能是金士顿的,硬盘只能是希捷的,这对用户肯定是不友好的,用户有了机箱肯定是想按照自己的喜好,选择自己喜欢的配件。迪米特法则中的“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。

2024-07-21 09:29:25 637

原创 设计模式-UML图

我们先介绍一般关联。类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。在 UML 类图中,依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。* 在软件工程中,类图是一种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,可以简化了人们对系统的理解;在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作。继承关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系。

2024-07-20 09:39:18 738

原创 设计模式概念

直到1995 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)、约翰·威利斯迪斯(John Vlissides)等 4 位作者合作出版了《设计模式:可复用面向对象软件的基础》一书,在此书中收录了 23 个设计模式,这是设计模式领域里程碑的事件,导致了软件设计模式的突破。GoF(四人组)书中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。

2024-07-20 09:37:27 262

原创 Flowable-内嵌表单

flowable流程引擎表单内嵌以及配置查询,填写表单完成任务审批。

2024-07-20 09:29:57 283

原创 Flowable-整合系统角色人员

上述的介绍可能比较简单,但大体思路如上,实际的使用还需要参考具体的系统和业务情况而定。下一节:flowable-内嵌表单。

2024-07-19 20:44:25 257

原创 Flowable-SpringBoot项目集成

实际整合过程中,可能存在版本、环境、依赖等影响,导致出现报错,但是大体的思路如上,可以参考整合。下一节:flowable-加载系统用户。

2024-07-18 19:53:31 990 1

原创 Flowable-会签与或签

或签的意思就是 A 的请假流程提交给 B、C、D,但是并不需要 B/C/D 同时审批通过,只需要 B/C/D 中的任意一个审批即可,这就是或签,注意,这里的表述,只需要 B/C/D 任意一个审批即可,这个审批即可以是审批通过,也可以是审批拒绝,反正只要审批,这个 UserTask 就算完成了,任务就进入下一个环节了。或签的实现方式与会签相似,只是完成条件的设置不同,或签就是三个人中只要一个人完成就算完成了,因此在使用的时候,完成条件可以写:${nrOfCompletedInstances>=1} 即可。

2024-07-17 20:16:13 879

原创 Flowable-网关

以上就是关于flowable网关的介绍,比较常用的就是排查类型的网关。下一节:flowable-会签与或签。

2024-07-17 20:10:01 959

原创 Flowable-候选人和候选人组

定义流程图,同时指定候选人,多个候选人会通过,连接以上就是关于flowable候选人和候选人组的介绍。下一节:flowable-网关。

2024-07-16 20:14:13 396

原创 Dynamic多数据源

有时候我们在项目中,可能会遇到需要同时使用多个数据库连接的情况,这个时候可以使用MyBatis-Plus的dynamic多数据源的配置。但其实MyBatis-Plus官方还提供了mybatis-mate组件,但是他是付费的企业组件。

2024-07-16 09:07:12 198

原创 Flowable-任务分配和流程变量

以上就是关于flowable任务分配和流程变量的介绍,在实际的项目中,通常使用较多的指定任务审批人,或者指定审批角色、岗位等,如果审批有多个人员,这个时候就可以使用候选人或者候选人组。下一节:flowable-候选人和候选人组。

2024-07-15 19:59:07 857

原创 Flowable-基础表结构

最后如果要加载自定义名称的配置文件可以通过ProcessEngineConfiguration中的对应构造方法来实现@Test。

2024-07-14 10:07:16 1016

原创 Flowable-基础

接下来构建一个非常简单的请假流程,Flowable引擎需要流程定义为BPMN 2.0格式,这是一个业界广泛接受的XML标准。在Flowable术语中,将其称为一个流程定义(process definition)。一个流程定义可以启动多个流程实例(process instance)。流程定义可以看做是重复执行流程的蓝图。在这个例子中,流程定义定义了请假的各个步骤,而一个流程实例对应某个雇员提出的一个请假申请。

2024-07-14 09:14:39 957

原创 Flowable-流程图标与流程演示

至此,对于Flowable的基础操作和工作流程就演示完了,下面可以在代码中进行审批流程。快链:flowable-基础。

2024-07-13 13:37:16 702

原创 Flowable-流程设计

有了相关的用户信息。就可以来创建流程图。这块需要通过建模应用程序来实现。点击后进入,看到如下的界面:第一次进入提示还没有创建流程模型,可以点击右上角的创建流程按钮开始创建第一个流程案例。然后会进入到具体的流程图的绘制界面。创建第一个请假流程图然后我们需要分配相关节点的审批人人事审批-- zhangsan 审批经理审批 -- lisi 审批分配操作选择分配给单个用户并搜索到zhangsan相同的操作完成经理审批节点的配置,然后就可以保存退出了到此流程定义完成~

2024-07-13 11:28:44 915

原创 Flowable-介绍

BPM(BusinessProcessManagement),业务流程管理是一种管理原则,通常也可以代指BPMS(BusinessProcessManagementSuite),是一个实现整合不同系统和数据的流程管理软件套件.BPMN(BusinessProcessModelandNotation)是基于流程图的通用可视化标准。该流程图被设计用于创建业务流程操作的图形化模型。业务流程模型就是图形化对象的网状图,包括活动和用于定义这些活动执行顺序的流程设计器。

2024-07-13 11:11:20 852

原创 Xxl-Job分布式定时任务

XXL-JOB是一个分布式任务调度平台,是一个分布式定时任务的解决方案,作者的名字叫许雪里。解决问题:在分布式环境下,传统的定时任务,如SpringTask、Timer等,存在定时任务重复执行,无法追踪任务执行结果等,使用Xxl-job可以有效避免在分布式环境下,定时任务出现的各类问题,同时还支持任务结果日志,数据统计,预警邮件等功能。xxl-job: 一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

2024-06-02 14:35:35 2522 2

原创 文件打包后输出 - Java实现

用户需要下载的文件比较多,需要批量进行下载,并且将勾选下载的文件,打包成为一个压缩包后下载,这样用户所有的文件只需要下载一次,文件就全部在压缩包里面了。

2024-05-14 21:26:29 748

原创 一对多连表分页查询分页参数问题

通过mybatis执行的SQL可以看到,首先是执行了统计total的语句,将分页的总数统计出来,然后执行了业务主查询,也就是查询订单表,将分页的数据行数查询出来,然后每一个订单还有多个订单明细,mybatis采用的是循环主表行数,逐条查询的方式,对比之前的连表,解决了分页参数的问题,同时单表查询相比连表一定程度上能够提升效率,但是代码阅读性降低。修改原来连表的SQL语句,只保留主表的分页查询,将多的一方,也就是子表的查询,放到嵌套子查询中,从而解决问题。结果达到了再来看一下mybatis是如何执行的。

2024-05-11 22:36:24 523 2

原创 Mac安装多版本JDK

本文介绍在mac下安装多个版本的jdk,并动态切换使用,说一下当前需要配置的环境,m1芯片,arm架构的mac,安装jdk版本为oracle jdk8和azul的openjdk8。

2024-04-14 10:44:08 828

原创 自定义注解记录系统日志

自定义注解实现日志记录

2024-04-08 21:26:09 152

原创 极光推送服务端

使用极光推送能够实现app的消息推送,需要将 JPush Android SDK 集成到app里,JPush Android SDK 创建到 JPush Cloud 的长连接,为 App 提供长期在线的能力。当开发者想要及时地推送消息到达 App 时,只需要调用 JPush API 推送,或者使用其他方便的智能推送工具,即可轻松与用户交流。

2024-03-25 15:57:48 507

原创 并发编程-多线程

这里的执行与其他两种方式的执行不同,实现Callable接口的线程任务,需要使用futureTask来进行初始化,并且使用futureTask来获取线程任务的返回结果。上面这种方式其实是不建议使用的,无法控制线程的数量等,可能会带来较大的影响,推荐使用自定义线程池的方式创建。但是如果实现了Runable接口的话,则很容易的实现资源共享。对比,前两种方式创建线程的方式来说,这种方式的有点在于,它可以获取到线程任务执行后的返回值。关于线程池的详细介绍和操作,可以看《并发编程-线程池》一文。

2024-03-18 21:30:56 353

原创 Nginx

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx的网站有:百度、京东、新浪、网易、腾讯、淘宝等。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。nginx newsnginx作用:反向代理负载均衡动静分离(部署静态资源)

2024-03-17 15:08:05 798

原创 Kafka

消息队列——用于存放消息的组件程序员可以将消息放入到队列中,也可以从消息队列中获取消息很多时候消息队列不是一个永久性的存储,是作为临时存储存在的(设定一个期限:设置消息在MQ中保存10天)消息队列中间件:消息队列的组件,例如:Kafka、Active MQ、RabbitMQ、RocketMQ、ZeroMQ。

2024-03-16 13:21:41 2567

原创 RabbitMQ

在微服务中,模块之间的通讯有两种方式,一种是同步通讯,发送请求之后,希望立即得到结果,例如feign,一种是异步通讯,发送请求之后,不需要立即得到结果,例如RabbitMQ。

2024-03-15 20:42:33 1425

原创 MySQL-优化相关

存储引擎是mysql数据库的核心,就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是 基于库的,所以存储引擎也可被称为表类型。我们可以在创建表的时候,来指定选择的存储引擎,如果没有指定将自动选择默认的存储引擎。1). 建表时指定存储引擎1 CREATE TABLE 表名(2 字段1 字段1类型 [ COMMENT 字段1注释] ,3 ......4 字段n 字段n类型 [COMMENT 字段n注释]) ENGINE = INNODB [ COMMENT 表注释]

2024-03-15 20:38:46 1146

原创 人大金仓数据迁移

记录一次数据迁移的经历。前言:因国产化数据库要求,需要将PgSQL迁移到金仓数据库上,原有业务涉及PgSQL的部分插件,需要同步到金仓数据库中,迁移数据量预估在6千万左右。

2024-03-12 17:30:27 1386 2

原创 人大金仓数据库读写分离集群部署

金仓数据库部署与原有的单个实例的部署是不一样的,如果服务器上已经安装了金仓数据库,需要先将其完全卸载,或者停用掉,否则会影响到集群的部署。金仓数据库集群是针对实例而言的,也就是需要多台服务器实例,每一台安装金仓数据库进行搭建集群。部署的过程中可能会出现各种错误,需要耐性解决。

2024-03-12 17:20:38 405

原创 人大金仓数据库安装

本文采用Linux命令行的方式进行安装。安装版本为KingbaseES R8V6 企业版。官方提供的安装方式中有图形化界面安装以及静默安装,如需,可以参考官方提供的文档。

2024-03-12 17:14:32 4297

原创 并发编程-线程池

关于线程池,查看源码可以看见,线程池的顶层接口是:Executor,只提供了execute方法,其下的实现非常多,常用的实现是ExecutorService,它提供了操作线程池的很多方法,例如开启线程池,关闭线程池,提交线程任务等等,我们使用的大部分线程池,几乎都是实现了ExecutorService接口。

2024-03-11 20:10:24 567

空空如也

空空如也

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

TA关注的人

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