自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(119)
  • 资源 (1)
  • 收藏
  • 关注

原创 MySQL 之多版本并发控制 MVCC

在每一次进行普通 select 操作前,都会生成一个 ReadView只在第一次进行普通 select 操作前生成一个 ReadView,之后的查询操作都重复使用这个 ReadView 就好了。MVCC(多版本并发控制)解决的问题① 读写之间阻塞的问题。通过 MVCC 可以让读写相互不阻塞,即读不阻塞写,写不阻塞读,可以提升事务并发处理能力。② 降低了死锁的概率。因为 MVCC 采用了乐观锁的方式,读取数据时并不需要加锁,对于写操作,也只锁定必要的行。③ 解决快照读的问题。

2023-11-20 11:48:26 417

原创 多维度梳理 MySQL 锁

在数据库中,除传统的计算资源(如 CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。同时。锁冲突也是影响数据库并发访问性能的一个重要因素。所以锁对数据库非常重要,且复杂。并发事务访问同一记录的情况,大致分为:读-读、写-写、读-写。

2023-11-15 15:48:58 170

原创 并发事务下,不同隔离级别可能出现的问题

对于MySQL而言,幻读是事务在插入事先检测不存在的记录时,发现这条数据已经存在了,无法支撑后续的插入操作。举例:对于两个事务A、B,事务A读取了一个字段,然后事务B 更新了该字段,之后事务A再次读取同一个字段,值就不同了,这种情况就是不可重复读。,事务A 在读到一条数据后,此时事务B对该数据进行修改并提交,那么事务A再读该数据,读到的还是原来的内容。,在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。以下示例,事务A已经提交成功,但是事务B回滚了,最终 no=1 的数据没有任何变化。

2023-11-13 08:31:53 279

原创 理解MySQL的日志 redo、undo、binlog

在 InnoDB 中,事务中的 delete 操作实际上并不是真正的删除掉数据行,而是一种 Delete Mark 操作,在记录上标识 Delete_Bit,而不删除记录,真正的删除是后台 purge线程去完成。比如,一个事务在修改当前一个页中某几条记录,同时还有其他事务在对同一个页中另几条记录进行修改,所以为保证不影响其他事务正在进行的工作,不能将一个页回滚到事务开始的样子。在执行事务的过程中,每执行一条语句,可能会产生多条redo日志,且这些redo日志是按照产生的顺序写入磁盘的,也就是。

2023-11-09 21:15:54 320

原创 MySQL 优化思路篇

show profile 是MySQL 提供用来分析当前会话中的SQL做了什么、执行的资源消耗情况的工具,用于SQL调优优化。参数定义【慢】的阈值,帮助我们定位执行慢的SQL语句,收集慢查询语句,再通过分析工具对慢查询日志进行分析。如果再 show profile 诊断结果中出现了以上四种结果中的一条,则SQL语句需要优化。由于开启慢查询日志,会或多或少带来一定的性能影响,周期性的波动,可能是双十一,促销活动等,可以通过。值的 SQL,会被记录到慢查询日志中。,并保存最近15次的运行结果。

2023-11-02 16:41:59 230 1

原创 从 Hash索引、二叉树、B-Tree 与 B+Tree 对比看索引结构选择

数据结构可以说是程序员常用,但大部分人不知其所以然的知识点,本文将对Hash、二叉搜索树、平衡二叉树、B-Tree、B+Tree几种数据做一下梳理和总结。

2023-10-30 17:11:09 222

原创 从InnoDB索引的数据结构,去理解索引

该篇我们都是基于 InnoDB 存储引擎的大前提下讨论的,如文中未明确指出存储引擎,一律说的是 InnoDB.要知道. 按照物理实现方式,可以将索引划分为聚簇索引和非聚簇索引(也称为二级索引辅助索引。

2023-10-29 15:11:07 485

原创 搞懂 MySQL 的架构和执行流程

学习MySQL需要知其然,知其所以然。在建立缓存、优化查询前,必须知道MySQL的架构,和SQL的执行流程相关知识。

2023-10-29 08:42:36 200

原创 自定义 spring-boot-starter 暴露钩子

/ MyService类的监听类,用来实现监听者模式这里监听 ContextRefreshedEvent 节点,在服务启动的 ContextRefreshedEvent 节点,将所有 实现 MyServiceListener 接口的实现类,加到 MyServiceImpl 业务实现类。import com。

2023-09-10 19:25:38 327

原创 关于 Nginx 的哪些事

权重轮询(Weighted Round Robin):在轮询策略的基础上,指定每个后端服务器的轮询几率,权重值越高的服务器被选择的可能性就越大。基于URL的限流方式,适用于限制某些频繁访问的URL,或者限制对某些重要接口的请求频率,以保护服务器资源或者控制某些URL的使用。通过动静分离,可以将动态请求交给专门的动态服务器处理,而静态请求则可以由更高效的静态服务器处理,从而提高整体的处理性能和响应速度。基于URL的限流,可以有效地控制每个URL的请求频率和请求数,有助于保护服务器的性能和防止滥用。

2023-09-06 07:53:58 1004

原创 Linux 之 shell 脚本

定义变量: 变量=值,示例:A=100# 撤销变量: unset 变量, 示例:unset A# 声明静态变量:readonly 变量。注意:静态变量不能 unset。示例:# 把变量提升为全局环境变量,可供其他shell程序使用。定义变量的规则① 变量名称可以由字母、数字和下划线组成,但不能以数字开头。等号两侧不能有空格。变量名称一般习惯为大写。预定义变量,就是 shell 脚本设计者事先已经定义好的变量,可以直接在shell脚本中使用。

2023-08-29 22:13:54 425

原创 复习 Linux 常用命令 2

top 指令是常用来查看系统信息的一个指令,它提供了一个动态的而且是实时的接口,帮助我们去查看系统执行时的进程、线程和系统参数的信息。当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推。当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推。当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其余类推。

2023-08-29 22:05:15 224

原创 Redis系列 2- Redis 的持久化

RDB 文件用于保存和还原 Redis 服务器中,所有的键值对数据。save命令由服务器进程直接执行保存操作,所以该命令 会阻塞服务器。bgsave命令 由子进程执行保存操作,所以该命令 不会阻塞服务器。服务器状态中会保存所有用 save 选项设置的保存条件,当任意一个保存条件被满足时,服务器会自动执行 bgsave 命令。RDB 文件是一个经过压缩的二进制文件,由多个部分组成。对于不同类型的键值对,RDB文件会使用不同的方式来保存它们。

2023-07-30 22:58:54 186

原创 Docker-基础命令

我们把应用程序和配置依赖,打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎 image镜像文件。一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。至于仓储,就是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。1、docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,就会自行退出。2、容器运行的命令如果不是那些一直挂起的命令( 运行top,tail、循环等),就是会自动退出。

2023-07-25 22:15:48 470

原创 线程系列 7 - JUC高并发容器类

JUC高并发容器是基于非阻塞算法(或者无锁编程算法)实现的容器类,无锁编程算法主要通过 CAS(保障操作的原子性) + Volatile(保障变量内存的可见性)组合实现。① 开销较小:不需要在内核态和用户态之间切换进程。② 读写不互斥:只有写操作需要使用基于CAS机制的乐观锁,读读操作之间可以不用互斥。JUC包中提供了List、Set、Queue、Map各种类型的高并发容器。ListJUC包中的高并发List主要有CopyOnWriteArrayList,对应的基础容器为ArrayList。

2023-07-25 21:40:37 265

原创 线程系列 4 - synchronized 和线程间的通信

线程系列 4 - synchronized 和线程间的通信1、关于内置锁 和 synchronized1.1、三种内置锁对比1.2、关于 synchronized1.2.1、synchronized 的使用1.2.1、synchronized 的执行过程2、线程间的通信2.1、对象的 wait() 方法2.2、对象的 notify() 方法2.3、线程通信的要点2.4、线程通信示例3、synchronized 八锁现象3.1、Lock13.2、Lock23.3、Lock33.4、Lock43.5、Lock5

2023-07-25 21:09:46 206

原创 线程系列 3 - 关于 CompletableFuture

线程系列3-关于 CompletableFuture1、从 Future 接口说起2、CompletableFuture 对 Future 的改进2.1、CompletionStage 接口类2.2、runAsync 和 supplyAsync 创建子任务2.3、 whenComplete 和 exceptionally 异步任务回调钩子2.4、调用 handle() 方法统一处理异常和结果2.5、异步任务的串行执行2.5.1、thenApply() 方法2.5.2、thenRun() 方法2.5.3、th

2023-07-18 22:17:01 360

原创 设计模式 - 策略模式

策略模式 (也叫做政策模式):定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。使用策略模式后,可以由其他模块决定采用何种策略,策略家族对外提供的访问接口就是封装类,简化了操作,同时避免了条件语句判断。平时使用时,一般用工厂方法模式来实现策略类的声明。

2023-05-25 20:02:46 139

原创 设计模式 - 工厂方法模式

工厂方法模式,就是定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。该模式在日常开发中使用频率较高,同时根据具体的场景,灵活改造扩展。1、在所有需要生成对象的地方,都可以使用工厂方法模式,但需要慎重考虑是否要增加一个工厂类进行管理,增加代码的复杂度。2、需要灵活可扩展的框架时,可以考虑使用工厂方法模式。静态工厂模式的工厂类扩展比较困难,不符合开闭原则。1、工厂方法模式,有良好的封装性,代码接口清晰。3、工厂方法模式是典型的解耦框架。3、可以在异构项目中使用。

2023-05-07 19:32:52 441

原创 设计模式 - 责任链模式

责任链接的核心类,就是抽象类 IHandler、抽象类的子实现子类、还有就是业务类。当然在具体的使用前,我们需要根据业务场景灵活使用。对于每个抽象类的实现类,只需要关注自己的业务逻辑,抽象类的实现类只专注怎样做事,具体自己需要处理哪一种事,那就交给父类去决定。抽象类实现了请求传递的功能,抽象类实现请求的处理,这也是设计模式单一职责原则的体现。举例:银行里面有存款业务,然后也有很多币种类型(人民币、美元、日元)。

2023-04-22 12:23:57 769

原创 设计模式-观察者模式

拿下面代码的例子来说,就是 李斯 观察 韩非子,如果 李斯观察到韩非子 在吃东西,那李斯就要对韩非子吃东西的行为,做出响应的反应。观察者可以有多个,就是除了李斯可以观察韩非子,张三和李四也可以观察韩非子,并对韩非子的行为,做出相应的反应。定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。一个被观察者,多个观察者,开发和调式会比较复杂。java 中消息的通知默认是顺序执行,一个观察者卡壳,会影响整体的执行效率。这种情况下,多采用异步处理。

2023-04-07 12:30:15 294

原创 线程系列 6 - JUC相关的显示锁

通常,一个锁提供对共享资源的独占访问:在一个时间只有一个线程可以获得锁和所有访问共享资源,需要先获得锁。ReentrantReadWriteLock 主要特性 公平性 支持公平锁和非公平锁,默认是非公平锁,可以根据构造方式设置公平锁。// 构造函数默认是false 非公平锁,由于读线程之间没有锁竞争,所以读操作,没有公平性和非公平性。:每个线程获取锁的顺序是按照线程访问锁的先后顺序获取的,最前面的线程总是最先获取到锁。:每个线程获取锁的顺序是随机的,并不会遵循先来先得的规则,所有线程会竞争获取锁。

2023-04-04 12:44:42 403

原创 关于JVM的垃圾回收(三)

关于JVM的垃圾回收1、垃圾回收的几个基本问题1.1、什么场景下该使用什么垃圾回收策略?1.2、垃圾回收发生在哪些区域?1.3、对象在什么时候能够被回收?2、可达性分析2.1、可达性分析说明图2.2、什么是根对象2.3、关于几种引用类型2.4、关于finalize() 方法3、三种基本垃圾回收算法3.1、标记-清除(Mark-Sweep)算法3.2、标记-整理(Mark-Compact)算法3.3、复制(Copy)算法3.4、三种基础垃圾回收算法的对比4、两种综合垃圾回收算法4.1、分代收集算法4.1.1、

2021-07-23 16:35:03 153

原创 Java 类加载机制(二)

Java 类加载机制1、类加载过程详解1.1、类加载过程详解图1.2、类生命周期1.3、类生命周期各阶段详解说明2、类加载器3、双亲委派模型1、类加载过程详解 1.1、类加载过程详解图  1.2、类生命周期 一个类从被加载到虚拟机内存中开始,到卸载出内存为止,他的生命周期将会经历以下七个阶段。 #mermaid-svg-6ahAQrTAPUpDCD6D .label{font-family:'trebuchet ms', verdan

2021-07-22 16:20:33 101

原创 JVM 内存结构(一)

JVM 内存结构1、JVM 内存结构图2、堆内存(Heap)2.1、堆内存结构2.2、新生代 && 老年代 && 持久代2.3、扩展说明 GC2.4、JVM 参考选项3、栈内存(Stack)4、方法区内存1、JVM 内存结构图 了解JVM优化,先搞清楚JVM 的内存结构,以下为JVM 内存结构图。 2、堆内存(Heap) 2.1、堆内存结构 堆内存的新生代分为Eden(伊甸园)和存活区(survivor),Su

2021-07-21 18:11:07 387 1

原创 记一次 JDK 版本导致的 Nacos 异常

记一次 JDK 版本导致的 Nacos 异常1、报错信息2、解决方案1、报错信息 [2021-07-05 14:24:38.698] [com.alibaba.nacos.naming.push.receiver] [XXXX,,,] [ERROR] [com.alibaba.nacos.client.naming :110 ] - [NA] error while receiving push datajava.net.SocketException: socket closed

2021-07-05 14:31:57 4092 5

原创 Java 的静态工厂模式和抽象工厂模式

Java 的静态工厂模式和抽象工厂模式1、静态工厂模式1.1、优缺点1.2、实现案例1.2.1、抽象类1.2.2、实现类1.2.3、静态工厂类1.2.4、测试类2、抽象工厂模式2.1、适用场景2.2、案例介绍2.2.1、抽象类2.2.2、实现类2.2.3、工厂类2.2.4、测试类1、静态工厂模式         静态工厂模式,在平常开发中是比较常见的。 1.1、优缺点 优点:

2021-06-17 16:11:26 3945 1

原创 原型设计模式—解决随机乱序出试卷(试题顺序、选项顺序随机打乱)

原型设计模式1、实现机制2、使用场景3、使用案例3.1、案例说明3.2、代码结构3.3、案例实现3.3.1、实体类3.3.2、工具类3.3.3、实现类3.3.4、测试类3.3.5、测试结果1、实现机制 实现机制:        通过实现 Cloneable接口,再重写 clone()方法返回想要的对象。原型模式实现clone接口的时候必须使用深拷贝。    &

2021-06-16 15:59:43 2322 1

原创 Nacos 注册中心实现原理,及服务注册源码分析

Nacos 注册中心实现原理分析1、关于 Nacos2、Nacos 架构图3、Nacos 注册中心原理1、关于 Nacos2、Nacos 架构图3、Nacos 注册中心原理服务注册的功能主要体现在以下几个方面服务实例在启动时注册到服务注册列表,并在关闭时注销。服务消费者查询服务注册列表,获得可用实例。服务注册中心需要调用服务实例的健康检查 API ,来验证服务提供者是否能够处理请求。...

2021-04-23 15:47:50 1313

原创 Kafka 、Rabbit MQ 、Rocket MQ 选型对比

Kafka 、Rabbit MQ 、Rocket MQ设计定位Kafka:系统间的数据流管道,实时数据处理。例如:网站活性跟踪、常规的消息系统、监控数据、日志收集处理等。Rabbit MQ:可靠消息传输。Rocket MQ:可靠消息传输。 说明对比项(斜体) :表示基础对比项。对比项KafkaRabbit MQRocket MQ成熟度日志领域成熟成熟成熟开发语言ScalaErlangJava社区活跃度高高中公司 /

2021-04-16 14:20:35 554

原创 Elasticsearch 设置密码,并配置 Kinaba 和 Filebeat

Elasticsearch 设置密码,并配置 Kinaba 和 Filebeat1、Elasticsearch 设置密码2、设置kibana 中的 elasticsearch 连接密码2.1、配置 elasticsearch 密码2.2 启动kibana3、设置 Filebeat 中的 elasticsearch 密码3.1、配置 elasticsearch 密码3.1、重启 Filebeat服务1、Elasticsearch 设置密码 1.1 没有设置密码,使用 curl localh

2021-04-09 11:24:58 4005 1

原创 Windows下 日志分析系统的部署

Windows 下 Elasticsearch + kibana + filebeat 安装1、Windows上安装ElasticSearch2、Windows上安装Kibana3、Windows上安装Filebeat说明:开始安装以下服务前,先确保环境中,已安装 1.8版本的 java。 1、Windows上安装ElasticSearch官网上下载ElasticSearch 地址:https://www.elastic.co/cn/downloads/本案例选择的是 6.6

2021-04-08 09:24:27 147

原创 Git + IDEA 操作指引

Git + IDEA 操作指引1、Clone下载代码1.1、下载主分支代码1.2、下载指定分支代码2、Pull更新代码3、Commit提交代码4、Push代码5、切换分支6、全量合并分支7、选择性合并分支1、Clone下载代码新建文件夹,在文件夹中右键鼠标,选择 “Git Bash Here”1.1、下载主分支代码 使用命令: git clone 项目地址.例如: git clone http://10.19.12.234:7890/demo1.2、下载指定分支代码使

2021-04-06 10:58:38 122

原创 玩转 Java 8 的 Stream 和 Collectors 工具类

玩转 Java 8 的 Stream 和 Collectors 工具类1、Java 8 的流式编程2、创建流的几种方法3、操作流的详细方法3.1、遍历:forEach()3.2、映射:map()3.3、过滤:filter()3.4、分片去重:limit、skip、distinct3.5、排序:sorted()3.6、最大 / 最小 / 总数:max / min / count3.7、取第一个 / 任意一个:findFirst / findAny3.8、匹配:allMatch / noneMatch / an

2021-01-27 16:34:31 409

原创 常用集合对比及使用

集合总结1、常用集合1.1、ArrayList 和 LinkedList1.2、HashSet、LinkedHashSet 和 TreeSet1、常用集合 1.1、ArrayList 和 LinkedList List 的两个重要的实现类 : ArrayList 和 LinkedList 。 ArrayList ,擅长随机访问元素,但在 List 中间插入和删除元素时速度较慢。LinkedList ,它通过较低的代价在 List 中间进行的插入和删

2020-12-01 16:53:07 546

原创 关于 final 关键字 && 类的初始化顺序

关于 final 关键字 && 类的初始化顺序1、final 关键字1.1、final 修饰变量和对象1.2、final 修饰的方法1.3、final 类2、类的初始化顺序 1、final 关键字 1.1、final 修饰变量和对象 当用 final 修饰对象,对于基本类型,final 使数值恒定不变。对于对象引用,final 使引用恒定不变。一旦引用被初始化指向了某个对象,它就不能改为指向其他对象。 但是,对象本身是可以修改的,Java

2020-11-25 15:16:56 457 4

原创 两个实体对象间,根据字段名赋值 Copy

两个实体对象间,根据字段名赋值1、引入 jar 包2、转换类3、测试3.1、源实体3.2、目标实体3.3、测试类 说明:字段名需要区分大小写,字段名要保持一致。 1、引入 jar 包  <!-- https://mvnrepository.com/artifact/cglib/cglib --> <dependency> <groupId>cglib</groupId> <artifactId

2020-11-20 14:50:43 723

原创 通过注解的方式,实现Redis 自动查找缓存,以及未命中时自动更新缓存

通过注解的方式,实现Redis 自动查找缓存,以及未命中时自动更新缓存1、写在前面的话2、你们可以白嫖的代码2.1、需要引入 jar 包2.2、yml 配置文件2.3、Redis 的配置类2.4、定义注解2.5、@Aspect 处理切面2.6 业务层注解使用示例3、让你们看看效果3.1、测试的实体类3.2、业务层测试代码3.3、控制层测试代码3.4、调用接口3.4.1、testApi1 接口3.4.1、testApi2 接口1、写在前面的话     &

2020-11-20 12:10:56 1214 1

原创 关于 Kafka 的那些事儿

一个典型的 Kafka 体系架构包括若干 Producer(生产者)、若干 个Broker(服务代理节点) 、若干 Consumer(消费者) ,以及一个 ZooKeeper 集群。其中 Kafka 用 ZooKeeper 来管理集群元数据、控制器的选举等操作。Producer(生产者) 将消息发送到 Broker, Broker 负责将收到的消息存储到磁盘中,Consumer(消费者)负责从 Broker 订阅并消 费消息。

2020-11-10 19:50:48 229 1

原创 SpringBoot+RabbitMq 采用 TTL(延迟队列)+ DLX(死信队列)实现延迟消费

采用 TTL(延迟队列)+DLX(死信队列)实现延迟消费1、pom文件引入jar包2、yml 配置3、声明交换机、队列及绑定4、定义常量类5、发送消息6、消费消息 1、pom文件引入jar包  <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-a

2020-10-20 14:36:40 527 1

PMP中文第六版

PMP指的是项目管理专业人士资格认证。它是由美国项目管理协会(Project Management Institute(PMI)发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证考试。 其目的是为了给项目管理人员提供统一的行业标准。目前,美国项目管理协会建立的认证考试有:PMP(项目管理师)和CAPM(项目管理助理师)已在全世界190多个国家和地区设立了认证考试机构。

2019-04-28

空空如也

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

TA关注的人

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