自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM的ZGC是什么?,G1和CMS。两者使用回收算法的区别,标记过程的区别,增量更新和SATB,G1的STW时间怎么控制的?

JVM(Java虚拟机)是Java程序的运行环境,负责将Java字节码转换成机器码并执行。在JVM的内存管理方面,常见的GC(Garbage Collection)算法有许多种,其中包括ZGC、G1和CMS。

2024-06-07 17:58:02 485

原创 如何处理慢查询?

分析并优化执行较慢的SQL语句,可以使用数据库的查询分析工具(如MySQL的explain)来分析SQL语句的执行计划,并根据需要优化索引、重构查询语句、降低查询复杂度等。总的来说,处理慢查询需要综合考虑数据库本身的结构、索引、硬件条件以及业务场景的需求,通过SQL优化、索引优化、数据库参数调优等手段来提高数据库的查询性能。:通过数据库的读写分离、分区、分片等技术,将查询请求均匀分布到多个节点上,提高数据库的整体查询性能。:可以使用数据库自带的或第三方的数据库追踪工具来监控数据库性能并分析慢查询的原因。

2024-05-29 11:23:22 657

原创 docker是什么

是一种用于开发、交付和运行应用程序的开放平台,它利用容器化技术,可以更加高效地打包、发布和管理应用程序及其依赖。Docker 的各个部分包括镜像(Image)、容器(Container)、仓库(Repository)和 Docker 守护程序(Docker Daemon)。接下来我们将逐一对这些部分进行详解,并结合代码来说明如何使用以及它们的优缺点。

2024-05-24 15:42:42 1334

原创 缓存穿透,缓存雪崩,缓存击穿的区别

缓存击穿是指一个非常热点的key在缓存过期后,同时有大量的并发请求访问,导致这些请求都直接打到数据库上,造成瞬间的数据库压力暴增。缓存击穿是指一个非常热点的key在缓存过期后,同时有大量的并发请求访问,导致这些请求都直接打到数据库上,造成瞬间的数据库压力暴增。缓存雪崩是指缓存中的大量数据同时失效或者因某些原因导致缓存失效,而后续的请求无法命中缓存,导致大量请求直接打到数据库或后端系统,产生瞬时并严重的系统性能问题,甚至引起系统瘫痪的现象。

2024-05-23 18:09:57 1145

原创 AOF持久化

AOF(Append-Only File)是Redis中用于持久化的一种机制,通过以日志方式追加记录Redis服务器接收到的写命令,来记录数据的变化。AOF持久化机制通过追加记录写命令的方式,保证了数据的完整性和持久化。在AOF文件不断增大时,通过AOF重写机制可以对AOF文件进行压缩和优化,从而避免文件过大带来的问题。

2024-05-20 21:18:04 856

原创 redisson的实现和优缺点

是一个基于 Redis 的 Java 驻内存数据网格解决方案,提供了丰富的分布式数据结构和功能,能够有效地解决可重入、可重试、超时释放以及主从一致性等问题。

2024-05-19 16:20:18 851

原创 倒排索引和正向索引

正向索引和倒排索引在文档检索和搜索中有着不同的应用场景和优势。具体选择使用哪种索引结构,需要根据具体的应用需求和场景来进行权衡和选择,以实现最佳的检索和搜索效果。总的来说,正向索引适合于文档导航和内容检索,而倒排索引适合于全文搜索和复杂查询分析,它们之间的选择通常取决于具体的应用需求和性能优化的考虑。

2024-05-17 16:56:23 743

原创 Mybatis-Plus中Page和IPage的区别

以下是一个简单的示例,演示了如何使用。类来指定要查询的页数和每页记录数,然后调用。在 MyBatis Plus 中,可以使用。方法执行分页查询,最后从。另一种常见的方法是直接使用。在此示例中,我们直接创建了。方法时传入该对象,然后从。在此示例中,我们使用。对象中获取查询结果。对象中获取查询结果。

2024-06-14 18:35:07 382

原创 redis的AOF什么时候会丢数据

如果 AOF 文件在写入过程中被部分损坏,可能会导致最后一部分数据丢失。虽然 Redis 提供了 AOF 重写(AOF Rewrite)和 AOF 文件的 fsync 选项来减小数据丢失的风险,但在上述情况下,依然有可能发生数据丢失。:如果 Redis 以不正常的方式停止(比如进程崩溃、宿主机断电等),在最后一次成功写入 AOF 文件和 Redis 服务器再次启动之间的数据可能会丢失。:在一些罕见情况下,存储 AOF 文件的磁盘可能出现故障或错误,导致数据丢失或损坏。

2024-06-08 21:21:21 300 2

原创 反射 相关的三个类

在 Java 中,反射(Reflection)指的是在运行时检查或修改运行时行为的能力。Java 的反射机制允许在运行时检查类、接口、字段和方法,并且可以在运行时创建、检查和调用对象。通过这些类,可以在运行时获取类的信息,创建类的对象,获取类的构造函数和方法,以及在运行时调用类的方法。这为实现动态性、灵活性和通用性的程序设计提供了便利。

2024-06-08 19:11:35 178

原创 jvm堆中如何分代

JVM的堆内存是按照新生代和老年代进行分代的,这种分代的设计是为了更高效地处理不同生命周期的对象。在JDK 1.7和JDK 1.8中,堆内存的分代设计略有不同,下面将对两个版本进行详细解释。

2024-06-08 11:11:18 355 2

原创 volatile原理:JMM里保证了什么,这两个特性怎么保证的,读写屏障怎么实现的?

在Java中,volatile是一种轻量级的同步机制,用于确保变量的可见性和禁止指令重排序。它是通过Java内存模型(Java Memory Model,JMM)来保证这两方面的特性的。

2024-06-07 17:52:50 219

原创 reentrantlock底层,AQS,具体的结构,变量赋值过程,线程如何唤醒的,公平锁和非公平,和读写锁的区别,读写锁的锁降级。

而当持有锁的线程释放锁时,会利用 AQS 的 release 方法来唤醒等待队列中的线程,并通过队列的算法选择一个合适的线程来获得锁。总的来说,ReentrantLock 的底层机制主要是基于 AQS 提供的并发框架,它通过 acquire、release、tryAcquire、tryRelease 等方法来实现锁的获取和释放,以及对等待队列的管理,保证了线程对锁的安全获取和释放。AQS 是一个用于构建锁和同步器的框架,它包含了一个队列用于保存等待获取锁的线程,并且使用一个同步状态来标识锁的状态。

2024-06-07 17:48:59 469

原创 分布式session和本地session区别

总的来说,分布式会话相对于本地会话具有更好的可扩展性、数据共享特性以及更高的容错性。然而,也需要考虑分布式会话所引入的复杂性和额外的成本。选择合适的会话管理方式需要根据具体的应用场景和需求进行综合权衡。分布式会话(Distributed Session)和本地会话(Local Session)是两种会话管理方式,它们在存储位置、可扩展性和数据共享方面存在区别。

2024-06-06 20:06:35 508

原创 怎么实现事务查询对应数据版本?

值得注意的是,使用事务和数据版本控制来查询对应数据版本需要充分理解 MySQL 的事务隔禽级别和 MVCC 机制,以便正确地实现和应用对应数据版本的查询功能。:在开始事务之前,根据需求设置适当的事务隔离级别。MySQL 提供了多版本并发控制(MVCC)来支持事务的隔离级别和并发访问,从而可以查询不同时间点的数据版本。:在需要查询对应数据版本的代码块中,开始一个新的事务,并根据需要设置事务的隔离级别。隔离级别中执行查询,MySQL 会在事务开始时创建一个一致性视图,从而可以查询该事务开始前的版本。

2024-06-06 18:54:39 361

原创 springmvc的控制器是不是单例模式,有什么问题,怎么解决

状态共享:由于控制器是单例的,如果控制器中存在状态(如成员变量),则多个并发请求会共享这些状态,可能导致线程安全问题。例如,如果控制器中包含成员变量来存储特定请求的状态,那么多个并发请求可能会相互干扰,导致状态混乱。总的来说,虽然Spring MVC中的控制器默认是单例模式,但通过以上方式可以解决单例模式带来的状态共享和线程安全问题,从而确保控制器的正确性和适用性。注解来指定控制器的作用域为请求作用域,这样每个请求都会创建一个新的控制器实例,避免状态共享问题。如果确实需要在控制器中存储状态信息,可以使用。

2024-06-05 20:37:13 217

原创 抢单过程中redis数据结构是怎么使用的 ?

在抢单过程中,你可以使用 Redis 数据结构来实现一些关键功能,比如分布式锁、存储抢单信息、记录抢单状态等。

2024-06-05 17:53:57 171

原创 spring和springmvc为什么需要父子容器?

父子容器可以避免不同层次之间Bean定义的冲突。子容器可以访问父容器中的Bean定义,而父容器无法访问子容器中的Bean定义,从而起到了隔离的作用。

2024-06-05 12:34:54 441

原创 各种Map实现类的特性和优缺点

是基于哈希表的Map接口的实现类,它提供了快速的插入、删除和查找操作。HashMap 允许键和值为null,并且它不保证元素的顺序。是基于红黑树的实现,它提供了有序的键值对集合,按照键的自然顺序或者自定义比较器的顺序进行排序。继承自 HashMap,内部使用双向链表维护键值对的顺序,可以保持插入顺序或者访问顺序。是线程安全的哈希表实现,适用于高并发的场景。

2024-06-04 19:16:13 605

原创 什么是AQS?AQS如何实现可重入锁 ?

线程再次获取锁时,如果当前线程已经持有锁,只需将计数加1,而不必再次竞争锁。AQS的核心思想是,如果一个线程在获取同步状态时失败,它会被构造成一个节点,然后被放置在一个队列中。AQS提供了两个队列,一个是同步队列,另一个是条件队列。总之,AQS提供了一种基于FIFO队列+volatile变量state的支持可重入锁的框枥,具备灵活性和高性能,并且可以为基于AQS的同步工具提供更高的并发性。ReentrantLock就是基于AQS实现的一个可重入锁,通过AQS的状态值和线程关联机制,实现了可重入锁的功能。

2024-05-28 19:02:43 411

原创 mysql锁的类型有那些?

也称读锁(Read Lock),多个事务可以共享相同资源的共享锁,不互斥。共享锁适用于对资源只读的情况,不会阻塞其他事务的共享锁请求,但会阻塞排他锁(独占锁)的请求。:也称写锁(Write Lock),事务独占所请求的资源,不允许其他事务同时持有排他锁或共享锁。这些锁类型在MySQL中用于控制并发事务访问和修改数据的行为,在设计和实现数据库系统时需要考虑合理选择和使用不同类型的锁,以确保数据的一致性和系统的性能。:在存储引擎层面针对表的行记录进行的锁定,可以是共享锁或排他锁,用于事务对记录的操作。

2024-05-27 23:07:20 159

原创 Java如何开启线程,怎么保证线程安全

在Java中,可以通过继承Thread类或实现Runnable接口的方式来创建并开启线程。

2024-05-27 11:08:30 395

原创 CAP理论和BASE理论

CAP理论是分布式系统设计中的基本原则,指出在一个分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)这三个目标无法同时满足,最多只能满足其中的两个。这是由于在分布式系统中,当网络发生分区时,节点之间的通信可能会中断,因此分布式系统必须在一致性和可用性之间做出权衡。

2024-05-27 10:50:58 278

原创 Java中线程锁机制是怎样的?偏向锁,轻量级锁,重量级锁有什么区别?锁机制是如何升级的?

Java中的线程锁机制包括偏向锁(Biased Locking)、轻量级锁(Lightweight Locking)和重量级锁(Heavyweight Locking)。这些锁机制是为了在多线程并发访问时保证数据的一致性和防止竞态条件而设计的。

2024-05-26 16:41:20 321

原创 对象头里面有 4 位留给谁了?

在 Java 对象头中,有 4 位用于存储对象的存活状态和锁信息。具体来说,这 4 位被用于存储对象的分代年龄、偏向锁标识和锁状态等信息。总的来说,4位信息在对象头中被用于存储对象的分代年龄、偏向锁标识和锁状态等信息,是 Java 虚拟机对对象进行管理和优化的重要部分。这些信息在对象头中使用 4 位来存储,这样可以提高对象在内存中的存储效率,并且在锁的竞争和对象的年龄晋升中发挥重要作用。

2024-05-25 20:53:59 311

原创 mysql执行计划怎么看?

命令来查看查询语句的执行计划。执行计划是 MySQL 查询优化器根据统计信息和索引信息所生成的查询执行方案,它显示了 MySQL 将如何执行查询语句以返回结果。执行上述命令后,MySQL会返回一张表,列出了执行查询所使用的索引、表之间的引用、扫描的行数等重要信息。通常来说,查看执行计划可以帮助你确定查询的性能瓶颈所在,比如是否使用了索引、是否出现了全表扫描等,从而进行优化查询语句。要查看执行计划,你可以在查询语句前加上。在 MySQL 中,你可以使用。

2024-05-25 12:00:34 267

原创 redis哨兵模式和集群模式有什么区别

因此,哨兵模式主要用于提供 Redis 服务的高可用性,当发生主节点故障时进行自动故障恢复,而集群模式则适用于大规模的数据存储和高并发的数据访问,能够提供更好的横向扩展性。选择哪种模式取决于具体的应用需求和架构设计。Redis 的哨兵模式和集群模式是用于提高 Redis 的高可用和横向扩展能力的两种不同架构。

2024-05-24 15:43:44 514

原创 Java秒杀过程出现的超卖问题和一人一单

在Java秒杀过程中,超卖问题指的是在处理库存减少操作时,使用乐观锁可以确保在更新库存前检查库存量,避免超卖情况的发生。乐观锁通常通过版本号或时间戳等机制来实现,并在更新时检查版本号或时间戳是否匹配。

2024-05-24 11:48:51 287

原创 redis分布式锁误删问题

在使用 Redis 分布式锁时,误删问题指的是在释放锁的过程中,因为网络延迟或其他原因,导致另一个客户端错误地释放了该锁,从而导致锁的误删除或释放。这可能会导致多个客户端同时获取到同一个资源的访问权限,造成数据不一致或并发问题。

2024-05-24 09:55:37 362

原创 红锁的实现

是一种分布式锁的实现方案,旨在提供在分布式系统中的高可用性和可靠性。: 红锁可以在大多数Redis实例正常工作时提供可靠的分布式锁服务,相对于单个Redis实例的分布式锁,红锁能够提高分布式锁的可用性,降低单点故障的风险。: 红锁提供了更高的可用性和可靠性,但在N/2+1的Redis实例正常工作的条件下才能保证红锁的可用性,如果无法满足这一条件,红锁的可靠性会受到影响。: 通过互斥算法和多个Redis实例的组合,红锁能够提供更高级别的可靠性,降低了丢失锁和锁竞争的可能性,确保了分布式锁的稳定性。

2024-05-24 08:05:18 570

原创 乐观锁和悲观锁

在事务进行数据更新操作时,会将查询出的版本号或时间戳一并提交,数据库会根据提交的版本号或时间戳和数据库中的当前版本号或时间戳进行比对,以判断数据是否被修改。数据库级别的悲观锁:在关系型数据库中,可以通过数据库提供的锁机制来实现悲观锁。是一种并发控制机制,其核心思想是在操作数据时,首先假设数据一般来说并不会发生冲突,因此不立即对数据加锁,而是在对数据进行更新前,检查数据是否被其他事务修改过。因此,悲观锁在并发访问时会采取阻塞或者独占的方式,来确保同一时刻只有一个事务可以对数据进行操作,以避免数据一致性问题。

2024-05-23 18:47:33 693

原创 布隆过滤器和位图

布隆过滤器的基本原理是使用多个哈希函数对输入元素进行哈希,将得到的哈希值映射到一个足够长的位数组(通常是由比特构成),并将这些位置置为1。当查询元素是否存在时,对输入元素进行相同的哈希映射,检查对应的位数组位置是否都为1,如果是则说明该元素可能存在在集合中(存在一定的误判率),如果有任何一位为0,则说明该元素一定不存在在集合中。如果元素存在,则对应的位为1;总体来说,布隆过滤器适用于快速判断一个元素是否“可能存在”于一个集合中,它关注于是否存在误判,而位图则更侧重于表示同时存在多个元素的集合。

2024-05-23 18:02:06 767

原创 分布式锁的实现

是用于在分布式系统中实现资源的并发访问控制,以确保同一时刻只有一个客户端能够访问共享资源。

2024-05-23 17:50:02 350

原创 redis主从同步的原理

通过同步机制,从节点可以同步主节点的数据,一旦主节点宕机,可以快速切换至从节点提供服务。从节点在接收到 RDB 文件后,会将其载入内存,并继续连接主节点,请求主节点将自上次断开连接后的所有写命令发送给它。:当从节点完成了初始的同步数据后,主节点会加锁,将同步期间主节点执行的所有命令都发送给从节点执行。增量复制:主节点会将自己的命令请求缓存起来,当从节点连接上来的时候,再将缓存的命令请求发送给从节点执行,从节点也从主节点的客户端读取请求并执行。:从节点连接主节点并发送 SYNC 命令请求同步数据。

2024-05-22 22:23:46 249

原创 在MySQL中如何解决半同步复制的问题

在 MySQL 中,半同步复制是一种提供更高的数据安全性的复制模式,但与异步复制相比,半同步复制会引入一些性能和可用性方面的挑战。以上是常见的一些解决半同步复制问题的方法,通过不同的手段可以优化半同步复制的性能和稳定性,确保数据库的高可用性和数据的一致性。

2024-05-21 22:59:05 307

原创 全局ID生成器

全局ID生成器在Java中是一个常见的需求,通常用于分布式系统或数据库中。它可以确保生成的ID在整个系统中唯一。在Java中,有几种常见的全局ID生成器的实现方式,包括UUID、雪花算法(Snowflake Algorithm)以及基于数据库的自增ID。

2024-05-21 21:53:52 250

原创 RDB的执行原理

Redis的RDB(Redis DataBase)持久化是一种将Redis内存中的数据快照(snapshot)定期保存到磁盘上的持久化机制。

2024-05-20 13:04:17 471

原创 数据库修改信息如何同步elasticsearch?

在将数据库中的信息同步到Elasticsearch(ES)时,可以使用多种方法来实现数据同步。

2024-05-20 12:55:57 308

原创 Elasticsearch的DSL查询

当使用Elasticsearch(ES)进行查询时,有几种常见的查询方式可供选择。

2024-05-20 12:54:15 445

原创 CAS法和版本号法实现乐观锁

是一种用于并发控制的机制,它通过假设并发访问是非常少的,因此大多数时候并发访问不会产生冲突,从而避免使用显式的锁和阻塞。CAS(Compare and Swap)法和版本号法都是常用的实现乐观锁的方式。

2024-05-19 16:46:49 350

空空如也

空空如也

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

TA关注的人

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