自定义博客皮肤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)
  • 收藏
  • 关注

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

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

2024-06-07 17:58:02 680

原创 如何处理慢查询?

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

2024-05-29 11:23:22 846

原创 docker是什么

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

2024-05-24 15:42:42 2173

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

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

2024-05-23 18:09:57 1875

原创 AOF持久化

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

2024-05-20 21:18:04 916

原创 redisson的实现和优缺点

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

2024-05-19 16:20:18 1692

原创 倒排索引和正向索引

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

2024-05-17 16:56:23 928

原创 CyclicBarrier是什么

是一种强大的并发工具,可以使多个线程在完成某个任务或者达到指定条件时保持同步。使用得当,可以有效管理多线程间的协调与协作,提升程序的并发性能和执行效率。

2024-10-26 14:00:02 378

原创 Mybatis mapper文件 resultType和resultMap的区别

resultType是 MyBatis 查询语句中的一个属性,用于指定查询结果的 Java 类型。它告诉 MyBatis 应该将查询的结果映射为哪种类的对象。resultMap是 MyBatis 的一个更灵活和复杂的映射机制,用于定义更具体的映射规则,包括列名与属性之间的自定义映射、嵌套结果映射等。在选择使用resultType还是resultMap时,应该根据业务需求和查询的复杂性进行选择。如果映射关系简单且列名与属性名相同,使用resultType更加方便;

2024-10-22 19:57:12 526

原创 网关挂了服务还能正常运行吗?

网关是现代架构中至关重要的组件,其挂掉通常会导致系统的正常运行受到影响。然而,通过合理的架构设计、冗余和负载均衡措施,可以有效提高系统的可用性和容错能力,确保在网关故障时系统仍能够保持一定的运行能力。

2024-10-22 17:16:08 625

原创 线程同步和线程协作是怎么理解的?

线程同步是指在多个线程访问共享资源时,通过特定机制(如锁机制、信号量等)来保证线程之间的互斥性或者在某种条件下的有序执行,从而避免出现因为竞态条件导致的数据不一致或资源冲突。线程协作是指多个线程之间通过一定的机制进行协同工作,完成某一共同目标。线程之间的协作通常涉及到一个或多个线程的行为依赖于其他线程的执行结果。线程同步和线程协作在多线程编程中各有其重要作用。线程同步主要关注于保证数据的安全性和一致性,而线程协作则关注于多个线程之间如何相互配合以完成共同的任务。

2024-10-22 17:04:40 419

原创 jmeter是怎么用的,怎么设计接口测试用例的

Apache JMeter 是一个强大的性能测试工具,能够有效地设计和执行接口测试用例。通过合理的测试设计,可以全面评估接口的功能性、安全性和性能,确保应用程序在高负载和各种边界条件下的稳定性和可靠性。

2024-10-20 16:47:18 851

原创 索引和主键的区别

索引是一种数据库对象,用于加速数据检索。它创建了一个数据结构(通常是 B 树或哈希表),该结构使得数据库能够在更短的时间内查找到所需的数据。主键是数据库表中用来唯一标识每一条记录的字段或字段组合。通常在创建表时指定。索引是用于加速数据检索的工具,能够提升查询性能,但增加了对写操作的开销。主键是用于唯一标识数据库表中每一条记录的特殊字段,保证数据的完整性和唯一性,并自动创建索引以提高访问速度。合理使用索引和主键是数据库设计中的重要环节,有助于提升应用的性能并确保数据的正确性。

2024-10-17 16:08:03 474

原创 MySQL什么时候使用索引 什么情况下应不建或少建索引

在 MySQL 中,合理地使用索引可以有效提升查询性能,但在特定情况下不应使用或减少索引。开发者在设计数据库时,需要综合考虑表的大小、查询的特性及数据的更新频率,以确保索引带来最佳的性能提升效益。通过性能监测和优化,可以持续调整索引策略。

2024-10-17 16:01:11 650

原创 如何利用线程池和countlatch批量将数据导入到es中,避免oom?

在将数据批量导入到 Elasticsearch(ES)时,使用和 CountDownLatch可以有效管理并发处理,同时避免(Out Of Memory, OOM)问题。下面是一个示例代码,演示如何利用这些工具将数据分批导入到 ES 中。

2024-10-16 14:31:40 633

原创 信号量(Semaphore)是什么,如何使用?

是 Java包中的一种同步辅助类,用于控制对共享资源的访问。在并发编程中,信号量常用于限制同时访问特定资源的线程数量,避免过多线程同时访问可能导致的资源竞争或性能下降。

2024-10-13 00:45:00 1200

原创 CountDownLatch的用法

是 Java包中的一个同步辅助类,用于协调多个线程之间的同步。它允许一个或多个线程等待直到一组操作完成。

2024-10-12 20:09:13 570

原创 CopyOnWriteArrayList的底层原理是怎样的

是 Java 中的一个线程安全集合类,它实现了List接口,并主要用于多线程环境中需要频繁读取而相对较少写入的场景。其底层原理和实现机制使它在并发环境中表现出色。

2024-10-12 18:05:38 403

原创 什么是Function Score Query ?

是 Elasticsearch 中的一种查询类型,它允许用户根据某个函数的分数来定制文档的评分。在执行搜索时,可用于改变基础查询的得分,利用不同的评分函数、加权、和衰减等方式来影响最终的搜索结果。

2024-10-11 17:34:36 326

原创 jdk8默认的垃圾回收器是什么?

Parallel GC 是一个追求高吞吐量的垃圾回收器,通过多线程并行处理和分代收集策略,有效提高了 Java 应用的内存管理效率。虽然它可能在某些情况下导致较长的停顿时间,但对于大多数高性能的服务器应用来说,仍然是一个非常有效的选择。

2024-09-28 14:46:27 1301

原创 匿名内部类持有外部类导致内存泄露的原因和解决方案

在 Java 中,匿名内部类持有外部类的引用可能导致内存泄露,这主要是因为它们之间的引用关系。

2024-09-19 18:19:17 608

原创 CountDownLatch和Semaphore的区别和底层原理

目的不同用于线程间的等待和协调,而Semaphore用于控制对共享资源的访问。计数器的使用的计数器只会递减到零,而Semaphore可以进行递增和递减,允许更灵活的资源控制。使用场景不同更适合用于等待一系列事件的完成,比如其他线程的初始化。Semaphore则常用于限制某个资源的并发访问,比如连接池中的线程数控制。

2024-09-16 11:21:34 421

原创 springboot核心注解

是一个通用的注解,用于标识任何Spring托管的组件,可以是一个服务、存储库、控制器或其他组件。注解能够更清晰地表达出某个类是业务逻辑中的一部分,这样也更符合代码的语义化,增强了可读性。用于定义 Spring 容器组件扫描的范围,对指定的包及其子包进行扫描,找到带有。注解都用于标识一个类作为Spring容器中的组件,但是它们在语义上有一些区别。注解的特化,通常用于标识业务逻辑层(Service层)的组件。注解是一个通用的注解,可以用于标识任何Spring管理的组件。通常用于标识服务层的组件。

2024-06-18 21:44:59 817

原创 定时任务和延迟任务,Java中实现延迟任务

定时任务指的是在预定的时间或间隔内执行特定任务或代码的过程。它是一种常见的编程需求,用于执行周期性的操作、定时触发事件以及处理需要延迟执行的任务。在软件开发中,定时任务通常用于处理后台数据处理、系统维护、报表生成、数据备份等任务。

2024-06-17 18:16:53 3159 1

原创 springboot的多线程事务能否保证事务的一致性

在多线程环境下,需要选择合适的事务管理器,并正确配置事务管理器的属性来保证事务的一致性和隔离性。事务传播属性(Transaction Propagation):在进行多线程事务处理时,需要合理设置事务的传播属性,以确保事务的边界范围正确地传播到多个线程中。但开发人员需要结合具体的业务场景和系统架构,合理设计和配置事务管理策略,以确保多线程事务的正确性和一致性。合理的事务粒度:在设计多线程事务时,需要考虑事务的粒度,避免过大或过小的事务范围,以确保在多线程并发操作中能够正确保证事务的一致性和性能的平衡。

2024-06-15 22:58:10 681

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

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

2024-06-14 18:35:07 1269

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

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

2024-06-08 21:21:21 579 2

原创 反射 相关的三个类

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

2024-06-08 19:11:35 259

原创 jvm堆中如何分代

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

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

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

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

2024-06-07 17:52:50 277

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

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

2024-06-07 17:48:59 544

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

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

2024-06-06 20:06:35 631

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

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

2024-06-06 18:54:39 458

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

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

2024-06-05 20:37:13 378

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

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

2024-06-05 17:53:57 245

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

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

2024-06-05 12:34:54 527

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

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

2024-06-04 19:16:13 692

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

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

2024-05-28 19:02:43 545

原创 mysql锁的类型有那些?

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

2024-05-27 23:07:20 202

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

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

2024-05-27 11:08:30 444

空空如也

空空如也

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

TA关注的人

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