- 博客(53)
- 收藏
- 关注
原创 MySQL-主从复制&分库分表
ShardingSphere 是一个开源的分布式数据库中间件,提供数据分片、分布式事务和数据库治理功能。其核心原理包括 SQL 解析、路由、改写、执行和归并等多个步骤。ShardingSphere内核原理及核心源码剖析IO瓶颈:请求太多,导致大量的磁盘IO,效率太低。请求的数据太多,带宽不够,网络IO平静。CPU瓶颈:排序,分组,连接查询,聚合统计等SQL会消耗大量的CPU资源,请求数太多,CPU出现瓶颈。
2025-06-26 13:18:43
1536
原创 MySQL-日志+事务
Binlog(Binary Log)是 MySQL 的二进制日志,用于记录所有修改数据的操作(如 INSERT、UPDATE、DELETE)和数据定义语句(如 CREATE TABLE 等),不记录只读操作(如 SELECT)。作用:主从复制:将 Binlog 传递给从节点,用于主从数据同步。数据恢复:通过重放 Binlog 恢复数据到某个时间点或事务状态。数据库中途突然因为某些原因挂掉了。多个并发访问数据库时,多个线程同时写入数据库,覆盖了彼此的更改。。。。。。。何为事务?
2025-06-23 15:10:54
796
原创 MySQL索引——高效查询的关键
在使用索引下推的情况下,存储引擎层还是先根据 name like ‘L%’ 这个条件,查找到 LiLei、Lili、Lisa、Lucy 四条索引数据,不过接下来不是直接进行回表操作,而是根据 age = 17 这个条件,对四条索引数据进行判断筛选,将符合条件的索引对应的 id 进行回表扫描,最终将找到的行数据返回给 server 层。在不用索引下推的情况下,根据前边"最左匹配原则"描述的那样,该查询在联合索引中只有 name 列可以使用到索引,age 列是用不到索引的。在满足需求的前提下越短越好。
2025-06-21 22:38:11
1230
原创 MySQL存储引擎与架构
常见产品:MySQL(免费)、Oracle关系型数据库模型是把复杂的数据结构归结为简单。通常该表第一行为字段名称,描述该字段的作用,下面是具体的数据。在定义该表时需要指定字段的名称及类型。在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上。在大型系统中通常有多个表,且表之间有各种关系。实际使用就是通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。
2025-06-21 21:54:41
1231
1
原创 生产者消费者消息流转和基本实操
生产者和主题的关系为多对多关系,即同一个生产者可以向多个主题发送消息,对于平台类场景如果需要发送消息到多个主题,并不需要创建多个生产者;同一个主题也可以接收多个生产者的消息,以此可以实现生产者性能的水平扩展和容灾。
2025-06-14 22:31:32
799
原创 MQ选型及RocketMQ架构总览
摘要:MQ(消息队列)是应用程序间异步通信的中间件,通过解耦和缓冲实现高效消息传递。主要作用包括异步通信、系统解耦和流量削峰。常见产品有RabbitMQ(AMQP协议,低延迟)、RocketMQ(高可靠,阿里系)和Kafka(高吞吐,大数据场景)。RocketMQ架构包含生产者、消费者、消费者组、主题、NameServer、Broker和MessageQueue等核心组件,其中MessageQueue是消息存储的最小单元,实现水平扩展。选型需考虑业务场景,如金融领域推荐RocketMQ,大数据用Kafka,
2025-06-14 22:18:39
1250
原创 MQ常见问题分析——消息可靠性、消息积压、消息幂等问题
消息可靠性保证涉及生产者到broker、broker集群内部及broker到消费者三个阶段。生产者可通过同步/异步发送确保消息投递,设置重试机制;broker端需合理配置同步/异步刷盘策略;消费者通过重试队列和死信队列处理失败消息。消息幂等性需通过业务设计(如状态判断)避免重复处理。摘要重点:1.消息传输全链路可靠性方案;2.生产者重试机制;3.broker持久化策略;4.消费者异常处理流程;5.幂等性解决方案。
2025-06-10 18:35:06
1479
原创 消息消费类型和具体实现
RocketMQ 提供了三种高级消息类型:顺序消息、延迟消息和事务消息,以满足不同业务场景需求。顺序消息保证消息严格按照FIFO原则消费,适用于金融交易、订单处理等场景;延迟消息通过设置延迟级别实现定时投递,常用于订单超时处理、活动截止等场景;事务消息则解决分布式系统中的数据一致性问题,如电商交易中的多系统协同操作。每种消息类型都有其特定的实现机制和应用场景,开发者可以根据业务需求选择合适的消息模式来构建可靠的分布式系统。
2025-06-10 18:19:49
1143
原创 Spring知识点梳理
AOP切面编程:类似于一种拦截器,像一把刀一样选择一个方法为切入点,在这个方法执行的前后可以设置前置通知、后置通知、异常通知等,这些通知可以是对业务进行判断、日志记录、事务回滚等操作。CGLIB 就是第三方 Jar 包,它的作用是在程序运行时,动态生成新的 Java 类(目标类的子类),从而实现代理功能(比如在不修改原有代码的情况下,给某个类的方法增加额外逻辑,如日志、事务、权限控制等)。</</</</Bean就是Spring框架帮忙创建和管理的“对象镜像”、“clazz对象”,即代理对象;
2025-04-29 20:19:20
1320
原创 简历中的专业技能
封装检索实体类{keyword,category1id…} ElasticsearchClient 的 search() 方法实现检索.接口中save() deleteById() 方法,实现专辑的上架,下架,还能实现自动创建索引库!做日志收集,便于后续查询问题,利用kibana可视化视图,编写dsl语句,提高开发效率。企业级搜索引擎实现全文检索功能,避免数据库索引失效的问题!多线程异步编排快速查询数据,实现上架数据的封装。实现自动补全功能,增强用户体验度。
2025-04-25 09:16:38
1007
原创 JavaSE知识点梳理
首先,您需要定义一个新的类,并使其继承自Exception或其子类。如果您想要创建的是一个非检查型异常(unchecked exception),那么应该继承自RuntimeException。其次可以在自定义异常类中添加更多的属性和方法,以便在抛出异常时提供更多的上下文信息。SQL 注入(SQL Injection)是一种常见的网络安全攻击技术,攻击者通过在应用程序的输入字段中插入恶意的 SQL 代码,从而操纵后端数据库的查询逻辑。
2025-03-27 15:32:22
1229
原创 Redis 知识点梳理
NoSQL最常见的解释是"non-relational", 很多人也说它是"Not Only SQL"NoSQL仅仅是一个概念,泛指非关系型的数据库区别于关系数据库,它们不保证关系数据的ACID特性NoSQL是一项全新的数据库革命性运动,提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入Redis是当前比较热门的NoSQL系统之一它是一个开源的、使用ANSI C语言编写的key-value存储系统(区别于MySQL的二维表格形式存储)
2025-03-22 17:35:50
1646
原创 JVM 知识点梳理
在classpath下,要加载一个 java.lang.Integer 类的请求,通过双亲委派机制委派的启动类加载器,发现存在Integer类直接返回,不会重新加载传递的过来的Integer类,只会加载JAVA_HOME中的jar包里面的类,可以防止核心API被随意篡改。当一个类加载器收到了类加载的请求的时候,他不会直接去加载指定的类,而是把这个请求委托给自己的父加载器去加载。当快满的时候,将标记出来的存活的对象复制到另一块内存区域中,然后对整个之前的空间进行垃圾回收,将未复制的垃圾对象清理掉。
2025-03-21 23:59:37
1599
原创 MySQL 索引下推
索引下推(Index Condition Pushdown,简称 ICP) 是 MySQL 5.6 版本中提供的一项索引优化功能,它允许存储引擎在索引遍历过程中,执行部分 WHERE字句的判断条件,直接过滤掉不满足条件的记录,从而减少回表次数,提高查询效率。
2025-03-21 15:03:57
1089
原创 Spring 事务注解原理
隔离级别(Isolation):与数据库隔离级别一致,默认为Default,直接使用数据库的隔离级别。注意:如果Spring的隔离级别与MySQL不一致,则以Spring为准。回滚处理(RollbackFor):控制事务什么时候回滚,如果不配置,默认在遇到RuntimeException和Error时才回滚。在try块中代理对象调用了增强方法,catch块中对异常情况进行回滚处理,finally块中清理本次事务的信息。
2025-03-20 15:14:58
716
原创 Spring-循环依赖问题
Spring是如何解决Bean的循环依赖?采用三级缓存解决的就是三个Map//一级缓存//二级缓存//三级缓存流程总结先实例A对象,同时会创建ObjectFactory对象存入三级缓存singletonFactoriesA在初始化的时候需要B对象,这个走B的创建的逻辑B实例化完成,也会创建ObjectFactory对象存入三级缓存singletonFactoriesB需要注入A,通过三级缓存中获取ObjectFactory来生成一个A的对象同时存入二级缓存,
2025-03-20 13:24:43
965
原创 JVM垃圾回收
在java8时,堆被分为了两份:新生代和老年代【1:2】,在java7时,还存在一个永久代。对于新生代,内部又被分为了三个区域。Eden区,S0区,S1区【8:1:1】当对新生代产生GC:MinorGC【young GC】当对老年代代产生GC:Major GC当对新生代和老年代产生FullGC: 新生代 + 老年代完整垃圾回收,暂停时间长,应尽力避免!应用于新生代和老年代,在JDK9之后默认使用 G1。
2025-03-19 14:50:14
1208
原创 MySQL-深分页问题的背景和影响
MySQL 作为最受欢迎的开源关系数据库之一,被广泛用于各种规模的应用程序中。随着数据量的不断增长,高效地处理大量数据成为数据库管理的重要挑战之一。分页是一种常见的数据检索技术,它允许用户在大量数据中浏览和检索信息,而不必一次性加载所有数据。这对于提高用户体验和减少服务器负载至关重要。然而,当涉及到“深分页”时,即查询大量数据后的页面时,MySQL的性能可能会显著下降。深分页的影响响应时间增加:随着分页深度的增加,查询所需的时间也会增加,导致用户体验下降。
2025-03-14 14:24:51
1231
原创 Redis-缓存穿透&击穿&雪崩
向布隆过滤器询问 key 是否存在时,跟 add 一样,也会把 hash 的几个位置都算出来,看看位数组中这几个位置是否都为 1,只要有一个位为 0,那么说明布隆过滤器中这个key 不存在。对于恶意攻击,向服务器请求大量不存在的数据造成的缓存穿透,还可以用布隆过滤器先做一次过滤,对于不存在的数据,布隆过滤器一般都能够过滤掉,不让请求再往后端发送。当它说不存在时,那就肯定不存在。缓存击穿中,请求的 key 对应的是热点数据 ,该数据存在于数据库中,但不存在于缓存中(通常是因为缓存中的那份数据已经过期)。
2025-03-11 13:38:31
952
原创 Redis分布式锁
下面这段代码在多线程下存在线程安全问题!超卖的主要原因是下面的步骤不是原子性的。==> 单机情况下,可以加锁(synchronized | ReentrantLock)解决这个线程安全问题。但是在分布式场景下,必须使用分布式锁解决这个问题。
2025-03-11 13:24:29
707
原创 MySQL默认隔离级别是RR(可重复读),为什么大多企业改为RC(读已提交)?
本文介绍了一些 MySQL数据库的 RR 和 RC 两种事务隔离级别。他们主要在加锁机制、主从同步以及快照方面存在一些差异。而很多大厂,为了提升并发度和降低死锁发生的概率,会把数据库的隔离级别从默认的 RR 调整成 RC。当然,这样做也不是完全没有问题,首先使用 RC 之后,就需要自己解决幻读的问题,这个其实还好,很多时候幻读问题其实是可以忽略的,或者可以用其他手段解决。所有的技术方案的选择,都是一种权衡的艺术!
2025-03-10 17:47:16
1496
1
原创 Redis-限流方案
限流就是在高并发场景下,通过限制系统处理请求的速率,迅速拒绝超过设定上限的请求(最大的QPS),从而保证系统正常运行。在限流技术中,主要是有两个注意点:当前系统请求的阈值和拒绝策略。请求的阈值:阈值就是单位时间内允许请求的最大请求数。例如,将QPS(Queries Per Second)设置为1000,表明1s内最多接受1000个请求。通过设置适当的阈值,可以有效控制系统负载,避免系统请求过多而崩溃。(阈值是上线前通过压测或者评估得出的指标)
2025-03-07 16:44:54
1715
原创 微服务架构概述Spring Cloud Alibaba
针对微服务系统架构所存在的问题,肯定是需要有具体的技术来解决,而所使用到的技术就是Spring Clouad Alibaba。那么想要了解Spring Clouad Alibaba,那么就需要先了解一下Spring Cloud。1、Spring Cloud 是一系列框架的有序集合。在Spring Cloud这个项目中包含了很多的组件【子框架】,每一个组件都是用来解决问题系统架构中所遇到的问题,因此Spring Cloud可以看做是一套微服务的解决方案。
2025-03-07 16:29:44
1139
原创 JUC-AQS详解
AQS的全称是AbstractQueuedSynchronizer,翻译过来就是抽象队列同步器。这个类是在包下面。AQS就是一个抽象类,是用来构建锁和同步器的一个底层。AQS底层构建锁和同步器提供了一个通用的功能的实现,因此使用AQS可以构建出应用广泛的同步器,比如我们常见的等等都是基于AQS的。
2025-03-04 14:46:35
1056
原创 MySQL知识点梳理
为什么要分库分表分区?分库:主要解决的是并发量大的问题,数据库的连接数是有限的,当QPS过高导致数据库连接数不足,可以考虑分库分表:主要解决的是数据量大的问题,单表数据量大导致查询和存储的性能太低,一般超过500W行或者2GB考虑分表分区:数据量变大时,先考虑分区再考虑分表innodb中表存储主要依赖两个文件,一个是.frm,存储表结构,一个是.ibd,存储表数据innodb会将每个分区存储在不同的.ibd文件里表面看还是一张表,只不过数据存储在不同的位置(同一个.frm文件)
2025-03-04 14:23:36
1251
原创 单例模式为什么会引发空指针异常?
这个版本在getConnection方法增加了同步关键字,可以正确处理同步问题,程序执行正确符合预期,但是将同步关键词加在方法上锁粒度较大,可能会影响性能。我们将b变量声明为Volatile,那么在为b赋值即Volatile写前后会加上如下屏障,从而保证了语句1和语句2执行顺序不会重排。语句3依赖语句1,语句4依赖语句2,所以语句3和语句4不会第一个执行。这就引出我们下一个话题:指令重排。这样说有一些抽象,我们结合代码进行分析,还是使用上文代码实例,只是不同的是这一次我们新增了Volatile关键字。
2025-02-28 14:24:49
1102
原创 Java正则表达式
"正则表达式"属于,一般情况下用不到,如果会用,就会感叹它在文本处理方面的强大能力!正则表达式并不难,主要是知识点太多,一不经常使用就会忘,正好我想可以把它作为笔记记录先来,以后用到的时候直接翻看笔记就行了,省去了在网上频繁查找的麻烦!笔记以后还会补充,希望对大家理解“正则表达式”有帮助!
2024-02-27 14:26:03
1019
原创 函数式编程-Stream 流
Lambda是 JDK8 中一个语法糖。可以看成是一种语法糖,他可以从对某些匿名内部类的写法进行简化。它是函数式编程思想的一个重要体现。让我们不用关注是什么对象。而是更关注我们对数据进行了什么操作。Java8的Stream使用的是函数式编程模式,如同它的名字一样,它可以被用来对集合或数组进行链状流式操作。可以更方便的对集合或数组操作。我们在编写代码的时候出现最多的就是空指针异常。所以在很多情况下我们需要做各种非空的判断。if(author!= null) {尤其是对象中的属性还是一个对象的情况下。
2024-01-08 15:05:03
1024
1
原创 Java温故而知新
什么是死锁?所谓死锁是一组互相竞争资源的线程因为互相等待造成“永久”阻塞的现象发生锁的原因:互斥条件。共享资源x、y只能被一个线程占用占有且等待。线程t1已经取得了共享资源x,在等待共享资源y的时候,不释放共享资源x不可抢占。其他线程不可强行去抢占线程t1占有的资源循环等待。线程t1等待线程t2占有的资源,线程t2等待线程t1占有的资源如何避免死锁(从上面4个原因入手)
2023-10-26 03:31:11
137
原创 Kafka 科普
kafka介绍Kafka 是一个分布式流媒体平台,类似于消息队列或企业消息传递系统。kafka介绍-名词解释:发布消息的对象称之为主题生产者(Kafka topic producer):Kafka将消息分门别类,每一类的消息称之为一个主题(Topic):订阅消息并处理发布的消息的对象称之为主题消费者(consumers):已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个服务器都是一个代理(Broker)。
2022-12-21 16:47:06
238
原创 定时任务 科普
在实际项目开发中,除了Web应用、SOA服务外,还有一类不可缺少的,那就是定时任务调度。那究竟何为定时任务调度,一句话概括就是:基于给定的时间点、给定的时间间隔、自动执行的任务。
2022-12-10 03:24:45
233
原创 Nginx 科普
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx的网站有:百度、京东、新浪、网易、腾讯、淘宝等。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。Nginx可以作为静态web服务器来部署静态资源。
2022-11-26 19:15:55
443
原创 Spring Cache
是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。Spring Cache只是提供了一层抽象,底层可以切换不同的cache实现。具体就是通过接口来统一不同的缓存技术。CacheManager是Spring提供的各种缓存技术抽象接口。描述使用EhCache作为缓存技术使用Google的GuavaCache作为缓存技术使用Redis作为缓存技术。
2022-11-26 04:06:53
560
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅