- 博客(50)
- 收藏
- 关注
原创 正则表达式
标志也叫模式修正符,因为它可以用来修改表达式的搜索结果。这些标志可以任意的组合使用,它也是整个正则表达式的一部分。正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽可能长的子串。正则表达式其实就是在执行搜索时的格式,由字母数字和字符组成。将贪婪匹配模式转化为惰性匹配模式。
2025-05-28 23:52:54
539
原创 SpringBoot定时任务实战_
如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。#:序号(表示每月的第几个周几),例如在周字段上设置”6#3”表示在每月的第三个周六.注意如果指定”#5”,正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适不过了);L :表示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于”7”或”SAT”。
2025-05-28 23:50:33
714
原创 SpringBoot 引入线程池+Queue缓冲队列实现高并发下单业务_
主要是自己在项目中(中小型项目) 有支付下单业务(只是办理VIP,没有涉及到商品库存),目前用户量还没有上来,目前没有出现问题,但是想到如果用户量变大,下单并发量变大,可能会出现一系列的问题,趁着空闲时间,做了这个demo测试相关问题。线程池 + Queue队列。
2025-05-28 23:49:23
262
原创 Spring Boot 异步线程间数据传递
上述列举了4种方案,这里推荐方案2和方案4,其中两种方案的缺点非常明显,实际开发中也是采用的方案2或者方案4。
2025-05-28 23:47:16
516
原创 Jenkins+Docker 实现一键自动化部署项目
(img-IqANpifs-1748446972562)](img-6xZOUWzP-1748446972563)](img-Yshx4e5n-1748446972563)]页面访问:http://{部署Jenkins所在服务IP}:8080。1.SSH Server Name 填你虚拟机IP或用户名。4.Remote Directory 填 /2.Hostname 填你的虚拟机IP。目标:clean install。pom.xml是项目代码所在位置。启动脚本里面的路径手动创建。解压并复制到指定目录。
2025-05-28 23:43:17
1064
原创 Java常用加密方式
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,24小时内即可被破解。DES加密和解密过程中,密钥长度都必须是8的倍数。/**
2025-05-28 23:42:03
776
原创 Spring Boot项目中实现单点登录(SSO)完整指南
单点登录(Single Sign-On, SSO)是一种身份验证机制,允许用户使用一组凭证(如用户名和密码)登录多个相关但独立的系统。
2025-05-28 23:38:48
2147
1
原创 HTTPS加密通信详解及在Spring Boot中的实现
客户端发起HTTPS请求(连接到服务器443端口)服务器返回数字证书(包含公钥)客户端验证证书(检查颁发机构、有效期等)密钥交换(对过非对称加密协商对称密钥)加密通信(使用对称密钥加密数据传输)
2025-05-28 23:37:39
1264
原创 RabbitMQ的安装及基础使用教程
1、消息中间件概述1.1、什么是消息中间件MQ全称 Message Queue ,消息队列是应用程序与应用程序之间的通讯媒介,多用于分布式系统之间的通信。下图为进行远程通信的两种方式:直接远程调用和通过消息中间件 完成通信。为什么要使用MQ在项目中,有些业务操作不需要即时返回并且处理耗时,可以把这些操作提取出来进行异步处理,而这种异步处理的方式可以大大的节省服务器的请求响应时间,从而提高系统的吞吐量。MQ的常见使用场景任务异步处理将不需要同步处理且耗时的操作有消息队列通知消息
2022-03-17 09:39:11
300
1
原创 chmod 777 授权无效
chmod 777 命令给文件夹授权后,依旧无权限访问这是因为SELinux是Linux系统上一个常见的安全软件,只需要把它关闭即可首先通过命令 getenforce 来查看当前SELinux的状态,默认情况下一般都是Enforcing状态,也就是强制启用的意思。SELinux一共有3种状态,分别是Enforcing,Permissive和Disabled状态。第一种是默认状态,表示强制启用,第二种是宽容的意思,即大部分规则都放行。第三种是禁用,即不设置任何规则。可以通过setenforce命令
2021-11-29 23:16:27
8245
原创 手写 starter
自定义个一个简单的 redission-spring-boot-starter文章目录第一步:新创建一个module,命名 redission-spring-boot-starter第二步:导入依赖第三步:自定义配置类第四步:写入到 ==spring.factories== 文件中,可被自动装配扫描到第五步:==mvn install==命令把module添加到本地仓库第六步:测试 ==redission-spring-boot-starter== 启动器第一步:新创建一个module,命名 redi
2021-11-25 11:22:58
211
原创 CentOS 7虚拟机下配置固定IP
CentOS 7虚拟机下配置固定IP达到如下效果:1、笔记本主机IP为设置自动获取,不管什么情况下,不受虚拟机影响,只要连接外网就可以正常上网;2、只要笔记本主机可以正常访问外网,启动虚拟机中的CentOS 7系统就可以正常访问外网,无需再进行任何设置;3、虚拟机设置为固定IP,不管主机在什么网络环境下,是断网环境,还是连接任何网段访问外网的环境下,虚拟机的IP都固定不变,而且使用终端连接,始终不变,正常连接;4、虚拟机的固定IP可以按照自己想设置的IP地址网段随意设置,比如我就想设置固定IP为1
2021-11-21 16:25:55
2140
原创 Spring注解发展历程
1,Spring Framework 1.x 注解驱动启蒙时代此时,Java5刚刚发布,开始支持Annotation,Spring1.2提供了==@Transactional和@ManagedResource==注解,但是此时Bean的装载还是通过XML配置文件的方式 <bean name="DemoSerivce" class="com.ditian.example.spring.v1.DemoService01"/>2,Spring Framework 2.x 注解驱动过渡时期.
2021-11-18 16:49:37
549
原创 42.接雨水
/** * @Classname CatchRain * @Description TODO * @Version 1.0.0 * @Date 2021/11/2 9:20 * @Created by DiTian */public class CatchRain { public static void main(String[] args) { int[] height = new int[]{0,1,0,2,1,0,1,3,2,1,2,1}; //
2021-11-02 10:33:52
127
原创 POI和easyExcel
POI使用依赖 <!--xls 03--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> &l
2021-10-29 22:04:39
206
原创 Java IO流
1, File类1.1 File类定义File类主要是JAVA为文件这块的操作(如删除、新增等)而设计的相关类File类的包名是java.io,其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较1.2 File类方法构造方法:File(URI uri)通过将给定的 file:URI转换为抽象路径名来创建新的 File实例。File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
2021-10-13 11:21:02
131
原创 5. 最长回文子串
最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成动态规划和中心扩展法实现:/** * @Author: DiTian *.
2021-10-11 10:18:25
183
原创 高级技术之 JUC 高并发编程
1,什么是 JUC1.1 JUC简介JUC 就是java.util.concurrent 工具包的简称,这一个专门用来处理线程的工具包,JDK1.5开始出现1.2 进程与线程**进程(Process):**是系统进行资源分配和调度的基本单位,比如QQ启动就是一个进程。**线程(Thread):**是操作系统能够进行运算调度的最小单位,是程序执行的最小单位,它被包含在进程中,比如QQ中的各个功能,都是不同的线程。1.3 线程的状态在Thread类中枚举了线程的6种状态; pu
2021-08-25 14:06:31
964
原创 236. 二叉树的最近公共祖先(java)
/** * @Author: DiTian * @Description: * @Date: Created in 9:28 2021/8/20 */public class CommonAncestor { private static Map<Integer,BTNode> parent = new HashMap<Integer,BTNode>(); private static Set<Integer> visited = new Has
2021-08-20 12:11:53
380
原创 SpringBoot启动流程
0,启动@SpringBootApplication注解类的main方法import org.springframework.boot.SpringApplication;//启动类import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication//启动必要的注解public class SpringBootDemoApplication { //运行main方法启动spri
2021-08-19 14:20:03
491
原创 88. 合并两个有序数组
/** * @Author: DiTian * @Description: 合并两个有序数组 * @Date: Created in 9:24 2021/8/13 */public class MergeTwoArrays { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入第一个有序数组,逗号隔
2021-08-13 10:28:00
168
原创 415. 字符串相加
/** * @Author: DiTian * @Description: 两字符串相加 * @Date: Created in 15:23 2021/8/12 */public class StrAddStr { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String str1 = scanner.nextLine();
2021-08-12 16:58:33
70
原创 121. 买卖股票的最佳时机(java)
/** * @Author: DiTian * @Description: 买卖股票的最佳时机 * @Date: Created in 16:49 2021/8/9 */public class MaxProfit { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一串数字,逗号隔开:");
2021-08-10 09:43:29
103
原创 103. 二叉树的锯齿形层序遍历(Java)
/** * @Author: DiTian * @Description: 二叉树的锯齿形层次遍历 * @Date: Created in 16:08 2021/7/28 */@SuppressWarnings("unused")public class ZigzagLevelTraversal { //树节点类 static class TreeNode{ Integer val; TreeNode left; TreeNode
2021-08-09 16:31:54
181
原创 Nacos启动没反应
按住shift,鼠标右键(选择在此打开命令窗口)输入startup.cmd -m standalone命令执行结果:需要满足条件:1、java(x64)! jdk8 or later is better2、环境变量需要配置: JAVA_HOME再次运行成功启动!
2021-08-07 16:00:42
1057
原创 21. 合并两个有序链表(Java代码实现)
通过递归和迭代两种方式合并两个有序链表/** * @Author: DiTian * @Description: 合并两个有序链表 * @Date: Created in 10:03 2021/8/6 */public class MergeTwoList { //创建节点类 static class LinkedNode{ private int val; private LinkedNode next; public Linke
2021-08-06 10:50:10
205
原创 【LeetCode】160. 相交链表(JAVA完整代码)
/** * @Author: DiTian * @Description: 求两个链表的相交节点 * @Date: Created in 16:49 2021/8/5 */public class IntersectionNode { //节点类 static class LinkedNode{ private String val; private LinkedNode next; LinkedNode(String val){
2021-08-06 09:46:14
235
原创 141. 环形链表
给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。/** * @Author: DiTian * @Description: * @Date: Created
2021-08-05 09:55:25
61
原创 LeetCode 53. 最大子序和
/** * @Author: DiTian * @Description: 最大子序列和 * @Date: Created in 13:33 2021/8/2 */public class MaxSubArray { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入数组元素,以逗号分隔:");
2021-08-03 12:56:14
84
原创 快速排序和计数排序
/** * @ClassName: SortArray * @Description: 数组排序 * @Author: DiTian * @Date: 2021/8/1 11:58 */public class SortArray { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个数组,以
2021-08-01 20:00:40
165
原创 LeetCode---15. 三数之和(java实现)
/** * @Author: DiTian * @Description: * @Date: Created in 15:24 2021/7/30 */public class SumOfThreeNums { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Set set = new HashSet(); System.ou
2021-07-30 16:07:52
80
原创 二叉树创建
创建一棵二叉树,并进行先序,层次遍历/** * @Author: DiTian * @Description: 树的创建 * @Date: Created in 16:59 2021/7/28 */public class BTNode { //定义一个二叉树的结点 private int data; private BTNode lchild; private BTNode rchild; //构造函数 public BTNode(){
2021-07-29 08:49:32
170
原创 23种设计模式——装饰者模式
1、装饰器模式在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰器模式来实现。1.1、装饰器模式的定义与特点装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。装饰器模式的主要优点有:装饰器是继承的有力补充,比继承灵活,在不改变原有对象的情况下,动态的给一个对象扩展功能,即插即用通过使用不用装饰类及这些
2021-07-23 18:07:09
136
原创 23种设计模式——桥接模式
1、桥接模式在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。当然,这样的例子还有很多,如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等。如果用桥接模式就能很好地解决这些问题。1.2、桥接模式的定义与特点桥接(Bridge)模式的定义如
2021-07-23 04:37:56
350
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人