自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring源码之FactoryBean的实现

spring源码

2023-02-27 22:16:21 273 2

原创 Spring源码之IoC容器的Bean创建和依赖注入,DefaultListableBeanFactory容器为例

spring源码

2023-02-27 22:13:59 390

原创 Spring源码之IoC,单例Bean添加到一、二、三级缓存的时机,源码解读

spring源码

2023-02-27 22:13:50 1159 2

原创 Spring声明式事务注解@Transactional详解

spring声明式事务

2023-02-27 22:08:05 824 1

原创 虚拟机设置固定IP,以及解决设置固定IP后不能上网的问题

虚拟机问题

2022-07-20 15:14:17 2046 2

原创 mybatis-plush的groupBy(R column, R... columns)过时

如下写法过时new LambdaQueryWrapper<Order>().groupBy(Order::getUserId, Order::getUserName)可以改用下面写法new LambdaQueryWrapper<Order>().groupBy(new ArrayList<SFunction<Order, ?>>() {{ add(Order::getUserId); add(Order::get

2022-05-09 10:17:31 803

原创 使用java通过固定的excel模板自动生成数据库表的ddl建表语句

有时候要建很多表,一个个复制字段弄太麻烦了,为了提高点工作效率,写了个小工具通过固定的excel模板自动生成ddl建表语句,不是很完美,有需要再完善maven依赖 <!--核心jar包--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId>

2022-03-27 21:18:03 2815 2

原创 MySQL索引是什么,什么时候需要创建索引,创建索引需要注意些什么

索引是什么索引相当于一本字典的目录,当你需要查找一个字的释义时,需要先通过拼音或者偏旁部首等,查到该字所在的页码,再通过页码找到释义所在的书页,索引的功能就类似于目录的功能。索引的作用1、大大减少服务器需要扫描的行数。2、帮助服务器避免排序和临时表。3、可以将随机IO变为顺序IO。注意对于小表,大部分情况下简单的全表扫描更高效。对于中到大型的表,索引非常有效。对于特大型的表,维护索引的代价比较大,建议分区。创建索引时的注意事项索引的创建尽量避免选择频繁修改的字段,那些在where,grou

2022-03-24 16:42:40 1363

原创 Docker部署MySQL7,配置基于日志复制的主备集群

主库docker命令docker run -d -p 3308:3306 --restart=always --privileged=true -v /docker/mysql7_master/data:/var/lib/mysql -v /docker/mysql7_master/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 --name mysql7_master mysql:5.7 --character-set-server=utf

2022-02-21 23:48:54 895

原创 excel查找出某一列的重复数据

首先对这一列进行排序然后使用函数:=VLOOKUP(G2,G3:G19,1,FALSE)=G2取G2这个值,在后面的范围G3:G19进行查找,返回查找到的值,FALSE表示精确查找,=G2判断查找的的值和要找的值是否相等,最后结果为true表示有重复值。...

2021-12-31 11:26:37 2725

原创 MySQL数据库优化

表设计使用小而简单的字段类型字符型设置满足需要的最小字段,过长会浪费内存作为关联条件的字段尽量设置为相同的数据类型字段最好设置非null,因为这可能会导致=判断,函数等结果不符合预期索引的创建尽量避免选择频繁修改的字段,那些在where,group by,order by中出现的字段应该优先考虑建立索引不能建立过多索引,会影响数据增删改效率。建立索引时,应该尽量扩展已有索引而不是一来就新建索引创建复合索引时,应该考虑字段的顺序,根据经验值把选择性高的字段放在前面,但是实际过程中我们还应该考虑到

2021-12-20 19:32:35 561

原创 MySQL中如何使null=null成立

在多表联查的on条件中可能会出现null=null的情况,如果用=判断则null=null返回的是false,用<=>判断则可以避免这种问题两种关键字进行对比select case when null = null then 'true' else 'false' end 等于关键字;select case when null <=> null then 'true' else 'false' end 改变关键字;...

2021-12-20 14:42:50 1546

原创 MySQL中游标的使用

游标可用于接收查询语句的结果集,并遍历结果集获取每条记录进行处理drop procedure if exists student_pro; CREATE PROCEDURE student_pro()BEGIN-- 定义接收变量DECLARE nam varchar(20);DECLARE ag int;DECLARE sid int;DECLARE done int; -- 创建游标接收结果集DECLARE all_data CURSOR FORSELECT id,`name`,

2021-11-24 20:16:50 885

原创 MySQL对表进行KEY分区,新增,减少,删除和取消等操作

引用MySQL表RANGE分区,新增,删除,重组,效率对比这篇文章的表作为示例。文章目录KEY分区管理创建表时进行分区为现有数据的表进行分区常规分区线性分区新增分区减少分区查看分区的数据量删除分区取消分区KEY分区管理key分区和hash分区比较相似。创建表时进行分区CREATE TABLE `student_1` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `NAME` varchar(30) NOT NULL, `SEX` char(2) NOT

2021-11-22 20:30:13 892

原创 MySQL对表进行HASH分区,新增,减少,删除和取消等操作

引用MySQL表RANGE分区,新增,删除,重组,效率对比这篇文章的表作为示例。文章目录HASH分区管理创建表时进行分区为现有数据的表进行分区常规分区线性分区新增分区减少分区查看分区的数据量删除分区取消分区HASH分区管理创建表时进行分区CREATE TABLE `student_1` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `NAME` varchar(30) NOT NULL, `SEX` char(2) NOT NULL, `AGE` i

2021-11-22 20:12:29 1430

原创 MySQL表LIST分区,新增,删除,重组等

引用MySQL表RANGE分区,新增,删除,重组,效率对比这篇文章的表作为示例。LIST分区和RANGE分区很相似。文章目录LIST分区管理创建表时进行分区为现有数据的表进行分区新增分区重组分区合并分区拆分分区查看分区的数据量删除分区取消分区LIST分区管理创建表时进行分区CREATE TABLE `student_1` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `NAME` varchar(30) NOT NULL, `SEX` char(2)

2021-11-21 22:02:17 1015

原创 MySQL表RANGE分区,新增,删除,重组,效率对比

可以使用分区的场景分区的限制为什么要使用分区,比如表数据量远大于内存时,索引在空间和维护上的消耗很大,即使用到索引,数据也不是按照想要的方式聚集,而且会有大量的碎片产生,最终导致一个查询产生成千上万的随机IO。...

2021-11-21 15:40:13 1020 2

原创 MySQL分区概念,使用场景以及限制

文章目录分区的概念分区使用场景分区的限制为什么要使用分区分区的概念分区表是一个独立的逻辑表,但是底层是由多个物理子表组成。分区的主要目的是将数据按照一个较粗的粒度分布在不同的表中,能够快速过滤掉大量数据。分区使用场景分区的限制为什么要使用分区比如表数据量远大于内存时,索引在空间和维护上的消耗很大,即使用到索引,数据可能也不是按照想要的方式聚集,而且会有大量的碎片产生,最终导致一个查询产生成千上万的随机IO,效率低下,使用分区我们就能快速过滤掉大量不需要的数据,从而提高效率。...

2021-11-21 15:13:48 571

原创 MySQL的MVCC原理,可见性算法流程图

以下针对InnoDB 存储引擎文章目录几个重要组件和属性行隐藏列Read View读视图undo log可见性算法可见性算法流程图几个重要组件和属性行隐藏列DB_TRX_ID:mysql会为每个事务分配一个事务id,该字段记录最后一次插入或更新该行的事务 id。DB_ROLL_PTR:回滚指针,指向该行的 undo log。DB_ROW_ID:当表没有主键且没有唯一非空索引时生成的隐藏主键。Read View读视图三个主要属性为1.m_up_limit_id 最小活跃事务id2.m_l

2021-11-17 18:31:07 1893

原创 MySQL的JOIN连接查询原理

假设我们有两张表A和表B,表A有100条数据,表B有10000条数据,现在进行两表的内连接关联查询,MySQL优化器会默认选择数据量小的表A作为驱动表。简单嵌套循环连接 Nested Loop Join 算法(BLJ)如下图所示,该算法下,以A表作为驱动表,每扫描一条A表的记录,需要全量扫描B表进行匹配,扫描行数为100(表A)+ 100 * 10000(100次表B)= 1000100 条基于索引的嵌套循环链接Index Nested-Loop Join(INLJ)如下图所示,该算法下,以A表

2021-11-17 14:06:01 617

原创 MySQL最小值函数MIN()优化

基于MySQL中使用延迟关联优化order by加limit超大分页这篇的student来练习如下SQL,grade上面没有建立索引,查询最小值需要0.965sselect min(id) from student where grade='10年级'通过如下方式优化后执行只需0.549s,这种方式可以让mysql扫描尽可能少的记录数select id from student use index(PRIMARY) where grade='10年级' limit 1...

2021-11-14 14:24:30 1140

原创 MySQL中使用延迟关联优化order by加limit超大分页

创建一个student表插入200万条数据CREATE TABLE `student` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `NAME` varchar(30) NOT NULL, `SEX` char(2) NOT NULL, `AGE` int(11) NOT NULL, `CLASS` varchar(10) NOT NULL, `GRADE` varchar(20) NOT NULL, `HOBBY` varchar(100)

2021-11-12 22:03:45 777

原创 MySQL通过存储过程循环插入数据

创建一个student表CREATE TABLE `student` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `NAME` varchar(30) NOT NULL, `SEX` char(2) NOT NULL, `AGE` int(11) NOT NULL, `CLASS` varchar(10) NOT NULL, `GRADE` varchar(20) NOT NULL, `HOBBY` varchar(100) DEFAULT

2021-11-12 20:15:00 626

原创 MySQL的ORDER BY排序优化

索引设计时,尽量满足既能满足排序,又能查找行。ORDER BY优化时尽量使用索引排序。只有当索引列的顺序和ORDER BY的字段顺序一致,排序方向也一致,并且索引包含要查找的行,满足最左前缀原则,才能使用索引来对结果排序。例如给student表建立联合索引NAME, AGE, CLASSCREATE TABLE `student` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `NAME` varchar(30) NOT NULL, `SEX` char

2021-11-12 16:21:00 1296

原创 MySQL的GROUP BY怎么优化,GROUP BY进行了隐式排序,怎么禁止隐式排序

EXPLAIN证明GROUP BY进行了隐式排序EXPLAIN SELECT NAME FROM student GROUP BY NAME可以看到Extra一列有Using temporary; Using filesort说明用到了临时表和排序接下来我们通过添加ORDER BY NULL禁止排序EXPLAIN SELECT NAME FROM student GROUP BY NAME ORDER BY NULL可以看到现在只用到了临时表,没有进行排序了所以在需要分组并不需要对结果进

2021-11-11 15:53:31 888

原创 MySQL查看单个表,所有表数据大小

查询表所属schemaSELECT * FROM information_schema.COLUMNS WHERE table_name = 'student';查询表大小select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') as table_size from information_schema.tables where table_schema='study' AND table_name='student';...

2021-11-08 20:37:49 340

原创 mysql查询时给数据结果加一列自增值

select @rownum:=@rownum+1 AS rownum,name from student,(SELECT @rownum:=0) r;

2021-11-08 19:54:45 1925 1

原创 AQS的acquire方法流程

ADS同步队列CLH中5种节点状态1、CANCELLED(1):表示当前结点已取消调度。当timeout或被中断(响应中断的情况下),会触发变更为此状态,进入该状态后的结点将不会再变化。2、SIGNAL(-1):表示后继结点在等待当前结点唤醒。后继结点入队时,会将前继结点的状态更新为SIGNAL。3、CONDITION(-2):表示结点等待在Condition上,当其他线程调用了Condition的signal()方法后,CONDITION状态的结点将从等待队列转移到同步队列中,等待获取同步锁。4、

2021-07-05 23:16:04 414 1

原创 MySQL的where子句中or导致索引失效,以及包含or时能使索引生效的情况

结论:包含or时,需要有一个索引包含了所有where用到的字段,这个索引才会生效。否则索引不生效。建表语句CREATE TABLE `course` ( `cno` varchar(20) NOT NULL, `cname` varchar(10) NOT NULL, `tno` varchar(20) NOT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`cno`), KEY `cname` (`cname`) USING BT

2021-07-04 21:49:29 2166

原创 Spring源码之IoC,单例Bean添加到一、二、三级缓存的时机,源码解读

目录添加到一级缓存的时机doGetBean方法中创建单例Bean的代码getSingleton(String beanName, ObjectFactory<?> singletonFactory)方法源码addSingleton方法源码添加到二级缓存的时机doGetBean中首次调用getSingleton添加到三级缓存的时机doGetBean方法调用addSingletonFactory方法的源码addSingletonFactory方法源码总结三个缓存都存在于DefaultSinglet

2021-06-14 15:52:19 953 1

原创 Spring循环依赖问题,循环依赖的情况,能解决的情况,怎么解决的

目录Spring中依赖注入的方式循环依赖的种类Spring能解决哪些循环依赖单例模式下的构造器注入循环依赖问题Spring无法解决单例模式下的接口注入循环依赖问题Spring能解决单例模式下的setter注入循环依赖问题Spring能解决多例模式下的循环依赖Spring无法解决Spring怎么解决的单例模式下的setter方法依赖注入引起的循环依赖问题首先看下Spring三级缓存介绍getBean方法从缓存中获取实例的源码Spring中依赖注入的方式1、构造器注入2、setter方法注入3、接口注入

2021-06-13 22:08:59 736 2

原创 Spring源码之autowiring的实现

PropertyValues pvs = mbd.hasPropertyValues() ? mbd.getPropertyValues() : null; int resolvedAutowireMode = mbd.getResolvedAutowireMode(); if (resolvedAutowireMode == 1 || resolvedAutowireMode == 2) { MutablePropertyV.

2021-06-13 18:52:53 76

原创 Spring源码之BeanPostProcessor的方法何时调用

通过前面的章节我们知道Bean的创建在doCreateBean中是怎么完成的。首先,通过createBeanInstance对Bean进行实例化然后,通过populateBean方法完成依赖注入而BeanPostProcessor也就是Bean的后置处理,是在完成依赖注入后,通过initializeBean方法调用进行的。后置:指的是在Bean实例化后,BeanPostProcessor都是在createBeanInstance对Bean进行实例化后执行的 try {

2021-06-13 17:24:52 534

原创 Spring源码之FactoryBean的实现

在前面的文章Spring源码之IoC容器的Bean创建和依赖注入,DefaultListableBeanFactory容器为例中提到获取Bean的过程。通过getBean方法调用doGetBean方法,如果从缓存中获得Bean,通过getObjectForBeanInstance方法完成FactoryBean的相关处理,取得FactoryBean的处理结果,也就是最终的Bean。那么getObjectForBeanInstance方法做了哪些操作,一起看看1、如果不是FactoryBean的调用(Be

2021-06-13 15:22:50 202

原创 Spring源码之IoC容器的Bean创建和依赖注入,DefaultListableBeanFactory容器为例

目录依赖注入的触发设置依赖关系依赖注入的触发getBean方法触发依赖注入public interface BeanFactory { String FACTORY_BEAN_PREFIX = "&"; Object getBean(String var1) throws BeansException; <T> T getBean(String var1, Class<T> var2) throws BeansException;

2021-06-13 00:09:58 300 2

原创 Spring源码之IoC容器初始化过程,以FileSystemXmlApplicationContext容器为例

目录refresh主流程图refresh方法调用的地方refresh方法源码refresh主流程图refresh方法调用的地方 public FileSystemXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent) throws BeansException { super(parent); this.setConfigLocati

2021-05-29 14:20:14 234

原创 linux开放/禁止指定端口号,查看所有开放的端口号,防火墙开启关闭

查看防火墙是否开启systemctl status firewalld开启防火墙systemctl start firewalld关闭防火墙systemctl stop firewalld永久开放指定端口firewall-cmd --zone=public --add-port=80/tcp --permanent命令参数含义:–zone 作用域–add-port=80/tcp 添加端口,格式:端口/通讯协议–permanent 永久生效,没有此参数重启后失效永久禁止访问80

2020-11-20 23:05:25 580

原创 websocket部署上linux无法访问问题解决,Nginx配置websocket

nginx.conf内容添加如下内容 #自定义变量 $connection_upgrade map $http_upgrade $connection_upgrade { default keep-alive; #默认为keep-alive 可以支持 一般http请求 'websocket' upgrade; #如果为websocket 则为 upgrade 可升级的。 } location /

2020-11-20 21:58:06 2372

原创 springboot微服务分布式场景下使用websocket,使用redis实现发布订阅通知功能

明确目标问题单点服务中使用websocket:我们每个client客户端都是与同一个service服务器进行连接,连接的session通过map存储在内存中,发送消息时,只需要在map中查找到所有需要发送的id对应的session进行发送即可。分布式服务中使用websocket:多个用户可能连接不同的service服务器,如果还是采用单点的方式,那么接收发送请求的服务器发送消息时,将无法发送到别的服务器上的用户。我们要解决的问题:也就是任何服务器接收到发送请求时,要让所有服务器都知道,该请求发送消息将

2020-11-19 16:37:03 1454

原创 SpringBoot2.0整合RocketMQ实战

目录同步消息异步消息单向消息批量消息事务消息队列自选择同步消息异步消息单向消息批量消息事务消息队列自选择

2020-11-15 17:59:27 705

空空如也

空空如也

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

TA关注的人

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