- 博客(103)
- 收藏
- 关注
原创 in 和exists的区别
根据优化原则“小表驱动大表,即小的数据集驱动大的数据集”,我们可以得知:使用IN当子查询返回较少结果。当要检查的值列表较小或是一个静态列表。使用EXISTS当子查询结果较大。当子查询涉及复杂条件。通常在存在关联的子查询中更高效。
2024-05-25 13:29:01
454
原创 order by 优化
双路排序算法:MySQL4.1之前使用双路排序,字面意思就是两次扫描磁盘,最终得到数据,读取行指针和ORDER BY列,対他们进行排序,然后扫描已经排序好的列表,按照列表中的值重新从列表中读取对应的数据输出。一句话,从磁盘取排序字段,在buffer中进行排序,再从磁盘取其他字段。取一批数据,要对磁盘进行两次扫描,众所周知,IO是很耗时的,所以在MySQL4.1之后,出现了改进的算法,就是单路排序算法。单路排序算法:从磁盘读取查询需要的所有列,按照ORDER BY列在buffer。
2024-05-25 13:28:38
750
原创 索引失效情况之like
在学习索引时,有一个问题通常很绕,那就是like。它有时可以使用到索引,而有时又不可以使用到索引。因此,今天按照我的个人理解对like进行一个总结。希望可以帮助到初学者,也欢迎大家一起讨论。
2024-05-24 14:19:27
663
原创 EXPLAIN之type、Extra
在我们使用explain命令对sql语句进行优化时,有一些参数比较重要但也有点不容易理解。接下来就对他们分别进行介绍。
2024-05-24 13:26:59
459
原创 读写锁详细介绍
锁降级是指从写锁降级为读锁的过程,这是允许的,但锁升级(从读锁升级为写锁)通常是不允许的。锁降级通常是为了在修改共享资源后,保持一定的读访问,而不完全释放对资源的保护。其工作原理如下持有写锁一开始,线程需要持有写锁,以进行写操作。这是因为写操作需要独占访问共享资源,防止数据不一致获取读锁在持有写锁的同时,线程可以尝试获取读锁。由于线程已经持有写锁,因此获取读锁不会被阻塞。此时,线程同时持有写锁和读锁。释放写锁在获取读锁之后,线程可以释放写锁,此时线程仍然持有读锁。
2024-05-22 14:05:05
850
原创 利用Lock完成多个线程交替执行
首先,我们需要先定义资源类及其行为。我们当前问题中的资源很显然就是要出售的票,行为就是三个售票处售票的动作。num--;flag = 2;num--;flag = 3;num--;flag = 1;
2024-05-21 13:50:59
447
原创 Redis笔记 -- 持久化之AOF
AOF(Append Only File),是,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但是不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就。默认情况下,redis是没有开启AOF的。开启AOF功能需要设置配置:appendonly yes。
2024-05-18 15:28:25
658
原创 Redis笔记 -- 持久化之RDB
RDB个人理解就是每隔一定的时间就将目前Redis中的数据写到磁盘上,这样,即使Redis宕机,在重连后也可以继续加载数据。无法保证将所有的数据都进行备份。假如每分钟备份一次,那么如果在半分钟的时候宕机,这时,磁盘数据中就只有上个分钟的数据,最近的这半分钟数据还没有来得及备份。RDB在进行持久化时,需要调用fork()。虽然fork同步速度比较快,但是当数据量比较大的时候,也会对Redis的性能产生影响。
2024-05-17 13:45:55
630
原创 Redis笔记 -- Redis数据类型总结
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)它的底层实际是个双端链表,最多可以包含 2^32 - 1 个元素(4294967295, 每个列表超过40亿个元素)Redis hash 是一个string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。其数据结构定义类似于Redis 中每个 hash可以存储 2^32 - 1 键值对(40多亿)Redis 的 Set 是String 类型的无序集合。
2024-05-16 13:57:06
695
原创 Linux常用命令总结(五):压缩和解压缩及进程线程类命令
gzipgunzipgzip 文件zipunzip(功能描述:压缩文件和目录的命令)(功能描述:解压缩文件)tartar -zcvftar -zxvf。
2024-04-26 14:11:42
497
原创 Linux常用命令总结(四):文件权限及相关命令介绍
如果在某个目录中通过指令ll查看文件属性,得到以下结果:drwxr-xr-x. 1 root root 4078 4月 23 22:10 filesdrwxr-xr-x首位d:说明该文件是目录rwxr-xr-x:三个一组,表明该文件的权限情况。该文件对于所有者的同组用户开放读和执行的权限。对于其他用户也开放同样的权限。1说明该目录的链接数为1如果查看到是文件:链接数指的是硬链接个数如果查看的是文件夹:链接数指的是子文件夹个数root说明文件所属用户为root第二个root。
2024-04-25 15:05:29
657
原创 LInux常用命令总结(三):用户管理命令与用户组管理命令
useradd:添加新用户passwd:设置用户密码passwd 用户名id查看用户是否存在:查看创建的所有用户su:切换用户su 用户名称su - 用户名称exit: 回退到上一个用户userdel:删除用户选项who: 查看登录用户信息whoamiwho am isudo:设置普通用户具有root权限sudo 命令。
2024-04-24 13:37:16
368
原创 LInux常用命令总结(二):VIM编辑器
vim就是用来编辑文件的一个工具,类似于我们Windows的文本编辑工具,只不过,这里是命令行形式的,不是图形用户界面形式的。例如,我要对a.txt进行修改,那么命令为vim a.txt。
2024-04-19 13:55:27
490
原创 二维数组的自定义排序
compare方法是Comparator接口中定义的方法之一,用于比较两个对象的顺序。在Java中,它通常用于排序算法中,以确定元素的顺序。该方法有两个参数,分别是要比较的两个对象,通常被称为o1和o2。它返回一个整数值,表示 o1 和 o2 的比较结果。如果返回值为负数,表示 o1 应该排在 o2 前面。如果返回值为零,表示 o1 和 o2 相等,顺序不变。如果返回值为正数,表示 o1 应该排在 o2 后面。直接看规则可能比较晦涩,这里拿上面的代码进行一个举例。
2024-04-16 16:10:32
506
原创 SpringBoot -- 外部化配置
Spring Boot 允许将配置外部化,以便可以在不同的环境中使用相同的应用程序代码。我们可以使用各种外部配置源,包括Java Properties文件、YAML文件、环境变量和命令行参数。@Value可以获取值,也可以用将所有属性绑定到java object中。以下是 SpringBoot 属性源加载顺序。优先级由低到高,高优先级配置覆盖低优先级。
2024-04-03 13:32:06
1879
1
原创 SpringBoot -- Profiles
配置激活指定环境;也可以使用命令行激活。–spring.profiles.active=dev还可以配置默认环境; 不标注@Profile 的组件永远都存在。a. 如果不改变默认环境,默认的默认环境叫defaultb. 我们可以通过对默认环境进行配置 和 只能用到 无 profile 的文件中,如果在application-dev.yaml中编写就是无效的。其实这一点很好理解,只有将环境切换为dev后,才会生效。如果在中才将dev环境激活,那么,生效后会激活dev,但激活了dev后才会生效,两者互
2024-03-30 12:17:02
824
3
原创 SpringBoot -- 整合SpringMVC
SpringBoot的自动配置机制已经在这篇文章中进行了介绍。这里只进行简单说明。我们在依赖库中导入会引入,其中包含了所有场景的所有配置类主程序中包含注解,它会通过批量导入配置类配置类根据条件注解以及属性绑定,将组件都加入到容器中包含了 ContentNegotiatingViewResolver 和 BeanNameViewResolver 组件,方便视图解析默认的静态资源处理机制: 静态资源放在 static 文件夹下即可直接访问。
2024-03-29 14:44:59
1156
原创 SpringBoot -- 错误处理机制
前后端分离,需要响应JSON格式使用进行统一异常处理服务端页面渲染不可预知的,HTTP码表示的服务器或客户端错误在下面,放常用精确的错误码页面。例如:500.html,404.html在下面,放通用模糊匹配的错误码页面。例如:5xx.html,4xx.html发生业务错误核心业务:通过代码处理错误,跳转到自己定制的错误页。通用业务:classpath:/templates/error.html页面,显示错误信息。
2024-03-29 14:13:05
767
原创 SpringBoot --条件注解与属性绑定
如果我们要将容器中自己编写的任意组件(Bean)的属性值和配置文件的配置项的值进行绑定:给容器中注册组件(@Component、@Bean)使用声明组件和配置文件的哪些配置项进行绑定如果我们要激活第三方包的属性绑定(第三方已经使用@ConfigurationProperties 声明组件和配置文件的哪些配置项进行绑定):使用。
2024-03-28 14:19:24
570
2
原创 SpringBoot -- 自动配置机制
我们导入场景启动器,最终就会引入有一个文件,,里面包含着许多自动配置类,也就是通过主程序注解中的,把所有的都导入进来每个会根据自己的条件注解进行按需加载,用不到的就不会进行加载会通过注解将与配置文件进行绑定,获取自定义的的配置给容器中导入相关组件,组件都是从 xxxProperties中提取属性值这样,通过SpringBoot的自动配置机制,我们只需要导入starter、修改配置文件,就能修改底层行为,根据我们的需求进行自定义配置。
2024-03-28 14:02:39
1141
原创 MyBatis-Plus实现逻辑删除
逻辑删除,可以方便地实现对数据库记录的逻辑删除而不是物理删除。逻辑删除是指通过更改记录的状态或添加标记字段来模拟删除操作,从而保留了删除前的数据,便于后续的数据分析和恢复。再配置文件中进行配置,这样可以全局指定,deleted 属性对于所有实体都生效,就不需要进行上述单一指定。可以是一个布尔类型、整数类型或枚举类型。实体类添加逻辑删除属性。
2024-03-21 14:30:17
615
原创 MybatisPlus--条件构造器
使用MyBatis-Plus的条件构造器,可以构建灵活、高效的查询条件,而不需要手动编写复杂的 SQL 语句。它提供了许多方法来支持各种条件操作符,并且可以通过链式调用来组合多个条件。这样可以简化查询的编写过程,并提高开发效率。
2024-03-20 15:40:08
964
原创 MyBatis-Plus--基于Mapper和Service接口的CRUD方法
在MyBatis中,我们需要新建Mapper和Service接口,并在实现类中将各个方法实现。这个过程比较固定而且繁琐,因此,MyBatis-Plus帮我们封装了单表的增删改查操作,节省了我们的操作。我们不需要再一个一个的去定义并实现单表操作方法。mapper接口:我们只需要将自己的Mapper接口继承MyBatis-Plus提供的BaseMapper接口,这样我们就可以直接使用MyBatis-Plus为我们提供的各种方阿飞,不需要我们一一实现。如果我们需要定义自定义方法,也可以按照像MyBatis中的流
2024-03-19 14:27:05
488
原创 RESTFul风格请求路径设置
RESTful(Representational State Transfer)是一种软件架构风格,用于设计网络应用程序和服务之间的通信。它是一种基于标准 HTTP 方法的简单和轻量级的通信协议,广泛应用于现代的Web服务开发。通过遵循 RESTful 架构的设计原则,可以构建出易于理解、可扩展、松耦合和可重用的 Web 服务。RESTful API 的特点是简单、清晰,并且易于使用和理解,它们使用标准的 HTTP 方法和状态码进行通信,不需要额外的协议和中间件。总而言之,RESTful 是一种基于 HTT
2024-03-16 14:47:07
1474
原创 LeetCode -- 76. 最小覆盖子串
给你一个字符串 s 、一个字符串 t。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “”。注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的子串,我们保证它是唯一的答案。示例 1:输入:s = “ADOBECODEBANC”, t = “ABC”输出:“BANC”解释:最小覆盖子串 “BANC” 包含来自字符串 t 的 ‘A’、‘B’ 和 ‘C’。
2024-03-15 13:52:59
581
原创 Spring MVC共享域对象操作
在 JavaWeb 中,共享域指的是在 Servlet 中存储数据,以便在同一 Web 应用程序的多个组件中进行共享和访问。。pageScope共享域的作用是提供了方便实用的方式在同一 Web 应用程序的多个组件之间传递数据,并且可以将数据保存在不同的共享域中,根据需要进行选择和使用。
2024-03-14 14:32:13
765
原创 Spring MVC 路径参数及JSON参数接收
路径传递参数是一种在 URL 路径中传递参数的方式。在 RESTful 的 Web 应用程序中,经常使用路径传递参数来表示资源的唯一标识符或更复杂的表示方式。而 Spring MVC 框架提供了注解来处理路径传递参数。注解允许将 URL 中的占位符映射到控制器方法中的参数。例如,如果我们想将/user/{id}路径下的{id}映射到控制器方法的一个参数中,则可以使用注解来实现。下面是一个使用。
2024-03-14 14:14:14
1398
原创 Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC 是 Spring 框架提供的 Web 框架,它允许开发者使用实体对象来接收 HTTP 请求中的参数。通过这种方式,可以在方法内部直接使用对象的属性来访问请求参数,而不需要每个参数都写一遍。有时候可能会出现一个参数名有多个值,例如多选框,提交的数据的时候一个key对应多个值,我们可以使用集合进行接收。注释将 Servlet 请求参数(即查询参数或表单数据)绑定到控制器中的方法参数。@RequestParam中的。在上述代码中,将请求参数name和age映射到实体类属性上,
2024-03-14 14:01:03
957
原创 SpringMVC访问路径设置
RequestMapping注解的作用就是将请求的 URL 地址和处理请求的方式(handler方法)关联起来,建立映射关系。SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的方法来处理这个请求。
2024-03-14 13:49:21
707
原创 Spring MVC简介及核心组件和调用流程理解
Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称(),但它通常被称为“Spring MVC”。在控制层框架历经Strust、WebWork、Strust2等诸多产品的历代更迭之后,目前业界普遍选择了SpringMVC作为Java EE项目表述层开发的。
2024-03-14 13:27:25
1255
原创 MyBatis动态语句 -- foreach标签
例如修改语句,我们找不到需要循环的sql片段,那就可以把整个sql语句循环。如果一个标签涉及多个语句!需要设置允许指定多语句!在数据库连接信息的URL地址中设置: allowMultiQueries=true如果没有给接口中List类型的参数使用@Param注解指定一个具体的名字,那么在collection属性中默认可以使用collection或list来引用这个list集合。
2024-03-13 14:19:48
841
原创 Mybatis多表映射总结
关联关系配置项关键词所在配置文件和具体位置对一association标签/javaType属性/property属性Mapper配置文件中的resultMap标签内对多collection标签/ofType属性/property属性Mapper配置文件中的resultMap标签内。
2024-03-13 13:41:59
347
原创 Mybatis多表映射之一对多映射
一对多映射时,在resultMap中使用标签collection与一对一映射中association一样,property属性值为被关联的实体类属性名相同。在上述例子中,顾客类中订单类型的集合属性名为orderList。ofType与association中的javaType一样,属性值为被关联的实体类的全类名。这里是list列表,因此填列表的泛型类型,也就是订单类。
2024-03-13 13:36:20
752
原创 Mybatis多表映射之一对一映射
一对一映射时,在resultMap中使用标签associationresultMap中的 property属性值要与被关联的实体类属性名相同,例如上述例子中的customerresultMap中的javaType属性值为被关联的实体类的全类名。
2024-03-13 13:26:57
412
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人