diff --git a/404.html b/404.html index c4547ad88..8d50ae1c1 100644 --- a/404.html +++ b/404.html @@ -62,7 +62,7 @@ isHome: false, isHighlightShrink: false, isToc: false, - postUpdate: '2023-12-03 00:03:43' + postUpdate: '2023-12-03 13:48:03' }
文章总览 - 1
2023
DFA算法实现敏感词自管理
DFA算法实现敏感词自管理
\ No newline at end of file diff --git a/archives/2023/index.html b/archives/2023/index.html index 66de7b346..32e577104 100644 --- a/archives/2023/index.html +++ b/archives/2023/index.html @@ -62,7 +62,7 @@ isHome: false, isHighlightShrink: false, isToc: false, - postUpdate: '2023-12-03 00:03:44' + postUpdate: '2023-12-03 13:48:05' }

DFA算法实现敏感词自管理

一.需求分析

​ 在审核文本内容的时候,我们可以调用第三方成熟的服务(例如阿里云的内容安全)来实现,但是基于不同的场景,第三方的服务不可能涉及到方方面面的敏感词,比如在游戏类的场景中,开挂一词算敏感词,但是在其它的场景中,开挂一词是一个正常的词汇。这时候需要我们根据不同场景自己维护一套敏感词,在文本审核的时候,需要验证文本中是否包含这些敏感词。

+

二.可选方案

+ + + + + + + + + + + + + + + + + + + + + + +
方案说明
数据库模糊查询效率太低
String.indexOf(“”)查找数据库量大的话也是比较慢
全文检索分词再匹配
DFA算法确定有穷自动机(一种数据结构)
+

三. DFA算法

1.简介

DFA全称为:Deterministic Finite Automaton,即确定有穷自动机。

+

存储:一次性的把所有的敏感词存储到了多个map中,就是下图表示这种结构

+

敏感词:冰毒、大麻、大坏蛋

+

image-20231203134106231

+

2.检索过程

image-20231203134335076

+

四.工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package com.heima.utils.common;


import java.util.*;

public class SensitiveWordUtil {

public static Map<String, Object> dictionaryMap = new HashMap<>();


/**
* 生成关键词字典库
* @param words
* @return
*/
public static void initMap(Collection<String> words) {
if (words == null) {
System.out.println("敏感词列表不能为空");
return ;
}

// map初始长度words.size(),整个字典库的入口字数(小于words.size(),因为不同的词可能会有相同的首字)
Map<String, Object> map = new HashMap<>(words.size());
// 遍历过程中当前层次的数据
Map<String, Object> curMap = null;
Iterator<String> iterator = words.iterator();

while (iterator.hasNext()) {
String word = iterator.next();
curMap = map;
int len = word.length();
for (int i =0; i < len; i++) {
// 遍历每个词的字
String key = String.valueOf(word.charAt(i));
// 当前字在当前层是否存在, 不存在则新建, 当前层数据指向下一个节点, 继续判断是否存在数据
Map<String, Object> wordMap = (Map<String, Object>) curMap.get(key);
if (wordMap == null) {
// 每个节点存在两个数据: 下一个节点和isEnd(是否结束标志)
wordMap = new HashMap<>(2);
wordMap.put("isEnd", "0");
curMap.put(key, wordMap);
}
curMap = wordMap;
// 如果当前字是词的最后一个字,则将isEnd标志置1
if (i == len -1) {
curMap.put("isEnd", "1");
}
}
}

dictionaryMap = map;
}

/**
* 搜索文本中某个文字是否匹配关键词
* @param text
* @param beginIndex
* @return
*/
private static int checkWord(String text, int beginIndex) {
if (dictionaryMap == null) {
throw new RuntimeException("字典不能为空");
}
boolean isEnd = false;
int wordLength = 0;
Map<String, Object> curMap = dictionaryMap;
int len = text.length();
// 从文本的第beginIndex开始匹配
for (int i = beginIndex; i < len; i++) {
String key = String.valueOf(text.charAt(i));
// 获取当前key的下一个节点
curMap = (Map<String, Object>) curMap.get(key);
if (curMap == null) {
break;
} else {
wordLength ++;
if ("1".equals(curMap.get("isEnd"))) {
isEnd = true;
}
}
}
if (!isEnd) {
wordLength = 0;
}
return wordLength;
}

/**
* 获取匹配的关键词和命中次数
* @param text
* @return
*/
public static Map<String, Integer> matchWords(String text) {
Map<String, Integer> wordMap = new HashMap<>();
int len = text.length();
for (int i = 0; i < len; i++) {
int wordLength = checkWord(text, i);
if (wordLength > 0) {
String word = text.substring(i, i + wordLength);
// 添加关键词匹配次数
if (wordMap.containsKey(word)) {
wordMap.put(word, wordMap.get(word) + 1);
} else {
wordMap.put(word, 1);
}

i += wordLength - 1;
}
}
return wordMap;
}

public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("法轮");
list.add("法轮功");
list.add("冰毒");
//初始h敏感词库
initMap(list);
String content="我是一个好人,并不会卖冰毒,也不操练法轮功,我真的不卖冰毒";
Map<String, Integer> map = matchWords(content);
System.out.println(map);
}
}
+ +

结果:

+
1
{冰毒=2, 法轮功=1}
+ +
公告
本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
\ No newline at end of file diff --git a/posts/28118.html b/posts/28118.html index 3aad66042..716adbb2c 100644 --- a/posts/28118.html +++ b/posts/28118.html @@ -5,13 +5,13 @@ - + -

JWT-token生成工具

1.介绍

​ JWT(Json Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。JWT最重要的作用就是对 token信息的防伪作用。

+ })(window)

JWT-token生成工具

1.介绍

​ JWT(Json Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。JWT最重要的作用就是对 token信息的防伪作用。

​ JWT的原理:

​ 一个JWT由三个部分组成:公共部分、私有部分、签名部分。最后由这三者组合进行base64编码得到JWT。

image-20230420102523288

@@ -199,10 +199,10 @@

获取token字符串 -> 将token字符串和用户信息存放在cokkie中 -> 页面在cokkie中获取用户信息显示在页面上

前端登录与否的校验、后端网关登录与否的校验…….

之后补充完整的代码示例 这里没有遇到好的登录示例 ……….

-
公告
本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
avatar
Jason
Debug the World!
Ctrl + D 收藏
公告
本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
最近更新

常用类及其方法

1.String类的常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.hspedu.string_;

/**
* @author 韩顺平
* @version 1.0
*/
public class StringMethod01 {
public static void main(String[] args) {
//1. equals 前面已经讲过了. 比较内容是否相同,区分大小写
String str1 = "hello";
String str2 = "Hello";
System.out.println(str1.equals(str2));//

// 2.equalsIgnoreCase 忽略大小写的判断内容是否相等
String username = "johN";
if ("john".equalsIgnoreCase(username)) {
System.out.println("Success!");
} else {
System.out.println("Failure!");
}
// 3.length 获取字符的个数,字符串的长度
System.out.println("韩顺平".length());

// 4.indexOf 获取字符在字符串对象中第一次出现的索引,索引从0开始,如果找不到,返回-1
String s1 = "wer@terwe@g";
int index = s1.indexOf('@');
System.out.println(index);// 3
System.out.println("weIndex=" + s1.indexOf("we"));//0

// 5.lastIndexOf 获取字符在字符串中最后一次出现的索引,索引从0开始,如果找不到,返回-1
s1 = "wer@terwe@g@";
index = s1.lastIndexOf('@');
System.out.println(index);//11
System.out.println("ter的位置=" + s1.lastIndexOf("ter"));//4

// 6.substring 截取指定范围的子串
String name = "hello,张三";
//下面name.substring(6) 从索引6开始截取后面所有的内容
System.out.println(name.substring(6));//截取后面的字符
//name.substring(0,5)表示从索引0开始截取,截取到索引 5-1=4位置
System.out.println(name.substring(2,5));//llo

}
}
+ })(window)

常用类及其方法

1.String类的常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.hspedu.string_;

/**
* @author 韩顺平
* @version 1.0
*/
public class StringMethod01 {
public static void main(String[] args) {
//1. equals 前面已经讲过了. 比较内容是否相同,区分大小写
String str1 = "hello";
String str2 = "Hello";
System.out.println(str1.equals(str2));//

// 2.equalsIgnoreCase 忽略大小写的判断内容是否相等
String username = "johN";
if ("john".equalsIgnoreCase(username)) {
System.out.println("Success!");
} else {
System.out.println("Failure!");
}
// 3.length 获取字符的个数,字符串的长度
System.out.println("韩顺平".length());

// 4.indexOf 获取字符在字符串对象中第一次出现的索引,索引从0开始,如果找不到,返回-1
String s1 = "wer@terwe@g";
int index = s1.indexOf('@');
System.out.println(index);// 3
System.out.println("weIndex=" + s1.indexOf("we"));//0

// 5.lastIndexOf 获取字符在字符串中最后一次出现的索引,索引从0开始,如果找不到,返回-1
s1 = "wer@terwe@g@";
index = s1.lastIndexOf('@');
System.out.println(index);//11
System.out.println("ter的位置=" + s1.lastIndexOf("ter"));//4

// 6.substring 截取指定范围的子串
String name = "hello,张三";
//下面name.substring(6) 从索引6开始截取后面所有的内容
System.out.println(name.substring(6));//截取后面的字符
//name.substring(0,5)表示从索引0开始截取,截取到索引 5-1=4位置
System.out.println(name.substring(2,5));//llo

}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.hspedu.string_;

/**
* @author 韩顺平
* @version 1.0
*/
public class StringMethod02 {
public static void main(String[] args) {
// 1.toUpperCase转换成大写
String s = "heLLo";
System.out.println(s.toUpperCase());//HELLO

// 2.toLowerCase
System.out.println(s.toLowerCase());//hello

// 3.concat拼接字符串
String s1 = "宝玉";
s1 = s1.concat("林黛玉").concat("薛宝钗").concat("together");
System.out.println(s1);//宝玉林黛玉薛宝钗together

// 4.replace 替换字符串中的字符
s1 = "宝玉 and 林黛玉 林黛玉 林黛玉";
//在s1中,将 所有的 林黛玉 替换成薛宝钗
// 老韩解读: s1.replace() 方法执行后,返回的结果才是替换过的.
// 注意对 s1没有任何影响
String s11 = s1.replace("宝玉", "jack");
System.out.println(s1);//宝玉 and 林黛玉 林黛玉 林黛玉
System.out.println(s11);//jack and 林黛玉 林黛玉 林黛玉

// 5.split 分割字符串, 对于某些分割字符,我们需要 转义比如 | \\等
String poem = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
//老韩解读:
// 1. 以 , 为标准对 poem 进行分割 , 返回一个数组
// 2. 在对字符串进行分割时,如果有特殊字符,需要加入 转义符 \
String[] split = poem.split(",");
poem = "E:\\aaa\\bbb";
split = poem.split("\\\\");
System.out.println("==分割后内容===");
for (int i = 0; i < split.length; i++) {
System.out.println(split[i]);
}

// 6.toCharArray 转换成字符数组
s = "happy";
char[] chs = s.toCharArray();
for (int i = 0; i < chs.length; i++) {
System.out.println(chs[i]);
}

// 7.compareTo 比较两个字符串的大小,如果前者大,
// 则返回正数,后者大,则返回负数,如果相等,返回0
// 老韩解读
// (1) 如果长度相同,并且每个字符也相同,就返回 0
// (2) 如果长度相同或者不相同,但是在进行比较时,可以区分大小
// 就返回 if (c1 != c2) {
// return c1 - c2;
// }
// (3) 如果前面的部分都相同,就返回 str1.len - str2.len
String a = "jcck";// len = 3
String b = "jack";// len = 4
System.out.println(a.compareTo(b)); // 返回值是 'c' - 'a' = 2的值

// 8.format 格式字符串
/* 占位符有:
* %s 字符串 %c 字符 %d 整型 %.2f 浮点型
*
*/
String name = "john";
int age = 10;
double score = 56.857;
char gender = '男';
//将所有的信息都拼接在一个字符串.
String info =
"我的姓名是" + name + "年龄是" + age + ",成绩是" + score + "性别是" + gender + "。希望大家喜欢我!";

System.out.println(info);


//老韩解读
//1. %s , %d , %.2f %c 称为占位符
//2. 这些占位符由后面变量来替换
//3. %s 表示后面由 字符串来替换
//4. %d 是整数来替换
//5. %.2f 表示使用小数来替换,替换后,只会保留小数点两位, 并且进行四舍五入的处理
//6. %c 使用char 类型来替换
String formatStr = "我的姓名是%s 年龄是%d,成绩是%.2f 性别是%c.希望大家喜欢我!";

String info2 = String.format(formatStr, name, age, score, gender);

System.out.println("info2=" + info2);
}
}
@@ -270,10 +270,10 @@

暴破操作方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.hspedu.reflection;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
* @author 韩顺平
* @version 1.0
* 演示通过反射调用方法
*/
public class ReflecAccessMethod {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {

//1. 得到Boss类对应的Class对象
Class<?> bossCls = Class.forName("com.hspedu.reflection.Boss");
//2. 创建对象
Object o = bossCls.newInstance();
//3. 调用public的hi方法
//Method hi = bossCls.getMethod("hi", String.class);//OK
//3.1 得到hi方法对象
Method hi = bossCls.getDeclaredMethod("hi", String.class);//OK
//3.2 调用
hi.invoke(o, "韩顺平教育~");

//4. 调用private static 方法
//4.1 得到 say 方法对象
Method say = bossCls.getDeclaredMethod("say", int.class, String.class, char.class);
//4.2 因为say方法是private, 所以需要暴破,原理和前面讲的构造器和属性一样
say.setAccessible(true);
System.out.println(say.invoke(o, 100, "张三", '男'));
//4.3 因为say方法是static的,还可以这样调用 ,可以传入null
System.out.println(say.invoke(null, 200, "李四", '女'));

//5. 在反射中,如果方法有返回值,统一返回Object , 但是他运行类型和方法定义的返回类型一致
Object reVal = say.invoke(null, 300, "王五", '男');
System.out.println("reVal 的运行类型=" + reVal.getClass());//String


//在演示一个返回的案例
Method m1 = bossCls.getDeclaredMethod("m1");
Object reVal2 = m1.invoke(o);
System.out.println("reVal2的运行类型=" + reVal2.getClass());//Monster


}
}

class Monster {}
class Boss {//类
public int age;
private static String name;

public Boss() {//构造器
}

public Monster m1() {
return new Monster();
}

private static String say(int n, String s, char c) {//静态方法
return n + " " + s + " " + c;
}

public void hi(String s) {//普通public方法
System.out.println("hi " + s);
}
}
-

公告
本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
目录
  1. 1.String类的常用方法
  2. 2.StringBufferd类的常用方法
  3. 3.Math类的常用方法
  4. 4.Arrays类的常用方法
  5. 5.System类的常用方法
  6. 6.BigDecimal类和BigInteger类使用(大数处理)
  7. 7.时间类、日期类的常用方法(Date、Calendar,第三代日期类)
  8. 8.实现List接口实现类的常用方法
  9. 9.Map接口的常用方法以及遍历方式
  10. 9.Collections工具类
  11. 10.创建文件的三种方式以及文件的相关操作(相关方法)
  12. 11.FileInputStream 字节输入流
  13. 12.FileOutputStream 字节输出流
  14. 13.文件拷贝(FileInputStream和FileOutputStream)
  15. 14.FileReader 字符输入流
  16. 15.FileWriter 字符输出流
  17. 16.BufferedReader 字符处理流(包装流)
  18. 17.BufferedWriter 字符处理流(包装流)
  19. 18.文件拷贝(BufferedInputStream和BufferedOutputStream)
  20. 19. ObjectOutputStream 序列化操作(对象字节输出流 )保存数据类型和数据
  21. 20.ObjectInputStream 反序列化操作(对象字节输入流 )恢复数据类型和数据
  22. 21.InputStreamReader (转换流 字节流转化成字符流)
  23. 22.OutputStreamWriter(转换流 字节流转成成字符流)
  24. 23.PrintStream(字节打印流)只有输出流,没有输入流
  25. 24.PrintWriter (字符打印流)只有输出流,没有输入流
  26. 25.Properties读取修改配置文件
  27. 26.InetAddress类的常用方法
  28. 27.网络编程相关题目的源码
  29. 28.Class类对象的常用方法举例
  30. 29.获取Class对象的六种方式
  31. 30.通过Class对象获取类的结构信息的相关方法
  32. 31.反射暴破创建实例/操作属性/操作方法
  • 最近更新
    任务进度
    任务进度
    Blog
    Blog
    个人简历
    个人简历
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    目录
    1. 1.String类的常用方法
    2. 2.StringBufferd类的常用方法
    3. 3.Math类的常用方法
    4. 4.Arrays类的常用方法
    5. 5.System类的常用方法
    6. 6.BigDecimal类和BigInteger类使用(大数处理)
    7. 7.时间类、日期类的常用方法(Date、Calendar,第三代日期类)
    8. 8.实现List接口实现类的常用方法
    9. 9.Map接口的常用方法以及遍历方式
    10. 9.Collections工具类
    11. 10.创建文件的三种方式以及文件的相关操作(相关方法)
    12. 11.FileInputStream 字节输入流
    13. 12.FileOutputStream 字节输出流
    14. 13.文件拷贝(FileInputStream和FileOutputStream)
    15. 14.FileReader 字符输入流
    16. 15.FileWriter 字符输出流
    17. 16.BufferedReader 字符处理流(包装流)
    18. 17.BufferedWriter 字符处理流(包装流)
    19. 18.文件拷贝(BufferedInputStream和BufferedOutputStream)
    20. 19. ObjectOutputStream 序列化操作(对象字节输出流 )保存数据类型和数据
    21. 20.ObjectInputStream 反序列化操作(对象字节输入流 )恢复数据类型和数据
    22. 21.InputStreamReader (转换流 字节流转化成字符流)
    23. 22.OutputStreamWriter(转换流 字节流转成成字符流)
    24. 23.PrintStream(字节打印流)只有输出流,没有输入流
    25. 24.PrintWriter (字符打印流)只有输出流,没有输入流
    26. 25.Properties读取修改配置文件
    27. 26.InetAddress类的常用方法
    28. 27.网络编程相关题目的源码
    29. 28.Class类对象的常用方法举例
    30. 29.获取Class对象的六种方式
    31. 30.通过Class对象获取类的结构信息的相关方法
    32. 31.反射暴破创建实例/操作属性/操作方法
  • 最近更新

    简历模板

    黑马程序员新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题) https://www.bilibili.com/video/BV1yT411H7YK/?share_source=copy_web&vd_source=aee5e475191b69e6c781059ab6662584

    + })(window)

    简历模板

    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    FreeMarker模板引擎

    一.FreeMarker介绍

    ​ FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

    + })(window)

    FreeMarker模板引擎

    一.FreeMarker介绍

    ​ FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

    ​ 模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

    image-20230816145012534

    技术选型对比

    @@ -360,10 +360,10 @@

    ③ :运行结果

    image-20230816174550953

    -
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    面试题集锦

    Java工程师面试 宝典学习说明_互联网校招面试真题面经汇总_牛客网 (nowcoder.com)

    + })(window)

    面试题集锦

    Java工程师面试 宝典学习说明_互联网校招面试真题面经汇总_牛客网 (nowcoder.com)

    Java | JavaGuide(Java面试 + 学习指南)

    一.Java基础面试题

    1.谈谈你对面向对象的理解

    ​ 对比面向过程,是两种不同处理问题的角度,面向过程更注重事情的每一步骤及顺序,面向对象更注重事情有哪些参与者(对象),以及各自需要做什么。面向过程比较直接高效,面向对象易于复用、扩展和维护。

    面向对象的三大基本特征:封装、继承、多态(父类应用指向子类对象)

    @@ -630,10 +630,10 @@ -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    目录
    1. 一.Java基础面试题
      1. 1.谈谈你对面向对象的理解
      2. 2.JDK、JRE、JVM之间的区别
      3. 3.==和equals⽅法的区别
      4. 4.String,StringBuffer,StringBuilder的区别
      5. 5.重载和重写的区别
      6. 6.接口和抽象类的区别
      7. 7.List和set的区别
      8. 8.hashCode()与equals()之间的关系
      9. 9.ArrayList和LinkedList的区别
      10. 10.HashMap和HashTable的区别?底层实现是什么?
      11. 11.ConcurrentHashMap
      12. 12.如何实现一个IOC容器
      13. 13.什么是字节码?采用字节码的好处是什么?
      14. 14.Java类加载器有哪些
      15. 15.双亲委派模型
      16. 16.Java中的异常体系
      17. 17.GC如何判断对象可以被回收
      18. 18.线程的生命周期,线程有哪些状态
      19. 19.sleep(),wait(),join(),yield()的区别
      20. 20.说说你对线程安全的理解
      21. 21.说说你对守护线程的理解
      22. 22.ThreadLocal的原理和使用场景
      23. 23.ThreadLocal内存泄漏原因,怎么避免
      24. 24.产生内存泄漏的原因有哪些
      25. 25.并发、并行、串行的区别
      26. 26.并发的三大特性
      27. 27.为什么用线程池?解释线程池参数?
      28. 28.简述线程池的处理流程
      29. 29.线程池中阻塞队列的作用?为什么是先添加队列而不是先创建最大线程?
      30. 30.线程池中线程复用原理
      31. 31.Spring是什么
      32. 32.谈谈你对AOP的理解
      33. 33.谈谈你对IOC的理解
      34. 34.BeanFactory和ApplicationContext有什么区别?
      35. 35.深拷贝和浅拷贝
      36. 36.TCP和UDP有什么区别?TCP为什么是三次握手,而不是两次?
      37. 37.JVM中有哪些垃圾回收算法?
      38. 38.集合相关的面试题
    2. 二.框架篇相关面试题
      1. 1.Spring Bean的生命周期
      2. 2.Spring框架中的单例Bean是线程安全的吗?
      3. 3.Spring Bean作用域
      4. 4.Spring框架中用到了哪些设计模式?
      5. 5.spring中事务实现方和原理式以及隔离级别?
      6. 6.Spring事务传播机制
      7. 7.Spring事务什么时候会失效?
      8. 8.什么是bean的自动装配,有哪些方式?
      9. 9.Spring Boot、SpringMVC和Spring有什么区别?
      10. 10.SpringMVC的工作流程
      11. 11.SpringMvc中的九大组件
      12. 12.SpringBoot自动配置原理(简答的阐述见下面15条)
      13. 13.MyBatis的优缺点
      14. 14.MyBatis中#{}和${}的区别是什么?
      15. 15.Spring Boot自动装配的过程
    3. 二.Mysql相关面试题
      1. 1.存储引擎InnoDB 与MyISAM 的区别
      2. 2.索引的基本原理
      3. 3.索引失效的场景
      4. 4.事务的隔离级别有哪些?MySQL 的默认隔离级别是什么?
      5. 5.事务的基本特性
      6. 6.怎么处理慢查询
      7. 7.ACID靠什么保证的
    4. 三.Redis相关面试题
      1. 1.Redis过期键的删除策略
      2. 2.Redis的线程模型,单线程为什么快
      3. 3.缓存雪崩、缓存穿透、缓存击穿
      4. 4.Redis的数据结构
    最近更新
    任务进度
    任务进度
    Blog
    Blog
    个人简历
    个人简历
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    目录
    1. 一.Java基础面试题
      1. 1.谈谈你对面向对象的理解
      2. 2.JDK、JRE、JVM之间的区别
      3. 3.==和equals⽅法的区别
      4. 4.String,StringBuffer,StringBuilder的区别
      5. 5.重载和重写的区别
      6. 6.接口和抽象类的区别
      7. 7.List和set的区别
      8. 8.hashCode()与equals()之间的关系
      9. 9.ArrayList和LinkedList的区别
      10. 10.HashMap和HashTable的区别?底层实现是什么?
      11. 11.ConcurrentHashMap
      12. 12.如何实现一个IOC容器
      13. 13.什么是字节码?采用字节码的好处是什么?
      14. 14.Java类加载器有哪些
      15. 15.双亲委派模型
      16. 16.Java中的异常体系
      17. 17.GC如何判断对象可以被回收
      18. 18.线程的生命周期,线程有哪些状态
      19. 19.sleep(),wait(),join(),yield()的区别
      20. 20.说说你对线程安全的理解
      21. 21.说说你对守护线程的理解
      22. 22.ThreadLocal的原理和使用场景
      23. 23.ThreadLocal内存泄漏原因,怎么避免
      24. 24.产生内存泄漏的原因有哪些
      25. 25.并发、并行、串行的区别
      26. 26.并发的三大特性
      27. 27.为什么用线程池?解释线程池参数?
      28. 28.简述线程池的处理流程
      29. 29.线程池中阻塞队列的作用?为什么是先添加队列而不是先创建最大线程?
      30. 30.线程池中线程复用原理
      31. 31.Spring是什么
      32. 32.谈谈你对AOP的理解
      33. 33.谈谈你对IOC的理解
      34. 34.BeanFactory和ApplicationContext有什么区别?
      35. 35.深拷贝和浅拷贝
      36. 36.TCP和UDP有什么区别?TCP为什么是三次握手,而不是两次?
      37. 37.JVM中有哪些垃圾回收算法?
      38. 38.集合相关的面试题
    2. 二.框架篇相关面试题
      1. 1.Spring Bean的生命周期
      2. 2.Spring框架中的单例Bean是线程安全的吗?
      3. 3.Spring Bean作用域
      4. 4.Spring框架中用到了哪些设计模式?
      5. 5.spring中事务实现方和原理式以及隔离级别?
      6. 6.Spring事务传播机制
      7. 7.Spring事务什么时候会失效?
      8. 8.什么是bean的自动装配,有哪些方式?
      9. 9.Spring Boot、SpringMVC和Spring有什么区别?
      10. 10.SpringMVC的工作流程
      11. 11.SpringMvc中的九大组件
      12. 12.SpringBoot自动配置原理(简答的阐述见下面15条)
      13. 13.MyBatis的优缺点
      14. 14.MyBatis中#{}和${}的区别是什么?
      15. 15.Spring Boot自动装配的过程
    3. 二.Mysql相关面试题
      1. 1.存储引擎InnoDB 与MyISAM 的区别
      2. 2.索引的基本原理
      3. 3.索引失效的场景
      4. 4.事务的隔离级别有哪些?MySQL 的默认隔离级别是什么?
      5. 5.事务的基本特性
      6. 6.怎么处理慢查询
      7. 7.ACID靠什么保证的
    4. 三.Redis相关面试题
      1. 1.Redis过期键的删除策略
      2. 2.Redis的线程模型,单线程为什么快
      3. 3.缓存雪崩、缓存穿透、缓存击穿
      4. 4.Redis的数据结构
    最近更新

    使用Robot类编写自动化脚本

    一.概述

    ​ Java中Robot类位于java.awt.Robot,该类用于为测试自动化,自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件,Robot类的主要目的是便于Java平台实现自动测试

    + })(window)

    使用Robot类编写自动化脚本

    一.概述

    ​ Java中Robot类位于java.awt.Robot,该类用于为测试自动化,自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件,Robot类的主要目的是便于Java平台实现自动测试

    二.基本API

    @@ -218,10 +218,10 @@ -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!

    统一异常处理

    我们想让异常结果也显示为统一的返回结果对象,并且统一处理系统的异常信息,那么需要统一异常处理。

    + })(window)

    统一异常处理

    我们想让异常结果也显示为统一的返回结果对象,并且统一处理系统的异常信息,那么需要统一异常处理。

    image-20230506153955544

    1.全局异常处理

    异常返回的结果也为统一的返回结果的对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    package com.atguigu.common.exception;

    import com.atguigu.common.result.Result;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;

    /**
    * @author GongChangjiang
    * @version 1.0
    * @Date 2023/5/6
    * @Description 全局的异常处理器
    */
    @ControllerAdvice
    public class GlobalExceptionHandler {

    /**
    * 全局的异常处理
    */
    @ExceptionHandler(Exception.class) //标记什么异常使用该方法
    @ResponseBody //返回的是json数据
    public Result error(Exception e){
    e.printStackTrace();
    return Result.fail().message("全局异常处理器捕获到该异常");
    }


    /**
    * 特定的异常处理(先找特定的异常 再找全局的异常)
    */
    @ExceptionHandler(ArithmeticException.class) //标记什么异常使用该方法
    @ResponseBody //返回的是json数据
    public Result error(ArithmeticException e){
    e.printStackTrace();
    return Result.fail().message("数学运算异常");
    }

    /**
    * 自定义异常处理
    * GuiguException为自定义的异常
    */
    @ExceptionHandler(GuiguException.class) //标记什么异常使用该方法
    @ResponseBody //返回的是json数据
    public Result error(GuiguException e){
    e.printStackTrace();
    //获取抛出异常的时候填入的code和message的值并返回
    return Result.fail().code(e.getCode()).message(e.getMessage());
    }
    }
    @@ -179,10 +179,10 @@

    在需要抛出自定义异常的地方抛出异常

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /**
    * 查询所有的方法
    */
    @ApiOperation("查询所有角色的接口")
    @GetMapping("/findAll")
    public Result<List<SysRole>> findAll() {
    List<SysRole> sysRoles = sysRoleService.list();
    try {
    //这里我们使用除零模拟异常
    int i = 1/0;
    } catch (Exception e) {
    throw new GuiguException(2001, "抛出了自定义的异常");
    }
    return Result.ok(sysRoles);
    }

    全局异常处理器捕获异常并返回异常信息

    image-20230506154605339

    -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    SpringBoot中整合Swagger2

    1.Swagger2的介绍

    什么是swagger2

    + })(window)

    SpringBoot中整合Swagger2

    1.Swagger2的介绍

    什么是swagger2

    编写和维护接口文档是每个程序员的职责,根据Swagger2可以快速帮助我们编写最新的API接口文档,再也不用担心开会前仍忙于整理各种资料了,间接提升了团队开发的沟通效率。

    常用注解

    swagger通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息等等

    @@ -190,10 +190,10 @@

    2.4使用接口文档

    1
    2
    3
    //浏览器访问该网址
    //这里的端口号是要生成接口文档端口的端口号
    http://localhost:8080/swagger-ui.html

    image-20230412141010237

    -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    SSM常用配置

    1.pom.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.atguigu.ssm</groupId>
    <artifactId>ssm</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <!--管理版本信息,将版本信息提取出来,各个依赖的版本通过${spring.version}访问-->
    <properties>
    <spring.version>5.3.1</spring.version>
    </properties>

    <dependencies>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <!--springmvc-->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <!-- Mybatis核心 -->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
    </dependency>

    <!--mybatis和spring的整合包-->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.6</version>
    </dependency>

    <!-- 连接池 -->
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.9</version>
    </dependency>

    <!-- junit测试 -->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
    </dependency>

    <!-- MySQL驱动 -->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.3</version>
    </dependency>

    <!-- log4j日志 -->
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    </dependency>

    <dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.2.0</version>
    </dependency>

    <!-- 日志 -->
    <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
    </dependency>

    <!-- ServletAPI -->
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
    </dependency>

    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.1</version>
    </dependency>

    <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
    </dependency>

    <!-- Spring5和Thymeleaf整合包 -->
    <dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.12.RELEASE</version>
    </dependency>

    </dependencies>

    </project>
    + })(window)

    SSM常用配置

    1.pom.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.atguigu.ssm</groupId>
    <artifactId>ssm</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <!--管理版本信息,将版本信息提取出来,各个依赖的版本通过${spring.version}访问-->
    <properties>
    <spring.version>5.3.1</spring.version>
    </properties>

    <dependencies>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <!--springmvc-->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${spring.version}</version>
    </dependency>

    <!-- Mybatis核心 -->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
    </dependency>

    <!--mybatis和spring的整合包-->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.6</version>
    </dependency>

    <!-- 连接池 -->
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.9</version>
    </dependency>

    <!-- junit测试 -->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
    </dependency>

    <!-- MySQL驱动 -->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.3</version>
    </dependency>

    <!-- log4j日志 -->
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    </dependency>

    <dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.2.0</version>
    </dependency>

    <!-- 日志 -->
    <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
    </dependency>

    <!-- ServletAPI -->
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
    </dependency>

    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.1</version>
    </dependency>

    <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
    </dependency>

    <!-- Spring5和Thymeleaf整合包 -->
    <dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.12.RELEASE</version>
    </dependency>

    </dependencies>

    </project>

    2.spring.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--扫描组件(除控制层)-->
    <context:component-scan base-package="com.atguigu.ssm">
    <!--通过控制层注解的全类名,排除控制层的扫描-->
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--引入数据库的配置文件-->
    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

    <!--配置数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="${jdbc.driver}"></property>
    <property name="url" value="${jdbc.url}"></property>
    <property name="username" value="${jdbc.username}"></property>
    <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--开启事务的注解驱动-->
    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

    <!--配置SqlSessionFactoryBean,可以直接在IOC容器中获取SqlSessionFactory-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
    <!--获取mybatis的核心配置文件-->
    <property name="configLocation" value="classpath:mybatis-config.xml"></property>
    <!--设置数据源,取代配置文件中的数据源的环境配置-->
    <property name="dataSource" ref="dataSource"></property>
    <!--设置类型别名所对应的包-->
    <property name="typeAliasesPackage" value="com.atguigu.ssm.pojo"></property>
    <!--设置mapper映射文件的路径,在这里我们不需要设置,只有在mapper接口和映射文件的路径不一致时设置-->
    <!-- <property name="mapperLocations" value="classpath:"></property>-->
    </bean>

    <!--
    配置mapper接口扫描,可以将指定包下的所有mapper接口,
    通过SqlSession创建代理实现类对象,
    并将这些对象交给ioc容器管理
    -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.atguigu.ssm.mapper"></property>
    </bean>

    </beans>
    @@ -182,10 +182,10 @@

    6.log4j.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <param name="Encoding" value="UTF-8" />
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
    %m (%F:%L) \n" />
    </layout>
    </appender>
    <logger name="java.sql">
    <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
    <level value="info" />
    </logger>
    <root>
    <level value="debug" />
    <appender-ref ref="STDOUT" />
    </root>
    </log4j:configuration>

    7.log4j.properties

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    log4j.rootLogger=debug, stdout, R

    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

    # Pattern to output the caller's file name and line number.
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

    log4j.appender.R=org.apache.log4j.RollingFileAppender
    log4j.appender.R.File=example.log

    log4j.appender.R.MaxFileSize=100KB
    # Keep one backup file
    log4j.appender.R.MaxBackupIndex=5

    log4j.appender.R.layout=org.apache.log4j.PatternLayout
    log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
    -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    FinalShell激活教程

    + })(window)

    FinalShell激活教程

    @@ -186,7 +186,7 @@

    Blog

    + })(window)

    Blog

    @@ -183,10 +183,10 @@
    -

    接口测试工具

    一 Postman的使用

    官网网址: https://www.postman.com/

    + })(window)

    接口测试工具

    一 Postman的使用

    官网网址: https://www.postman.com/

    Postman的首页

    image-20230813162510205

    1 使用教程

    1.1 发送Post请求

    以一个普通的登录操作来演示Postman的使用教程

    @@ -196,10 +196,10 @@

    image-20230813172605624

    下载成功之后打开的效果

    image-20230813172720116

    -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!

    对象存储服务MinIO

    一.MinIo基本介绍

    1.简介

    ​ MinIO基于Apache License v2.0开源协议的对象存储服务,可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作在Windows,Linux, OS X和FreeBSD上。配置简单,基本是复制可执行程序,单行命令可以运行起来。MinIO兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

    + })(window)

    对象存储服务MinIO

    一.MinIo基本介绍

    1.简介

    ​ MinIO基于Apache License v2.0开源协议的对象存储服务,可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作在Windows,Linux, OS X和FreeBSD上。配置简单,基本是复制可执行程序,单行命令可以运行起来。MinIO兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

    S3 ( Simple Storage Service简单存储服务)

    基本概念

      @@ -318,10 +318,10 @@
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      package com.heima.minio;


      /**
      * @author Jason Gong
      * @version 1.0
      * @website https://jasonsgong.gitee.io
      * @Date 2023/8/18
      * @Description
      */
      @SpringBootTest(classes = MinIOApplication.class)
      @RunWith(SpringRunner.class)
      @Slf4j
      public class MinIOTest {

      @Autowired
      private FileStorageService fileStorageService;

      @Test
      public void testMinIOStarter(){
      //读取一个文件
      try {
      FileInputStream inputStream = new FileInputStream("C:\\Gong\\data\\test.html");
      String s = fileStorageService.uploadHtmlFile("", "test,html", inputStream);
      log.info(s);
      } catch (FileNotFoundException e) {
      e.printStackTrace();
      }
      }
      }

      image-20230818165138917

      -
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    技术书籍-Linux指令大全

    Linux命令行与shell脚本编程大全 第三版 ,布鲁姆 ,P606

    PDF

    + })(window)

    技术书籍-Linux指令大全

    Linux命令行与shell脚本编程大全 第三版 ,布鲁姆 ,P606

    PDF

    @@ -188,10 +188,10 @@ -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    SpringBoot整合EasyExcel

    1.EasyExcel介绍

    ​ Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让使用者更加简单方便

    + })(window)

    SpringBoot整合EasyExcel

    1.EasyExcel介绍

    ​ Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让使用者更加简单方便

    官网地址:https://easyexcel.opensource.alibaba.com/

    2.入门

    2.1 引入依赖

    1
    2
    3
    4
    5
    6
    <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.1.1</version>
    </dependency>
    @@ -197,10 +197,10 @@ -
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    MySql进阶教程

    全部的PDF笔记: https://jasonsgong.gitee.io/posts/50465.html

    + })(window)

    MySql进阶教程

    全部的PDF笔记: https://jasonsgong.gitee.io/posts/50465.html

    原视频地址: 黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括

    一.Mysql入门

    1.SQL

    全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 。

    1.1 SQL通用语法

    image-20230926220120609

    @@ -666,10 +666,10 @@

    2.将传入的200分制的分数,进行换算,换成百分制,然后返回

    1
    2
    3
    4
    5
    6
    7
    8
    9
    -- 2.将传入的200分制的分数,进行换算,换成百分制,然后返回
    create procedure p5(inout score double)
    begin
    set score := score * 0.5;
    end;
    -- 调用(score既是输入又是输出)
    set @score = 78;
    call p5(@score);
    select @score;
    -

    4.2.6 case

    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    目录
    1. 一.Mysql入门
      1. 1.SQL
        1. 1.1 SQL通用语法
        2. 1.2 SQL分类
        3. 1.3 DDL-数据定义语言
        4. 1.4 DML-数据操作语言
        5. 1.5 DQL-数据查询语言
          1. 1.5.1 基础查询
          2. 1.5.2 条件查询
          3. 1.5.3 聚合函数
          4. 1.5.4 分组查询
          5. 1.5.5 排序查询
          6. 1.5.6 分页查询
          7. 1.5.7 DQL语句案例
          8. 1.5.8 执行顺序
        6. 1.6 DCL-数据控制语言
          1. 1.6.1 管理用户
          2. 1.6.2 权限控制
      2. 2.函数
        1. 2.1 字符串函数
        2. 2.2 数值函数
        3. 2.3 日期函数
        4. 2.4 流程函数
      3. 3.约束
        1. 3.1 概述
        2. 3.2 约束演示
        3. 3.3 外键约束
          1. 3.3.1 介绍
          2. 3.3.2 语法
          3. 3.3.3 删除/更新行为
      4. 4.多表查询
        1. 4.1 多表关系
        2. 4.2 多表查询概述
          1. 4.2.1 数据准备
          2. 4.2.2 概述
          3. 4.2.3 分类
        3. 4.3 内连接
        4. 4.4 外连接
        5. 4.5 自连接
        6. 4.6 联合查询
        7. 4.7 子查询
        8. 4.8 多表查询案例
      5. 5.事务
        1. 5.1 事务介绍
        2. 5.2 事务操作
        3. 5.3 事务四大特性
        4. 5.4 并发事务问题
        5. 5.5 事务隔离级别
    2. 二.MySql进阶
      1. 1.存储引擎
        1. 1.1 MySql的体系结构
        2. 1.2 存储引擎简介
        3. 1.3 存储引擎特点
        4. 1.4 存储引擎的选择
      2. 2.索引
        1. 2.1 索引概述
          1. 2.1.1 介绍
          2. 2.1.2 演示
          3. 2.1.3 优缺点
        2. 2.2 索引结构
          1. 2.2.1 索引的数据结构有哪些
          2. 2.2.2 B+树的索引数据结构
          3. 2.2.3 hash的索引数据结构
          4. 2.3.4 思考题
        3. 2.3 索引分类
        4. 2.4 索引语法
        5. 2.5 SQL性能分析
          1. 2.5.1 SQL执行频率
          2. 2.5.2 慢查询日志
          3. 2.5.3 profile详情
          4. 2.5.4 explain执行计划
        6. 2.6 索引使用
          1. 2.6.1 验证索引效率
          2. 2.6.2 最左前缀法则
          3. 2.6.3 索引失效的情况
          4. 2.6.4 SQL提示
          5. 2.6.5 覆盖索引
          6. 2.6.6 前缀索引
          7. 2.6.7 单例索引与联合索引的选择问题
        7. 2.7 索引设计原则
      3. 3.SQL优化
        1. 3.1 插入数据的优化
        2. 3.2 主键优化
        3. 3.3 order by优化
        4. 3.4 group by优化
        5. 3.5 limit优化
        6. 3.6 count优化
        7. 3.7 update优化
        8. 3.8 总结
      4. 4.视图/存储过程/触发器
        1. 4.1 视图
          1. 4.1.1 视图介绍
          2. 4.1.2 语法
          3. 4.1.3 检查选项
          4. 4.1.4 视图更新
          5. 4.1.5 视图作用
          6. 4.1.6 视图案例
        2. 4.2 存储过程
          1. 4.2.1 介绍
          2. 4.2.2 基本语法
          3. 4.2.3 变量
            1. 4.2.3.1 系统变量
            2. 4.2.3.2 用户定义变量
            3. 4.2.3.3 局部变量
          4. 4.2.4 if判断
          5. 4.2.5 参数
          6. 4.2.6 case
    最近更新
    任务进度
    任务进度
    Blog
    Blog
    个人简历
    个人简历
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    目录
    1. 一.Mysql入门
      1. 1.SQL
        1. 1.1 SQL通用语法
        2. 1.2 SQL分类
        3. 1.3 DDL-数据定义语言
        4. 1.4 DML-数据操作语言
        5. 1.5 DQL-数据查询语言
          1. 1.5.1 基础查询
          2. 1.5.2 条件查询
          3. 1.5.3 聚合函数
          4. 1.5.4 分组查询
          5. 1.5.5 排序查询
          6. 1.5.6 分页查询
          7. 1.5.7 DQL语句案例
          8. 1.5.8 执行顺序
        6. 1.6 DCL-数据控制语言
          1. 1.6.1 管理用户
          2. 1.6.2 权限控制
      2. 2.函数
        1. 2.1 字符串函数
        2. 2.2 数值函数
        3. 2.3 日期函数
        4. 2.4 流程函数
      3. 3.约束
        1. 3.1 概述
        2. 3.2 约束演示
        3. 3.3 外键约束
          1. 3.3.1 介绍
          2. 3.3.2 语法
          3. 3.3.3 删除/更新行为
      4. 4.多表查询
        1. 4.1 多表关系
        2. 4.2 多表查询概述
          1. 4.2.1 数据准备
          2. 4.2.2 概述
          3. 4.2.3 分类
        3. 4.3 内连接
        4. 4.4 外连接
        5. 4.5 自连接
        6. 4.6 联合查询
        7. 4.7 子查询
        8. 4.8 多表查询案例
      5. 5.事务
        1. 5.1 事务介绍
        2. 5.2 事务操作
        3. 5.3 事务四大特性
        4. 5.4 并发事务问题
        5. 5.5 事务隔离级别
    2. 二.MySql进阶
      1. 1.存储引擎
        1. 1.1 MySql的体系结构
        2. 1.2 存储引擎简介
        3. 1.3 存储引擎特点
        4. 1.4 存储引擎的选择
      2. 2.索引
        1. 2.1 索引概述
          1. 2.1.1 介绍
          2. 2.1.2 演示
          3. 2.1.3 优缺点
        2. 2.2 索引结构
          1. 2.2.1 索引的数据结构有哪些
          2. 2.2.2 B+树的索引数据结构
          3. 2.2.3 hash的索引数据结构
          4. 2.3.4 思考题
        3. 2.3 索引分类
        4. 2.4 索引语法
        5. 2.5 SQL性能分析
          1. 2.5.1 SQL执行频率
          2. 2.5.2 慢查询日志
          3. 2.5.3 profile详情
          4. 2.5.4 explain执行计划
        6. 2.6 索引使用
          1. 2.6.1 验证索引效率
          2. 2.6.2 最左前缀法则
          3. 2.6.3 索引失效的情况
          4. 2.6.4 SQL提示
          5. 2.6.5 覆盖索引
          6. 2.6.6 前缀索引
          7. 2.6.7 单例索引与联合索引的选择问题
        7. 2.7 索引设计原则
      3. 3.SQL优化
        1. 3.1 插入数据的优化
        2. 3.2 主键优化
        3. 3.3 order by优化
        4. 3.4 group by优化
        5. 3.5 limit优化
        6. 3.6 count优化
        7. 3.7 update优化
        8. 3.8 总结
      4. 4.视图/存储过程/触发器
        1. 4.1 视图
          1. 4.1.1 视图介绍
          2. 4.1.2 语法
          3. 4.1.3 检查选项
          4. 4.1.4 视图更新
          5. 4.1.5 视图作用
          6. 4.1.6 视图案例
        2. 4.2 存储过程
          1. 4.2.1 介绍
          2. 4.2.2 基本语法
          3. 4.2.3 变量
            1. 4.2.3.1 系统变量
            2. 4.2.3.2 用户定义变量
            3. 4.2.3.3 局部变量
          4. 4.2.4 if判断
          5. 4.2.5 参数
          6. 4.2.6 case
    最近更新

    数据结构与算法

    代码仓库的地址:https://gitee.com/JasonsGong/DataStructures

    + })(window)

    数据结构与算法

    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    目录
    1. 一.经典算法问题
    2. 二.数据结构与算法的概述
      1. 2.1 数据结构与算法的关系
      2. 2.2解决实际的问题
      3. 2.3 数据结构
    3. 三.稀疏数组和队列
      1. 3.1稀疏数组
        1. 3.1.1 基本的介绍
        2. 3.1.2使用的场景
        3. 3.1.3图解
        4. 3.1.5实现的思路
        5. 3.1.5代码实现
      2. 3.2队列
        1. 3.2.1基本的介绍
        2. 3.2.2代码实现
        3. 3.2.3 数组模拟环形队列
    4. 四.链表
      1. 4.1 链表(Linked List)介绍
      2. 4.2单链表的应用实例(CRUD)
        1. 4.2.1向单链表中添加数据
        2. 4.2.2修改单链表中节点的方法
        3. 4.2.3删除单链表中节点的方法
        4. 4.2.4完整代码
        5. 4.2.5 单链表的面试题(新浪,百度,腾讯)
          1. 1.求单链表中有效节点的个数
          2. 2.查找单链表中的倒数第K个节点(新浪面试题)
          3. 3.单链表的反转(腾讯面试题)
          4. 4.从尾到头打印单链表(百度面试题)
          5. 5.合并两个有序的单链表,合并之后的链表依然有序
          6. 全部代码
      3. 4.3 双向链表
      4. 4.4 单向环形链表的应用场景(Josephu问题)
    5. 五.栈
      1. 1.介绍
      2. 2.应用场景
      3. 3.图解
      4. 4.使用数组模拟栈
      5. 5.栈实现综合计算器
      6. 6.逆波兰计算器的设计与实现
    6. 六.递归
      1. 1.简单介绍
      2. 2.入门案例
      3. 3.递归解决的问题
      4. 4.递归遵循的规则
      5. 5.递归的实际应用
        1. 5.1递归解决迷宫问题
        2. 5.2 递归解决八皇后问题
    7. 七.排序算法
      1. 1.介绍
      2. 2.时间复杂度
      3. 3.空间复杂度
      4. 4.冒泡排序
        1. 4.1 基本介绍
        2. 4.2 图解
        3. 4.3 代码实现
      5. 5.选择排序
        1. 5.1 基本介绍
        2. 5.2图解
        3. 5.3代码实现
      6. 6.插入排序
        1. 6.1 基本介绍
        2. 6.2 图解
        3. 6.3 代码实现
      7. 7.希尔排序
        1. 7.1基本介绍
        2. 7.2.图解
        3. 7.3 代码实现
      8. 8.快速排序
        1. 8.1 基本介绍
        2. 8.2 图解
        3. 8.3 代码实现
      9. 9. 归并排序
        1. 9.1基本介绍
        2. 9.2 图解
        3. 9.3代码实现
      10. 10.基数排序
        1. 10.1 基本介绍
        2. 10.2 图解
        3. 10.3 代码实现
      11. 11.常用排序算法总结和对比
    8. 八.查找算法
      1. 1.简单介绍
      2. 2.线性查找算法
        1. 2.1代码实现
      3. 3.二分查找算法
        1. 3.1 图解
        2. 3.2 代码实现
      4. 4.插值查找算法
        1. 4.1 图解
        2. 4.2 代码实现
        3. 4.3 注意事项
      5. 5.斐波那契(黄金分割法)查找算法
        1. 5.1 基本介绍
        2. 5.2 原理介绍
    9. PDF笔记
    最近更新
    任务进度
    任务进度
    Blog
    Blog
    个人简历
    个人简历
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    目录
    1. 一.经典算法问题
    2. 二.数据结构与算法的概述
      1. 2.1 数据结构与算法的关系
      2. 2.2解决实际的问题
      3. 2.3 数据结构
    3. 三.稀疏数组和队列
      1. 3.1稀疏数组
        1. 3.1.1 基本的介绍
        2. 3.1.2使用的场景
        3. 3.1.3图解
        4. 3.1.5实现的思路
        5. 3.1.5代码实现
      2. 3.2队列
        1. 3.2.1基本的介绍
        2. 3.2.2代码实现
        3. 3.2.3 数组模拟环形队列
    4. 四.链表
      1. 4.1 链表(Linked List)介绍
      2. 4.2单链表的应用实例(CRUD)
        1. 4.2.1向单链表中添加数据
        2. 4.2.2修改单链表中节点的方法
        3. 4.2.3删除单链表中节点的方法
        4. 4.2.4完整代码
        5. 4.2.5 单链表的面试题(新浪,百度,腾讯)
          1. 1.求单链表中有效节点的个数
          2. 2.查找单链表中的倒数第K个节点(新浪面试题)
          3. 3.单链表的反转(腾讯面试题)
          4. 4.从尾到头打印单链表(百度面试题)
          5. 5.合并两个有序的单链表,合并之后的链表依然有序
          6. 全部代码
      3. 4.3 双向链表
      4. 4.4 单向环形链表的应用场景(Josephu问题)
    5. 五.栈
      1. 1.介绍
      2. 2.应用场景
      3. 3.图解
      4. 4.使用数组模拟栈
      5. 5.栈实现综合计算器
      6. 6.逆波兰计算器的设计与实现
    6. 六.递归
      1. 1.简单介绍
      2. 2.入门案例
      3. 3.递归解决的问题
      4. 4.递归遵循的规则
      5. 5.递归的实际应用
        1. 5.1递归解决迷宫问题
        2. 5.2 递归解决八皇后问题
    7. 七.排序算法
      1. 1.介绍
      2. 2.时间复杂度
      3. 3.空间复杂度
      4. 4.冒泡排序
        1. 4.1 基本介绍
        2. 4.2 图解
        3. 4.3 代码实现
      5. 5.选择排序
        1. 5.1 基本介绍
        2. 5.2图解
        3. 5.3代码实现
      6. 6.插入排序
        1. 6.1 基本介绍
        2. 6.2 图解
        3. 6.3 代码实现
      7. 7.希尔排序
        1. 7.1基本介绍
        2. 7.2.图解
        3. 7.3 代码实现
      8. 8.快速排序
        1. 8.1 基本介绍
        2. 8.2 图解
        3. 8.3 代码实现
      9. 9. 归并排序
        1. 9.1基本介绍
        2. 9.2 图解
        3. 9.3代码实现
      10. 10.基数排序
        1. 10.1 基本介绍
        2. 10.2 图解
        3. 10.3 代码实现
      11. 11.常用排序算法总结和对比
    8. 八.查找算法
      1. 1.简单介绍
      2. 2.线性查找算法
        1. 2.1代码实现
      3. 3.二分查找算法
        1. 3.1 图解
        2. 3.2 代码实现
      4. 4.插值查找算法
        1. 4.1 图解
        2. 4.2 代码实现
        3. 4.3 注意事项
      5. 5.斐波那契(黄金分割法)查找算法
        1. 5.1 基本介绍
        2. 5.2 原理介绍
    9. PDF笔记
    最近更新

    前端基础知识

    一.VSCode的使用

    常用插件

    image-20230521233651126

    + })(window)

    前端基础知识

    一.VSCode的使用

    常用插件

    image-20230521233651126

    二. ES6

    菜鸟ES6教程教程

    1.简介

    ​ ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版。ES6 主要是为了解决 ES5 的先天不足,比如 JavaScript 里并没有类的概念,但是目前浏览器的 JavaScript 是 ES5 版本,大多数高版本的浏览器也支持 ES6,不过只实现了 ES6 的部分特性和功能。

    2.基础语法

    img @@ -319,10 +319,10 @@
    1
    2
    3
    4
    5
    6
    # 启动项目
    npm start
    #或者
    npm run dev
    # 将项目打包
    npm run build

    4.Eelment-UI

    官方文档:https://element.eleme.cn/#/zh-CN/component/quickstart

    -
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    微信登录

    1、OAuth2

    微信登录使用了OAuth2解决方案

    + })(window)

    微信登录

    1、OAuth2

    微信登录使用了OAuth2解决方案

    1.1 OAuth2解决什么问题

    1.1.1 开放系统间授权

    照片拥有者想要在云冲印服务上打印照片,云冲印服务需要访问云存储服务上的资源

    IMG_256

    1.1.2图例

    资源拥有者:照片拥有者

    @@ -312,10 +312,10 @@ -
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    项目实战-谷粒商城

    一.项目简介

    1.项目背景

    电商模式 谷粒商城使用的B2C模式,销售自营的商品给客户

    + })(window)

    项目实战-谷粒商城

    一.项目简介

    1.项目背景

    电商模式 谷粒商城使用的B2C模式,销售自营的商品给客户

    市面上5种常见的电商模式B2B、B2C、C2B、C2C、O2O

    1、B2B模式:
    business to business,是指商家与商家建立的商业关系。如阿里巴巴。

    2、B2C模式:
    business to consumer,商对客模式。即通常说的商业零售,供应商直接把商品卖给用户。如:苏宁易购、京东、天猫、小米商城。

    @@ -1205,10 +1205,10 @@ Feign整合了Ribbon(负载均衡)和Hystrix(服务熔断),可以让
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    package com.atguigu.gulimall.search.vo;

    import com.atguigu.common.to.es.SkuEsModel;
    import lombok.Data;

    import java.util.ArrayList;
    import java.util.List;

    /**
    * @author Jason Gong
    * @version 1.0
    * @website https://jasonsgong.gitee.io
    * @Date 2023/7/17
    * @Description 根据检索条件返回给页面的商品信息
    */
    @Data
    public class SearchResult {


    /**
    * 查询到的所有商品信息
    */
    private List<SkuEsModel> product;


    /**
    * 当前页码
    */
    private Integer pageNum;

    /**
    * 总记录数
    */
    private Long total;

    /**
    * 总页码
    */
    private Integer totalPages;

    private List<Integer> pageNavs;

    /**
    * 当前查询到的结果,所有涉及到的品牌
    */
    private List<BrandVo> brands;

    /**
    * 当前查询到的结果,所有涉及到的所有属性
    */
    private List<AttrVo> attrs;

    /**
    * 当前查询到的结果,所有涉及到的所有分类
    */
    private List<CatalogVo> catalogs;

    private List<NavVo> navs;

    @Data
    public static class NavVo {
    private String navName;
    private String navValue;
    private String link;
    }


    @Data
    public static class BrandVo {

    private Long brandId;

    private String brandName;

    private String brandImg;
    }


    @Data
    public static class AttrVo {

    private Long attrId;

    private String attrName;

    private List<String> attrValue;
    }


    @Data
    public static class CatalogVo {

    private Long catalogId;

    private String catalogName;
    }
    }

    未完待续(学习到177)……

    -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    目录
    1. 一.项目简介
      1. 1.项目背景
      2. 2.项目架构图
      3. 3.项目技术和特色
      4. 4.项目的前置要求
    2. 二.分布式基础概念
      1. 1.微服务
      2. 2.集群|分布式|节点
      3. 3.远程调用
      4. 4.负载均衡
      5. 5.服务注册|发现|注册中心
      6. 6.配置中心
      7. 7.服务熔断和服务降级
      8. 8.API网关
    3. 三.环境搭建
      1. 1.安装虚拟机
      2. 2.Docker安装与配置
      3. 3.Docker安装mysql
      4. 4.Docker安装redis
      5. 5.统一开发环境
      6. 6.配置Git
      7. 7.从Gitee上初始化一个项目
      8. 8.创建微服务模块
      9. 9.数据库设计
      10. 10.后台管理系统的搭建
        1. 10.1.后端的搭建
        2. 10.2 前端的搭建
      11. 11.快速开发-逆向工程的搭建
        1. 1.代码生成器快速使用案例
        2. 2.代码生成器的使用步骤
        3. 3.后台搭建完成之后的项目树
    4. 四.项目前置知识
      1. 1.SpringCloud Alibaba
        1. 1.1简介
        2. 1.2为什么使用SpringCloud Alibaba?
        3. 1.3 SpringCloud Alibaba最终的技术搭配方案
        4. 1.4 项目中使用SpringCloud Alibaba
        5. 1.5 SpringCloud Alibaba的组件
          1. 1.Nacos注册中心
          2. 2.Feign声明式远程调用
          3. 3.Nacos配置中心
          4. 4.Gateway网关
      2. 2.前端开发的基础知识
    5. 五.基础篇程序设计
      1. 1.商品服务
        1. 1.1 三级分类
          1. 1.1.1 查询-递归树形结构数据获取
          2. 1.1.2 配置路由和网关和路径重写
          3. 1.2.3 查询-页面中树形显示
          4. 1.2.4 删除-删除商品分类
          5. 1.2.5 添加-添加商品分类
          6. 1.2.6 修改-修改商品的分类
        2. 1.2 品牌管理
          1. 1.2.1 品牌的增删改查功能
          2. 1.2.2 JSR303-数据校验
          3. 1.2.3 统一异常处理
          4. 1.2.4 关联分类功能
        3. 1.3 平台属性
          1. 1.3.1 属性分组功能
          2. 1.3.2 规格参数功能
          3. 1.3.3 销售属性功能
        4. 1.4 商品维护
          1. 1.4.1 SPU管理
          2. 1.4.2 发布商品
          3. 1.4.3 商品管理
      2. 2.库存系统
        1. 2.1 仓库维护
        2. 2.2 库存工作单
        3. 2.3 商品库存
        4. 2.4 采购单维护
          1. 2.4.1 采购需求
          2. 2.4.2 采购单
      3. 3.基础篇总结
    6. 六.高级篇程序设计
      1. 1.ElasticSearch
      2. 2.商城业务
        1. 2.1 商品上架
        2. 2.2 首页
          1. 2.2.1整合thymeleaf
          2. 2.2.2 首页面三级分类显示
        3. 2.3 搭建域名访问环境
        4. 2.4 性能压测
          1. 2.4.1优化中间件对性能的影响
        5. 2.5 缓存使用
          1. 2.5.1 本地缓存与分布式缓存
          2. 2.5.2 整合redis
          3. 2.5.3 高并发下缓存失效问题
          4. 2.5.4 分布式锁-Redisson
          5. 2.5.5 分布式缓存一致性问题
          6. 2.5.6 缓存-SpringCache
        6. 2.6 检索服务
          1. 2.6.1 整合页面
          2. 2.6.2 配置域名访问
          3. 2.6.3 首页和搜索页相互跳转
          4. 2.6.4 商品的检索
    最近更新
    任务进度
    任务进度
    Blog
    Blog
    个人简历
    个人简历
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    目录
    1. 一.项目简介
      1. 1.项目背景
      2. 2.项目架构图
      3. 3.项目技术和特色
      4. 4.项目的前置要求
    2. 二.分布式基础概念
      1. 1.微服务
      2. 2.集群|分布式|节点
      3. 3.远程调用
      4. 4.负载均衡
      5. 5.服务注册|发现|注册中心
      6. 6.配置中心
      7. 7.服务熔断和服务降级
      8. 8.API网关
    3. 三.环境搭建
      1. 1.安装虚拟机
      2. 2.Docker安装与配置
      3. 3.Docker安装mysql
      4. 4.Docker安装redis
      5. 5.统一开发环境
      6. 6.配置Git
      7. 7.从Gitee上初始化一个项目
      8. 8.创建微服务模块
      9. 9.数据库设计
      10. 10.后台管理系统的搭建
        1. 10.1.后端的搭建
        2. 10.2 前端的搭建
      11. 11.快速开发-逆向工程的搭建
        1. 1.代码生成器快速使用案例
        2. 2.代码生成器的使用步骤
        3. 3.后台搭建完成之后的项目树
    4. 四.项目前置知识
      1. 1.SpringCloud Alibaba
        1. 1.1简介
        2. 1.2为什么使用SpringCloud Alibaba?
        3. 1.3 SpringCloud Alibaba最终的技术搭配方案
        4. 1.4 项目中使用SpringCloud Alibaba
        5. 1.5 SpringCloud Alibaba的组件
          1. 1.Nacos注册中心
          2. 2.Feign声明式远程调用
          3. 3.Nacos配置中心
          4. 4.Gateway网关
      2. 2.前端开发的基础知识
    5. 五.基础篇程序设计
      1. 1.商品服务
        1. 1.1 三级分类
          1. 1.1.1 查询-递归树形结构数据获取
          2. 1.1.2 配置路由和网关和路径重写
          3. 1.2.3 查询-页面中树形显示
          4. 1.2.4 删除-删除商品分类
          5. 1.2.5 添加-添加商品分类
          6. 1.2.6 修改-修改商品的分类
        2. 1.2 品牌管理
          1. 1.2.1 品牌的增删改查功能
          2. 1.2.2 JSR303-数据校验
          3. 1.2.3 统一异常处理
          4. 1.2.4 关联分类功能
        3. 1.3 平台属性
          1. 1.3.1 属性分组功能
          2. 1.3.2 规格参数功能
          3. 1.3.3 销售属性功能
        4. 1.4 商品维护
          1. 1.4.1 SPU管理
          2. 1.4.2 发布商品
          3. 1.4.3 商品管理
      2. 2.库存系统
        1. 2.1 仓库维护
        2. 2.2 库存工作单
        3. 2.3 商品库存
        4. 2.4 采购单维护
          1. 2.4.1 采购需求
          2. 2.4.2 采购单
      3. 3.基础篇总结
    6. 六.高级篇程序设计
      1. 1.ElasticSearch
      2. 2.商城业务
        1. 2.1 商品上架
        2. 2.2 首页
          1. 2.2.1整合thymeleaf
          2. 2.2.2 首页面三级分类显示
        3. 2.3 搭建域名访问环境
        4. 2.4 性能压测
          1. 2.4.1优化中间件对性能的影响
        5. 2.5 缓存使用
          1. 2.5.1 本地缓存与分布式缓存
          2. 2.5.2 整合redis
          3. 2.5.3 高并发下缓存失效问题
          4. 2.5.4 分布式锁-Redisson
          5. 2.5.5 分布式缓存一致性问题
          6. 2.5.6 缓存-SpringCache
        6. 2.6 检索服务
          1. 2.6.1 整合页面
          2. 2.6.2 配置域名访问
          3. 2.6.3 首页和搜索页相互跳转
          4. 2.6.4 商品的检索
    最近更新

    大数据开发相关笔记

    笔记转载于黑马程序员,详细的笔记来源于:https://www.bilibili.com/video/BV1WY4y197g7/?spm_id_from=333.337.search-card.all.click&vd_source=22300b9f40de74b7db529eb8f04510a9

    + })(window)

    大数据开发相关笔记

    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    技术书籍-java8实战

    java 8实战

    + })(window)

    技术书籍-java8实战

    java 8实战

    @@ -177,10 +177,10 @@ -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新
    任务进度
    任务进度
    Blog
    Blog
    个人简历
    个人简历
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    面试专题

    50W字的面试文档

    来源于:咕泡教育 个人使用 不外传

    + })(window)

    面试专题

    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    常用正则表达式大全

    一、校验数字的表达式
    1 数字:^[0-9]$
    2 n位的数字:^\d{n}$
    3 至少n位的数字:^\d{n,}$
    4 m-n位的数字:^\d{m,n}$
    5 零和非零开头的数字:^(0|[1-9][0-9])$
    6 非零开头的最多带两位小数的数字:^([1-9][0-9])+(.[0-9]{1,2})?$
    7 带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})?$
    8 正数、负数、和小数:^(-|+)?\d+(.\d+)?$
    9 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
    10 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
    11 非零的正整数:^[1-9]\d$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]$
    12 非零的负整数:^-[1-9][]0-9”$ 或 ^-[1-9]\d$
    13 非负整数:^\d+$ 或 ^[1-9]\d|0$
    14 非正整数:^-[1-9]\d|0$ 或 ^((-\d+)|(0+))$
    15 非负浮点数:^\d+(.\d+)?$ 或 ^[1-9]\d.\d|0.\d[1-9]\d|0?.0+|0$
    16 非正浮点数:^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d.\d|0.\d[1-9]\d))|0?.0+|0$
    17 正浮点数:^[1-9]\d.\d|0.\d[1-9]\d$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$
    18 负浮点数:^-([1-9]\d.\d|0.\d[1-9]\d)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$
    19 浮点数:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d.\d|0.\d[1-9]\d|0?.0+|0)$

    + })(window)

    常用正则表达式大全

    一、校验数字的表达式
    1 数字:^[0-9]$
    2 n位的数字:^\d{n}$
    3 至少n位的数字:^\d{n,}$
    4 m-n位的数字:^\d{m,n}$
    5 零和非零开头的数字:^(0|[1-9][0-9])$
    6 非零开头的最多带两位小数的数字:^([1-9][0-9])+(.[0-9]{1,2})?$
    7 带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})?$
    8 正数、负数、和小数:^(-|+)?\d+(.\d+)?$
    9 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
    10 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
    11 非零的正整数:^[1-9]\d$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]$
    12 非零的负整数:^-[1-9][]0-9”$ 或 ^-[1-9]\d$
    13 非负整数:^\d+$ 或 ^[1-9]\d|0$
    14 非正整数:^-[1-9]\d|0$ 或 ^((-\d+)|(0+))$
    15 非负浮点数:^\d+(.\d+)?$ 或 ^[1-9]\d.\d|0.\d[1-9]\d|0?.0+|0$
    16 非正浮点数:^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d.\d|0.\d[1-9]\d))|0?.0+|0$
    17 正浮点数:^[1-9]\d.\d|0.\d[1-9]\d$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$
    18 负浮点数:^-([1-9]\d.\d|0.\d[1-9]\d)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$
    19 浮点数:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d.\d|0.\d[1-9]\d|0?.0+|0)$

    二、校验字符的表达式
    1 汉字:^[\u4e00-\u9fa5]{0,}$
    2 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
    3 长度为3-20的所有字符:^.{3,20}$
    4 由26个英文字母组成的字符串:^[A-Za-z]+$
    5 由26个大写英文字母组成的字符串:^[A-Z]+$
    6 由26个小写英文字母组成的字符串:^[a-z]+$
    7 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
    8 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
    9 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
    10 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
    11 可以输入含有^%&’,;=?$"等字符:[^%&’,;=?$\x22]+
    12 禁止输入含有的字符:[^\x22]+

    三、特殊需求表达式
    1 Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$
    2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
    3 InternetURL:[a-zA-z]+://[^\s] 或 ^https://([\w-]+.)+[\w-]+(/[\w-./?%&=])?$
    4 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
    5 电话号码(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX):^((\d{3,4}-)|\d{3.4}-)?\d{7,8}$
    6 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
    7 身份证号:
    15或18位身份证:^\d{15}|\d{18}$
    15位身份证:^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
    18位身份证:^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$
    8 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
    9 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
    10 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
    11 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.\d)(?=.[a-z])(?=.[A-Z]).{8,10}$
    12 日期格式:^\d{4}-\d{1,2}-\d{1,2}
    13 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
    14 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
    15 钱的输入格式:
    16 1.有四种钱的表示形式我们可以接受:”10000.00” 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000”:^[1-9][0-9]$
    17 2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符”0”不通过,所以我们采用下面的形式:^(0|[1-9][0-9])$
    18 3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9])$
    19 4.这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
    20 5.必须说明的是,小数点后面至少应该有1位数,所以”10.”是不通过的,但是 “10” 和 “10.2” 是通过的:^[0-9]+(.[0-9]{2})?$
    21 6.这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
    22 7.这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})(.[0-9]{1,2})?$
    23 8.1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3}))(.[0-9]{1,2})?$
    24 备注:这就是最终结果了,别忘了”+”可以用””替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
    25 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$
    26 中文字符的正则表达式:[\u4e00-\u9fa5]
    27 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
    28 空白行的正则表达式:\n\s\r (可以用来删除空白行)
    29 HTML标记的正则表达式:<(\S?)[^>]>.?|<.? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
    30 首尾空白字符的正则表达式:^\s|\s$或(^\s)|(\s$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
    31 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
    32 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
    33 IP地址:\d+.\d+.\d+.\d+ (提取IP地址时有用)

    -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新
    任务进度
    任务进度
    Blog
    Blog
    个人简历
    个人简历
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    VMWare虚拟机安装Linux教程

    1.下载CentOs镜像文件

    这里下载的是7版本的 如果有其他的需要 自行安装其他的版本

    + })(window)

    VMWare虚拟机安装Linux教程

    1.下载CentOs镜像文件

    这里下载的是7版本的 如果有其他的需要 自行安装其他的版本

    下载完成之后 记录好安装的位置

    阿里镜像下载地址:https://mirrors.aliyun.com/centos/7/isos/x86_64/?spm=a2c6h.25603864.0.0.4eab4511uQRsgc

    image-20230510224239950

    @@ -222,10 +222,10 @@

    Tips:

    ​ 这里我们没有设置Linux的静态IP,电脑每次网络变化之后,IP地址会发生变化,这时我们需要获取最新的IP地址,重新执行以上的连接步骤。如果想要IP地址固定,我们可以设置静态IP,设置静态的IP的方法如下:

    Linux设置静态IP | The Blog (gitee.io)

    -
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    Java程序设计基础

    韩顺平零基础学java完整版笔记

    + })(window)

    Java程序设计基础

    韩顺平零基础学java完整版笔记

    @@ -177,10 +177,10 @@ -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    MySql基础进阶运维篇PDF笔记

    1.PDF笔记

    1.1MySql基础篇PDF笔记

    + })(window)

    MySql基础进阶运维篇PDF笔记

    1.PDF笔记

    1.1MySql基础篇PDF笔记

    @@ -200,10 +200,10 @@ -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    ElementUI使用示例

    ElementUI官网

    + })(window)

    ElementUI使用示例

    ElementUI官网

    一.树形显示-树形控件

    1.树形显示

    示例-以谷粒商城项目的商品分类为例

    数据中商品分类的数据表,所有的分类数据在同一张表中

    image-20230530174911409 @@ -221,10 +221,10 @@

    实现的效果

    image-20230605163004850

    -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    常用的DOS命令

    1.一些基础的DOS命令

    1
    c:\javacode>dir	  //查看C盘javacode目录下有那些文件
    + })(window)

    常用的DOS命令

    1.一些基础的DOS命令

    1
    c:\javacode>dir	  //查看C盘javacode目录下有那些文件
    1
    c:\javacode>cd /D d:   //从C盘切换到D盘
    @@ -187,10 +187,10 @@

    3.MySql的相关DOS命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    //开启MySQL和关闭MySQL服务
    >net start mysql //开
    >new stop mysql //关


    //登录mysql的命令
    >mysql -u 用户名 -p密码 //密码可以先不输入,直接回车输入,或者直接写在p的后面,中间不要空格



    //连接mysql服务(mysql数据库)的指令
    >mysql -h 主机ip -P端口 -u 用户名 -p密码
    //tips:
    //p和密码中间不要有空格
    //-p后面没有密码的话,会让回车的时候输入密码
    //如果没有写-h主机,默认就是本机
    //如果没有写-P端口,默认就是3306
    //在实际的工作中端口一般会修改,使用3306这一端口,容易被黑客发现并攻击





    //备份数据库的命令
    //备份整个数据库
    >mysqldump -u root -p -B 数据库 数据库 > c:\\test\\bak.sql
    //备份数据库的某个表
    >mysqldump -u root -p 数据库 表1 表2 表n > c:\\test\\bak.sql
    //这里就是把数据库hsp_db02 和数据库hsp_db03备份在C盘下面test目录中一个叫bak.sql的文件中,这里备份的是sql语句




    //根据备份的文件,恢复数据库
    //第一种方式
    >source c:\\test\\bak.sql //根据C盘下面的c:\\test\\bak.sql的文件恢复数据库
    //第二种方式
    //直接把这个.sql的文件再执行一遍,就会恢复两个数据库了

    -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    个人简历

    + })(window)

    个人简历

    @@ -183,10 +183,10 @@
    -

    Mybatis-Plus的使用教程

    官方文档:MyBatis-Plus

    + })(window)

    Mybatis-Plus的使用教程

    官方文档:MyBatis-Plus

    常用插件

    1.公共字段填充

    对于每个实体类共有的属性字段,例如创建时间、修改时间、创建人、修改人,我们可以使用公共字段填充,来统一填充这些字段,这样我们在创建这些实体类的对象的时候就不需要set这些属性,实现丝滑开发

    1
    2
    3
    4
    @TableField(fill = FieldFill.INSERT) //插入的时候填充
    private String gmtCreate;
    @TableField(fill = FieldFill.INSERT_UPDATE)//插入和修改的时候填充
    private String gmtModified;
    @@ -190,10 +190,10 @@ -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    Hive中使用UDF函数的简单示例

    一.UDF函数介绍

    ​ UDF:user difine function,用户自定义函数,在Hive的使用中,系统内置函数有时无法满足业务需求,这时就需要开发者自己编写函数来实现业务需求。

    + })(window)

    Hive中使用UDF函数的简单示例

    一.UDF函数介绍

    ​ UDF:user difine function,用户自定义函数,在Hive的使用中,系统内置函数有时无法满足业务需求,这时就需要开发者自己编写函数来实现业务需求。

    二.简单示例

    1.创建一个maven工程

    前置条件: Java环境,Maven环境,IDEA开发工具

    2.在pom.xml文件中引入udf的依赖

    1
    2
    3
    4
    5
    <dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-exec</artifactId>
    <version>0.13.1</version>
    </dependency>
    @@ -181,10 +181,10 @@

    6.测试使用

    1
    2
    select MyUDF(1,3); -- 2
    select MyUDF('659452200103056489'); -- 2001-03-05
    -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    Thymeleaf教程

    Thymeleaf 是一个服务器端 Java 模板引擎,能够处理 HTML、XML、CSS、JAVASCRIPT 等模板文件。Thymeleaf 模板可以直接当作静态原型来使用,它主要目标是为开发者的开发工作流程带来优雅的自然模板,也是 Java 服务器端 HTML5 开发的理想选择。

    + })(window)

    Thymeleaf教程

    Thymeleaf 是一个服务器端 Java 模板引擎,能够处理 HTML、XML、CSS、JAVASCRIPT 等模板文件。Thymeleaf 模板可以直接当作静态原型来使用,它主要目标是为开发者的开发工作流程带来优雅的自然模板,也是 Java 服务器端 HTML5 开发的理想选择。

    image-20230706152329777

    教程: https://www.thymeleaf.org

    项目集成Thymeleaf

    1.导入依赖

    @@ -212,10 +212,10 @@ -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    SSM框架基础知识及整合

    PDF版本的笔记

    + })(window)

    SSM框架基础知识及整合

    PDF版本的笔记

    Mybatis

    @@ -189,10 +189,10 @@ -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新
    任务进度
    任务进度
    Blog
    Blog
    个人简历
    个人简历
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    免费域名注册教程

    一.域名注册

    免费域名注册网址:https://nic.eu.org

    + })(window)

    免费域名注册教程

    一.域名注册

    免费域名注册网址:https://nic.eu.org

    image-20230913123344514

    1.注册账号

    第一步:点击: here

    image-20230913123704246

    @@ -197,10 +197,10 @@

    点击Submit按钮之后显示如下的内容表示这个免费的域名是可以申请到的,然后等待人工审核通过

    image-20230913132918535

    审核通过之后,你注册时使用的邮箱就会收到信息

    -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    SpringBoot入门教程

    尚硅谷雷丰阳的SpringBoot零基础入门教程

    + })(window)

    SpringBoot入门教程

    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    目录
    1. 一.SpringBoot2核心技术-基础入门
      1. 1.Spring能做什么
      2. 2.SpringBoot
        1. 2.1 SpringBoot的优点
        2. 2.2、SpringBoot缺点
        3. 2.3 官方文档
      3. 3.SpringBoot入门
        1. 1.系统的要求
        2. 2.HelloWorld
        3. 3.简化配置
        4. 4.简化部署
      4. 4.了解自动装配原理
        1. 4.1 依赖管理
          1. 1.SpringBoot的自动版本仲裁机制
          2. 2.Starters场景启动器
        2. 4.2 自动配置
        3. 4.3 容器功能
          1. 1.组件添加
            1. 1.1 @Configuration
            2. 1.2 @Bean @Component @Controller @Service @Repository
            3. 1.3 @ComponentScan @Import
            4. 1.4 @Conditional 条件装配:满足Conditional指定的条件,则进行组件注入
          2. 2.原生配置文件的引入
            1. 2.1、@ImportResource
          3. 3.配置绑定
            1. 3.1 @ConfigurationProperties
        4. 4.4 自动配置原理入门
          1. 1.引导加载自动配置类
          2. 2.按需开启自动配置项
          3. 3.修改默认配置
          4. 3.4.最佳实践
        5. 4.5 简化开发
          1. 1.Lombok
          2. 2.简化日志开发
        6. 3.dev-tools
        7. 4.Spring Initailizr(项目初始化向导)
    2. 二.SpringBoot2核心技术-核心功能
      1. 一.配置文件
        1. 1、文件类型
          1. 1.1、properties
          2. 1.2、yaml
            1. 1.2.1、简介
            2. 1.2.2、基本语法
            3. 1.2.3、数据类型
            4. 1.2.4、示例
        2. 2、配置提示
      2. 二.Web开发
        1. 1.简单的功能分析
          1. 1.1 静态资源访问
            1. 1.静态资源目录
            2. 2.静态资源访问前缀
            3. 3.webjar
          2. 1.2 欢迎页支持
          3. 1.3 自定义 Favicon
          4. 1.4 静态资源配置原理
        2. 2.请求参数处理与数据响应
          1. 2.1、请求映射
            1. 1、rest使用与原理
            2. 2、请求映射原理
          2. 2.2、普通参数与基本注解
            1. 1.注解
            2. 2.Servlet API
            3. 3.复杂参数:
            4. 4.自定义对象参数
          3. 2.3 参数处理原理
          4. 2.4 数据响应与内容协商
            1. 2.4.1 相关依赖的引入
            2. 2.4.2 内容协商原理
            3. 2.4.3 自定义MessageConverter
        3. 3.视图解析与模板引擎
          1. 3.1 视图解析
          2. 3.2 模板引擎-Thymeleaf
            1. 3.2.1 Thymeleaf的使用
          3. 3.3 后台管理系统注意点
        4. 4.拦截器
          1. 1.HandlerInterceptor接口
          2. 2.拦截器实现登录检查操作
          3. 3.拦截器原理
        5. 5.文件上传
          1. 1.页面表单
          2. 2.文件上传代码
          3. 3.MultipartAutoConfiguration
        6. 6.异常处理
          1. 1.默认规则
          2. 2.自定义错误页面
        7. 7.Web原生组件注入(Servlet、Filter、Listener)
          1. 7.1 使用Servlet Api
            1. 1.原生的Servlet的使用
            2. 2.原生的Filter的使用
            3. 3.原生的Listener的使用
          2. 7.2 使用RegistrationBean
        8. 8.嵌入式Servlet容器
          1. 8.1 切换嵌入式Servlet容器
          2. 8.2 定制Servlet容器
      3. 三.数据访问
        1. 1.SQL
          1. 1.1 JDBC的使用
          2. 1.2 分析自动配置
      4. 四.单元测试
        1. 1.JUnit5的变化
        2. 2.JUnit5常用注解
        3. 3.断言
          1. 3.1 简单断言
          2. 3.2 数组断言
          3. 3.3 组合断言
          4. 3.4 异常断言
          5. 3.5 超时断言
          6. 3.6 快速失败
        4. 4.前置条件
        5. 5.嵌套测试
        6. 6.参数化测试
        7. 7.迁移指南
      5. 五.指标监控
        1. 1.SpringBoot Actuator
          1. 1.1 如何使用
          2. 1.2 常用的EndPoints
          3. 1.3 Health Endpoint
          4. 1.4 Metrics Endpoint
          5. 1.5 管理Endpoint
          6. 1.6 定制Endpoint
            1. 1.6.1 定制health endpoint
            2. 1.6.2 定制 info endpoint
            3. 1.6.3 定制Metrics信息
          7. 1.7 新增Endpoint
          8. 1.8 可视化
      6. 六.原理解析
        1. 1.Profile功能
    最近更新
    任务进度
    任务进度
    Blog
    Blog
    个人简历
    个人简历
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    目录
    1. 一.SpringBoot2核心技术-基础入门
      1. 1.Spring能做什么
      2. 2.SpringBoot
        1. 2.1 SpringBoot的优点
        2. 2.2、SpringBoot缺点
        3. 2.3 官方文档
      3. 3.SpringBoot入门
        1. 1.系统的要求
        2. 2.HelloWorld
        3. 3.简化配置
        4. 4.简化部署
      4. 4.了解自动装配原理
        1. 4.1 依赖管理
          1. 1.SpringBoot的自动版本仲裁机制
          2. 2.Starters场景启动器
        2. 4.2 自动配置
        3. 4.3 容器功能
          1. 1.组件添加
            1. 1.1 @Configuration
            2. 1.2 @Bean @Component @Controller @Service @Repository
            3. 1.3 @ComponentScan @Import
            4. 1.4 @Conditional 条件装配:满足Conditional指定的条件,则进行组件注入
          2. 2.原生配置文件的引入
            1. 2.1、@ImportResource
          3. 3.配置绑定
            1. 3.1 @ConfigurationProperties
        4. 4.4 自动配置原理入门
          1. 1.引导加载自动配置类
          2. 2.按需开启自动配置项
          3. 3.修改默认配置
          4. 3.4.最佳实践
        5. 4.5 简化开发
          1. 1.Lombok
          2. 2.简化日志开发
        6. 3.dev-tools
        7. 4.Spring Initailizr(项目初始化向导)
    2. 二.SpringBoot2核心技术-核心功能
      1. 一.配置文件
        1. 1、文件类型
          1. 1.1、properties
          2. 1.2、yaml
            1. 1.2.1、简介
            2. 1.2.2、基本语法
            3. 1.2.3、数据类型
            4. 1.2.4、示例
        2. 2、配置提示
      2. 二.Web开发
        1. 1.简单的功能分析
          1. 1.1 静态资源访问
            1. 1.静态资源目录
            2. 2.静态资源访问前缀
            3. 3.webjar
          2. 1.2 欢迎页支持
          3. 1.3 自定义 Favicon
          4. 1.4 静态资源配置原理
        2. 2.请求参数处理与数据响应
          1. 2.1、请求映射
            1. 1、rest使用与原理
            2. 2、请求映射原理
          2. 2.2、普通参数与基本注解
            1. 1.注解
            2. 2.Servlet API
            3. 3.复杂参数:
            4. 4.自定义对象参数
          3. 2.3 参数处理原理
          4. 2.4 数据响应与内容协商
            1. 2.4.1 相关依赖的引入
            2. 2.4.2 内容协商原理
            3. 2.4.3 自定义MessageConverter
        3. 3.视图解析与模板引擎
          1. 3.1 视图解析
          2. 3.2 模板引擎-Thymeleaf
            1. 3.2.1 Thymeleaf的使用
          3. 3.3 后台管理系统注意点
        4. 4.拦截器
          1. 1.HandlerInterceptor接口
          2. 2.拦截器实现登录检查操作
          3. 3.拦截器原理
        5. 5.文件上传
          1. 1.页面表单
          2. 2.文件上传代码
          3. 3.MultipartAutoConfiguration
        6. 6.异常处理
          1. 1.默认规则
          2. 2.自定义错误页面
        7. 7.Web原生组件注入(Servlet、Filter、Listener)
          1. 7.1 使用Servlet Api
            1. 1.原生的Servlet的使用
            2. 2.原生的Filter的使用
            3. 3.原生的Listener的使用
          2. 7.2 使用RegistrationBean
        8. 8.嵌入式Servlet容器
          1. 8.1 切换嵌入式Servlet容器
          2. 8.2 定制Servlet容器
      3. 三.数据访问
        1. 1.SQL
          1. 1.1 JDBC的使用
          2. 1.2 分析自动配置
      4. 四.单元测试
        1. 1.JUnit5的变化
        2. 2.JUnit5常用注解
        3. 3.断言
          1. 3.1 简单断言
          2. 3.2 数组断言
          3. 3.3 组合断言
          4. 3.4 异常断言
          5. 3.5 超时断言
          6. 3.6 快速失败
        4. 4.前置条件
        5. 5.嵌套测试
        6. 6.参数化测试
        7. 7.迁移指南
      5. 五.指标监控
        1. 1.SpringBoot Actuator
          1. 1.1 如何使用
          2. 1.2 常用的EndPoints
          3. 1.3 Health Endpoint
          4. 1.4 Metrics Endpoint
          5. 1.5 管理Endpoint
          6. 1.6 定制Endpoint
            1. 1.6.1 定制health endpoint
            2. 1.6.2 定制 info endpoint
            3. 1.6.3 定制Metrics信息
          7. 1.7 新增Endpoint
          8. 1.8 可视化
      6. 六.原理解析
        1. 1.Profile功能
    最近更新

    Java爬虫

    视频教程1: 狂神说Java Jsoup爬虫入门实战 https://www.bilibili.com/video/BV1La4y1x7Wm?vd_source=aee5e475191b69e6c781059ab6662584

    + })(window)

    Java爬虫

    视频教程1: 狂神说Java Jsoup爬虫入门实战 https://www.bilibili.com/video/BV1La4y1x7Wm?vd_source=aee5e475191b69e6c781059ab6662584

    视频教程2:https://www.bilibili.com/video/BV1RU4y147eZ?vd_source=aee5e475191b69e6c781059ab6662584

    具体的看视频 急速入门

    入门实战教程

    1.引入依赖

    1
    2
    3
    4
    5
    6
    <!-- 爬取视频或者音频需要使用别的依赖 -->
    <dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.14.3</version>
    </dependency>
    @@ -188,10 +188,10 @@

    image-20230509233922789

    image-20230509234019249

    -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    xShell自定义配色方案

    自定义配色方案

    + })(window)

    xShell自定义配色方案

    自定义配色方案

    20230321180350

    20230321180405

    字体大小的设置

    20230321180420

    -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新
    任务进度
    任务进度
    Blog
    Blog
    个人简历
    个人简历
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    SpringCloud相关资料

    SpringCloud相关资料

    一.Eureka注册中心、Ribbon负载均衡、Nacos注册中心

    + })(window)

    SpringCloud相关资料

    SpringCloud相关资料

    一.Eureka注册中心、Ribbon负载均衡、Nacos注册中心

    @@ -205,10 +205,10 @@ -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    Java生成二维码

    SpringBoot + zxing 生成二维码

    + })(window)

    Java生成二维码

    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    阿里云对象存储OSS

    1.官网介绍

    ​ 阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。您可以使用阿里云提供的API、SDK接口或者OSS迁移工具轻松地将海量数据移入或移出阿里云OSS。数据存储到阿里云OSS以后,您可以选择标准存储(Standard)作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的低频访问存储(Infrequent Access)、归档存储(Archive)、冷归档存储(Cold Archive)作为不经常访问数据的存储方式。

    + })(window)

    阿里云对象存储OSS

    1.官网介绍

    ​ 阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。您可以使用阿里云提供的API、SDK接口或者OSS迁移工具轻松地将海量数据移入或移出阿里云OSS。数据存储到阿里云OSS以后,您可以选择标准存储(Standard)作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的低频访问存储(Infrequent Access)、归档存储(Archive)、冷归档存储(Cold Archive)作为不经常访问数据的存储方式。

    2.使用

    2.1 使用的前置准备

    (1)申请阿里云账号
    (2)实名认证
    (3)开通“对象存储OSS”服务
    (4)进入管理控制台

    2.2 创建Bucket

    点击创建Bucket

    image-20230422210404204

    @@ -242,10 +242,10 @@

    image-20230612114314757

    解决方法

    image-20230612114238391

    -
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    开发环境的搭建

    1.后端环境搭建

    1.1 JDK环境的配置

    常规的安装,无需教程

    + })(window)

    开发环境的搭建

    1.后端环境搭建

    1.1 JDK环境的配置

    常规的安装,无需教程

    IDEA中设置默认的JDK

    image-20230604120610791

    选中需要设置为默认JDK的JDK

    @@ -212,10 +212,10 @@

    3.前后端公共环境的搭建

    1.Git环境的搭建

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #以下的操作在下载安装完毕之后进行
    #1.鼠标在桌面右键 选择Git Bash Here 打开控制台

    #2.配置用户名和邮箱
    git config --global user.name "用户名" #随意
    git config --global user.email "邮箱" #自己的邮箱

    #3.配置SSH免密连接
    #生成密钥
    ssh-keygen -t rsa -C "在码云上注册的邮箱地址" #连续三次回车
    #查看密钥并复制公钥的内容
    cat ~/.ssh/id_rsa.pub

    #4.将密钥的复制到码云的SSH公钥中
    #4.1添加公钥 公钥名随意 公钥内容就是上面复制的内容

    #5.测试
    ssh -T git@gitee.com
    -
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    Java学习路线

    + })(window)

    Java学习路线

    @@ -183,10 +183,10 @@
    -

    IDEA常用快捷键

    1.常用快捷键

      + })(window)

      IDEA常用快捷键

      1.常用快捷键

      1. 在写一个main主函数的时候可以直接在键盘上敲main ,然后根据提示补全全部(模板快捷键)

      2. 在写System.out.println();输出函数代码的时候可以直接在键盘上面敲sout,然后根据提示补全(模板快捷键)

        @@ -224,10 +224,10 @@
      3. Ctrl + F 全局查找

      -
      公告
      本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
      最近更新
      任务进度
      任务进度
      Blog
      Blog
      个人简历
      个人简历
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新

    SpringBoot整合Logback日志

    1.创建一个SpringBoot的工程

    2.在resources目录下创建logback-spring.xml的配置文件

    创建的时候要修改日志输出的路径

    + })(window)

    SpringBoot整合Logback日志

    1.创建一个SpringBoot的工程

    2.在resources目录下创建logback-spring.xml的配置文件

    创建的时候要修改日志输出的路径

    日志的级别根据需要自己修改

    级别:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="10 seconds">
    <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
    <!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
    <!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
    <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->

    <contextName>logback</contextName>
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
    <property name="log.path" value="C:/AlYun/log" />

    <!-- 彩色日志 -->
    <!-- 配置格式变量:CONSOLE_LOG_PATTERN 彩色日志格式 -->
    <!-- magenta:洋红 -->
    <!-- boldMagenta:粗红-->
    <!-- cyan:青色 -->
    <!-- white:白色 -->
    <!-- magenta:洋红 -->
    <property name="CONSOLE_LOG_PATTERN"
    value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>


    <!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
    <!-- 例如:如果此处配置了INFO级别,则后面其他位置即使配置了DEBUG级别的日志,也不会被输出 -->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>INFO</level>
    </filter>
    <encoder>
    <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
    <!-- 设置字符集 -->
    <charset>UTF-8</charset>
    </encoder>
    </appender>


    <!--输出到文件-->

    <!-- 时间滚动输出 level为 INFO 日志 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 正在记录的日志文件的路径及文件名 -->
    <file>${log.path}/log_info.log</file>
    <!--日志文件输出格式-->
    <encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    <charset>UTF-8</charset>
    </encoder>
    <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!-- 每天日志归档路径以及格式 -->
    <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <maxFileSize>100MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    <!--日志文件保留天数-->
    <maxHistory>15</maxHistory>
    </rollingPolicy>
    <!-- 此日志文件只记录info级别的 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>INFO</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
    </filter>
    </appender>

    <!-- 时间滚动输出 level为 WARN 日志 -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 正在记录的日志文件的路径及文件名 -->
    <file>${log.path}/log_warn.log</file>
    <!--日志文件输出格式-->
    <encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    <charset>UTF-8</charset> <!-- 此处设置字符集 -->
    </encoder>
    <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <maxFileSize>100MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    <!--日志文件保留天数-->
    <maxHistory>15</maxHistory>
    </rollingPolicy>
    <!-- 此日志文件只记录warn级别的 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>warn</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
    </filter>
    </appender>


    <!-- 时间滚动输出 level为 ERROR 日志 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 正在记录的日志文件的路径及文件名 -->
    <file>${log.path}/log_error.log</file>
    <!--日志文件输出格式-->
    <encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    <charset>UTF-8</charset> <!-- 此处设置字符集 -->
    </encoder>
    <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <maxFileSize>100MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    <!--日志文件保留天数-->
    <maxHistory>15</maxHistory>
    </rollingPolicy>
    <!-- 此日志文件只记录ERROR级别的 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>ERROR</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
    </filter>
    </appender>

    <!--
    <logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。
    <logger>仅有一个name属性,
    一个可选的level和一个可选的addtivity属性。
    name:用来指定受此logger约束的某一个包或者具体的某一个类。
    level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
    如果未设置此属性,那么当前logger将会继承上级的级别。
    -->
    <!--
    使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
    第一种把<root level="INFO">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
    第二种就是单独给mapper下目录配置DEBUG模式,代码如下,这样配置sql语句会打印,其他还是正常DEBUG级别:
    -->
    <!--开发环境:打印控制台-->
    <springProfile name="dev">
    <!--可以输出项目中的debug日志,包括mybatis的sql日志-->
    <logger name="com.guli" level="INFO" />

    <!--
    root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
    level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,默认是DEBUG
    可以包含零个或多个appender元素。
    -->
    <root level="INFO">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="INFO_FILE" />
    <appender-ref ref="WARN_FILE" />
    <appender-ref ref="ERROR_FILE" />
    </root>
    </springProfile>


    <!--生产环境:输出到文件-->
    <springProfile name="pro">

    <root level="INFO">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="DEBUG_FILE" />
    <appender-ref ref="INFO_FILE" />
    <appender-ref ref="ERROR_FILE" />
    <appender-ref ref="WARN_FILE" />
    </root>
    </springProfile>

    </configuration>

    3.日志的样式如下图所示

    image-20230412171350769

    -
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    avatar
    Jason
    Debug the World!
    Ctrl + D 收藏
    公告
    本网站是静态网站,更新页面资源请使用Ctrl+F5;若网站内文章对你有帮助,请使用Ctrl+D收藏该网站!
    最近更新
    标签 - DFA
    2023
    DFA算法实现敏感词自管理
    DFA算法实现敏感词自管理
    \ No newline at end of file diff --git a/tags/Docker/index.html b/tags/Docker/index.html index 7ddad1400..c50858dc4 100644 --- a/tags/Docker/index.html +++ b/tags/Docker/index.html @@ -62,7 +62,7 @@ isHome: false, isHighlightShrink: false, isToc: false, - postUpdate: '2023-12-03 00:03:45' + postUpdate: '2023-12-03 13:48:05' }