自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Activity工作流框架——生成数据表

【代码】Activity工作流框架——生成数据表。

2024-07-16 16:22:46 137

原创 jdk动态代理与cglib动态代理:

最近在用java实现redis,在使用动态代理时遇到了一点问题,即使用jdk动态代理(Invocationhandler)时,如果代理对象是一个接口的实现类,那么此时动态代理获取到的method对象是接口中的,而不是实现类的,现象是:我在实现类中对接口方法上新增了注解,但是此刻method反射获取不到注解信息,于是大概整理了一下这两者的区别:获取的是接口中的方法信息,因此如果注解是在实现类上定义的,通过代理对象获取不到这些注解。:获取的是目标类中的方法信息,因此可以获取到实现类上的注解。

2024-07-11 17:28:51 294

原创 对MVC的理解以及如何实现一个简单的MVC

null;/*** 对参数进行解析,并设置参数类型、参数名、参数默认值*/0 : 1);if (pv!= null) {= null) {= null) {} else {throw new ServerErrorException("请给参数标记注解,不支持的参数类型 " + classType + " at method " + method);

2024-07-02 20:44:50 381

原创 java中的值传递和引用传递理解

它们是引用传递,但由于它们是不可变的(immutable),一旦创建后值不会改变。

2024-06-28 15:32:23 288

原创 对于业务中的一些生效时间处理理解

在业务中常会遇到对于一些事件、规则等等有设置生效时间,它们无非也就两种大类型。前端传值类型为(1,2,3)表示周一周二周三 和 hh:mm。这种类型可以采取的方式有很多,比如可以直接转换为时间戳比较。前端传值类型 yyyy-mm-dd 和 hh:mm:ss。这种类型处理起来相对比较复杂,需要对周几和时间段单独判断。生效时间判断,判断当前时间是否在时效内。判断当前时间是否处于合法时间段内。直接转换为时间戳进行判断即可。数据库用两个字符类型存储。数据库类型选用Date。判断是否处于周内时间段。

2024-06-28 15:30:59 476

原创 对代理模式和动态代理以及AOP的一些理解

代理模式和动态代理各有优劣,具体使用时需要根据需求选择合适的方式。静态代理适用于结构较为简单且明确的场景,而动态代理则适用于需要灵活扩展和动态处理的复杂场景。

2024-06-27 12:17:22 546

原创 对泛型的一些总结理解

泛型(Generic)是Java编程语言的一项特性,允许类、接口和方法在定义时使用类型参数,从而可以在不确定具体类型的情况下编写代码。泛型的主要目的是提高代码的重用性和类型安全性。

2024-06-26 16:44:07 397

原创 使用ThreadLocal存储当前用户信息

【代码】使用ThreadLocal存储当前用户信息。

2024-06-18 16:26:32 270

原创 从数据库中查找工作流部署进去的文件

ACT_RU_*: 'RU’表示runtime。这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。这样运行时表可以一直很小速度很快。ACT_HI_*: 'HI’表示history。这些表包含历史数据,比如历史流程实例, 变量,任务等等。ACT_ID_*: 'ID’表示identity。这些表包含身份信息,比如用户,组等等。ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。

2024-06-04 15:29:00 181

原创 Activity7框架使用学习记录

工作流的学习心得

2024-05-11 14:01:48 1375

原创 【根据消息类型实现订阅发布模型】

基于消息类型的订阅发布者模型

2024-04-22 20:32:53 330 2

原创 观察者模式

它允许一个对象(称为主题或可观察对象)维护一系列依赖于它的对象(称为观察者),并在自身状态变化时通知这些观察者。这种模式用于建立对象之间的一对多依赖关系,使得一个对象的状态变化能够自动通知所有依赖它的对象。他和发布订阅者模式类似,都是当对象状态发生变化时,由发布者通知订阅者。

2024-01-02 16:06:07 400 1

原创 装饰器模式

假设有一个咖啡店,顾客可以根据自己的喜好选择不同的咖啡和添加不同的配料(比如糖和奶油)。将需要装饰的主方法作为某种参数传递,然后对其进行装饰。

2023-12-13 17:24:05 504

原创 策略模式实现

​ 工厂模式和策略模式在形式上比较相似,但是在实际使用场景中有很大的不同,工厂模式用在能通过某些条件得到确定的实现类,策略模式用在需要我们来判断所需的实现类。

2023-12-12 10:48:58 736

原创 工厂方法模式

工厂方法模式是直接创建出需要的实例,即通过继承父类的方式,来实现扩展,需要通过访问具体的工厂来获得实例,也就是需要记住所有的工厂。简单工厂是需要通过一些条件(switch判断),然后由工厂来返回具体的实例。

2023-12-12 10:36:32 544

原创 工厂模式实现

设计模式

2023-12-12 10:25:51 387

翻译 nvm安装以及使用

链接:https://github.com/coreybutler/nvm-windows/releases。nvm-noinstall.zip:绿色免安装版,但使用时需要进行配置。nvm-setup.zip:安装版,推荐使用。windows系统下的nvm 安装。

2023-10-07 13:53:11 116

原创 深度搜索——n皇后

n皇后问题就是在n*n的棋盘上放置n个皇后,使她们之间不在同一行同一列,且不在同一个对角线上问:共有多少种摆法?首先分析问题:直观的来说,我们可以想到直接使用暴力回溯出符合条件的解如何暴力? 从第一行开始以此遍历每一个格子,再继续向上层遍历 比如:对于一个4*4的棋盘,可以先确定第一行的[1,1],再继续遍历第二行,确定第二行的位置,重复此过程 确定了回溯的过程,那么接下来就只需要一个判断函数,即判断当前格子是否符合条件下面开始实现:首先明确的是,对于每一行

2022-04-01 20:31:41 241

原创 关于学校的子网划分

划分子网:从主机号部分借用一部分作为子网号,以此将网络继续划分成多个子网(IP 地址) AND (子网掩码) = 网络地址校园网的IP是172.22.5.***子网掩码是255.255.224.0网关是 172.22.31.***由此可见校园网进行了子网划分,那如何保证网关和分配的ip地址仍在同一个网段下呢?可以通过验算来证明证明如下:首先,因为ip地址第一位是172,所以该ip是第二类ip,前两位为网络号再将第三位 224 转换为2进制表示是 1110 0000故该网段从主机号中借了

2022-03-31 07:52:37 1908

原创 大顶堆的构造&&堆排序的实现

/** * 堆排序的实现 */public class heapsort { /** * 将数组arr从下标第i个开始构造成一个大顶堆 * @param arr 目标数组 * @param i 从第i个开始构造(i的意思也就是需要保证从i开始后面的数已经是大顶堆了) * @param n 数组的大小 */ public static void construct_heap(int[] arr,int i,int n){ .

2021-10-18 10:58:58 233

原创 桶排序&&基数排序的实现(细致到极致)

希望大家在看代码之前先去看看图解,我在这里就只实现了代码也可以在底下留言,我会慢慢讲解的/** * 桶排序和基数排序的实现 */public class bucketsort { /** * 实现一个最简易桶排序 * 主要思想是创建一个超级大的桶,再将每个数按大小放入桶中 * 最后再对桶遍历一下就完成了排序 */ public static void bucket_test1(int[] arr){ int[] bucke

2021-10-17 20:04:37 89

原创 快速排序(逐行讲解)

首先需要声明,我这这里并没有图例,所以将以各位小伙伴先去了解此算法的思想再回过来看代码/** * 实现快速排序 */public class quicksort { /** * 快速排序的核心思想其实也是交换 * 设立两个指针左指针和右指针,分别指向头和尾,再从数组中选定一个用来比较的值(基准值) * 让左指针向右移动,右指针向左移动 * 当左指针指向的值大于基准值,就停下 * 当右指针指向的值小于基准值,就停下 * 此时将左

2021-10-17 15:14:56 84

原创 二叉搜索数的实现——JAVA

package tree;public class BinarySearchTree<T extends Comparable<T>> { BSTNode<T> myroot; public class BSTNode<T extends Comparable<T>> { T key; BSTNode<T> leftchild; BSTNode<T>

2021-09-27 22:25:09 91

原创 用链表实现LinkedList

public class myLinkedList implements Iterable { private int thesize; //存储当前链表的长度 private int modcount = 0; private Node beginMarker; //链表的头节点,其next指向链表的第一个节点 private Node endMarker; //链表的尾节点,其prev指向链表的最后一个节点 public myLinkedLi.

2021-09-24 20:25:14 80

原创 用数组的方式实现ArrayList

/** * this is my ArrayList * @param <Object> */public class myarraylist<Object> implements Iterable<Object> { private static final int DEFAULT_CAPACITY = 10; //用来定义默认数组的长度 private int thesize; //用来控制theitems数组的长度(实际也就是.

2021-09-24 20:24:24 140

原创 归并排序(逐行注释!) 递归的使用

合并两个有序的数组的归并排序 /** * this is the function of merge sort * * @param arr * @param l * @param m * @param r */ public static void merge(int[] arr, int l, int m, int r) { int[] left = Arrays.copyOfRange(arr, l, m

2021-09-24 20:23:08 69

原创 插入排序and希尔排序(逐行讲解!)

希尔排序的实现是在插入排序的基础上进行的将数组按照等差的步长分成若干个小数组,再分别对小数组进行插入排序/** * this is a shell sort * * @param arr */ public static void shell_sort(int[] arr) { int i, j, k; int n = arr.length; for (k = n / 2; k > 0; k /= 2)

2021-09-24 20:21:00 74

原创 插入排序的实现

类似冒泡的实现 /** * this is a insert sort * * @param arr */ public static void insert_sort(int[] arr) { for (int i = 1; i < arr.length; i++) { for (int j = i; j > 0; j--) { if (arr[j] < arr[j

2021-09-24 20:17:52 49

原创 JAVA—Jdbc学习

使用Jdbc连接数据库//1:加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2:用户信息和url String url="jdbc:mysql://localhost:3306/jpa?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=true"; //对于mysql8版本,serve

2021-05-19 23:07:23 92

原创 Springboot国际化(中文与英语的切换)

国际化1)、编写国际化配置文件;2)、使用ResourceBundleMessageSource管理国际化资源文件3)、在页面使用fmt:message取出国际化内容步骤:1)、编写国际化配置文件,抽取页面需要显示的国际化消息三个配置文件分别对应默认状态,英文状态和中文状态下的显示在application配置文件中加上spring.messages.basename=i18n/login接着进入login.pro配置文件进行配置一个个配置好属性2)、file->setti

2020-06-15 15:01:15 1044

原创 thymeleaf模板引擎引入及使用

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> 2.1.6 </dependency> 切换thymeleaf版本 如果你是使用的springboot2.0及以上版本,那系统默认的thymeleaf就是3.以上的,一下就

2020-06-15 14:44:00 1340

原创 SSM整合(从导包到配置)

首先创建maven项目,开始导包注意:我的MySQL是MySQL8版本 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.co

2020-06-05 20:05:40 151

原创 Jackson和fastjson将Java对象转成JSON 与乱码解决

Jackson代码public String json1() throws JsonProcessingException { //创建一个jackson的对象映射器,用来解析数据 ObjectMapper mapper = new ObjectMapper(); //创建一个对象 User user = new User("秦疆1号", 3, "男"); //将我们的对象解析成为json格式 String str = m

2020-06-04 23:37:13 2718

原创 SpringMVC从前端接收一个日期类型(Date)

<a href="account/deleteAccount?date=2018-01-01">根据日期删除账户</a>(1)@RequestMapping("/deleteAccount")public String deleteAccount(String date) {System.out.println("删除了账户。。。。"+date);return "success";}(2)@RequestMapping("/deleteAccount")publi

2020-06-03 10:42:59 937

原创 Spring MVC请求参数绑定

绑定的机制我们都知道,表单中请求参数都是基于 key=value 的。SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的例如:<a href="account/findAccount?accountId=10">查询账户</a>中请求参数是:accountId=10/*** 查询账户* @return*/@RequestMapping("/findAccount")public String findAccount(

2020-06-03 10:25:31 101

原创 二叉树——哈夫曼树(妙!)

1) 给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。2) 赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为 1,则从根结点到第 L 层结点的路径长度为 L-1结点的权及带权路径长度:若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结

2020-06-01 22:45:59 490

原创 堆排序!!!!!!!!!

堆排序堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆大顶堆举例说明5)小顶堆举例说明:6)一般升序采用大顶堆,降序采用小顶堆排序的基本思想堆排序的基本思想是:将待排序序列构

2020-06-01 00:18:38 204

原创 前序线索化二叉树

前序化二叉树的方法其实这里的重点就是设置一个变量来记录当前节点的上一个节点,然后再进行处理,重中之重就是画图!!!还有就是要明白递归是什么,递归式回溯!!!在上一篇文章中已经讲过线索化二叉树和中序线索化二叉树的方法现在在这里再讲一下前序线索化二叉树以及遍历前序线索化二叉树的方法/** * 前序线索化二叉树 * @param node */ void preThreadOrder(HeroNode node) { if(node == null)

2020-05-31 13:28:44 1124 6

原创 JAVA线程高级用法

Lock锁的用法之前了解了Java中进程锁的关键字synchronized 的用法今天还有一种方法可以实现进程锁——Lockjava.util.concurrent.locks包下常用的类与接口(lock是jdk 1.5后新增的)Lock锁可以手动加锁解锁,这部分就相当于synchronized括起来的代码段部分package gaoji;import java.util.concurrent.locks.ReentrantLock;/** * 测试lock锁 */public

2020-05-30 14:27:27 362

原创 线索化二叉树的概念与实现

n 个结点的二叉链表中含有 n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种一个结点的前一个结点,称为前驱结点一个结点的后一个结点,称为后继结点说明: 当线索化二叉树后,...

2020-05-30 13:18:24 259

空空如也

空空如也

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

TA关注的人

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