- 博客(102)
- 收藏
- 关注
原创 Redis学习------------缓存优化
(2)调整内存淘汰策略:通过maxmemory-policy设置内存淘汰规则,缓存场景推荐volatile-lru(淘汰过期 Key 中最近最少使用的)或allkeys-lru(淘汰所有 Key 中最近最少使用的),避免 Redis 内存溢出。问题本质:用户请求不存在的数据(如 ID 不存在的订单),缓存中无此数据,请求直接穿透到数据库,若遭遇恶意攻击(如大量无效 ID 请求),会导致数据库过载。Redis 支持多种数据结构,不同场景选对结构能大幅提升性能:。
2025-09-17 20:00:07
369
原创 Linux 学习 ------Linux 入门(上)
与 Windows 等闭源操作系统不同,Linux 的源代码是公开的,任何人都可以查看、修改和传播,这也造就了 Linux 强大的社区支持和持续的更新迭代。作用:与 more 指令类似,也是分页显示文件内容,但功能更强大,支持向前和向后翻页、搜索等操作,按空格键翻页,按 b 键向前翻页。执行上述指令,终端会列出当前目录下所有文件和目录的详细信息,每行代表一个文件或目录,从左到右依次为权限、链接数、所有者、所属组、大小、修改时间和名称。-f:实时跟踪文件的变化,当文件内容更新时,会自动显示新增的内容。
2025-08-08 21:01:58
982
原创 SpringCloud学习------Gateway详解
形象地说,Gateway 就像微服务集群的 “大门卫”,所有外部请求都需要经过它的调度和处理后才能到达目标服务。Gateway 作为微服务集群的唯一入口,外部请求无需知道具体服务的地址和端口,只需访问 Gateway 的地址,由 Gateway 负责将请求路由到对应的服务,简化了客户端与服务的交互方式。Zuul 是 Netflix 开源的第一代微服务网关,而 Gateway 是 Spring 官方推出的第二代网关,两者在设计理念、性能和功能上存在显著差异,具体对比如下:。
2025-08-05 22:06:16
1188
原创 SpringCloud学习------Hystrix详解
简单来说,Hystrix 就像电路中的保险丝,当电流过大时,保险丝会熔断,切断电路,保护电器设备不被损坏。Hystrix 提供了请求缓存功能,对于相同的请求,Hystrix 会将第一次的响应结果缓存起来,后续的相同请求可以直接从缓存中获取结果,无需再次调用服务,减少了服务调用的次数,提高了系统性能。当某个服务出现故障时,只会耗尽该服务对应的线程池资源,不会影响其他服务的线程池,从而实现服务之间的隔离。Hystrix 的核心原理围绕着熔断机制、隔离策略、降级机制和缓存机制等关键环节展开,主要分为:。
2025-08-05 21:40:29
1152
1
原创 SpringCloud学习-------Feign详解
简单来说,Feign 就像是一个 “代码翻译官”,开发者只需要定义一个带有注解的接口,声明要调用的服务方法和参数,Feign 就会自动生成实现类,完成从接口方法到 HTTP 请求的转换,并处理请求发送、响应解析等全过程。什么是Feign呢?这个实现类会拦截接口方法的调用,将方法调用转换为对应的 HTTP 请求。Feign 接口可以被服务提供者和服务消费者共同引用,服务提供者实现接口定义的方法,服务消费者通过接口调用服务,实现了接口定义的复用,保证了服务调用双方接口的一致性,减少了因接口不一致导致的问题。
2025-08-05 20:05:59
835
原创 SpringCloud学习-------Ribbon详解
简单来说,Ribbon 就像是一个智能的 “调度员”,当客户端需要调用服务时,它会从服务注册中心获取可用的服务列表,然后根据一定的负载均衡策略选择一个合适的服务实例进行调用,从而实现服务的负载均衡。4. 提供容错机制:Ribbon 可以与 Hystrix 等容错组件配合使用,当服务调用出现异常时,能够进行降级、熔断等处理,避免因单个服务的故障而影响整个系统的正常运行。2. 负载均衡策略:获取到服务列表后,Ribbon 会根据配置的负载均衡策略从服务列表中选择一个服务实例进行调用。
2025-08-05 19:44:04
1076
原创 SpringCloud学习-------Eureka详解
Eureka 由两个核心部分组成:。(2)Eureka Client(客户端):每个微服务都可以作为 Eureka Client,它会向 Eureka Server 注册自己的服务信息,并定期发送心跳来续约服务,同时也能从 Eureka Server 获取注册的服务列表,以便实现服务间的调用。(1)Eureka Server(服务端):也称为服务注册中心,主要负责接收客户端的服务注册请求,存储服务的元数据信息(如服务名称、IP 地址、端口号等),并为客户端提供服务发现的功能。
2025-08-05 17:10:44
1076
原创 MySQL学习之MVCC多版本并发控制
MVCC 是 InnoDB 并发控制的灵魂,通过隐藏列、undo 日志和 Read View 的协同,实现了 “读写不阻塞” 的高效并发,理解 MVCC 能帮助我们写出更符合隔离级别的 SQL。:通过控制 “可见版本” 的规则,实现 REPEATABLE READ(可重复读)、READ COMMITTED(读已提交)等隔离级别(InnoDB 默认 REPEATABLE READ)。可以看出,在读已提交级别下,事务 B 在 T6 看到了事务 A 提交的新版本,符合其 “读已提交” 特性。
2025-08-03 23:53:45
844
原创 JavaWeb学习------SpringCloud入门
当调用该接口的方法时,动态代理对象会将方法调用转换为 HTTP 请求,并根据注解中的信息(如服务名称、请求路径、请求方法等)构建请求 URL,然后通过 Ribbon 进行负载均衡,选择合适的服务实例发送请求,最后将响应结果转换为方法的返回值。Ribbon 的核心原理是通过拦截器对 RestTemplate 的请求进行拦截,在请求发送之前,根据服务名称从服务注册表中获取可用的服务实例列表,然后根据配置的负载均衡策略选择一个服务实例,并将请求的 URL 替换为该服务实例的实际地址,从而实现负载均衡。
2025-08-03 21:42:47
316
原创 Java学习------异常
Java 异常机制通过以下方式解决这些问题:。(2)非检查型异常(Unchecked Exception):运行时异常(如NullPointerException),编译期不强制处理,通常由代码逻辑错误导致。(1)分离错误处理与业务逻辑:异常允许将错误检测(抛出异常)和错误处理(捕获异常)分离,业务代码专注于核心功能,错误处理代码集中在特定区块,使程序结构更清晰。(3)精准定位问题:异常携带的堆栈轨迹能精确显示错误发生的类、方法和行号,配合异常消息,开发者能快速定位问题根源,大幅提升调试效率。
2025-08-03 09:59:37
809
原创 Redis学习-----Redis的基本数据类型
与传统的关系型数据库不同,Redis 的数据主要存储在内存中,这使得它的读写速度非常快,能够轻松应对每秒数万次的操作。此外,Redis 还提供了丰富的数据结构和功能,如字符串、哈希、列表、集合、有序集合等,以及事务、发布订阅、Lua 脚本等高级特性,使其不仅可以作为缓存使用,还能用于实现分布式锁、计数器、排行榜等多种功能。常见的哈希操作命令有:。常见的操作命令主要有:。集合中的元素是唯一的,这使得它非常适合用于存储需要去重的数据,如用户的标签、好友列表等。常见的集合操作命令主要有:。
2025-08-01 23:40:09
612
原创 消息队列学习----------消息队列的顺序性
记住:最好的顺序性方案是让业务不需要顺序性。(2)按消息键分区方案:对同一业务流的消息(如同一订单的消息)使用相同的键(Key),消息队列会根据键的哈希值分配到固定分区,同时为每个分区分配专属消费者。(3)分布式锁 + 序号方案:当必须使用多队列 / 多分区时,通过分布式锁保证消费者对同一业务流的消息串行处理,同时为消息添加全局序号,消费者通过序号检测并处理乱序情况。(5)避免重复消费:顺序性方案需配合幂等性设计(如基于 orderId+status 的唯一索引),防止消息重试导致的重复处理。
2025-08-01 10:00:32
364
原创 Git入门学习
与传统的集中式版本控制系统(如 SVN)相比,Git 最大的差异在于分布式架构:每个开发者的本地电脑都是一个完整的版本库,包含项目所有的历史提交记录,无需时刻依赖中央服务器。在没有版本控制的时代,开发者通常通过手动复制文件夹(如project_v1.0、project_v2.0)来管理版本,这种方式不仅混乱低效,还容易丢失重要变更。通过远程仓库(如 GitHub、GitLab),团队可以建立统一的代码管理流程,包括代码提交规范、审核机制(PR/MR)和发布流程,大幅降低协作成本。(2)并行开发支持:。
2025-08-01 04:00:00
358
原创 数据库学习------数据库隔离类型及其与事务特性
(4)与持久性的关系:隔离级别与持久性无直接关联,持久性主要由日志机制(如 redo 日志)保证,但隔离级别可能影响事务提交的效率,间接影响持久性的实现成本。(2)与原子性的关系:隔离级别不直接决定原子性,但高隔离级别(如串行化)通过减少并发冲突,间接降低了事务因冲突而回滚的概率,有助于原子性的实现。(1)与隔离性的关系:隔离级别是隔离性的具体体现,不同级别定义了事务之间隔离的程度。(1)控制并发问题:隔离级别通过定义事务间的可见性规则,有效控制脏读、不可重复读、幻读等并发问题,确保数据操作的准确性。
2025-08-01 00:00:00
209
原创 计算机网络学习--------三次握手与四次挥手
由于 TCP 连接是全双工的,双方可以同时发送数据,所以关闭连接时需要双方分别确认,通过四次数据包交互,逐步关闭各自的发送通道,最终释放连接所占用的资源。(3)第三次握手:客户端收到 SYN+ACK 报文后,发送一个 ACK 报文段,ACK 标志位设为 1,确认号为服务器初始序列号 + 1,表示已收到服务器的 SYN 报文。计算机网络:TCP 的三次握手与四次挥手(基于 Java)在计算机网络的世界里,TCP(传输控制协议)犹如一位严谨的通信管家,确保数据在网络中可靠传输。
2025-07-31 23:30:00
1320
1
原创 数据库学习--------数据库日志类型及其与事务特性的关系
例如,在事务提交时,数据库会将事务的提交信息写入日志,然后才会将事务对数据的修改写入数据文件。(2)数据一致性维护:日志记录了事务的所有操作,通过对这些操作的监控和管理,能够确保事务按照预期的逻辑执行,防止因操作异常导致的数据不一致。(3)数据库复制:二进制日志是数据库主从复制的基础,从库通过读取主库的二进制日志,能够准确地复制主库的数据变化,实现主从数据的同步。(4)审计与追踪:日志记录了数据库的所有操作,通过分析日志可以对数据库的使用情况进行审计,追踪异常操作,为数据库的安全管理提供支持。
2025-07-31 22:30:00
1075
原创 Java学习------Executor框架
打个比方,Executor 就像是一个线程池的 “调度中心”,我们把需要执行的任务提交给它,它会根据内部的线程池资源来安排任务的执行,而我们不需要关心具体是哪个线程执行了任务,也不需要手动去创建和关闭线程。(3)控制并发数量:Executor 框架可以通过配置线程池的参数,如核心线程数、最大线程数等,来控制同时运行的线程数量,防止因线程过多而导致的系统资源耗尽问题。同时,它还支持定时任务、周期性任务等调度功能。Executor 框架的核心原理是基于线程池实现的,其主要由以下几个部分组成:。
2025-07-31 22:00:00
677
原创 数据库学习------数据库事务的特性
当事务执行时,数据库先将操作写入日志,再执行实际的数据修改。(2)隔离并发操作:当多个用户同时操作数据库时,事务通过隔离级别控制不同操作之间的影响,防止脏读(一个事务读取了另一个未提交事务修改过的数据)、不可重复读(在同一个事务内,多次读取同一数据返回的结果不同,主要是因为因为其他事务修改并提交了该数据)、幻读(在同一个事务内,多次执行相同的查询返回不同的行集合,主要原因是其他事务新增或删除了符合查询条件的行并提交)等问题。事务的特性通常用 ACID 来概括,这是事务机制的核心原理,其分别是:。
2025-07-31 21:15:00
837
原创 消息队列学习-----消息消失与积压
例如:秒杀活动中,订单消息每秒产生 10 万条,但消费者仅能处理 1 万条,几小时内队列积压数百万消息。(3)消费者处理环节失败:消费者未正确处理消息却提前发送确认,或处理过程中崩溃。消费线程异常终止未捕获。(1)生产者发送环节失败:生产者未收到消息队列的确认(ACK),但误以为发送成功。(2)消费者故障或处理缓慢:消费者服务宕机、代码 bug 导致处理耗时增加(如数据库慢查询)、线程池配置不合理。(1)生产速率远高于消费速率:突发流量(如大促)导致生产者发送消息激增,而消费者处理能力不足。
2025-07-31 18:13:03
570
原创 Java学习-----SpringBoot的常用注解(下)
在 SpringBoot 开发中,除了上篇介绍的核心注解外,还有许多在特定场景下发挥重要作用的注解。这些注解进一步简化了开发流程,提升了代码的可维护性和扩展性。本文将继续解析 SpringBoot 中常用的注解,包括请求参数、响应处理、事务管理等相关注解。(一)请求参数相关注解这类注解主要用于从 HTTP 请求中获取参数,是控制器处理请求的关键工具。?required。
2025-07-31 16:39:58
928
原创 Java学习-----SpringBoot的常用注解(上)
定义:@SpringBootApplication是 SpringBoot 的核心注解,用于标识应用程序的入口类,是一个组合注解。3.@EnableAutoConfiguration:开启自动配置功能,根据类路径下的依赖自动配置 Bean。主要有这4个:@Controller、@Service、@Repository、@Component。定义:这些注解是@RequestMapping的简化版,分别对应不同的 HTTP 方法。2.@ComponentScan:自动扫描当前类所在包及子包下的所有组件。
2025-07-31 02:45:00
1006
原创 Redis学习-----分布式锁
例如,在电商平台的库存扣减场景中,多个订单服务实例同时处理同一个商品的下单请求,通过 Redis 分布式锁可以确保同一时间只有一个服务实例能够操作库存数据,避免出现超卖等问题。(1)锁过期问题:如果持有锁的客户端在锁过期前未完成操作,锁会自动释放,可能导致其他客户端获取到锁,引发并发问题。Redis 分布式锁的实现主要依赖于 Redis 的SET命令的原子性,其核心原理是通过设置一个唯一的锁标识来抢占锁,并在操作完成后释放锁。使用Redis的 分布式锁的优点主要有:。但其也有一些缺点,例如:。
2025-07-31 02:15:00
570
原创 Redis学习------缓存雪崩
其是指在某一特定的时间段内,Redis 缓存中的大量数据同时达到过期时间,或者 Redis 服务因某种原因突然宕机,导致原本应该由缓存处理的大量请求无法命中缓存,只能直接涌向数据库,从而给数据库带来巨大压力,甚至可能导致数据库宕机,进而引发整个系统的崩溃。例如,在电商平台的促销活动中,大量的商品信息缓存可能会在活动结束后的同一时间过期,此时如果有大量用户同时访问这些商品,所有的请求都会直接打到数据库,很容易造成数据库瘫痪。缓存雪崩会带来各种各样的后果,包括但不限于:。
2025-07-31 00:00:00
369
原创 Redis学习------缓存穿透
举个典型场景:某电商平台的商品查询接口,正常请求会携带合法商品 ID(如 1001、1002),但如果有攻击者持续用不存在的 ID(如 - 999、10000000)发起请求,由于缓存和数据库中都没有这些 ID 对应的记录,所有请求都会直接访问数据库,形成缓存穿透。缓存穿透的本质是 “无效请求的无成本穿透”,解决思路核心在于增加无效请求的穿透成本—— 无论是通过缓存空值消耗内存,还是布隆过滤器消耗计算资源,最终目的都是为数据库建立一道 “防护网”。缓存穿透的出现并非偶然,主要源于两类场景:。
2025-07-31 00:00:00
627
原创 MySQL学习---分库和分表
但是它们也有各自的优缺点,只有深入理解分库分表的原理和优缺点,结合实际业务需求进行合理设计和实施,才能充分发挥其优势,构建高性能、高可用的数据库架构。例如,一个电商平台的订单表,当订单量达到数亿条时,单表查询会非常缓慢,此时就可以将订单表按照时间或用户 ID 进行分表,同时将不同的分表部署到不同的数据库服务器上,实现分库分表。(3)便于水平扩展:分库分表采用分布式架构,当数据量继续增长时,可以通过增加数据库服务器和数据表的方式进行水平扩展,而无需对现有架构进行大规模改造。
2025-07-30 21:30:00
1283
原创 Java学习------Object类
Object 类中定义了 11 个方法,这些方法构成了 Java 对象的基本行为集,具体包括:equals(Object obj)、hashCode()、toString()、getClass()、clone()、notify()、notifyAll()、wait(long timeout)、wait(long timeout, int nanos)、wait()以及已被弃用的finalize()。其位于java.lang包中,是 Java 语言中唯一没有父类的类。例如,我们创建一个简单的类:。
2025-07-30 21:15:00
960
原创 Java学习----Servlet 中的监听器
当有新用户访问应用,创建会话时,sessionCreated方法被调用,onlineUserCount加 1,并将最新的在线人数存储到ServletContext中,这样在页面上就可以实时显示在线人数。当 Web 应用启动时,contextInitialized方法被调用,在这里可以进行资源的初始化操作,比如创建数据库连接池,并将其存储到ServletContext中,以便整个应用共享使用。它能够监听的事件种类颇为丰富,涵盖了应用程序的启动和关闭、用户会话的创建和销毁、请求的发起和结束等多个方面。
2025-07-30 04:15:00
616
原创 Java学习----Servlet 中的过滤器
其是 Servlet 规范中定义的一种组件,它可以在请求到达目标 Servlet 或 JSP 之前对请求进行拦截和处理,也可以在响应返回给客户端之前对响应进行处理。当客户端发送请求时,Servlet 容器会先调用过滤器的doFilter方法,在该方法中可以对请求进行处理,然后通过FilterChain将请求传递给下一个过滤器或目标资源;(1)可能会影响性能:每一次请求和响应都需要经过过滤器的处理,过多的过滤器会增加系统的开销,降低请求的处理速度。过滤器的工作流程大致如下:。监听器的优缺点主要有:。
2025-07-30 03:45:00
292
原创 Java学习-----如何创建线程
这种方式适合需要获取线程执行结果的场景,能够方便地处理线程执行过程中可能出现的异常。实现 Runnable 接口创建线程,是让一个类实现 Runnable 接口,并重写其 run () 方法,然后将该类的实例作为参数传递给 Thread 类的构造方法,最后调用 Thread 对象的 start () 方法启动线程。线程池是一种线程管理机制,它预先创建一定数量的线程,当有任务需要执行时,从线程池中取出一个线程来执行任务,任务执行完成后,线程不会被销毁,而是返回到线程池中等待下一个任务。
2025-07-28 23:15:00
788
原创 Java学习-----JVM的垃圾回收算法
新生代中,对象的存活周期短,存活对象少,因此采用复制算法,以高效地回收垃圾;其充分利用了不同代对象的特点,提高了垃圾收集的效率和性能,使 JVM 能够更好地适应不同的应用场景。该算法是其他许多垃圾收集算法的基础,能够有效识别并回收不再被引用的对象,释放内存资源,保证程序的正常运行。解决了标记 - 清除算法产生内存碎片的问题,提高了内存分配的效率,尤其适用于存活对象较少的场景。解决了标记 - 清除算法的内存碎片问题,同时避免了复制算法内存利用率低的缺点,适用于存活对象较多的老年代。
2025-07-28 23:15:00
913
原创 Java学习--------组合模式
通过这样的结构,客户端可以忽略叶子节点和容器节点的区别,无论是操作一个单独的文件,还是操作一个包含多个文件和子文件夹的文件夹,都可以使用相同的代码,大大简化了客户端的逻辑。组合模式的结构主要包含以下几个部分:。(1)可能限制组件的灵活性:由于抽象组件接口需要定义所有组件共有的方法,对于一些特殊的叶子节点或容器节点,可能会存在一些不需要的方法,从而限制了组件的灵活性。(1)统一客户端操作:客户端可以用统一的方式处理单个对象和组合对象,无需关心处理的是哪种类型的对象,减少了客户端代码的复杂度。
2025-07-28 00:30:00
856
原创 Java学习--------策略模式
简单来说,策略模式就是把做一件事的不同方法(策略)分开封装,使得这些方法可以互相替换,而且更换方法的时候不会影响到使用这些方法的代码。这些支付方式都是完成支付这一功能的不同策略,使用策略模式,我们可以把每种支付方式封装成一个独立的策略类,结算系统在需要支付时,只需根据用户选择的支付方式切换相应的策略即可,无需修改结算系统的核心代码。通过这样的结构,客户端只需与上下文类交互,无需直接接触具体策略类,当需要更换策略时,只需更换上下文类中引用的具体策略对象即可,实现了算法与客户端的解耦。
2025-07-28 00:30:00
841
原创 Java学习--------享元模式
从代码和运行结果可以看出,我们通过享元模式只创建了一个黑棋对象和一个白棋对象,多次获取相同颜色的棋子时,得到的是同一个对象,实现了对象的共享。这里的 “享元” 指的是可以被多个对象共享的单元。(3)享元工厂角色:负责创建和管理享元对象,它会缓存已经创建的享元对象,当客户端需要使用享元对象时,首先从缓存中查找,如果存在则直接返回,如果不存在则创建新的享元对象并存入缓存。(4)分离内部状态和外部状态:明确区分了对象的内部状态和外部状态,使内部状态可以共享,外部状态由客户端管理,增强了系统的灵活性。
2025-07-28 00:15:00
790
原创 Java学习-------序列化与反序列化
其基本流程如下:。(2)反序列化过程:系统读取序列化后的数据,根据数据中包含的类型信息和结构信息,重新创建对象实例,并为其属性赋值,同时恢复对象之间的引用关系,最终在内存中还原出与序列化前一致的对象结构。而反序列化则是序列化的逆过程,指将序列化后的数据(如二进制流、XML、JSON 等)重新转换为内存中对象的过程,相当于把 “包裹” 拆开,恢复成原来的对象状态。(3)对象复制:通过序列化再反序列化的过程,可以创建一个与原对象属性完全相同的新对象,实现对象的深拷贝(避免引用传递导致的修改冲突)。
2025-07-28 00:00:00
868
原创 Java学习-------外观模式
例如,我们使用电脑时,只需按下开机键,电脑就会完成主板通电、CPU 启动、内存加载系统等一系列复杂操作,而我们无需了解这些内部步骤,这里的 “开机键” 就相当于外观模式中的统一接口。其基本结构包含以下几个部分:。(4)便于维护:由于客户端与子系统之间通过外观类进行交互,当子系统出现问题时,只需排查外观类与子系统之间的交互,缩小了问题排查的范围,便于系统的维护。(1)外观类:这是外观模式的核心,它知道子系统中各个模块的功能,为客户端提供统一的接口,负责将客户端的请求转发给合适的子系统模块。
2025-07-28 00:00:00
1126
原创 Java学习-------桥接模式
构型设计模式,它将抽象部分与它的实现部分分离,使它们都可以独立地变化。比如,在绘制图形时,图形有形状(如圆形、矩形)和颜色(如红色、蓝色)两个维度的变化。(2)需要正确设计抽象和实现:使用桥接模式需要准确地识别出系统中的抽象部分和实现部分,以及它们各自的变化维度,如果设计不当,可能无法达到预期的效果,甚至会使系统更加混乱。其基本结构包含以下几个部分:。(4)便于系统扩展:当需要增加新的抽象或新的实现时,只需新增相应的类即可,不需要修改已有的代码,符合 “开闭原则”,有利于系统的扩展和维护。
2025-07-28 00:00:00
907
原创 Java学习----建造者模式
合理运用建造者模式,可以让代码更加清晰、灵活,便于后续的扩展和维护。建造者模式通过将复杂对象的构建过程分解为多个步骤,由具体建造者负责每个步骤的实现,指导者负责协调步骤的执行,实现了构建过程与表示的分离。建造者模式的核心原理是把复杂对象的构建过程分解为多个独立的步骤,每个步骤由专门的建造者负责,最后由指导者来协调这些步骤,完成复杂对象的构建。其结构包含以下关键角色:。(3)提高代码的复用性:不同的具体建造者可以复用相同的抽象建造者接口,同时,指导者所控制的构建流程也可以在不同的具体建造者中复用。
2025-07-25 04:00:00
686
原创 Java学习----原型模式
原型模式的核心原理是利用对象的复制能力,避开复杂的创建过程,快速生成新对象。在实际开发中,原型模式常与工厂模式结合使用,用原型模式来创建对象,工厂模式来管理对象的创建过程,使系统更加灵活高效。原型模式的工作流程是:客户端首先拥有一个具体原型对象,当需要创建新对象时,调用该原型的克隆方法,原型对象会复制自身的属性和状态,生成一个新的对象返回给客户端。(4)便于动态添加或删除对象:通过原型模式,客户端可以动态地克隆原型对象来添加新实例,或删除不再需要的克隆对象,增强了系统的灵活性。
2025-07-24 23:14:10
996
原创 Java学习----工厂方法模式
简单来说,就是将对象的创建工作交给专门的工厂类或其子类来完成,客户端只需要关注所需产品的接口,而无需知道具体的实现类。其结构包含以下几个关键角色:。(1)解耦对象创建与使用:客户端不需要知道具体产品的类名,只需知道对应的工厂即可,降低了客户端与具体产品类之间的耦合度。(2)提高扩展性:当需要添加新的产品时,只需新增一个具体产品类和对应的具体工厂类,无需修改现有代码,符合开闭原则。(4)具体工厂:实现了抽象工厂的工厂方法,根据需求创建并返回具体产品的实例。工厂方法模式的主要作用体现在以下几个方面:。
2025-07-24 21:45:18
463
原创 Java学习---Spring及其衍生(下)
同样的,其复杂度也高:微服务架构本身就比较复杂,再加上 SpringCloud 的各种组件,增加了系统的复杂度,提高了系统的设计、开发、测试和维护难度。而SpringBoot 是基于 Spring 的框架,它简化了 Spring 应用程序的搭建和开发过程,通过自动配置和起步依赖减少了配置工作,内置了服务器,方便部署。(2)起步依赖:起步依赖是一组预定义的依赖集合,它将常用的依赖打包在一起,开发者只需要引入相应的起步依赖,就可以获得该功能所需的所有依赖,无需手动添加每个依赖,简化了依赖管理。
2025-07-24 17:46:22
439
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅