自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学习总结

路虽远,行则将至 。如果实在太远,那就不去了..........

  • 博客(77)
  • 收藏
  • 关注

原创 算法学习(B站左神算法课)

学习算法的笔记

2024-03-16 17:32:22 1127 1

原创 Java中的值传递

Java 中将实参传递给方法(或函数)的方式是值传递如果参数是基本类型的话,很简单,传递的就是基本类型的字面量值的拷贝,会创建副本。如果参数是引用类型,传递的就是实参所引用的对象在堆中地址值的拷贝,同样也会创建副本。t=O83A。

2024-10-20 16:59:13 738

原创 Java中的泛型

Java 泛型(Generics)是 JDK 5 中引入的一个新特性。使用泛型参数,可以增强代码的可读性以及稳定性。编译器可以对泛型参数进行检测,并且通过泛型参数可以指定传入的对象类型。比如这行代码就指明了该ArrayList对象只能传入Person对象,如果传入其他类型的对象就会报错。并且,原生List返回类型是Object,需要手动转换类型才能使用,使用泛型后编译器自动转换。

2024-10-20 16:21:55 442

原创 Java中的异常Throwable

原文链接。

2024-10-20 16:11:22 1150

原创 抽象类和接口的共同点和区别

方法用于提供接口方法的默认实现,可以在实现类中被覆盖。这样就可以在不修改实现类的情况下向现有接口添加新功能,从而增强接口的扩展性和向后兼容性。方法通常用于定义一些通用的、与接口相关的工具方法,一般很少用。方法无法在实现类中被覆盖,只能通过接口名直接调用(方法可以用于在接口内部共享代码,不对外暴露。这些方法让接口的使用更加灵活。Java 9 允许在接口中使用。),类似于类中的静态方法。Java 8 引入的。Java 8 引入的。

2024-10-20 14:52:46 423

原创 BO、VO、DO、DTO在项目中代表什么

DTO:接受前端传入参数。DTO:接受前端传入参数。BO:后端业务逻辑处理。VO:后端响应给前端。

2024-09-15 21:23:45 176

原创 控制反转(IOC)与依赖注入(DI)

在传统的应用程序中,如果一个对象需要依赖另一个对象,通常会直接在代码中创建这个依赖对象,从而导致对象之间紧密耦合。而在 IoC 容器中,应用程序的控制权被反转了,对象的创建和依赖关系由容器负责管理和维护,应用程序只需要关注自身的业务逻辑。Spring IOC 容器负责管理应用程序中的所有对象(bean),包括创建、销毁和维护它们之间的依赖关系。依赖注入是 IOC 的一种。,它通过将对象的依赖关系通过构造函数、setter 方法或字段注入到对象中,从而实现了对象之间的解耦和灵活性。

2024-09-15 21:18:53 339

原创 正则表达式

正则表达式以"/"开头,以"/"结尾,在这之间写正则表达式。“\”表示转义,对于一些特殊的字符,比如".",如果我们只是想要匹配"."这个字符,就需要在"."的前面加上"\"。

2024-06-20 16:18:11 957

原创 Selenium的使用

白月黑羽老师的网站上面还有很多关于软件测试的内容,大家感兴趣的可以结合B站的视频与网站上面的资料一起学习。

2024-06-09 13:57:54 1747

原创 使用Jmeter进行性能测试

HTTP请求默认值中的设置与HTTP请求中的相似,只是HTTP请求默认值中的属性值是作用在当前测试计划中的所有HTTP请求中,如果一个HTTP请求没有设置对应的属性,就会使用HTTP请求默认值中的属性值,如果设置了就是用自己设置的属性值。也可以在对应的线程组中配置对应的HTTP请求默认值。有时候,我们需要测试一个网站上面的很多URL路径,一个一个手动定义HTTP请求太麻烦,所以Jmeter提供了录制网站流量的操作,根据录制的用户操作,得到网站上面的URL请求。点击保存按钮,将测试计划保存到本地文件中。

2024-06-03 15:00:31 1347

原创 Java中的枚举(Enum)

枚举类除了可以实现接口外,还可以在枚举类中定义抽象方法,这样每个枚举的对象只要分别实现了此抽象方法即可。RED{public String getColor(){//枚举对象实现抽象方法return "红色";},GREEN{public String getColor(){//枚举对象实现抽象方法return "绿色";},BLUE{public String getColor(){//枚举对象实现抽象方法return "蓝色";//定义抽象方法。

2024-05-31 00:30:00 428

原创 高级用法

如果我们自己去用代码实现的话其实会非常的复杂,并且要求你对并发编程有足够的理解和认识。而如果我们使用Stream的话,我们只需要修改一个方法的调用就可以使用并行流来帮我们实现,从而提高效率。​ 即使我们操作的是整数小数,但是实际用的都是他们的包装类。JDK5中引入的自动装箱和自动拆箱让我们在使用对应的包装类时就好像使用基本数据类型一样方便。虽然这个时间消耗很下。但是在大量的数据不断的重复装箱拆箱的时候,你就不能无视这个时间损耗了。​ 我们之前用到的很多Stream的方法由于都使用了泛型。

2024-05-30 00:30:00 360

原创 方法引用

​ 我们在使用lambda时不需要考虑什么时候用方法引用,用哪种方法引用,方法引用的格式是什么。我们只需要在写完lambda方法发现方法体只有一行代码,并且是方法的调用时使用快捷键尝试是否能够转换成方法引用即可。​ 我们在使用lambda时,如果方法体中只有一个方法的调用的话(包括构造方法),我们可以用方法引用进一步简化代码。注意,如果我们所重写的方法是没有参数的,调用的方法也是没有参数的也相当于符合以上规则。​ 当我们方法引用使用的多了慢慢的也可以直接写出方法引用。,这个时候我们就可以引用类的实例方法。

2024-05-29 00:30:00 563 2

原创 函数式接口

​只有一个抽象方法的接口我们称之为函数接口。​ JDK的函数式接口都加上了**@FunctionalInterface** 注解进行标识。但是无论是否加上该注解只要接口中只有一个抽象方法,都是函数式接口。

2024-05-28 00:30:00 890

原创 Optional

​ 我们在编写代码的时候出现最多的就是空指针异常。所以在很多情况下我们需要做各种非空的判断。if(author!=null){​ 尤其是对象中的属性还是一个对象的情况下。这种判断会更多。​ 而过多的判断语句会让我们的代码显得臃肿不堪。​ 所以在JDK8中引入了Optional,养成使用Optional的习惯后你可以写出更优雅的代码来避免空指针异常。​ 并且在很多函数式编程相关的API中也都用到了Optional,如果不会使用Optional也会对函数式编程的学习造成影响。

2024-05-27 17:26:24 1245

原创 线程池中的阻塞队列和拒接策略

在 Java 中,线程池使用包中的来管理线程。提供了几种不同类型的阻塞队列和拒绝策略,以便处理线程池中的任务调度和资源管理。

2024-05-26 19:04:24 996

原创 关系型数据库和非关系型数据库的区别是什么?

非关系型数据库一般强调的是数据最终一致性,而没有像ACID一样强调数据的强一致性,从非关系型数据库中读到的有可能还是处于一个中间态的数据,因此如果业务对于数据的一致性要求很高,那么非关系型数据库并不一个很好的选择,非关系型数据库更多的偏向于OLAP(联机分析处理)场景,而关系型数据库更多偏向于OLTP(联机事务处理)场景。而NoSQL数据库是横向扩展的,非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。

2024-05-22 21:52:56 565

原创 Vue3中路由(router)的使用

然后在项目的router目录下创建index.js文件,在其中编写路由的具体代码,并导出。在App.vue文件的template标签中,定义router-view标签。在main.js中导入创建路由的js文件,并调用实例的use方法使用路由器。在script中进行跳转。

2024-05-21 00:30:00 373

原创 SpringSession原理简析

Session的原理Session是存在服务器的一种用来存放用户数据的类哈希表结构,当浏览器第一次发送请求的时候服务器会生成一个hashtable和一个sessionid,sessionid来唯一标识这个hashtable,响应的时候会通过一个响应头set-cookie返回给浏览器,浏览器再将这个sessionid存储在一个名为JESSIONID的cookie中。

2024-05-20 14:20:39 1654

原创 Vue3组件通信方式

在vue框架中事件分为两种:一种是原生的DOM事件,另外一种自定义事件。原生DOM事件可以让用户与网页进行交互,比如click、dbclick、change、mouseenter、mouseleave…自定义事件可以实现子组件给父组件传递数据自定义事件可以实现子组件给父组件传递数据.在项目中是比较常用的。比如在父组件内部给子组件(Event2)绑定一个自定义事件<template>//事件回调console.log("这是子组件传递给父组件的信息xxxxx")</script>

2024-05-19 21:26:33 1447

原创 Stream流

​ Java8的Stream使用的是函数式编程模式,如同它的名字一样,它可以被用来对集合或数组进行链状流式的操作。可以更方便的让我们对集合或数组操作。

2024-05-18 00:30:00 1362

原创 Lambda表达式

​ Lambda是JDK8中一个语法糖。他可以对某些匿名内部类的写法进行简化。它是函数式编程思想的一个重要体现。让我们不用关注是什么对象。而是更关注我们对数据进行了什么操作。

2024-05-17 10:20:12 562

原创 Java中的锁

线程八锁,实际是总结出来也就是,上锁【类、实例】和线程执行方法【是否是同一个实例】的划分,而增加sleep是为了能够更好的展示效果,能够更好去理解线程。

2024-05-15 20:20:37 927

原创 Cookie和Session的区别

4、生命周期:Cookie可以设置过期时间,如果设置了过期时间,即使关闭浏览器,Cookie也会保存在本地硬盘中,直到过期时间到达才会被删除。5、数据类型:Cookie和Session都是key-value结构,但Cookie的value只能是字符串类型,而Session的value是object类型,可以存储更复杂的数据结构。而Session数据存储在服务器上,没有敏感信息泄漏的风险,安全性较高。1、存储位置:Cookie数据存放在客户的浏览器上,而Session数据放在服务器上。

2024-05-14 00:30:00 338

原创 Git的使用

工作区只能在一个分支工作,每个分支存放的文件或者资源是不一样的,就相当于不同的文件夹。当我们合并分支后,两个或者多个分支对同一个文件的同一个地方进行修改的时候(不是同一个地方是不会出现冲突的 ),此时git就不知道要取哪个分支修改的值,是取a分支修改的值,还是取b分支修改的值呢,此时就产生了冲突。克隆一般只会执行一次,就是在你进去公司的时候,别人提交了以后,我们不需要去克隆整个仓库,仓库是很大的,克隆也需要花很多时间,所以要去远程仓库中抓取我们要的版本信息,就是那些别人新增加的提交。

2024-05-13 00:30:00 1417

原创 SpringBoot中使用MongoDB

引入依赖在application.yml中写配资spring:data:mongodb:# 主机地址# 端口# 数据库名称启动项目,如果成功启动,说明基础配资没有问题。

2024-05-12 00:30:00 1107

原创 Mongodb中的索引

索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须执行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。如果查询存在适当的索引,MongoDB可以使用该索引限制必须检查的文档数。索引是特殊的数据结构,它以易于遍历的形式存储集合数据集的一小部分。索引存储特定字段或一组字段的值,按字段值排序。索引项的排序支持有效的相等匹配和基于范围的查询操作。

2024-05-11 00:30:00 2681

原创 Mongodb的基本操作

选择切换数据库:use articledb插入数据:db.comment.insert({bson数据})查询所有数据:db.comment.find();条件查询数据:db.comment.find({条件})查询符合条件的第一条记录:db.comment.findOne({条件})查询符合条件的前几条记录:db.comment.find({条件}).limit(条数) 查询符合条件的跳过的记录:db.comment.find({条件}).skip(条数)

2024-05-10 00:30:00 1138

原创 Mysql中的DQL语句

本文摘录于这篇优秀的文章。

2024-05-09 00:30:00 1260

原创 Mysql中的约束

约束是作用于表中字段上的,可以再创建表/修改表的时候添加约束。

2024-05-08 00:30:00 476

原创 Mybatis中的缓存机制

MyBatis 中的缓存机制包括一级缓存(Local Cache)和二级缓存(Global Cache),用于提高查询性能和减少数据库访问次数。

2024-05-07 00:30:00 818

原创 Mybatis中的动态SQL

if标签可通过test属性中的表达式进行判断,若表达式的结果为true,则标签中的内容会执行;反之标签中的内容不会执行。在where后面添加一个恒成立条件1=1,这个恒成立条件并不会影响查询的结果这个1=1可以用来拼接and语句,例如:当empName为null时如果不加上恒成立条件,则SQL语句为,此时where会与and连用,SQL语句会报错如果加上一个恒成立条件,则SQL语句为,此时不报错,并且查询结果跟我们预想的也并无差别。

2024-05-06 09:38:51 734

原创 Integer中的缓存机制

所以这就解释了为什么a==b是true而c==d是fasle,当Integer值在[-128, 127]范围时,都是从缓存中拿的同一个对象,使用==比较地址自然相同,所以返回true;为什么明明都是同一个数字进行==比较,当数字等于127的时候,两个Integer类型的变量进行==比较是相同的,数字式128的时候就不同了呢?首先我们需要明确==和equals方法的区别,==比较两个对象的地址是否相同,equals比较两个对象的值是否相同。的时候就已经完成了,所以后面需要的时候直接拿的缓存中的对象。

2024-05-02 19:07:19 366

原创 布隆过滤器(Bloom Filter)

布隆过滤器(Bloom Filter)是一种空间利用效率极高的概率型数据结构,由 Burton Howard Bloom 在1970年提出。它主要用于判断一个元素是否可能属于某个集合,不支持直接获取集合中的所有元素。布隆过滤器的基本结构是一个固定长度的位数组和一组哈希函数。

2024-04-30 00:30:00 609

原创 CAP定理、BASE理论

但是,这绝不等价于系统不可用。② 系统功能上的损失:正常情况下,在一个电商网站上进行购物的时候,消费者几乎能够顺利完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。: 最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。: 软状态是指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。

2024-04-29 17:02:08 366

原创 代理模式-动态代理模式

动态代理是一种在运行时动态创建代理对象的技术,它可以在不修改源代码的情况下为原始对象添加额外的功能或控制其行为。动态代理通常用于实现AOP(面向切面编程)中的切面,以及在不同的框架和库中实现各种功能,例如远程调用、事务管理等。在Java中,动态代理主要通过两种方式实现:基于接口的动态代理和基于类的动态代理。基于接口的动态代理:Java标准库中的类提供了创建基于接口的动态代理的能力。通过方法,可以传入一个类加载器、一组接口和一个对象来创建代理对象。接口中的invoke。

2024-04-28 00:30:00 1317

原创 Spring AOP

Spring AOP(Aspect-Oriented Programming,面向切面编程)是 Spring 框架提供的一种面向切面的编程方式。它通过在程序运行期间动态地将代码切入到类的指定方法、指定位置上,实现了对程序功能的增强。AOP的编程思想就是把很多类对象中的横切问题从业务中分离出来,从而达到解耦的目的增加代码的重用性,提高开发效率。即在声明的类中添加@Component、@Aspect两个注解,Springboot中要引入spring-boot-stater-aop依赖包@Component。

2024-04-27 00:30:00 1268

原创 代理设计模式——静态代理设计模式

静态代理是一种结构型设计模式,它在编译时就已经确定了代理类和真实类的关系,即代理类是在编译期间就确定的,代理类和真实类的关系在程序运行前就已经确定。静态代理通常通过手动编写代理类来实现,在代理类中调用真实对象的方法,并可以在调用前后进行一些额外的操作。现在去租房子一般都是去找中介,因为中介手中有大量的房源,中介就是一个代理角色,实际出租房子的房东就是一个真实角色。举例:在原有的增删改查的基础上添加一个日志功能,但是不改变原有代码,这时,我们就可以使用代理模式来完成。使用代理模式无侵入的添加一个Log功能。

2024-04-26 00:30:00 406

原创 原型设计模式

在克隆方法中简单的使用super.clone()方法是浅克隆,对于克隆出来的新对象中的引用数据类型的变量实际指向的还是与旧对象中的对应的引用数据类型变量的同一个内存地址。当需要创建新对象时,客户端向原型对象发出克隆请求,原型对象将复制自身并返回一个新对象。实例的值时,实际上是修改了该实例的属性值,而不会创建新的实例。客户端通过调用原型对象的克隆方法来复制对象,而不是通过直接实例化新对象。:通过调用原型对象的克隆方法来创建新对象,而无需知道具体的实现细节。:避免了重复的实例化过程,提高了对象创建的效率。

2024-04-25 00:30:00 1387

原创 Mysql中的存储引擎

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

2024-04-24 00:30:00 770

空空如也

空空如也

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

TA关注的人

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