- 博客(54)
- 收藏
- 关注
原创 即时通讯平台测试报告
客户端:Windows11+Microsoft Edge版本 125.0.2535.51 (正式版本) (64 位)、Google Chrome版本 127.0.6533(正式版本)(64 位)/Android14。AutoTest_InteractionWeb/性能测试报告 · 晚餐是派蒙/Interaction_Web - 码云 - 开源中国。测试目标:验证核心功能(登录、注册、消息收发、用户管理、群组功能等)的稳定性和性能指标。包含模块:登录,注册,用户查找,修改个人信息,收发消息。
2025-03-16 19:35:24
830
原创 Spring--Bean的作用域,生命周期
Spring框架中的Bean有多种作用域,包括Singleton(单例)、Prototype(原型)、Request、Session、Application和WebSocket。Singleton是默认作用域,每个Spring IoC容器内同名Bean只有一个实例。Prototype则每次请求都会创建新的Bean实例。Bean的生命周期大致包括实例化、属性赋值、初始化、使用和销毁等步骤。
2024-06-11 14:00:26
1532
27
原创 快速入门Spring Data JPA
Spring Data JPA是Spring Data框架的一部分,简化数据库的CRUD操作。通过自动生成功能,一般用于简单查询,复杂动态SQL可使用MyBatis。入门步骤包括:创建数据库和表,创建Java实体类,使用Lombok注解减少样板代码,定义Repository接口继承CrudRepository,最后在Service层实现业务逻辑。Spring Data JPA根据实体类的@Id注解判断是插入还是更新数据,无初始值时生成新ID并插入,已有值则根据ID查找并更新。
2024-04-16 23:22:04
1104
30
原创 Spring IoC和DI
Spring是一个依赖注入(Dependency Injection, DI)和控制反转(Inversion of Control, IoC)容器。IoC意味着应用程序不再手动创建和管理对象,而是由Spring容器负责对象的创建和管理,包括它们的依赖关系。这样可以减少代码的耦合度,提高可测试性和灵活性。DI是IoC的一个具体实现,它通过容器将依赖的对象注入到需要它们的组件中,而不是让组件自己去找依赖。例如,一个类A依赖于类B,传统做法是在类A中通过`new B()`创建B的实例。但在Spring中,类A
2024-04-16 23:21:51
1518
15
原创 Linux中的常用基础操作
`ls` 命令用于列出当前目录下的子目录和文件;`ls -a` 列出包括隐藏文件的所有内容;`ls [目录名]` 列出指定目录的内容;`pwd` 显示当前工作目录;`touch` 创建新文件;`mkdir` 创建目录;`vim` 编辑文件;`rm` 删除文件或目录;`cp` 复制文件或目录;`man` 查看命令手册;`ctrl+l` 清屏;`cd` 改变目录;`grep` 在文件中搜索特定字符串;`ps -ef` 查看所有运行的进程;`netstat` 显示网络连接状态。
2024-03-25 10:52:38
1201
40
原创 Leetcode——560. 和为 K 的子数组
本文详细介绍了改题目的解法,并给出了由暴力到最终解法的优化方案:暴力求解,前缀和优化,前缀和+哈希表优化
2024-03-25 10:52:23
575
17
原创 Spring中的事务和事务的传播机制
事务是一组操作的集合,不可以被分割。事务会把所有的操作作为一个整体,这组操作要么全部成功,要么全部失败。此时A当中的所有操作都生效开启事务后只有这种情况下A中的逻辑才生效。Spring中事务的实现有两种编程式(手动操作事务)提交事务回滚事务注解式(利用注解自动实现事务)rollbackFor手动回滚事务事务隔离级别事务的传播机制
2024-02-28 18:14:33
1967
46
原创 Spring AOP -- 面相切面编程
基于注解 @Aspect;切点表达式;通知类型;多种通知类型的执行顺序;@Pointcut;多个切面类的执行顺序;@Order;基于自定义注解;给已有的注解进行功能的增强;AOP的优势:代码无侵入:不修改原始的业务方法,就可以对原始的业务方法进行了功能的增强或者是功能的改变;减少了重复代码;提高开发效率;维护方便。
2024-02-28 18:14:19
1400
16
原创 统一功能处理----拦截器
拦截器是Spring框架提供的核心功能之一,主要用来拦截用户的请求,在指定方法前后,根据业务需要执行预先设定的代码。拦截器就像小区门口的保安一样,当有人(外部请求)想要进入小区,保安就会先验证他的身份,身份正确才会放行;再你出小区后会做一些善后工作(如:关门……)。
2024-02-15 16:33:44
1052
32
原创 统一数据返回格式 及 可能遇到的问题;统一异常处理
统一数据返回格式需要创建一个新类并使其实现ResponseBodyAdvice 接口并重写里面的方法,然后给当前类加上@ControllerAdvice注解。实际应用时还有几个问题:问题一:重复打包问题二:ClassCastException: com.example.Spring_demo.Resp cannot be cast to java.lang.String统一异常处理需要使用两个注解@ExceptionHandler@ControllerAdvice
2024-02-15 16:33:05
1570
18
原创 MyBatis 实现动态 SQL
MyBatis 中的动态 SQL 就是SQL语句可以根据不同的情况情况来拼接不同的sql。本文会介绍 xml 和 注解 两种方式的动态SQL实现方式。
2024-02-09 14:41:46
2148
16
原创 图书系统的Web实现(含源码)
图书系统的Web实现(含源码)注意事项:BorrowBooksWeb\src\main\resources路径下的application.yml文件里面的url,username,password这三个属性和自己的数据库保持一致。浏览器访问url:http://127.0.0.1:8080/login.html默认账号密码为:zhangsan涉及的知识:拦截器,spring mvc,mybatis等
2024-02-09 14:41:21
1031
6
原创 线程池--JAVA
虽然线程是轻量级进程,但是如果当创建和销毁的的频率非常之高,那么它也就会消耗很多的资源。而线程池就是用来优化线程频繁创建和销毁的场景,减少线程创建、销毁的频率。ExecutorServiceJAVA标准库为我们实现了线程池,ExecutorService是一个接口,线程池的创建并不像平常的接口实现那样直接new,而是使用了“工厂模式”。ThreadPoolExecutor这个类有4中构造方法,可是仔细看就会发现前三种还是调用的的四种,所以本质上是只有一种。
2024-01-22 13:52:41
2169
32
原创 MyBatis 的XML实现方法(JAVA)
先在配置文件中连接数据库定义接口:XML实现接口:创建一个xml文件,然后在配置文件中配置xml文件的地址。增删查结果映射1. 起别名2. 结果映射3. 开启驼峰命名改
2024-01-22 13:52:10
1667
16
原创 Spring MVC中的一些常用注解
@RequestMapping实现路由映射限制请求方式@PathVariable从url中获取变量的值更改绑定参数的名字@RequestParam可以传递集合更改绑定参数的名字可修改是否为必传参数@RequestBody获取请求正文的内容可修改是否为必传参数@RequestPart可以支持上传文件更改绑定参数的名字可修改是否为必传参数@Controller
2024-01-15 08:50:26
1892
38
原创 阻塞队列(JAVA)
阻塞队列是一种特殊的队列,也遵守 "先进先出" 的原则。阻塞队列能是一种JAVA标准库中已经实现了阻塞队列,我们可以直接进行使用。BlockingQueue是一个接口,阻塞队列也和普通队列一样有两种实现方式:数组和链表。注:创建阻塞队列时需要传入队列的长度参数。
2024-01-10 06:00:00
1560
19
原创 单例模式---JAVA
单例模式:保证某个类在程序中只存在唯一一份实例, 而不会创建出多个实例。单例模式可以通过实例创建的时间来分为两种:“饿汉”和“懒汉”模式。所谓的“饿汉”模式实则就是在类加载的时候创建出实例。“懒汉”模式是在线程的一次调用该类的get方法时进行唯一实例的创建。
2024-01-08 15:10:50
1212
20
原创 死锁(JAVA)
一旦代码中出现死锁就会导致线程卡死。当对操作时,如果该锁是就会发生死锁(线程卡死)两个线程两把锁,如果出现这种情况也是会发生死锁:线程t1已经获取了锁A,线程t2已经获取了锁B,此时t1想要获取锁B,t2想要获取锁A。如果此时有N个线程M把锁(N,M>>2),就更加容易发生死锁的情况了。一个非常经典的N个线程M把锁的问题:哲学家就餐问题。假设有5名哲学家围在一张桌子上吃面,现在桌子上有5根筷子。(哲学家会做两件事:思考和吃面(吃面必须要拿到两根筷子,吃完后会将筷子放回原处)。
2023-11-13 22:40:45
3931
52
原创 线程安全(JAVA)
synchronized 关键字是JAVA提供的一种常用的加锁工具。注:synchronized关键字在使用时需要搭配()和{};程序执行进入 { 加锁 离开 } 解锁 ,{} 里面就是被加锁的代码块;()里面用来表示一个加锁的对象(这个对象是啥不重要,它的主要功能就是用来区分多个线程是否在竞争同一个锁)。如果多个线程对同一个线程尝试进行加锁操作就会产生锁竞争(其中一个线程就会发生阻塞等待),如果是不同对象就不会产生锁竞争,仍然是并发执行。
2023-11-10 12:00:00
7662
55
原创 Thread类的基本操作(JAVA多线程)
线程的创建(Thread类)Thread类的一些常见构造方法Thread类中的一些常见属性:getId():isDaemon()isAlive()打断线程第一种方法:第二种方法:线程等待join()join(等待时间)休眠线程线程的状态
2023-11-06 22:13:05
599
49
原创 Map和Set(JAVA)
Map和Set都是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMap;Map接口并没有继承Collection,该类中存储的是结构的键值对,并且K是唯一的且不能重复;Set 接口Set相比于Map要简单很多。Set是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeSet或者HashSet。
2023-11-03 17:23:48
413
43
原创 二叉搜索树 和 哈希表 (JAVA)
二叉搜索树二叉搜索树的插入二叉搜索树的查找二叉搜索树的删除哈希表哈希冲突闭散列线性探测法二次探测法开散列二叉搜索树又称二叉排序树,它具有以下性质的二叉树或空树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的每颗子树也分别为二叉搜索树而哈希表是一种插入/删除/查找时间复杂度都是O(1)的数据结构,它的查询之所以也可以如此之快的的原因就是它在查找时不需要经过任何比较,直接一次从表中得到要搜索的元素。
2023-10-29 20:38:07
5374
71
原创 MySQL --- 聚合查询 和 联合查询
聚合查询:聚合函数count()sum()avg()max()min()group byhaving联合查询:内连接第一步:先求出笛卡尔积第二步:加上连接条件,筛选出合法信息第三步:结合需求进一步增加条件,对结果进行筛选;第四步:对列进行精简,筛选出需要展示的列外连接左外连接右外连接自连接子查询
2023-10-18 12:45:41
3134
58
原创 Lambda表达式(JAVA)
Lambda表达式的语法:(parameters) -> expression 或 (parameters) ->{ statements; }parameters:表示参数列表;expression:表示一条语句;statements:表示多条语句。lambda表达式可以通过表达式来代替功能接口,而这个接口必须是函数式接口。
2023-10-14 20:14:54
729
27
原创 clone()方法使用时遇到的问题解决方法(JAVA)
当我们处理完上面的 CloneNotSupportedException 异常后 ,这是又会有新的异常 原因是因为clone返回的是Object类型需要强转。当我们重写之后报错的原因是clone方法有可能会抛出 CloneNotSupportedException 异常,而它又是受查异常所以需要我们进行处理。当我们直接调用时报错原因是Object类中的clone方法是被protected修饰的所以需要重写。上面的问题都处理完之后乍一看好像没事了,可是当我们运行之后又会报错。
2023-10-13 22:23:19
1005
15
原创 进程,线程
此处利用工厂来举例线程和进程的关系:此时 A 是一个工厂的老板现在他有一个工厂,但工厂里只有一条流水线 A 们每天可以赚到 100 块钱。这时 A 想要每天赚 200 块钱那么他现在有两种解决方案,第一种再建一个工厂同样也只有一条流水线;第二种就是在旧工厂里面增加一条流水线。这里的流水线就相当于线程;而工厂就相当于进程。
2023-10-13 19:37:43
393
32
原创 多线程代码中,如何查看各个线程的状态(JAVA)
第一步:运行上述代码(注:以下操作过程中都必须保证代码处在运行状态)第二步:找到JDK安装的位置第三步:进入bin目录找到 jconsole.exe并打开(如果打开什么都没有可以尝试使用管理员身份打开)第四步:选中你运行代码的文件名第五步:点击连接之后点击不安全连接
2023-10-11 09:59:52
557
20
原创 MySQL中的 增 删 查 改(CRUD)
insert into 表名 value(数据,数据),.......;可以单行,多行插入。为查询结果的列取别名select 表达式/列名as 别名 from 表名;去重:DISTINCTselect distinct 单列/多列 from 表名;会去除查询结果中的重复项(只保留一项)select 条件查询的执行顺序遍历表中的每个记录把当前记录的值带入条件,根据条件进行筛选如果这条记录满足条件,保留并进行列上的表达式的计算如果有 order by 会在所有行都被获取到之后(表
2023-10-05 13:51:46
3657
63
原创 七大基于比较的排序算法(JAVA)
排序算法的稳定性: 大小相同的元素在排序前后相对位置相同就称其为稳定的排序。注:一个本身就是稳定的排序 是可以实现为不稳定的排序的 ;但是相反 一个本身就不稳定的排序 是不可能实现为稳定的排序的。稳定的排序算法:插入排序 冒泡排序 归并排序
2023-10-02 17:54:36
1777
17
原创 队列(JAVA)
先进先出:进行插入操作的一端称为:进行删除操作的一端称为在JAVA中队列和栈不同Stack是一个类,Queue是个接口,底层是通过链表实现的。队列有以下的方法因为Queue是个接口,在实例化时必须,因为LinkedList实现了Queue接口。
2023-09-24 18:53:18
433
33
原创 栈的简单应用(利用Stack进行四则混合运算)(JAVA)
利用Stack进行四则混合运算,图文并茂的介绍了中缀表达式转后缀表达式 及代码的实现
2023-09-23 13:29:55
1169
32
原创 JAVA中的泛型
泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。泛型的语法:class 泛型类名称 {}class ClassName {}类名后的 代表占位符,表示当前类是一个泛型类。类型形参一般使用一个大写字母表示,常用的名称有:E 表示 ElementK 表示 KeyV 表示 ValueN 表示 NumberT 表示 TypeS, U, V 等等 - 第二、第三、第四个类型
2023-09-14 00:14:45
1443
41
原创 JAVA中的异常
在Java中,将程序执行过程中发生的不正常行为称为异常。而在JAVA中异常其实是一种类(Exception),JAVA中还有一种类(Error)它被叫做错误。Throwable:是异常体系的顶层类,Error 和 Exception 都是其派生出两个重要的子类。
2023-09-10 19:15:35
1676
29
原创 String类中的一些常用方法(JAVA)
JAVA中的String类中的一些常用方法 boolean equals(Object anObject):int compareTo(String s):int compareToIgnoreCase(String str)char charAt(int index):int indexOf(int ch):int indexOf(int ch, int fromIndex):int indexOf(String str):
2023-09-09 17:50:40
583
26
原创 在JAVA中如何使用qsort对类进行排序?
第一种方法是使类实现Comparable接口,但是只能用于自定义类。第二种方法是自己实现一个比较器。
2023-08-22 16:25:19
2240
41
图书系统的Web实现-JAVA
2024-02-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人