自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring相关面试题(四)

接口实现XML配置注解实现。

2024-07-06 15:50:11 590

原创 谷粒商城----通过缓存和分布式锁获取数据。

指查询一个一定不存在的数据,由于缓存是不命中,将去查询数据库,但是数据库也无此记录,我们没有将这次查询的不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。这个方法,如果不再次查缓存的话,剩下的 线程就还是从数据库中获取数据,因为第一层缓存查询,没有过滤掉这些线程(用词可能不合适),这下就变成排队查数据库了,还是出现了缓存失效的问题。方法,排队获得锁,第一个获得锁的线程,读取数据,把内容放到缓存之后,就是剩下的线程获得锁,进入。为什么这里要使用脚本操作?

2024-07-06 15:46:08 1259

原创 Spring相关面试题(三)

AOP(Aspect - Originted Proaramming),一般称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理等。AOP、OOP在字面上虽然非常类似,但却是面向不同领域的两种设计思想。0OP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清浙高效的逻辑单元划分。

2024-06-27 22:59:41 776

原创 Spring相关面试题(二)

再读二级缓存和三级缓存的时候,都有一把锁,如果A线程先进来,会进行Bean的实例化,这其中到放到一级缓存的过程中,都是锁住的,另外一个线程都是堵塞的状态,直到A线程创建完一个对象;但是B线程读的时候,一级缓存是没有加锁的,而且B此时已经读完了一级缓存,结果是null,同时A创建好了一个Bean,二级缓存和三级缓存都清空,B这个时候就得重新创建了吗?注意我这里说的是对象、对象、对象;概念态------> 定义态----BeanDefinition---->纯净态----DI---->成熟态。

2024-06-27 22:57:26 787

原创 数据校验(JSR303、SpringBoot、自定义注解)

在ListValueConstraintValidator的initialize方法中,会将vals里的所有值放到set集合中,然后isValid判断实体属性是否在这个set里面,这里可以根据自己的逻辑修改。对于一个实体类的属性,在不同的方法下,标准可能是不一样的,比如一个商品的ID,在创建时应该是@Null(前端不用传,数据库自己生成),但在更新修改方法中就得是@NotNull了,所以分组校验就十分重要了。groups接受一个数组,数组里面的是接口,自己定义接口即可,不用做任何操作,就相当于一个标识。

2024-06-25 16:46:08 830

原创 原生分片文件上传、合并的具体步骤

在union中进行文件的合并,根据文件路径,获得对应的临时文件夹,使用writeFile(RandomAccessFile)写入的最最终的文件,使用readFile(RandomAccessFile)读入每个临时文件,放到最终的文件中去。在transferFile中,需要根据传入的信息,进行前面insert数据的查询,如果不存在就直接返回,因为合并的文件不存在。到了最后一个片段,就需要获得文件的一些信息:后缀名、文件类型的枚举、不重复的文件名称等,封装好对应的信息,放到数据库中去。

2024-06-19 21:03:03 251

原创 Vue + SpringBoot 实现文件的断点上传、秒传,存储到Minio

前端页面使用的elment-plus的el-upload组件。当上传文件后,会调用handleChange 方法,可以在这里进行文件相关的操作。计算文件的MD5值。

2024-06-19 20:53:45 783

原创 Spring相关面试题(一)

IOC:控制反转,原因如果想要创建一个对象,是使用new或者通过反射getInstance等方式,这样创建对象,耦合性太高,也不利于复用;引用了SpringIOC,把对象的创建权利交给IOC容器,在使用的时候,可以通过DI(@Autowired等)自动注入,而且IOC的Bean通常情况下也是单例的,可以节约资源;方便集中管理和维护,降低耦合度。

2024-06-18 16:09:58 438

原创 Docker运行 Redis、Mysql、Nginx、MongoDB、Minio等

运行一个容器:docker run -itd --name mongo -p 27017:27017 mongo --auth。拉取镜像:docker pull mongo:latest。进入容器修改配置信息。

2024-06-16 13:33:47 352

原创 Java 线程

创建一个类,实现Callable接口,重写call方法,创建一个实现类的对象(表示要执行的对象),创建FutureTask对象(管理多线程运行的结果),创建Thread类对象,启动;上面这段代码有点问题,如果通过if break了,跳出循环后,就会导致锁没有释放,然后就会导致程序堵塞,稳妥的写法是把释放锁的操作放的finally中进行,因为无论如何finally中的代码肯定是要执行的。当JVM启动后,会自动调用多条线程,其中一条线程就是main线程,它的作用就是执行main方法,并执行里面的内容。

2024-06-15 10:19:53 959

原创 Java的一些内容

transient是Java语言的关键字,用来表示一个成员变量不是该对象序列化的一部分。当一个对象被序列化的时候,transient型变量的值不包括在序列化的结果中。而非transient型的变量是被包括进去的。注意static修饰的静态变量天然就是不可序列化的。在Java中,long是一个基本数据类型,而Long是一个包装类。当你看到1l和1L,它们都是对long类型的常量进行字面量表示。l和L在这里只是标记,用来表示后面的数字是一个long类型,而不是int类型。和都是正确的,并且它们都表示一个。

2024-06-15 10:14:21 1196

原创 vite创建Vue3项目:router+pinia+element-plus or antd + sass + ts

import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' //引入持久化插件。//paths:['user'] 需要持久化的状态。router下创建index.ts。store下新建 index.ts。main.ts中使用pinia。新建router目录。main.tx中使用。main.ts中引入。建立具体的store。

2024-06-15 10:07:10 1090

原创 ThreadLocal怎么拿不到用户信息了?

想了好久,为什么userId是空,通过控制台打印的日志发现,没有token的日志输出,然后猛然想起来,拦截器没有加对应的路径,并没有对这个请求进行拦截,也就不会有token解析的这一步,然后userId是空的。,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。后端的JWT过滤器,可以解析token,拿到用户信息,同时可以使用ThreadLocal,放到这个线程中,可以方便在别的地方使用。

2024-06-07 12:48:22 328

原创 Vue3 + element-plus + axios 文件传不到后端的问题

搜的解决方案是,使用axios发送请求的时候,在请求头中加上'Content-Type': 'multipart/form-data'(较新版本的axios会自己判断),我加了之后也没解决,在弄了好长一段时间后,想起来自己在封装了一层request,用于token的校验。这里的请求头中的 "Content-Type": "application/json",无论在外面修改成怎么样,它的content-type都是 “applicantion-json”,所以后端也就收不到发送的请求。

2024-06-07 12:40:46 187

原创 解决项目跨域问题(前端、后端和部署)

以上面的代码为例,如果你的请求路径为/api/getUserInfo,会给你代理到:http://localhost:8080/api/getUserInfo,这个接口,根据自己的需求配置即可。比如当前在域名为a的网站,向域名为b的网站发送ajax请求,或者在域名为a,端口为8080的前端页面,向域名为a,端口为9090的后端端口发送请求,就会出现跨域问题。以Vue项目为例,打包后,可以使用Nginx进行部署,使用Nginx解决跨域问题的思路,和在前端解决的思路一致,都是把前端的请求路径代理到后端的接口。

2024-05-22 22:45:45 1074 1

原创 快速学习React(一):基本内容

快速上手React18

2024-05-22 15:44:13 674

原创 SpringBoot相关内容

1、继承Spring中的的HandlerInterceptor,可以通过实现preHandle postHandle afterCompletion等方方法@Component@Slf4j​@Autowired​/*** 校验jwt* @return*///判断当前拦截到的是Controller的方法还是其他资源if (!//当前拦截到的不是动态方法,直接放行//1、从请求头中获取令牌​//2、校验令牌try {log.info("jwt校验:{}", token);

2024-05-20 09:11:30 524

原创 Vue3组件通讯

父组件中的内容<button @click="$emit('handel', fatherData+1)">修改父组件的值</button>

2024-05-20 08:58:20 474

原创 MySql优化

(4)int类型只增主键字段=>4字节=>每个字节8位=>32位,在CPU加载一条指令的时候,4字节是和CPU寄存器的运算有关,如:64位,由于之前的系统一般都是32位的,所以在运算4字节的数据是刚好的,效率最高,而现今我们系统基本都是64位的时候,其实没有更好的利用好CPU运算,所以在设计表字段建议,使用8字节的主键bigint,而不是直接使用int来做主键。对于状态字段,可以尝试使用 ENUM 来存放,因为可以极大的降低存储空间,而且即使需要增加新的类型,只要增加于末尾,修改结构也不需要重建表数据。

2024-04-25 19:20:57 1015 4

原创 SpringSecurity + JWT 实现携带信息请求

类型为“小型文本文件”,是某些网站为了辨别用户身份,进行 Session 跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存 的信息。考虑将用户的信息存储到服务器端,请求时只携带可以识别用户身份的身份信息就可以了,再根据用户 身份获取用户的其他资料比如:实名信息,订单信息,访问记录等。SpringSecurity框架的本质就是过滤链,所以说我们也可以自定义过滤器,放到过滤链中,完成我们自己的逻辑业务代码。是要查找用的后边请求,判断权限的时候,放置进去的数据是用户的信息。

2024-04-22 22:08:08 731

原创 SpringSecurity----------基于数据库的授权流程

RBAC【Role-based access control】,增加了角色的概念,即基于角色的访问控制,将权限分配给角 色,再将角色分配给用户。简单来说,就是【用户关联角色,角色关联权限】。最小权限原则:给角色配置最小但能满足使用需求的权限。责任分离原则:给比较重要或者敏感的事件设置不同的角色,不同的角色间是相互约束的,由其一 同参与完成。数据抽象原则:每个角色都只能访问其需要的数据,而不是全部数据,不同的角色能访问到的数据 也不同。

2024-04-21 22:07:29 559 1

原创 SpringSecurity-------基于数据库的认证流程

SpringSecurity认证

2024-04-21 09:40:34 792 1

原创 MySql事务

MySql事务

2024-04-15 22:16:39 255 1

原创 实现AI问答的流式输出

当用户写好问题时,进行一次http请求,也就是相当于把问题和用户信息给后端(其实这里可以直接通过socket实现对话的方式进行AI问答,由于我需要对用户使用AI情况进行统计、管理,所以加了层http请求), 通过请求拿到userId,进而拿到对应的session,这时用户一定是和服务器有socket连接的,后端服务器与星火的服务器进行socket连接,星火的服务器给后端服务器响应内容,后端服务器就把相应的内容响应给前端,前端进行展示即可;WebSocketServer 代码。Controller层。

2024-04-15 08:10:33 1740 7

原创 SpringBoot实现图形验证码验证

SpringBoot中实现图形验证码验证

2024-04-13 22:17:26 602 2

原创 SpringBoot实现邮箱发送功能

SpringBoot中实现邮箱发送。

2024-04-13 21:58:15 173 1

原创 二叉树的遍历(递归和非递归实现)

【代码】二叉树的遍历(递归和非递归实现)

2023-10-23 11:01:39 37 1

空空如也

空空如也

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

TA关注的人

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