- 博客(28)
- 收藏
- 关注
原创 OJ项目测试
本项目实现了一个完整的OJ项目所应具有的大部分功能.使用户或管理者能直接通过网页对网站进行管理和使用。整个用户端实现了做 题功能、代码沙箱、参加竞赛、以及查看竞赛排名.管理端实现了发布竞赛、发布题目、用户拉黑等功能。SpringMVC、MySQL、MyBatis、SpringCloudAlibaba、Redis、Lombok、JWT、MD5、雪花算法。
2025-05-12 13:25:02
292
原创 论坛项目测试
论坛项目基于SSM框架。借助SSM框架的高效开发特性,实现了系统的稳定架构与灵活功能拓展。平台功能丰富, 用户能发表自己的帖子。在数据持久化方面,MyBatis发挥强大的数据库操作能力,精准高 效地存储和管理用户信息、帖子内容、评论等各类数据。SpringBoot、SpringMVC、MyBatis、Token、MD5等。
2025-05-12 13:23:33
278
原创 Redis的持久化初步了解
当服务器收到备份的指令,首先会判断是否有其他备份指令,如果是AOF则直接返回,是RDB则会等待RDB备份完毕,然后fork出一个一模一样的子进程用于备份,同时原缓冲区继续往旧的AOF文件里写入,还会给新的缓冲区也发送相同的命令用于写入新的AOF文件,当子进程完成重写以后会通知父进程替换AOF文件.当redis运行时写入的每一个命令都会先存入到缓冲区,然后到了预设要求写入AOF文件中,由于命令过多且有很大的冗余,会触发重写操作,对命令进行一个整理.当服务器重启时就会重AOF中读取数据。
2025-03-20 16:19:37
497
原创 SpringMVC的基本使用
2)可以通过方法中的参数获取对应键值对,/*请求的参数如果放在body里会自动的填充到参数对象里,在url就需要@RequestParam来映射.需要注意的是get请求无法接收body里的参数,只能接收url里的(也算是规范程序员的一种方式了).这是错的我给注释掉了*/9) 可以通过这种方式来获取URL中的信息@PathVariable后面的括号是指定路由中的这个键值对给后面的变量,不加就默认跟着相同的变量名,如果是没有就会报错。3)需要注意的是当参数类型为基本类型的时候必须要传这个参数,否则会报错。
2025-02-20 23:58:18
1075
原创 MyBatis的初步使用
当对象作为返回值的时候,MyBatis把返回的值根据名字,一一对应的赋值给返回值的对象,当名字不同的时候就不会进行赋值.但是java有java的命名规则,MySQL有MySQL的.此时我们就要做一些处理来告诉java或者告诉MySQL谁对应谁.这里有三种方法。选择语句,首先与什么语句无关,namespace的值是对应接口的全限定类名下面的语句的id对应的是方法名,resultType对应的是返回值的类型,如果是集合那就是集合里的元素的类型.根据需求的不同对SQL语句的调整,比如where查询中条件的数量。
2025-02-20 23:56:17
641
原创 Mybatis的#{}和${}
{}会给String类型的参数自动的加上双引号,而${}则是直接填充.单着也给#带来了一些麻烦.比如在order by 的时候 的顺序desc和asc都是字符串,却不能加双引号,模糊查询的时候涉及到许多关键字的选择也是字符串这个时候也很麻烦.所以要选择性的用.对参数位置进行一个占位的操作,在数据库生成一个模版,等待后续填充.也可以推测出#在生成模版后的性能是比$快的.为什么说#比$安全呢,$相当于自己写一个SQL语句,而#则是MySQL给你一个模版,我们负责填值.值再花里胡哨那也和表的结构没啥关系.
2025-02-20 23:54:26
253
原创 MySQL基础知识---约束+索引
使用外键约束需要建立两张表,一张父表,一张子表.在子表中被外键约束的字段的所有值都必须是父表中指定的字段所拥有的值.并且父表中的这个字段必须是具有非空特性的.对于父表和子表的创建与删除,先删子表再删父表,先创建父表再创建子表.根据他们的依赖关系也可以看的出来.主键不能为空不能为null,并且一张表只能有一个主键,使用主键进行查找会快速许多,这涉及到索引.当给id字段设置唯一性约束的时候,该字段就不能有重复值但可以为空并且空可以重复.给id字段设置非空约束,当插入数据时,id字段就不能为空.
2025-02-19 18:22:41
294
原创 MySQL基础知识---前置知识+DQL
当两张表进行连接操作时,第一张表的数据会与第二张表的数据一一匹配一次,也就是说当第一条记录与第二张表的第一条记录整合为一条记录后,第一张表的第一条记录还会与第二张表的剩下所有记录继续整合,直到整合完毕.然后就该第一张表第二条记录继续这样操作下去,直到第一张表的结束.这种现象称为笛卡尔积.可以看到笛卡尔积会使查询出来的数据量变得非常庞大并且会带来许多无效数据.在进行连接操作的时候可以加上一些条件用来筛选出有效的数据,这样可以避免返回给客户端的数据太杂乱,但是加上条件并不能减少数据的匹配次数.
2025-02-19 18:21:06
962
原创 MySQL基础知识---DML+DDL
使用str_to_date函数进行插入日期类型参数,当使用’-’,’/’,’.’作为分隔符时可以不使用str_to_date函数。insert into tb_name(col...) values(数值...),(数值...);需要注意的是,sre_to_date函数当分隔符不一样时,无法解析为日期类型,会转换为NULL.date_format(日期,输出的日期格式): 函数可以将日期格式化为字符串。str_to_date(日期,输出的日期格式): 将字符串转为日期类型。
2025-02-19 18:19:20
452
原创 SpringCloud简述
可拓展性 : 主要分为两点增加业务功能和增加业务响应.增加业务功能的话,单体架构需要停掉所有整个服务,并且代码之间的耦合关系也很大,但是微服务架构在确保所增加功能不会影响其他服务时只需要停掉相关的服务,并且服务直接通过接口来访问,相互之间耦合较低.增加业务响应,虽然都是通过增加机器,但是微服务只需要针对薄弱的地方增加即可,单体架构则需要部署整个服务。初心:当存在多个服务时,服务之间往往通过接口进行数据交互,如果不借助服务注册中心,一般URL是写死的,这会带来两个问题.微服务带来的优势与挑战 优势。
2025-02-18 20:35:02
297
原创 SpringCloud-Eureka初步使用
借助上面两张图来理解,当我们要出去玩的时候,先去咨询景点的电话,询问一下有没有票之类的.但是景点的电话可能是随时变动的,景点为了随时能让游客联系到自己,就把电话号码发给了一个官方组织也就是114站台,此时游客就可以先去114站台索要景点的电话,然后进行买票操作.结合到服务注册中心,这里的电话号码就是服务的IP和端口号等一些信息.值得注意的是服务的提供方和消费方是相对的,仅在一次远程调用中成立.当第二次调用时,就可能发生改变.功能:服务注册中心有两个最核心的功能,服务注册和服务发现。
2025-02-18 20:32:16
555
原创 SpringCloud-OpenFeign初步使用
在服务调用端编写Feign客户端,并加上@FeignClient(value=”应用名”)URL的对应要与被调用方一致,方法名无所谓.这里有三个注意点,一、传递参数的时候最好加上@RequestParam注解,注解内标明被调用方的参数名.二、传递对象要用@SpringQueryMap注解标记一下.三、传递json数据要用@RequestBody标记。引入依赖,由于OpenFeign是基于负载均衡的所以要引入三个依赖,openFeign,LoadBalance和注册中心,这里使用Nacos。
2025-02-18 20:25:16
234
原创 Spring Cloud LoadBalancer初步使用
添加依赖,需要一个注册中心引入eureka依赖,然后引入SpringCloud一整套的依赖,其中自然也包含了Spring Cloud LoadBalancer。添加依赖,需要一个注册中心引入eureka依赖,然后引入SpringCloud一整套的依赖,其中自然也包含了Spring Cloud LoadBalancer。轮询策略,随机策略,自定义策略.轮询策略是默认的无需多余操作,按照上面步骤即可,剩下两种需要我们在上面的使用方法中进行一些修改。给远程调用类加上注解并指定应用服务名和负载均衡策略类。
2025-02-15 17:54:40
221
原创 反射的基本使用
通过set方法可以给字段进行赋值,但是需要传入一个对象和值。并且不在权限内的字段还要手动先放开权限才行。也可以通过get方法获取值。需要注意的是第二个参数是个可变参数,不同的参数主要用于区别重载的方法。在java中各种关键字在底层都是用数字来表示的。同样要注意的是,私有方法在使用前也需要放开权限。这个方法只能在public权限寻找指定的方法。这个方法可以获得所有权限为public的字段。这个方法可以在所有权限下获得指定的方法。这个方法可以获取类对象所有的成员字段。三种方法获取到的都是同一个类对象。
2025-02-15 17:29:55
239
原创 SpringCloud-Gateway初步使用
过滤器按照执行时机分为两种post类型,在请求执行完之后执行的过滤器.pre类型,在请求到达之前执行.按照作用范围分为GatewayFilter类型只作用在一个路由或者一个分组上.GlobalFilter作用于所有路由上。网关,后端项目的唯一入口.对规定的请求做了统一的管理.类似于公司里的前台,对所有访客进行身份校验,引路等等操作.这里我们介绍阿里巴巴的SpringCloudGateway。
2025-02-13 15:41:08
1038
原创 一些关于TCP,UDP,IP的理解
为什么主机号要减去2,在主机号全为0是结合前面的网络号就成了一个网络号(有点拗口,可以认为是一词多用比如张德帅是他的名字,德帅也是),代表这个局域网。UDP数据报为十个字节,报头八个字节分为源端口,目的端口,UDP报文长度(整个数据报),校验和(通过某种运算(比如CRC,MD5,SHA1)得到的载荷的映射,极难逆运算出来),载荷两个字节。IP地址是互联网上唯一标识一台网络设备的一串32位二进制数字(这是IPV4,IPV6为128位(16个字节)以下都是默认IPV4),由网络号和主机号组成。
2024-04-23 01:03:10
1174
1
原创 我学习多线程的一些知识
但在极端情况下,比如取钱,当我们去ATM哪里取钱时,如果突然卡了,我们又手欠多按了几下,ATM进行了多次CAS操作,当第一次成功扣款后,第二次由于获取到的值与原值不同就不会扣款,但是如果一个人突然转了等额的钱进来,那么就会被扣了。这是一把可重入的锁,他与synchronized的用法有所不同,他加锁采用的是自己类里面的方法而不是直接写旁边,而且这两把锁是不会产生锁冲突的.同时也要注意因为ReentrantLock把加锁解锁分开了,我们要注意不要忘记解锁,可以用finally修饰一下.
2024-04-22 23:33:07
588
原创 多线程一些学习阶段的知识-------基础篇
那么如果不加锁使用呢?1.创建进程2.销毁进程3.调度进程.这三个过程都非常消耗时间,而如果在程序之间如果有共享的资源这时候重新调度就会非常浪费(举个我刚刚看到的例子:在我写这篇文档的时候,WPS会自动的帮我保存文档,而键盘会读取我输入的文字,屏幕负责显示文字,在单核心CPU上(类似于并发)如果只有一个进程,那么就只能做一件事.所以只能采用多进程的方式,而每个进程都会有我文档的信息,进程的来回切换很浪费(进程内的上下文比线程多)同时可以减少通信带来的性能损失(访问共享空间))于是就有了线程.
2024-04-02 23:43:25
611
1
原创 枚举的一些知识点
/4.valueOf(),返回对应的枚举常量,之所以打印名称是因为没有重写toString。//3.values()返回一个数组,在源码中也说明了这个隐式的方法,在编译阶段生成。//必须第一行,其后面可以是无参和有参的,前提是类里得有,而且内置了一个索引从0开始。//枚举类其实继承了一个Enum的大枚举类,这个枚举类替我们做了很多事。//2.ordinal()返回枚举的索引,从0开始。//1.name(),返回对应枚举的名字。SPRING("春暖花开","春"),//在真正的枚举类里是能修改属性的。
2024-03-21 00:49:39
493
1
原创 MyBatis一些学习的记录
当对象作为返回值的时候,MyBatis把返回的值根据名字,一一对应的赋值给返回值的对象,当名字不同的时候就不会进行赋值.但是java有java的命名规则,MySQL有MySQL的.此时我们就要做一些处理来告诉java或者告诉MySQL谁对应谁.这里有三种方法。b.告诉MyBatis返回的结果谁对应谁,然后把返回的结果让根据这个对应关系填充进返回值.id表示把这个对应关系作为一个组,下一个语句想要就不用写里面的内容了而是写一个。a.要求MySQL返回的数据要用什么名字,也就是通过as修改。
2024-02-14 03:53:02
880
1
原创 IOC和DI
重写: 如果父类和子类都使用了@Bean,那么是不行的就算子类返回父类的对象也是不行的(也就是子类方法的返回值是父类被重写方法返回值的父类)解决方法:考虑重命名其中一个bean,或者通过设置spring.main.allow-bean-definition- override =true来启用覆盖,如果只有一个被@Bean修饰那么Spring就可以直接建立对象.这里要注意的是三种常用的getBean方法,当使用字符串的时候是对象的名字,默认是类名的小驼峰,当第一个和第二个都是大写字母的时候就不变第一个了。
2024-02-07 19:48:13
948
1
原创 JVM一些知识点
把申请出来的内存让JVM自动检测是否不用了,然后回收掉.这就带来两个问题1.系统开销:需要一些线程不断的去扫描所有对象是否需要回收.2.效率问题:扫描是周期性的,不一定及时.一旦同一时间大量的对象都要回收,就会造成很大的开销和负担.(STW问题)属于类加载中加载的一个环节负责找到.class文件,先交给双亲来查找,双亲在往上传递,传不了了就会开始查找(在自己负责的范围),双亲找不到就传给儿子.负责查找的是三个类加载器.之所以这么设定是为了保证类库加载的顺序.不过也是可以被打破的.
2024-02-07 17:33:40
406
1
原创 计算机是如何运行的 -- 下
由于硬件设备种类繁多提供的接口也多,为了能更好的管理,硬件厂商会提供驱动,装了对应驱动才能正确识别,让操作系统更好的使用。而软件可以通过操作系统更好的在计算机上运行.所以操作系统就像工厂的管理员指挥硬件工作,而软件就像是客户,在一定的物限里提供,要求让管理员完成。是指在CPU运行一个进程时会不断的来回切换,在进程里线程是抢占式运行。每个PCB都是一个类似结构体的东西,主要是1.Pid(进程的身份。那么,什么是操作系统,首先操作系统是一个软件,是一个向下管理。硬件设备,对上对软件提供稳定的运行环境。
2023-10-25 23:42:48
82
1
原创 计算机是如何工作的 --- 上
这两个都是要保持通电的,它们要负责CPU的读写和处理,并且也是易失的(数据)ROM无需持续通电也能保存且非易失。其中算术单元负责所有数字操作比如四则运算之类的,而逻辑单元负责逻辑操作,与或非之类的。半减器(Half reducer)由一个XOR门,NOT门、AND门构成。半加器(Half Adder) (由一个XOR门和And门构成)全加器(FULL Adder) (由两个半加器和一个OR门构成)CPU主频(时钟每秒震荡次数 )可以近似的看作每秒执行的指令数。寄存器(Register)和内存(RAM)
2023-10-25 23:12:43
201
1
原创 事务的四个特性三种情况和级别
①脏读 在事务进行读数据操作时,如果有另一个事务对数据进行了修改,此时若读数据操仍在进行,此时的数据是无效的也叫做脏数据。在多个事务并发进行时,有时会发生①脏读②不可重复读③幻读等问题此时就要通过加锁的方或对事务进行隔离避免事务间互相影响。②不可重复读 在事务进行多次查询同一数据时由于被查询数据的改变导致查询出的结果不同,(重点在修改)③幻读 在事务对数据进行修改时,另一个事务对数据进行增加,或删除导致事务1语以为修改过了或没修改过。避免在服务器宕机后数据的丢失,在服务器重启后便能回滚。
2023-10-24 08:25:00
85
1
原创 B树和B+树的不同
相对于B树在根结点处最大值后面没有地址,这就使得数据有了明显的上界,在数据的存储方面非叶子节点只存索引不再存储其余的信息,这使得同样大小的内存,一个节点可以存储更多的记录,所以在B+树图中我插入了更多节点索引,这也使得树的深度更加稳定。这种结构可以让树的深度太大降低,使得IO次数减少(相较于其他数据结构),但随之它也有缺点.离在内存从磁盘内取结点时会发现相同的内存是存了大量的记录里的数据这会使得同样大小的内存,存的节点信息更少,因此前辈们为了优化把B树变为了 B+树。
2023-10-23 23:53:11
100
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅