自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis常见命令及五种基本数据类型

Redis是典型的key-value数据库,key一般是字符串,而value包含很多不同的数据类型:不同类型的命令称为一个group,我们也可以通过help命令来查看各种不同group的命令:通用指令是部分数据类型的,都可以使用的指令,常见的有:- KEYS:查看符合模板的所有key- DEL:删除一个指定的key- EXISTS:判断key是否存在- EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除- TTL:查看一个KEY的剩余有效期- TYPE 返回 key 所储存的

2024-07-20 18:33:15 784

原创 【LeetCode】76.最小覆盖子串

给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符串""。tts"BANC"最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。"a"整个字符串 s 是最小覆盖子串。""t 中两个字符 'a' 均应包含在 s 的子串中,因此没有符合条件的子字符串,返回空字符串。t。

2024-07-19 16:28:49 449

原创 【LeetCode】209. 长度最小的子数组

给定一个含有n个正整数的数组和一个正整数target找出该数组中满足其总和大于等于target的长度最小的,并返回其长度如果不存在符合条件的子数组,返回0。2子数组[4,3]是该条件下的长度最小的子数组。10。

2024-07-19 13:21:03 287

原创 Redis入门

Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。*key-value结构存储:Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。NoSql(Not Only SQL),不仅仅是SQL,泛指**非关系型数据库**。NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充。

2024-07-18 22:24:21 559

原创 【LeetCode】239.滑动窗口最大值

给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。最后,返回滑动窗口中的最大值。滑动窗口的位置 最大值[1]

2024-07-18 14:46:09 365

原创 Swagger的介绍和使用

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(<https://swagger.io/>)。它的主要作用是:1. 使得前后端分离开发更加方便,有利于团队协作2. 接口的文档在线自动生成,降低后端开发人员编写接口文档的负担3. 功能测试Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫Springfox。通过在项目中引入Springfox ,即可非常简单快捷的使用Swagger。

2024-06-19 21:12:13 299

原创 nginx反向代理和负载均衡

nginx 反向代理,就是将前端发送的动态请求由 nginx 转发到后端服务器。因为nginx本身可以进行缓存,如果访问的同一接口,并且做了数据缓存,nginx就直接可把数据返回,不需要真正地访问服务端,从而提高访问速度。所谓负载均衡,就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器。因为一般后台服务地址不会暴露,所以使用浏览器不能直接访问,可以把nginx作为请求访问的入口,请求到达nginx后转发到具体的服务中,从而保证后端服务的安全。

2024-06-18 21:15:19 489

原创 Git——远程仓库和在Idea中的使用

项目,我们需要将这个放到码云的仓库里,和其他开发人员继续一起协作开发。用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B。远程分支和本地的分支一样,我们可以进行merge。中存在两种类型的仓库,即本地仓库和远程仓库。操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于。如果远程分支名和本地分支名称相同,则可以只写本地分支。命令: git clone <

2024-06-18 14:27:26 1057

原创 Git——安装与常用命令(一)

,每个人的电脑上都是一个完整的版本库,这样工作的时候,无需要联网了,因为版本库就在你自己的电脑上。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。Git并且有个中心服务器,仅仅是为了方便交换大家的修改,但是这个服务器的地位和我们每个人的PC。创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完。创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线。不需要有中心服务器,我们每台电脑拥有的东西都是一样的。

2024-06-17 22:04:12 581

原创 【LeetCode】40. 组合总和 II

给定一个候选人编号的集合candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使用。解集不能包含重复的组合。

2024-06-05 21:29:12 219

原创 【LeetCode】42.接雨水

给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。6上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。9。

2024-06-04 15:33:32 1032 1

原创 【LeetCode】39.组合总和

给你一个的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的 所有,并以列表形式返回。你可以按返回这些组合。candidates中的数字可以。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为target的不同组合数少于150个。[2,3,6,7],target =72 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。7 也是一个候选, 7 = 7。仅有这两种组合。

2024-06-03 10:27:37 440 1

原创 【LeetCode】38.外观数列

(RLE)是一种字符串压缩方法,其工作原理是通过将连续相同字符(重复两次或更多次)替换为字符重复次数(运行长度)和字符的串联。例如,要压缩字符串"3322251",我们将"33"用"23"替换,将"222"用"32"替换,将"5"用"15"替换并将"1"用"11"替换。因此压缩后字符串变为"23321511"。给定一个整数n,返回的第n个元素。n = 4"1211"countAndSay(2) = "1" 的行程长度编码 = "11"

2024-05-31 22:40:36 544 1

原创 【LeetCode】37.解数独

编写一个程序,通过填充空格来解决数独问题。数独的解法需1-91-91-93x3数独部分空格内已填入了数字,空白格用'.'表示。输入的数独如上图所示,唯一有效的解决方案如下所示:'.'

2024-05-29 15:38:43 822

原创 【LeetCode】34.在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。

2024-05-26 15:16:37 314

原创 【LeetCode】33.搜索旋转排序数组

整数数组nums按升序排列,数组中的值。在传递给函数之前,nums在预先未知的某个下标k)上进行了,使数组变为(下标计数)。例如,在下标3处经旋转后可能变为。给你的数组nums和一个整数target,如果nums中存在这个目标值target,则返回它的下标,否则返回-1。你必须设计一个时间复杂度为O(log n)的算法解决此问题。

2024-05-25 22:51:24 277

原创 【LeetCode】32.最长有效括号

给你一个只包含'('和')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。s = "(()"2最长有效括号子串是 "()"4最长有效括号子串是 "()()"s = ""0'('')'

2024-05-24 15:32:48 247

原创 【LeetCode】31.下一个排列

整数数组的一个就是将其所有成员以序列或线性顺序排列。arr[1,2,3][1,3,2][3,1,2][2,3,1]整数数组的是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。[1,3,2][3,1,2][1,2,3][3,2,1]给你一个整数数组nums,找出nums的下一个排列。必须。

2024-05-22 15:57:33 103

原创 【LeetCode】438.找到字符串中所有字母异位词

给定两个字符串s和p,找到s中所有p的的子串,返回这些子串的起始索引。不考虑答案输出的顺序。指由相同字母重排列形成的字符串(包括相同的字符串)。[0,6]起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。[0,1,2]起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。

2024-05-22 15:34:40 553

原创 【LeetCode】30.串联所有单词的子串

给定一个字符串s和一个字符串数组wordswords中所有字符串。s中的是指一个包含words中所有字符串以任意顺序排列连接起来的子串。"abcdef""abefcd""cdabef""cdefab""efabcd""efcdab""acdbef"words返回所有串联子串在s中的开始索引。你可以以返回答案。[0,9]因为 words.length == 2 同时 words[i].length == 3,连接的子字符串的长度必须为 6。子串 "barfoo" 开始位置是 0。

2024-05-21 15:15:55 744

原创 【JavaWeb】Day85.Maven高级——私服

私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题。

2024-05-20 10:51:43 719

原创 【JavaWeb】Day84.Maven高级——继承与聚合

在maven中,可以在父工程的pom文件中通过 `` 来统一管理依赖版本。```xml--统一管理依赖版本-->--JWT令牌-->``````xml--JWT令牌-->注意:在父工程中所配置的 `` 只能统一管理依赖版本,并不会将这个依赖直接引入进来。这点和 `` 是不同的。

2024-05-19 21:28:41 870

原创 【JavaWeb】Day83.Maven高级——分模块设计与开发

1). 什么是分模块设计:将项目按照功能拆分成若干个子模块2). 为什么要分模块设计:方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享3). 注意事项:分模块设计需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分。

2024-05-19 17:57:43 1398

原创 【JavaWeb】Day82.Web后端开发总结

web后端开发现在基本上都是基于标准的三层架构进行开发的,在三层架构当中,Controller控制器层负责接收请求响应数据,Service业务层负责具体的业务逻辑处理,而Dao数据访问层也叫持久层,就是用来处理数据访问操作的,来完成数据库当中数据的增删改查操作。在Spring框架的生态中,对web程序开发提供了很好的支持,如:全局异常处理器、拦截器这些都是Spring框架中web开发模块所提供的功能,而Spring框架的web开发模块,我们也称为:SpringMVC。

2024-05-18 22:46:50 334 1

原创 【JavaWeb】Day81.SpringBoot原理——自动配置(案例)

2). aliyun-oss-spring-boot-autoconfigure模块创建完starter模块后,删除多余的文件,最终保留内容如下:~~~xml

2024-05-17 23:18:06 924

原创 【JavaWeb】Day80.SpringBoot原理——自动配置(@Conditional)

我们在跟踪SpringBoot自动配置的源码的时候,在自动配置类声明bean的时候,除了在方法上加了一个@Bean注解以外,还会经常用到一个注解,就是以Conditional开头的这一类的注解。以Conditional开头的这些注解都是条件装配的注解。下面我们就来介绍下条件装配注解。子注解执行testHeaderParser()测试方法:因为io.jsonwebtoken.Jwts字节码文件在启动SpringBoot程序时已存在,所以创建HeaderParser对象并注册到IOC容器中。

2024-05-17 15:56:48 611

原创 【JavaWeb】Day79.SpringBoot原理——自动配置(源码跟踪)

在项目当中引入第三方依赖之后,如何加载第三方依赖中定义好的bean对象以及配置类,从而完成自动配置操作。那下面我们通过源码跟踪的形式来剖析下SpringBoot底层到底是如何完成自动配置的。在跟踪框架源码的时候,一定要抓住关键点,找到核心流程。一定不要从头到尾一行代码去看,一个方法的去研究,一定要找到关键流程,抓住关键点,先在宏观上对整个流程或者整个原理有一个认识,有精力再去研究其中的细节。

2024-05-16 19:55:19 656

原创 【JavaWeb】Day78.SpringBoot原理——自动配置(常见方案)

加入@ComponentScan注解重新执行测试方法,控制台日志输出:如果采用以上这种方式来完成自动配置,那我们进行项目开发时,当需要引入大量的第三方的依赖,就需要在启动类上配置N多要扫描的包,这种方式会很繁琐。而且这种大面积的扫描性能也比较低。结论:SpringBoot中并没有采用以上这种方案。

2024-05-15 15:57:21 512

原创 【JavaWeb】Day77.Spring——SpringBoot原理(一)

SpringBoot的自动配置就是当Spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。比如:我们要进行事务管理、要进行AOP程序的开发,此时就不需要我们再去手动的声明这些bean对象了,我们直接使用就可以从而大大的简化程序的开发,省去了繁琐的配置操作。运行SpringBoot启动类看到有两个CommonConfig,在第一个CommonConfig类中定义了一个bean对象,bean对象的名字叫reader。

2024-05-14 22:01:38 752

原创 【JavaWeb】Day76.Spring——bean管理

如果需要定义第三方Bean时, 通常会单独定义一个配置类。

2024-05-13 22:05:45 631

原创 【JavaWeb】Day75.SpringBoot原理——配置优先级

Springboot项目进行打包时,需要引入插件 spring-boot-maven-plugin (基于官网骨架创建项目,会自动添加该插件)注意事项:虽然springboot支持多种格式配置文件,但是在项目开发时,推荐统一使用一种格式的配置。优先级: 命令行参数 > 系统属性参数 > properties参数 > yml参数 > yaml参数。1. Java系统属性配置 (格式: -Dkey=value,-Dxxx=xxx)2. 命令行参数 (格式:--key=value,--xxx=xxx)

2024-05-13 10:28:05 269

原创 【JavaWeb】Day74.Spring——AOP进阶(连接点)

连接点可以简单理解为可以被AOP控制的方法。我们目标对象当中所有的方法不是都是可以被AOP控制的方法。而在SpringAOP当中,连接点又特指方法的执行。在Spring中用JoinPoint抽象了连接点,用它可以获得方法执行时的相关信息,如目标类名、方法名、方法参数等。注意:对于@Around通知,获取连接点信息只能使用ProceedingJoinPoint类型对于其他四种通知,获取连接点信息只能使用JoinPoint,它是ProceedingJoinPoint的父类型。

2024-05-12 20:07:14 435 1

原创 【JavaWeb】Day73.Spring——AOP进阶(切入点表达式)

作用:主要用来决定项目中的哪些方法需要加入通知2. @annotation(……) :根据注解匹配。

2024-05-11 20:03:34 664

原创 【JavaWeb】Day72.Spring——AOP进阶

使用postman测试查询所有部门数据查看idea中控制台日志输出程序没有发生异常的情况下,@AfterThrowing标识的通知方法不会执行。修改DeptServiceImpl业务实现类中的代码: 添加异常重新启动SpringBoot服务,测试发生异常情况下通知的执行:查看idea中控制台日志输出在代码测试的过程中可以看到每一个注解里面都指定了切入点表达式,而且这些切入点表达式都一模一样。

2024-05-10 16:01:43 927

原创 【JavaWeb】Day71.Spring——AOP基础

什么是AOP?AOP英文全称:Aspect Oriented Programming(面向切面编程、面向方面编程),其实说白了,面向切面编程就是面向特定方法编程。那什么又是面向方法编程呢?比如,这里有一个项目,项目中开发了很多的业务功能。然而有一些业务功能执行效率比较低,执行耗时较长,我们需要针对于这些业务方法进行优化。那首先第一步就需要定位出执行耗时比较长的业务方法,再针对于业务方法再来进行优化。此时我们就需要统计当前这个项目当中每一个业务方法的执行耗时。

2024-05-09 20:50:45 665

原创 【JavaWeb】Day70.事务进阶

Transactional注解当中的两个常见的属性:1. 异常回滚的属性:rollbackFor2. 事务传播行为:propagation。

2024-05-08 22:14:53 680

原创 【JavaWeb】Day69.事务管理

事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体,一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功,要么同时失败。事务的操作主要有三步:1. 开启事务(一组操作开始前,开启事务):start transaction / begin;2. 提交事务(这组操作全部成功后,提交事务):commit;3. 回滚事务(中间任何一个操作出现异常,回滚事务):rollback;

2024-05-07 22:24:15 592

原创 【JavaWeb】Day68.SpringBoot案例——异常处理

案例说明:我们打开浏览器,访问系统中的新增部门操作,系统中已经有了 "就业部" 这个部门,我们再来增加一个就业部。点击确定之后,窗口关闭了,页面没有任何反应,就业部也没有添加上。而此时会发现,网络请求报错了。状态码为500,表示服务器端异常,我们打开idea,来看一下,服务器端出了什么问题。上述错误信息的含义是,dept部门表的name字段的值 就业部 重复了,因为在数据库表dept中已经有了就业部,我们之前设计这张表时,为name字段建议了唯一约束,所以该字段的值是不能重复的。

2024-05-06 18:48:47 841

原创 【JavaWeb】Day67.拦截器Interceptor

拦截器是一种动态拦截方法调用的机制,类似于过滤器。是Spring框架中提供的,用来动态拦控制器方法的执行。拦截器的作用:拦截请求,在指定方法调用前后,根据业务需要执行预先设定的代码。在拦截器当中,通常也是做一些通用性的操作,比如:我们可以通过拦截器来拦截前端发起的请求,将登录校验的逻辑全部编写在拦截器当中。在校验的过程当中,如发现用户登录了(携带JWT令牌且是合法令牌),就可以直接放行,去访问spring当中的资源。如果校验时发现并没有登录或是非法令牌,就可以直接给前端响应未登录的错误信息。

2024-05-06 18:22:57 723

原创 【JavaWeb】Day66.Springboot案例——过滤器Filter实现

使用过滤器Filter来完成案例当中的登录校验功能。登录校验的基本流程:- 要进入到后台管理系统,我们必须先完成登录操作,此时就需要访问登录接口login。- 登录成功之后,我们会在服务端生成一个JWT令牌,并且把JWT令牌返回给前端,前端会将JWT令牌存储下来。- 在后续的每一次请求当中,都会将JWT令牌携带到服务端,请求到达服务端之后,要想去访问对应的业务功能,此时我们必须先要校验令牌的有效性。- 对于校验令牌的这一块操作,我们使用登录校验的过滤器,在过滤器当中来校验令牌的有效性。

2024-05-05 22:28:58 978

空空如也

空空如也

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

TA关注的人

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