- 博客(472)
- 收藏
- 关注
原创 38 张图详解 Redis:核心架构、发布订阅机制、9大数据类型底层原理、RDB和AOF 持久化、高可用架构、性能问题排查和调优
比如,member 存储 “女神 ID”,score 是该女神的经纬度信息。v 是键值对的 value 值,是个 union(联合体),当它的值是 uint64_t、int64_t 或 double 数字类型时,就不再需要额外的存储,这有利于减少内存碎片。Java 的 HashSet 底层是用 HashMap 实现,Sets 的底层数据结构也是用 Hashtable(散列表)实现,散列表的 key 存的是 Sets 集合元素的 value,散列表的 value 则指向 NULL。香肌如雪,罗裳慢解春光泄。
2025-03-26 14:36:52
630
原创 Kafka 4.0 发布:KRaft 替代 Zookeeper、新一代重平衡协议、点对点消息模型、移除旧协议 API
Kafka 4.0 通过彻底摆脱 ZooKeeper,全面采用 KRaft 模式,不仅简化了部署和维护工作,还显著提升了系统的性能和稳定性。同时,新一代消费者重平衡协议和队列功能的引入,为开发者提供了更为灵活和高效的消息处理模式。这些架构革新使得 Kafka 4.0 成为了一个更加独立、高效和易用的分布式消息系统,为未来的发展奠定了坚实的基础。
2025-03-26 14:35:55
685
原创 四种方案讲清楚,数据权限该如何设计?
在数字化系统的权限管理演进中,我们探讨了四种典型的数据权限控制方案,第一种基于角色-菜单绑定的方案虽然实现了精确控制,却面临角色爆炸的困境;第三种的混合方案也会面临权限放大的问题,我们采用的第四种通过菜单绑定控权维度和角色实例化设计,既解决了角色数量膨胀问题,又实现了数据权限的精准控制。第二种方案采用用户-角色-数据范围绑定的权限管理模式,虽然解决了角色数量膨胀的问题,却带来了新的局限性。这种设计能够实现精确到菜单级别的权限管理,每个菜单都可以灵活配置不同的权限维度,具有较好的通用性。
2025-03-26 14:35:13
814
原创 Redis如何高效安全的遍历所有key?
在Redis中遍历所有keys时,使用SCAN命令是一个高效且安全的选择。与KEYS命令相比,SCAN命令的增量扫描避免了阻塞和性能问题,使得我们能够在大规模数据下进行遍历操作。在实际应用中,结合Java客户端Jedis的实现,我们可以轻松地遍历Redis中的所有keys,并根据需求进行模式匹配和数据处理。
2025-03-25 21:33:41
589
原创 Spring AI+DeepSeek,10分钟快速构建本地化AI对话系统
在大模型技术迅速普及的当下,如何在本地环境中以低成本部署高性能AI服务,成为了广大开发者关注的焦点。本文将结合Spring AI、Ollama和DeepSeek-R1模型,通过Docker容器化部署和Redis持久化存储,手把手教你构建一个支持连续对话的AI应用。这一方案特别适合需要私有化部署、数据安全可控的场景,如企业内部知识库、教育问答系统等。从安装Docker开始,到通过Docker安装Redis、Ollama,并部署DeepSeek模型,一步步带你搞定环境配置。
2025-03-25 21:33:06
963
原创 IDEA的Docker插件:直接一键打包 + 推送 + 部署
接着需要编写一个用于定义和构建 Docker 镜像的文本文件,文件名为 Dockerfile,Dockerfile 中的配置可根据自身项目情况进行调整。在设置中找到 Docker,点击 +,选择以 SSH 方法连接到 Docker 守护进程,接着点击下拉列表,选择刚才创建的 SSH 配置。如果你点击小三角后部署失败,并且 IDEA 给出了以下提示,可能是因为 SSH 配置中的用户并没有连接 Docker 的权限。点击 +,创建一个新的 SSH 连接,填入主机、用户名和密码后点击测试连接。
2025-03-25 21:32:35
969
原创 Spring Boot 一个接口实现任意表的 Excel 导入导出
Java的web开发需要excel的导入导出工具,所以需要一定的工具类实现,如果是使用easypoi、Hutool导入导出excel,会非常的损耗内存,因此可以尝试使用easyexcel解决大数据量的数据的导入导出,且可以通过Java8的函数式编程解决该问题。这种方式可以通过把表中的字段顺序存储起来,通过配置数据和字段的位置实现数据的新增,那么如果出现了导出数据模板/手写excel的时候顺序和导入的时候顺序不一样怎么办?那么这些问题都解决了,如果出现大数据量的情况,如果要极大的使用到cpu,该怎么做呢?
2025-03-25 21:31:09
342
原创 网易二面:阿里为何建议MVC+Manager层混合架构?
初入编程世界时,前辈们总会教导我们,系统设计应遵循架构。MVC 架构就像一个精巧的齿轮组,将整个系统清晰地划分为 Model(模型)、View(视图)和 Controller(控制器)三个层次。它巧妙地把用户视图和业务处理隔离开来,再通过控制器将它们紧密连接,如同搭建起一座沟通的桥梁,实现了表现与逻辑的完美解耦,是软件分层架构中的经典范式。三层架构MVC 分层架构是架构领域中最为基础和简单的分层方式。
2025-03-25 21:30:38
670
原创 取代Navicat,一款集成了 AI 功能的数据库管理神器
Chat2DB 是一款集成了 AI 功能的智能通用 SQL 客户端和数据报告工具。Chat2DB 可帮助您更快地编写 SQL 查询、管理数据库、生成报告、探索数据以及与多个数据库交互。hat2DB作为一款AI驱动的智能数据库管理工具,凭借其自然语言转SQL、SQL优化、多数据库支持等核心功能,正在改变传统数据库管理的方式。它不仅降低了数据库交互的门槛,还极大地提升了数据分析和管理的效率。随着AI技术的不断发展,Chat2DB有望成为数据库管理领域的标杆工具。
2025-03-25 21:29:12
480
原创 为什么MySQL不推荐使用join?
对于mysql,不推荐使用子查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据。子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。如果是JOIN的话,它是走嵌套查询的。小表驱动大表,且通过索引字段进行关联。如果表记录比较少的话,还是OK的。大的话业务逻辑中可以控制处理。
2025-03-24 21:53:17
290
原创 我们放弃了Nacos作为配置中心,转而选择了这款神器~
写一个 Controller 类来输出 test 变量的值,使用了 Spring 的 @Value 注解,用于读取配置文件中的变量的值,这里来测试该值,项目启动后读取到的变量的值是设置在 application 配置文件中的默认值,还是远程 Apollo 中的值,如果是 Apollo 中配置的值,那么再测试在 Apollo 配置中心中改变该变量的值后,这里是否会产生变化。对程序配置的期望值也越来越高,配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制……
2025-03-24 21:52:07
943
原创 SQL查找是否“存在“,别再count了
如果你近期准备面试跳槽,建议在ddkk.com在线刷题,涵盖 一万+ 道 Java 面试题,几乎覆盖了所有主流技术面试题,还有市面上最全的技术五百套,精品系列教程,免费提供。根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*) 呢?业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。普遍的SQL及代码写法如下。根据查询条件查出来的条数越多,性能提升的越明显,在某些情况下,还可以减少联合索引的创建。
2025-03-24 21:51:08
111
原创 MCP协议让AI不再“与世隔绝”
MCP(Model Context Protocol,模型上下文协议)是由Anthropic公司于2024 年 11 月 26 日推出的一项技术协议。其主要目的是解决 AI 助手与外部数据源隔离的问题,使 AI 能够连接并访问外部资源。
2025-03-24 21:50:09
1021
原创 Spring Boot 实现扫码登录
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。就是放置了二维码中的uuid。
2025-03-24 21:49:29
558
原创 如何优雅的实现接口统一调用 ?
这是我之前设计的关于接口统一调用的流程,当然其实还是包括对接第三方重复调用的问题、调用结果缓存、调用超时解决、失败降级的一些策略,如果还有更好的接口统一调用方式欢迎大家评论区留言讨论;
2025-03-23 19:19:17
601
原创 SQL查找是否“存在“,别再count了
如果你近期准备面试跳槽,建议在ddkk.com在线刷题,涵盖 一万+ 道 Java 面试题,几乎覆盖了所有主流技术面试题,还有市面上最全的技术五百套,精品系列教程,免费提供。根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*) 呢?业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。普遍的SQL及代码写法如下。根据查询条件查出来的条数越多,性能提升的越明显,在某些情况下,还可以减少联合索引的创建。
2025-03-23 19:18:45
221
原创 SpringBoot + Facade Pattern : 通过统一接口简化多模块业务
外观设计模式()是一种常见的结构型设计模式,它的主要目的是简化复杂系统的使用。可以把它想象成一个“控制面板”或者“遥控器”,通过这个控制面板,用户可以轻松操作一个复杂的系统,而不需要关心系统内部是如何运作的。举个生活中的例子,想象一下,你家有一台多功能的家电,比如一台智能电视,它不仅能看电视,还能上网、播放视频、控制智能家居等等。对于电视的操作,你有遥控器,可以通过一些按钮控制各种功能。电视内部的各种硬件(显示屏、网络模块、声音系统、处理器等)和软件(操作系统、应用程序等)。
2025-03-23 19:17:42
865
原创 阿里面试这样问:Nacos配置中心交互模型是 push 还是 pull ?
对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服务发现、配置管理,非常好用的一个工具。然而这样的技术用的人越多面试被问的概率也就越大,如果只停留在使用层面,那面试可能要吃大亏。比如我们今天要讨论的话题,Nacos在做配置中心的时候,配置数据的交互模式是服务端推过来还是客户端主动拉的?这里我先抛出答案:客户端主动拉的!接下来咱们扒一扒Nacos的源码,来看看它具体是如何实现的?
2025-03-23 19:17:06
888
原创 抖音一面:二维码扫码登录原理
但是在日常使用过程中,我们应该会注意到,只有在你的应用下载下来后,第一次登录的时候,才需要进行一个账号密码的登录, 那之后呢 即使这个应用进程被杀掉,或者手机重启,都是不需要再次输入账号密码的,它可以自动登录。服务端就可以通过 token 找到与它绑定的账号与设备信息,然后把绑定的设备信息与客户端每次传来的设备信息进行比较, 如果相同,那么校验通过,返回 AP 接口响应数据, 如果不同,那就是校验不通过拒绝访问。不可能手机端登录的是账号 A,而扫码登录以后,PC 端登录的是账号 B。
2025-03-23 19:14:16
687
原创 泪目了!Alibaba开源内网“M9”级别高并发编程手册(全彩版)
开发正确的程序是比较难的,开发正确的高并发多线程应用则更是难上加难。”我已经记不清这句话出自何处,但是我完全认同这句话所表达的观点。随着近几年云原生、容器化、分布式计算的逐渐发展和普及,以及微服务架构的演进与兴起,Java高并发编程在设计与编程中的地位越来越重要。Java高并发编程已经成为架构师、资深编程人员进行分布式协作设计、服务设计、模块开发所必需的基本功,也是理解、使用、优化Web容器、JEE容器、云原生基础设施组件所不可或缺的基本技能。
2025-03-23 19:13:10
234
原创 在 SpringBoot 项目中如何动态切换数据源、数据库?
此时你在代码层面用注解指定了一个增删改方法到从数据源,但是碰巧此时从数据源失效了,那么就会自动的切换到其它服务器。动态切换数据源可以在不同的操作中使用不同的数据库,以达到优化性能的目的。在复杂的业务场景下,可能需要根据不同的业务逻辑来选择不同的数据源。项目中使用AOP和自定义注解实现MySQL主从数据库的动态切换,当从库故障时,能自动切换到主库,确保服务的高可用性。当主数据库不可用时,动态切换数据源可以自动或手动切换到备用数据库,以保证服务的连续性和数据的可用性。添加数据源和用法参考上面即可,都是一样的。
2025-03-23 19:11:31
842
原创 2025年Java高频面试题汇总(附答案)
线程私有的,与线程在同一时间创建。栈的大小可以是固定的,或者是动态扩展的。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。JVM内存管理最大的一块,对被线程共享,目的是存放对象的实例,几乎所欲的对象实例都会放在这里, 当堆没有可用空间时,会抛出OOM异常.根据对象的存活周期不同,JVM把对象进行分代管理,由垃圾回收器进行垃圾的回收管理。
2025-03-21 20:53:50
938
原创 SpringBoot 中设计一个订单号生成系统
定义数据中心ID。定义机器ID。序列号,用于同一毫秒内生成多个ID时区分这些ID。上一次生成ID的时间戳。以下是Snowflake算法的一些关键参数:系统的起始时间戳,这里是Snowflake算法的作者选择的一个固定的时间点(2010-11-04 09:42:54.657 GMT)。数据中心ID所占的位数。机器ID所占的位数。数据中心ID的最大值,这里通过位运算计算得出。机器ID的最大值,同样通过位运算得出。序列号占用的位数。以下是一些用于位运算的参数,用于计算最终的ID:
2025-03-21 17:23:24
464
原创 大公司为什么禁止 SpringBoot 项目使用 Tomcat?
同时,SpringBoot也支持Undertow容器,我们可以很方便的用Undertow替换Tomcat,而Undertow的性能和内存使用方面都优于Tomcat,那我们如何使用Undertow技术呢?Tomcat是完全免费的,深受开发者的喜爱。在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。
2025-03-21 17:22:31
578
原创 图解 6 种常见负载均衡算法
其思路是在服务器选择过程中,根据服务器的处理能力或负载情况为服务器分配不同的权重,以便处理能力更强或负载较轻的服务器能够接收更多请求。其思路是在服务器选择过程中,根据服务器的处理能力或负载情况为服务器分配不同的权重,以便处理能力更强或负载较轻的服务器能够获得更多请求。然而,它没有考虑服务器的实际负载情况,可能导致一些服务器承担过重的负载,而其他服务器则处于空闲状态。通常要求服务实例是无状态的。需要注意的是,如果服务器宕机或网络链路中断,负载均衡器将需要重新计算服务器的连接数,这将延长响应时间并影响性能。
2025-03-21 17:20:15
770
原创 你还在使用websocket实现实时消息推送吗?
在日常的开发中,我们经常能碰见服务端需要主动推送给客户端数据的业务场景,比如数据大屏的实时数据,比如消息中心的未读消息,比如聊天功能等等。本文主要介绍SSE的使用场景和如何使用SSE。
2025-03-21 17:19:37
652
原创 慎用!不要在事务中嵌套发送 MQ 消息和 RPC 调用!
回到开头提到的问题,在业务低谷期,MQ 消息会出现反查无法查询到数据的情况,这是因为在低谷期 MQ 消息能够被及时消费,其延迟几乎和 RPC 请求一样,这就使得消费者会在事务提交前执行反查操作,从而出现和 RPC 请求相同的问题。而在高峰期,由于 MQ 消费不及时,反查操作被“延后”了,在事务提交后才开始消费,所以可以查询到数据。实际上还存在一个问题,即事务提交成功,但 MQ 消息发送失败,无法保证本地事务和消息发送的原子性,也就是无法实现要么都成功,要么都失败的目标。总体而言,这种方法的弊端远大于益处。
2025-03-21 17:19:03
745
原创 去哪儿技术面:10亿数据如何最快速插入MySQL?
但如果是HDD的话,虽然顺序读写会有非常高的表现,但HDD无法应对并发写入,例如每个库10张表,假设10张表在并发写入,每张表虽然是顺序写入,由于多个表的存储位置不同,HDD只有1个磁头,不支持并发写,只能重新寻道,耗时将大大增加,失去顺序读写的高性能。回到SSD的场景,不同SSD厂商的写入能力不同,对于并发写入的能力也不同,有的支持500M/s,有的支持1G/s读写,有的支持8个并发,有的支持4个并发。使用主节点轮训任务,可以减少任务的争抢,通过kafka发布消息,接收到消息的进程处理任务。
2025-03-21 17:17:51
703
原创 谁说 MySQL 单表行数不要超过 2000W?
1. Mysql 的表数据是以页的形式存放的,页在磁盘中不一定是连续的。2. 页的空间是 16K, 并不是所有的空间都是用来存放数据的,会有一些固定的信息,如,页头,页尾,页码,校验码等等。3. 在 B+ 树中,叶子节点和非叶子节点的数据结构是一样的,区别在于,叶子节点存放的是实际的行数据,而非叶子节点存放的是主键和页号。4. 索引结构不会影响单表最大行数,2kw 也只是推荐值,超过了这个值可能会导致 B + 树层级更高,影响查询性能。
2025-03-21 17:17:03
550
原创 大公司为什么禁止 SpringBoot 项目使用 Tomcat?
同时,SpringBoot也支持Undertow容器,我们可以很方便的用Undertow替换Tomcat,而Undertow的性能和内存使用方面都优于Tomcat,那我们如何使用Undertow技术呢?Tomcat是完全免费的,深受开发者的喜爱。在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。
2025-03-21 17:16:25
622
原创 为什么 MyBatis 源码中,没有我那种 if···else
通过梳理,MyBatis大约运用了10种左右设计模式。可以说,复杂且优秀的ORM 框架源码在设计和实现的过程中都会使用大量的设计模式。在解决复杂场景的问题时,需要采用分治、抽象的方法,运用设计模式和设计原则等相关知识,把问题合理切割为若干子问题,以便加以理解和解决。学习源码远不是只是为了应付面试,更重要的是学习优秀框架在复杂场景下的解决方案。通过学习这些优秀的方案技术,可以提高对技术设计和实现的理解,扩展编码思维,积累落地经验。只有经过这样长期的积累,我们才更有可能成为优秀的高级工程师和架构师。
2025-03-21 17:15:49
751
原创 Java面试合集(真实、高频、含答案解析)
因为线程竞争,会导致线程阻塞或者挂起,但是如果同步资源的锁定时间很短,那么阻塞和挂起的花费的资源就得不偿失。自旋锁: 当竞争的同步资源锁定时间短,就让线程自旋,如果自旋完成后,资源释放了锁,那线程就不用阻塞,直接获取资源,减少了切换线程的开销。实现原理是CAS。缺点:占用了处理器的时间,如果锁被占用的时间短还好,如果长那就白白浪费了处理器的时间。所以要限定自旋次数(默认是10次,可以使用-XX:PreBlockSpin来更改)没有成功获得锁,就应当挂起线程。
2025-03-20 21:38:47
1287
原创 SQL语句中 left join 后用 on 还是 where?
其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。where条件是在临时表生成好后,再对临时表进行过滤的条件。数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。条件不为真也会返回左表中的记录。
2025-03-20 14:52:02
399
原创 SpringBoot骚操作:一个注解秒杀所有类型的文件下载
介绍下载功能应该是比较常见的功能了,虽然一个项目里面可能出现的不多,但是基本上每个项目都会有,而且有些下载功能其实还是比较繁杂的,倒不是难,而是麻烦。所以结合之前的下载需求,我写了一个库来简化下载功能的实现如果我说现在只需要一个注解就能帮你下载任意的对象,是不是觉得非常的方便感觉差别不大?那就听听我遇到的一个下载需求我们有一个平台是管理设备的,然后每个设备都会有一个二维码图片,用一个字段存储的 http 地址。
2025-03-20 14:51:02
730
原创 谁再在 SQL 中写 in 和 not in,直接走人
如果id2只有1和2, 那么3<>1 且 3<>2 所以3输出了,但是 id2包含空值,那么 3也不等于NULL 所以它不会输出。单独查询 select id1 from test2 是一定会报错: 消息 207,级别 16,状态 1,第 11 行 列名 'id1' 无效。并没有,一位大神曾经说过,如果是确定且有限的集合时,可以使用。如 IN (0,1,2)十几分钟,检查了一下 phone在两个表都建了索引,字段类型也是一样的。我想要查询,在test2中不存在的 test1中的id。
2025-03-20 14:50:26
311
原创 SpringBoot:一个注解就能帮你下载任意对象
下载功能应该是比较常见的功能了,虽然一个项目里面可能出现的不多,但是基本上每个项目都会有,而且有些下载功能其实还是比较繁杂的,倒不是难,而是麻烦。所以结合之前的下载需求,我写了一个库来简化下载功能的实现❝传送门:https://github.com/Linyuzai/concept/wiki/Concept-Download❞如果我说现在只需要一个注解就能帮你下载任意的对象,是不是觉得非常的方便。
2025-03-20 14:49:21
692
原创 SpringBoot + Facade Pattern : 通过统一接口简化多模块业务
外观设计模式()是一种常见的结构型设计模式,它的主要目的是简化复杂系统的使用。可以把它想象成一个“控制面板”或者“遥控器”,通过这个控制面板,用户可以轻松操作一个复杂的系统,而不需要关心系统内部是如何运作的。举个生活中的例子,想象一下,你家有一台多功能的家电,比如一台智能电视,它不仅能看电视,还能上网、播放视频、控制智能家居等等。对于电视的操作,你有遥控器,可以通过一些按钮控制各种功能。复杂系统: 电视内部的各种硬件(显示屏、网络模块、声音系统、处理器等)和软件(操作系统、应用程序等)。外观模式: 遥控器,
2025-03-20 14:48:49
907
原创 用雪花 id 和 uuid 做 MySQL 主键,被领导怼了
在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?本篇博客我们就来分析这个问题,探讨一下内部的原因。本篇博客的目录mysql程序实例 使用uuid和自增id的索引结构对比 总结。
2025-03-20 14:48:19
933
原创 Spring-Smart-DI 动态切换实现类,很不错
是对 Spring@Autowired注解的一次创新性扩展,它为用户提供了自定义Autowired注入逻辑的能力。和。在本文中,我们将重点聚焦于如何使用来实现动态切换服务提供商的功能。假设我们的系统对接了多个短信服务商,下面我们通过一个快速上手的案例,详细了解如何使用来实现动态切换。注解主要用于配置环境变量相关的配置点。如果我们想要自定义配置,例如从数据库中获取配置信息,可以实现自己的ProxySPI注解。下面是一个自定义DBProxySPI注解的示例,我们需要标记上@ProxySPI。
2025-03-19 14:32:36
586
原创 Spring Boot + CRaC 启动速度提升了10倍
手动执行检查点生成的好处是,这个检查点包含了框架代码和应用程序代码,因此启动速度会更快,因为框架已经加载并启动了应用程序。综上所述,自动检查点适合快速实现且无需代码更改的场景,而手动检查点则提供了更大的灵活性,允许我们在应用程序完全预热后创建检查点,从而可能实现更快的启动时间。:当系统发生故障时,我们可以借助 CRaC 快速从最近的检查点恢复服务,减少系统的停机时间,降低损失。接下来,我们需要在项目启动的时候,指定检查点的位置,并确定生成检查点的时机。首先,我们需要安装支持 CRaC 的 JDK。
2025-03-19 14:32:06
967
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人