自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java学习--HashMap

由于HashMap在在多线程环境下没有采取同步措施,导致多个线程同时访问或修改同一个HashMap实例时可能会引发并发问题,且在修改HashMap时,修改操作会导致其内部数据结构。1.`DEFAULT_INITIAL_CAPACITY = 1 << 4`:默认容量,初始值通常为16。状态不一致从而引发程序崩溃的问题,所以其是非线程安全的,所以在使用时需要考虑是否为多线程环境,防止出现问题。6.`MIN_TREEIFY_CAPACITY = 64`:最小树化容量。

2025-04-27 22:30:46 192

原创 Java基础--面向对象编程

面向对象编程是一种以对象为核心的编程范式,其核心在于对象和类的概念。面向对象编程及其三大特性,即封装、继承、多态,是掌握现代编程技术的基础。

2025-04-24 10:04:09 360

原创 Java学习--String不可变问题

String的不可变性是Java语言中一个非常重要的设计特性,其意味着一旦String对象被创建,它的值就不能被改变,我们所有的修改String值的操作实际上是新建了一个String,然后将新的String覆盖了旧的String,而原始String对象的内容始终保持不变。可以看到2次的哈希值不同,这说明其是不同的String对象,而由于我们每次修改String对象都是新建一个对象再将其覆盖,这导致其修改的性能较低。

2025-04-24 09:37:31 117

原创 Java学习--包装类

其目的是为了优化小整数频繁使用的问题,优化内存性能,避免频繁创建或销毁小整数对象,但是其会导致在使用==判断时,会出现超出缓存范围,导致判断出错的情况,为了避免这个问题,我们应该使用x.equals(y)方法来进行判断。由于Java是面向对象的语言,很多API和容器类只能操作对象,为了接近这个问题,Java便提供了包装类,其包含了各种实用方法(如类型转换、进制转换等),也接近了基本类型不能为null的问题。同时,还有一个特殊的问题,即128问题;其拥有自动装箱和自动拆箱功能,即在赋值,比较和。

2025-04-24 09:22:15 294

原创 JavaWeb学习--MyBatis-Plus整合SpringBoot的ServiceImpl方法(增加,修改与删除部分)

由于案例开启了逻辑删除,所以这里采用的是逻辑删除的方式,如果没有开启逻辑删除,则会在数据库中删除这个数据。接下来是常用的增加,修改以及删除部分。首先是增加部分,增加一个新的数据。然后是使用实体类的id删除。然后是修改或者添加数据。接下来是Wrapper。

2025-04-04 23:45:00 268

原创 JavaWeb学习--MyBatis-Plus整合SpringBoot的ServiceImpl方法(查找部分)

与BaseMapper相同,MyBatis-Plus同样也为SpringBoot的Service层提供了一些基础的方法,使用前我们在Service层继承IService。其中的is_deleted为逻辑删除的标志,即删除时在数据库内只修改改属性以实现可恢复的删除,需要手动配置,默认下是没有这个属性。然后再创建对应的ServiceImpl,继承MyBatis-Plus提供的ServiceImpl。然后就可以在测试内使用一些基础的方法了。首先创建测试项目,其基本内容形式如下。

2025-04-04 00:00:00 391

原创 Javaweb学习--SpringBoot入门

我们可以使用嵌入式的Servlet容器,应用无需打成war包,且SpringBoot内嵌Tomcat,无需像SpringMVC项目一样,需要去单独配置本地Tomcat,且其具有自动依赖和版本控制的能力,用户无需对依赖的包进行版本控制,其会自动根据SpringBoot的版本去找到并下载对应的版本。这里的SpringBoot版本也可以在后面进行修改,所以也是一样的随意选择一个版本然后点击finish,创建好项目。然后可以在主配置文件内,启动这个项目,其大致代码如下。可以看到其正常启动,本地端口为8080.

2025-03-29 00:45:00 311

原创 JavaWeb学习--SpringMVC框架入门(2)

而在SpringMVC中,DispatcherServlet是所有请求的入口,但是其会拦截到所有的资源,导致静态资源(如img、css、js等)也会被拦截到,从而不能被使用。为了解决这个问题,我们。而在SpringMVC框架中,有一个叫作MultipartFile的对象,该对象表示上传的文件,要求变量名称必须和表单file标签的name属性名称相同。在SpringMVC中,在使用json字符串和JavaBean对象互相转换时,我们需要使用jackson的jar包。

2025-03-17 02:45:00 211

原创 JavaWeb学习--SpringBoot配置文件(1)

application.yml和application.properties,配置文件的作用是用于修改SpringBoot自动配置的默认值.传统的项目所用的配置文件通常为XML或JSON,而SpringBoot使用的YAML。其中person1和person2是同一层级,是两个不同的类,而内部的name等是其属性,而在YAML内,字符串类型默认为单引号,可不用加单双引号,而单双引号存在不同,单引号。使用YAML配置的话,其基本语法形如MAP,为:key:(空格)value,其中的空格必须要,如。

2025-03-15 23:45:00 273

原创 JavaWeb学习--SpringBoot配置文件(2)

优先级由高到底,全部加载主配置文件,高优先级的配置会覆盖低优先级的配置,同时互补配置;)相比,使用Value更为麻烦,需要一个个为属性配置,且其不支持松散绑定,即Value必须名字完全一致,而。但是这种写法下,其优先还是会读取默认的properties内的内容,所以要区分名字;的配置文件,即便我们自己编写配置文件,也不能被自动识别;)中可以存在一些大小写,符号的不同,但内容不能出现大的差距,如。的配置文件生效,将其加载到SpringBoot中,我们需要使用。在SpringBoot中,通常会使用注释。

2025-03-15 23:45:00 358

原创 JavaWeb学习-- RequestMapping注解

RequestMapping注解有四种属性,分别是value,path,method和params。其中value和path的属性一致,均用于指定请求路径的url;method则用于指定该方法的请求方式;params用于限制请求参数的条件。RequestMapping注解适用于建立请求URL和处理方法之间的对应关系,其可以作用在方法和类上。其中,作用在类上代表其是第一级的访问路径,而作用在方法上则是第二级的访问路径。

2025-03-09 23:45:00 240

原创 Java学习--反射

反射机制是在运行状中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。反射使得代码可以在运行时获取类的信息,并执行与编译时不同的操作。但是,反射相较于直接调用方法或字段会有更大的性能开销,因为反射操作需要解析类信息、检查访问权限等。由于其可以直接调用私有方法和查看私有属性,可能会破坏封装性,带来一些安全问题;且其代码相较而言更为复杂,在编写和维护时需要更多的时间成本。

2025-03-08 23:45:00 122

原创 Java学习--代理模式

静态代理是指在编译时就创建代理类,并且代理类和目标类实现相同的接口。静态代理的核心思想是代理类和目标类具有相同的接口,代理类通过调用目标类的方法来实现具体的功能。而代理对象角色内部含有对真实对象的引用,从而可以操纵真实的对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象,同时代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装;而动态代理是指在运行时,根据目标对象的接口动态地创建代理对象,代理类不需要提前实现接口,而是在运行时生成。接口来实现,其代理对象会调用。

2025-03-08 23:45:00 306

原创 JavaWeb学习--SpringMVC框架入门(1)

MVC全名是Model View Controller 模型视图控制器,每个部分各司其职。其中Model是数据模型,JavaBean的类,用来进行数据封装;View指JSP、HTML用来展示数据给用户的视图Controller用于接收用户的请求,整个流程的控制器。用来进行数据校验等。SpringMVC框架即基于Spring实现的MVC架构,其是一种设计模型的请求驱动类型的轻量级WEB框架。在Java开发中,多使用B/S架构,其分为表现层,业务层,持久层三层;SpringMVC在三层架构中的位置就是表现层。

2025-03-08 23:45:00 142

原创 JavaWeb学习--Maven(下)

在Maven中坐标是构件的唯一标识,Maven坐标的元素包括groupId、artifactId、version、packaging、classifier。由于Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范,拥有了统一规范,就可以把查找工作交给机器。而对于更大的项目,我们可能需要创建自己的库并在不同的部分使用它的项目。不同的项目需要不同版本的库。Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,生命周期只是定义了一系列的阶段,并确定这些阶段的执行顺序。

2025-03-04 23:45:00 562

原创 JavaWeb学习--Spring

Spring 是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用,其是一个分层的 JavaSE/EE full-stack() 轻量级开源框架,主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为JavaEE应用程序开发提供集成的框架。可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP 是一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构。

2025-03-04 23:45:00 276

原创 JavaWeb学习--Maven(上)

相较于其他的如ANT,IDE,Eclipse,IDEA等工具,Maven使用更为简便,不需要进行过多的手工操作,其只需要定义一个 pom.xml,然后把源码放到默认的目录,Maven 帮你处理其他事情。Maven拥有约定,知道你的代码在哪里,放到哪里去,不会出现因个人的 IDE 配置不同,然后出现本地代码换个地方编译从而出错。且拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程,还拥有依赖管理,仓库管理。版本,第三方软件等简要介绍。然后再Path中添加。

2025-03-04 03:15:00 258

原创 JavaWeb学习--SSM整合(配置项目)

整合的思路包含:先搭建整合的环境,然后把Spring的配置搭建完成,再使用Spring整合SpringMVC框架,最后使用Spring整合MyBatis框架。然后在web.xml中配置ContextLoaderListener监听器(该监听器只能加载WEB-INF目录下的applicationContext.xml的配置文件)。然后再resources里创建这个application.properties,写入对应的数据库信息。在其中的applicationContex中写入如下配置。

2025-03-03 13:48:23 232

原创 JavaWeb学习--AJAX

jsonp:JSONP格式。这代表着如果加载页面时,可以将不同部分分为不同的请求,从而实现一个页面的每个部分都可以独立加载,从而实现在不重新加载页面的情况下,对页面的部分区域进行更新内容。AJAX是用于快速创建一个动态页面的技术,其通过让后台与服务器进行少量的数据交换,实现页面的异步更新,即在不重新加载页面的情况下,对页面的部分区域进行更新内容。type:请求方式默认为get,但也可以传入post,但是除了get和post以外的http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。

2025-03-02 00:00:00 235

原创 JavaWeb学习--JSON

JSON的键值对集合对象是一个无序的“‘名称/值’对”集合。一个对象以“{”开始,“}”结束。每个“名称”后跟一个“:” ,“ ‘名称/值’ 对”之间使用“,”分隔。格式如下:var json = {“name”:”Jack”,”age”:21,”isGlass”:true};JSON 指的是 JavaScript 对象表示法,其是一种轻量级的文本数据交换格式。一个数组以“[”开始,“]”结束。格式如下:var json = [“Jack”,”Rose”,”Tom”,89,true,false];

2025-03-01 23:45:00 152

原创 JavaWeb学习--正则表达式

此外,还有边界符(位置符)用来提示字符所处的位置,主要有两个字符:^,表示匹配行首的文本;$,表示匹配行尾的文本。正则表达式是一种字符串匹配的模式或者规则,其用于约束字符串的格式和类型,如在注册用户时,可以使用正则表达式限制用户必须输入11位数字的手机号。其通常使用test()方法 用来查看正则表达式与指定的字符串是否匹配 ,如果正则表达式与指定的字符串匹配 ,返回 true ,否则 false。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

2025-03-01 23:45:00 169

原创 JavaWeb学习--请求转发和重定向

转发时,路径是基于当前的请求上下文的,即路径的写法是相对路径。例如我们做一个登录的功能,先填写用户名密码然后提交到一个负责登录的Servlet,Servlet为我们做用户名和密码的校验,如果我们都正确的话,我们就要跳转到登录的提示页面,如果错误就要跳转到登录失败的页面。重定位是是服务器告诉客户端(浏览器)去请求另一个URL,客户端(浏览器)收到响应后会向新的URL发送请求,并且客户端(浏览器)的URL栏会发生变化,重定向操作后,request中的属性将会所有失效,并开始一个新的request对象。

2025-02-27 03:45:00 261

原创 数据库学习-事务(一)

事务是数据库提供的一个特性,是一个由一系列操作组成的逻辑单元,这些操作要么全部执行,要么全部不执行。隔离性:事务的执行不应受到其他事务的干扰,数据库应该确保一个事务的执行对其他事务是隔离的。事务开始时,数据库必须满足所有约束,事务执行后,也必须保持数据的完整性,不能出现脏数据。原子性:事务是一个原子操作,要么全部执行,要么全部不执行。也就是说,在事务执行过程中,数据库中的变化要么完全生效,要么完全不生效。回滚:事务中发生错误或被用户手动撤销时,数据库会回滚到事务开始之前的状态,撤销事务中所做的所有操作。

2025-02-20 01:45:00 143

原创 Java学习-堆排序

构建堆的时间复杂度是 O(n),因为我们从最后一个非叶子节点开始,对每个节点进行调整,每次调整的最大深度为log(n),因此构建堆的时间复杂度为 O(n)。但其本身是不稳定的,因为它交换的过程可能改变相同元素的相对位置,尽管它的时间复杂度是 O(n log n),但它常常在一些实际情况中比快速排序慢。也就是说,根节点是所有节点中的最大值。通常情况下堆排序使用最大堆,其基本思路为堆排序的基本思路是通过构建一个最大堆,每次取出根节点,并将其与当前堆的最后一个元素交换,然后重新调整堆,直到堆中没有元素。

2025-02-20 01:30:00 107

原创 Java学习-Map

其按照key来做排序,通常情况下key不能为null,value可以为null。Map中存储的数据类型可以是除了基本数据类型(int等)以外的所有数据类型(String,Inteager等)如下图创建map中加入int,其会提示报错。是通过键(key) 来存取值(value),每个键只能映射到一个值,通常情况下,键不可重复,但是值可以重复,即没有完全相同的键值对。其允许多个null值和一个null键,也不是线程安全的。是一种用于存储键值对的集合类,主要用于快速查找、更新和删除与键关联的值。

2025-02-14 00:00:00 276

原创 Java学习-I/O流

I/O也称为Input/Output,即输入和输出,指的是某个设备或环境进行数据的输入或者输出。例如:键盘就是输入设备,输入用户需要打的信息,再比如显示器就是输出设备,输出用户需要的图像信息。对于java来说,I/O就是输入输出问题,java将它抽象成流对象来解决。字节流:二进制的数据,这种数据一般用文本打开我们读不懂。比如,图片文件,mp3文件,等等。文本,我们能用文本打开后读的懂的都可以认为是字符流。比如:文章,java文件等等。1.根据IO流在java中的输入输出角度分为输入流和输出流。

2025-02-14 00:00:00 158

原创 Java学习-归并排序

归并排序是一种基于递归思想的排序算法,递归思想指的是在解决问题的时候,通过将一个大问题分解成多个小问题,并对每个小问题进行独立处理,最终合并解决方案得到整个问题的答案。在许多经典排序算法中,递归是不可或缺的核心部分。但其需要额外的存储空间来存储子数组,对于每次递归的分割,需要创建新的临时数组,故空间复杂度为O(n)。归并排序是通过不断地将数组分割成更小的子数组,递归地对这些子数组进行排序,最后将这些排序好的子数组合并成一个完整的有序数组。合并阶段:将子数组按顺序合并,合并时保证合并后的数组依然是有序的。

2025-02-12 04:00:00 132

原创 Java学习-希尔排序

25,37,78这3个进行比较,然后12,96,68之间进行比较,最后22,81,25致敬进行比较,比较之后结果为11,25,12,22,27,37,68,25,34,78,96,81,64;平均时间复杂度:一般情况下,希尔排序的平均时间复杂度在O(n^3/2)到 O(n²) 之间,一般只需记住O(n^3/2)即可,具体取决于步长序列。如初始数据如下:64, 25, 12, 22, 11, 37, 96, 81, 34, 78, 68, 25, 27分组间隔为4。,这取决于步长序列的选择。

2025-02-12 00:30:00 280

原创 Java学习-插入排序

插入排序作为8大排序之一,其书写简单,容易理解,其原理为:将一个待排序的元素插入到已经排序好的部分中,使得排序好的部分始终保持有序,类似于现实生活中和朋友打斗地主,获取第一张牌时,其已经是有序的状态,之后每获取一张牌都会判断其大小,将其插入到合适的位置,直到自己的牌全部获得。次比较,没有任何元素需要移动;最坏时间复杂度为O(n²),即当输入数组是逆序时,每次插入都需要进行最多的比较和移动操作;故其平均时间复杂度为O(n²)。其最好的时间复杂度为O(n),即当输入数组已经是有序时,只需要进行。

2025-02-12 00:00:00 227

原创 Java学习--快速排序

其原理为选择一个元素为基准元素,这个基准元素可以是数组的第一个元素、最后一个元素,或是中间元素,甚至可以是任意一个元素, 然后根据这个基准元素,将待排序数组分成两部分。快速排序时间复杂度在最好的情况下是 O(nlogn),而在最坏的情况下,即当数组是有序的或接近有序时,其时间复杂度是 O(n²),但其平均情况下也是 O(nlogn).虽然快速排序和冒泡排序一样是原地排序,不需要额外的存储空间,但其因为进行了递归运算,而递归运算的空间复杂度为O(logn),故快速排序的空间复杂度为O(logn)。

2024-11-08 11:15:00 131

原创 Java学习--冒泡排序

其最优的情况下,输入的数列已经是升序,冒泡排序只需要进行一次遍历,故最优时间复杂度为O(n),最坏的情况下需要遍历为n*(n-1)/2次,时间复杂度为O(n²),其平均时间复杂度为O(n²)。由于其并不需要辅助数组等额外空间,故其空间复杂度为:O(1)。冒泡排序是一种常见的排序算法,其原理为:重复的遍历整个需要排序的数组,每一个数字均会与相邻的数字进行比较并判断是否需要交换,直到没有需要交换的元素为止。

2024-11-08 10:30:00 207

原创 Mysql关系学习笔记

添加字段,作为外键(主键是某个表的内容唯一表识,如id等;外键是其他表的主键)在一对多关系中的多里面添加字段,加外键(最优方案)可以外置一个关系表,添加2个表的主键作为外键。可以外置一个关系表,添加2个表的主键作为外键。可以外置一个关系表,添加2个表的主键作为外键。最优方式为合成一张表;也不适合添加字段做外键。

2024-10-16 21:06:14 108

原创 Java学习笔记

double可以向下兼容float,同时float和都可以接受long,int,short,byte类型的变量,但是如果int数值过大,float容易丧失精度,long数值过大,float和double都容易丧失精度。final 修饰的基本类型不可以第二次赋值,修饰的引用类型也不可以改变指向,修饰的类不可以被继承,修饰的方法不可以被重写,所以final防止指令重排序,遏抑流水线性能优化,保障多线程并发场景下的可见性(重点)6不超范围的情况下,int可以用2,8,16进制;字符,符号,几何图形;

2024-10-16 21:05:43 396

原创 Mysql学习笔记

方法(select等) 函数() from 表1 join 表2 on 链接条件 表2 join 表2 on链接条件 where order limit。内链接:方法(select等) 函数() from 表1 join 表2 join ....on 链接条件 where order limit。左内链接:方法(select等) 函数() from 表1 left join 表2 on 链接条件 where order limit。内链接:是拼装2个表的内容,将2个表符合条件的部分拼成一个新的表。

2024-10-14 16:18:38 168

空空如也

空空如也

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

TA关注的人

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