- 博客(123)
- 收藏
- 关注
原创 【多线程】一文吃透 AQS 原理
本文介绍了Java并发编程中的核心框架AQS(AbstractQueuedSynchronizer)。AQS作为构建锁和同步器的基础框架,提供了状态管理、等待队列和线程调度等核心机制。文章详细阐述了AQS的设计思想、核心结构(包括状态变量、CLH队列和CAS操作),以及获取锁和释放锁的具体流程。同时,通过手写简易锁的示例展示了AQS的实际应用,并分析了其优缺点。最后总结了AQS在面试中的高频问题,帮助读者全面理解这一重要并发工具的实现原理和使用方法。
2026-02-18 20:26:40
703
原创 CAS 原理:Java 并发高性能的核心秘密
本文深入解析Java并发编程中的CAS机制。CAS(比较并交换)是一种无锁并发控制技术,通过比较内存值与期望值来决定是否更新数据。文章详细介绍了CAS的工作原理、底层CPU指令支持、典型应用(如AtomicInteger),并与传统锁机制进行对比。同时指出CAS存在的三大问题:ABA问题、自旋开销和单变量限制,并给出解决方案。最后通过高并发计数器案例展示CAS的性能优势,并总结了面试常见问题。CAS适用于低冲突场景,能显著提升并发性能。
2026-02-15 08:15:00
646
原创 什么是乐观锁?原理、实现方式与实战详解
乐观锁是一种并发控制机制,适用于高并发系统,核心思想是“先操作后校验”,通过版本号或CAS机制实现数据一致性。相比悲观锁,乐观锁在低冲突场景下性能更优,适合读多写少、分布式系统等场景。实现时需注意ABA问题、重试次数控制及业务降级处理。典型应用如库存扣减,通过版本号校验避免超卖。优缺点明显:高吞吐但实现复杂,需结合业务选择使用。面试常考察其原理、适用场景及与CAS的关系。
2026-02-14 14:02:50
610
原创 什么是悲观锁?原理、使用场景与实战详解
悲观锁是一种并发控制机制,认为并发操作必然冲突,因此在操作数据前先加锁。其核心是“先上锁再操作”,适用于高冲突写场景(如库存扣减)。主要实现方式包括数据库的SELECT FOR UPDATE和Java的synchronized、ReentrantLock。与乐观锁相比,悲观锁数据安全性更高但性能较差,适用于金融等强一致系统。使用时需注意锁粒度、死锁和锁持有时间。典型应用场景包括秒杀、支付系统等。
2026-02-14 13:33:18
648
原创 SPI 与 API 的区别详解
本文解析了Java开发中的API与SPI核心区别。API是面向调用的标准接口(如JDK工具类),由服务方提供功能;SPI是面向扩展的服务接口(如JDBC驱动加载),由框架定义规范、用户实现。关键差异在于控制权方向:API由框架主导调用,SPI将实现权交给用户。二者常配合使用,API提供基础能力,SPI实现扩展性。理解这种"调用"与"扩展"的差异,有助于设计更灵活的系统架构。
2026-02-12 22:28:50
587
原创 MySQL 中 Undo Log、Redo Log、Binlog 全解析
MySQL三大日志(undo log、redo log、binlog)各司其职,共同保障数据库安全性和一致性。undo log记录修改前的数据,支持事务回滚和MVCC;redo log记录物理修改,确保崩溃后数据恢复;binlog记录逻辑操作,实现主从复制和数据恢复。通过两阶段提交机制协调redo log和binlog,保证数据一致性。生产环境建议配置innodb_flush_log_at_trx_commit=1、sync_binlog=1和binlog_format=ROW以获得最强一致性。
2026-02-11 22:22:08
776
1
原创 前缀和算法:从一道 LeetCode 题看区间求和优化思想
前缀和是一种高效解决区间求和问题的算法,通过预处理构建累加和数组,将查询时间复杂度从O(n)降至O(1)。其核心思想是预先计算数组从起始位置到各位置的累加和(sums[i+1]=sums[i]+nums[i]),查询时只需计算sums[j+1]-sums[i]即可获得区间和。该算法以O(n)空间为代价换取查询效率,适用于静态数组的多次查询场景。前缀和是滑动窗口、差分数组、动态规划等高级算法的基础,在解决子数组和问题、矩阵处理等方面有广泛应用,但不适合高频修改的动态数组场景。
2026-02-04 19:33:06
662
1
原创 Git 中的 Rebase 与 Merge:原理、区别与最佳实践
Git提供了merge和rebase两种代码合并方式,各有特点:merge会生成合并提交保留完整历史,适合公共分支;rebase则重写提交历史形成线性记录,更适合本地分支整理。核心区别在于是否修改历史、是否线性化提交记录。使用时应遵循"不rebase公共分支"原则:个人分支推荐rebase保持整洁,合并到主分支则用merge保留真实历史。冲突处理上,merge只需解决一次,而rebase可能多次处理冲突。最佳实践是开发时用rebase同步主分支,最终合并采用merge。
2026-01-30 14:36:19
712
原创 Redis 的 RDB 与 AOF:持久化机制全解析
RDB与AOF的对比与应用 Redis作为内存数据库,提供了RDB和AOF两种持久化方式。RDB通过定期快照保存数据,具有文件小、恢复快的特点,但可能丢失最近数据;AOF则记录所有写命令,数据安全性更高,但文件体积大且恢复慢。生产环境建议同时开启两种方式,优先使用AOF恢复数据,RDB作为备份。文章详细分析了两种机制的工作原理、优缺点及配置建议,帮助开发者根据实际需求在性能和数据安全之间做出权衡选择。
2026-01-28 22:22:33
1080
原创 【Redis】Redis 中的 Pipeline 与 Lua 脚本:高性能与原子性的两种武器
R本文分析了Redis性能问题的常见根源,重点介绍了两种优化方案:Pipeline和Lua脚本。Pipeline通过批量发送命令减少网络RTT,提升吞吐量,但不保证原子性;Lua脚本则能确保操作的原子性,适合复杂事务场景。文章对比了两者的特性,Pipeline适用于批量读写场景(如缓存预热),而Lua脚本更适合需要一致性的操作(如库存扣减)。同时指出Redis事务的局限性,建议根据业务需求选择合适方案:性能优先选Pipeline,一致性要求高则用Lua脚本。
2026-01-28 11:36:53
1067
原创 【设计模式】23 种设计模式全景总结
设计模式是对常见问题的高质量解法抽象,而非语法或代码模板。文章分类介绍了23种设计模式,包括5种创建型(如单例、工厂)、7种结构型(如代理、适配器)和11种行为型(如策略、观察者)。常用程度差异显著:代理、策略等高频使用,而访问者、解释器等仅在特定场景出现。建议学习时先写"丑代码"再引入模式,避免强行套用。框架已封装部分模式(如Spring的代理),业务复杂度不足时简单方案更实用。核心原则是在合适的时候用;,而非滥用。
2026-01-19 16:44:09
1294
1
原创 【设计模式】解释器模式(Interpret)详解:让程序“理解”一门语言
解释器模式通过面向对象方式将语法规则转化为类结构,用于解释简单语言(如布尔表达式、正则表达式等)。该模式将每个语法规则对应一个类,通过构建抽象语法树(AST)递归执行解释过程。核心组件包括抽象表达式、终结符/非终结符表达式和上下文环境。其优点是语法清晰、易于扩展,但类数量多、性能较差,适用于简单语法场景。复杂语法建议使用ANTLR或规则引擎替代。典型应用包括正则表达式解析和权限规则处理。
2026-01-19 08:45:00
1716
原创 【设计模式】备忘录模式(Memento)详解:在不破坏封装的前提下保存对象状态
备忘录模式是一种在不破坏封装性的前提下保存对象内部状态的设计模式,适用于撤销、回滚等场景。其核心思想是将状态保存权交给备忘录对象,而非原始对象本身。模式包含三个角色:发起人(Originator)负责创建和恢复状态,备忘录(Memento)存储状态快照,管理者(Caretaker)管理备忘录栈。示例展示了文本编辑器的撤销功能实现,通过不可变的备忘录类、发起人状态管理及历史栈操作完成。该模式优点包括封装性好、职责清晰,但可能因状态过多导致内存问题。
2026-01-18 12:49:02
798
原创 单分派与双分派详解:方法到底是怎么被调用的?
本文探讨了Java中的单分派与双分派机制。单分派指方法选择仅依赖于接收者对象的实际类型,Java通过编译期静态绑定方法签名和运行期动态绑定方法实现来支持单分派。而双分派需要同时依赖接收者和参数类型,Java原生不支持但可通过访问者模式模拟实现。访问者模式通过两次分派(先根据元素类型选择accept方法,再在accept中调用visitor的具体visit方法)实现双分派效果。相比if-else类型判断,访问者模式更符合开闭原则。文章澄清了常见误区,指出Java本质是单分派语言,重载属于静态绑定而非多分派。
2026-01-18 08:30:00
1708
原创 【设计模式】访问者模式(Visitor)详解
访问者模式是一种行为设计模式,允许在不修改对象结构的前提下定义新操作。它通过将操作从对象中抽离到访问者类中,实现对象结构与行为的解耦。核心思想是双分派技术,通过accept和visit方法的双重调用确定具体操作。该模式适用于对象结构稳定但操作频繁变化的场景,如编译器、文件系统等。优点包括符合开闭原则、集中行为管理,但缺点是增加新元素类型成本高、破坏封装性。典型应用包含五个角色:访问者接口、具体访问者、元素接口、具体元素和对象结构。
2026-01-17 16:36:05
860
原创 【设计模式】迭代器模式(Iterator)详解
本文介绍了迭代器模式的设计思想及其实现。迭代器模式通过提供统一接口来顺序访问聚合对象中的元素,而不暴露其内部结构,实现遍历与集合实现的解耦。文章详细解析了迭代器模式的四个核心角色(迭代器接口、具体迭代器、聚合接口、具体聚合),并通过Java代码示例演示了如何自定义集合和迭代器。同时比较了外部迭代和内部迭代的差异,分析了迭代器模式的优缺点及适用场景,并指出其与访问者模式的区别。该模式适用于需要统一遍历不同集合、隐藏复杂数据结构或提供多种遍历策略的情况。
2026-01-17 13:40:22
1021
原创 【设计模式】中介者模式(Mediator)详解
中介者模式解析 中介者模式是一种行为设计模式,通过引入中介对象来解耦复杂的对象交互关系。该模式将多对多的对象通信转化为一对多的中介协调,有效降低了系统耦合度。文章详细阐述了中介者模式的核心思想、结构组成,并通过聊天室系统的代码示例展示了其实现方式。模式优点包括解耦对象关系、集中管理交互逻辑等,但也存在中介者臃肿的风险。适用场景包括聊天系统、GUI组件交互等需要协调复杂对象关系的场合。与观察者、责任链模式的对比分析,以及MVC框架中的应用实例,进一步加深了对该模式的理解。
2026-01-16 19:53:49
664
原创 【设计模式】观察者模式(Observer)详解
观察者模式是一种事件驱动的设计模式,用于实现对象间的一对多依赖关系。当被观察对象状态变化时,所有观察者会自动收到通知并更新。本文通过订单状态通知的示例,展示了如何实现观察者模式,包括定义观察者接口、被观察者抽象类、具体实现类等核心组件。文章还对比了推模型和拉模型的区别,分析了观察者模式的优缺点及适用场景,并指出其与责任链、中介者模式的关键差异。该模式广泛应用于事件系统、消息通知等需要解耦的场景,是软件设计中实现松耦合的重要工具。
2026-01-16 14:16:55
909
原创 【设计模式】状态模式(State)详解
状态模式通过封装状态为对象,实现行为随状态自动切换。该模式包含状态接口、具体状态和上下文三个角色,消除了复杂的条件判断,使行为集中且易于扩展。适用于订单流转、工作流等场景,其核心是将状态与行为绑定,通过状态切换驱动行为变化。虽然会增加系统复杂度,但能有效管理状态相关逻辑,与策略模式不同在于状态模式关注内部状态自动切换而非外部算法选择。
2026-01-15 13:11:59
718
原创 【设计模式】责任链模式(Chain of Responsibility)详解
责任链模式是一种行为设计模式,通过将多个处理对象连接成链来解决请求处理问题。该模式的核心思想是解耦请求发送者和接收者,让请求沿着处理链传递直到被处理。典型结构包括抽象处理者、具体处理者和客户端三部分,适用于审批流程、权限校验等场景。其优点在于灵活性和可扩展性,但存在请求可能未被处理、调试困难等缺点。与命令模式不同,责任链强调处理顺序和多个接收者。该模式在Servlet Filter等框架中有广泛应用,使用时需注意避免简单串联逻辑而忽略职责分离的本质。
2026-01-15 12:43:22
959
原创 【设计模式】命令模式(Command)详解:把“请求”封装成对象
本文介绍了命令模式的设计思想及其应用。命令模式通过将请求封装为对象,实现请求发送者与执行者的解耦,支持撤销、记录历史等功能。文章详细解析了命令模式的四个核心角色(命令接口、具体命令、接收者和调用者),并以智能家居遥控器为例展示了具体实现。命令模式的优点包括降低耦合、支持扩展和撤销操作,但也存在增加类数量、结构复杂等缺点。文中还对比了命令模式与策略模式的差异,并列举了JDK中的典型应用(如Runnable接口)。该模式适用于GUI操作、事务处理、队列任务等场景,其本质是为系统提供更灵活的控制能力。
2026-01-14 13:26:13
839
原创 【设计模式】策略模式(Strategy)详解:把 if-else 变成可切换的算法
本文介绍了策略模式的应用场景和实现方式。策略模式通过将算法封装成独立对象,消除冗长的if-else判断,实现运行期灵活切换不同算法。文章详细展示了商品价格计算的策略模式实现,包含策略接口、具体策略类和上下文类三个核心角色,并分析了策略模式的优缺点。与模板方法模式相比,策略模式采用组合方式更具灵活性。该模式适用于规则引擎、支付策略等需要动态切换算法的场景,其本质是用组合代替条件判断来提升代码的可扩展性。
2026-01-14 12:48:35
914
原创 【设计模式】模板方法模式详解
模板方法模式是一种行为型设计模式,用于解决“流程固定但步骤可变”的问题。其核心思想是父类定义算法骨架(模板方法),子类实现具体步骤,实现控制权反转(IoC)。模式结构包括抽象类(定义模板方法和基本方法)和具体子类(实现抽象步骤)。示例展示了数据导出流程的统一管理,通过钩子方法支持可插拔逻辑。优点包括代码复用和流程规范,但依赖继承可能导致灵活性不足。JDK中的AbstractList是典型应用。适用于工作流、框架设计等场景。与外观模式相比,模板方法关注算法扩展,而外观模式侧重接口简化。
2026-01-13 17:15:51
1062
原创 【设计模式】享元模式(Flyweight)详解:用共享对象对抗内存爆炸
享元模式是一种通过共享对象来优化内存使用的设计模式,适用于需要处理大量相似对象的场景。其核心思想是将对象状态分为可共享的内部状态(如字符、颜色)和不可共享的外部状态(如位置)。通过享元工厂管理共享对象,避免重复创建。该模式在JDK的Integer缓存、字符串常量池等场景中广泛应用,能显著减少内存占用并提高性能,但会增加系统复杂度。与对象池不同,享元模式更注重状态共享而非对象复用。典型应用包括图形系统、游戏开发等需要处理大量细粒度对象的领域。
2026-01-13 12:05:53
581
原创 【设计模式】组合模式(Composite)详解
本文介绍了组合模式的设计思想及其应用。组合模式通过将对象组织成树形结构,统一处理容器对象和叶子对象,使得用户可以一致地操作整体和部分。文章详细说明了组合模式的结构(抽象构件、叶子节点、容器节点),并以文件系统为例展示了具体实现。组合模式的优点包括使用简单、适合树结构、易于扩展,但也存在接口不一致等缺点。文中还对比了组合模式与装饰模式、外观模式的区别,列举了Java Swing等典型应用场景,并强调组合模式的核心是统一接口而非单纯套娃结构。该模式适用于目录、菜单等层次型数据结构。
2026-01-12 23:23:58
1092
原创 【设计模式】外观模式(Facade)详解
外观模式是一种结构型设计模式,旨在为复杂的子系统提供一个统一的高层接口,从而简化客户端调用。它通过封装多个子系统的交互细节,降低系统耦合度,提高可维护性。该模式的核心思想是隔离使用者和复杂实现,对外提供简单接口,对内协调多个子系统。典型应用场景包括系统子模块复杂、调用流程固定的情况,如微服务、SDK封装等。虽然外观模式能简化调用,但也可能导致外观类臃肿,并可能隐藏灵活性。在JDK中,Spring的JdbcTemplate就是外观模式的典型应用。
2026-01-12 18:33:41
1108
原创 【设计模式】桥接模式(Bridge Pattern)详解
桥接模式通过将抽象与实现分离,解决多维度变化导致的继承爆炸问题。以跨平台消息系统为例,将消息类型(抽象)与发送方式(实现)解耦,通过组合而非继承实现灵活扩展。核心角色包括抽象、扩展抽象、实现接口和具体实现。该模式优点在于消除多维继承、独立扩展维度,但设计复杂度较高。适用于存在多个变化维度的场景,如JDBC驱动设计。与适配器、装饰者模式不同,桥接模式专注于多维度独立演化。
2026-01-11 21:48:18
981
原创 【设计模式】装饰者模式详解
装饰者模式是一种动态扩展对象功能的设计模式,通过组合而非继承的方式实现。该模式解决了继承导致的类爆炸问题,允许在运行时灵活添加功能。其核心思想是"对扩展开放,对修改关闭",包含抽象组件、具体组件、抽象装饰者和具体装饰者四个角色。典型应用如咖啡加料系统,通过装饰类叠加功能(如加牛奶、加糖)。该模式优点包括避免类爆炸、灵活扩展,但会增加类数量和调试难度。JDK中的IO流体系是经典实现(如BufferedInputStream包装FileInputStream)。适用于需要功能自由组合的场景。
2026-01-09 10:40:55
863
原创 【设计模式】适配器模式(Adapter)详解
适配器模式是一种结构型设计模式,用于解决接口不兼容问题。它通过将现有类的接口转换为客户端期望的接口,实现不修改原有代码的兼容性。模式包含目标接口(Target)、被适配者(Adaptee)和适配器(Adapter)三个角色,分为对象适配器(推荐,基于组合)和类适配器(基于继承)两种实现方式。典型应用场景包括老系统改造、第三方库接入等。适配器模式符合开闭原则,但过度使用会增加系统复杂度。与代理模式(控制访问)和装饰器模式(功能增强)不同,其核心是接口转换。
2026-01-08 22:58:34
903
原创 【设计模式】代理模式(Proxy)详解:在不修改源码的前提下增强功能
摘要: 代理模式通过引入代理对象间接访问真实对象,在不修改原代码的情况下实现功能增强(如日志、权限控制等)。包含静态代理(需手动编写代理类)、JDK动态代理(基于接口)和CGLIB代理(基于继承)三种实现方式,各有适用场景。Spring AOP即基于代理模式实现。其核心优势是解耦业务逻辑与增强逻辑,符合开闭原则,但会增加系统复杂度。适用于需统一处理方法的场景,如框架开发,而不适用于性能敏感的核心路径。代理模式与装饰器模式的区别在于前者控制访问,后者专注功能叠加。 (字数:150)
2026-01-07 20:21:28
817
原创 【设计模式】建造者模式(Builder Pattern)详解
本文介绍了建造者模式在解决复杂对象创建问题中的应用。当构造函数参数过多导致可读性差、参数顺序易错时,建造者模式通过分步骤构建的方式提供解决方案。该模式包含产品类、抽象建造者、具体建造者和指挥者四个角色,核心思想是将对象的构建过程与表示分离。以计算机组装为例,演示了如何通过Builder类实现灵活的对象创建,并分析了该模式的优缺点:提升可读性、支持不可变对象,但会增加代码复杂度。最后指出建造者模式适用于属性多、构建步骤固定的场景,但不应滥用。文中还列举了JDK中StringBuilder等实际应用案例。
2026-01-06 20:31:09
944
原创 【设计模式】原型模式(Prototype Pattern)详解
摘要: 原型模式通过复制已有对象(原型)来创建新对象,避免重复初始化带来的性能开销。核心思想是“拷贝”而非重新构造,适用于创建成本高、对象差异小的场景。Java通过Cloneable接口支持原型模式,但需注意浅拷贝(仅复制对象本身)与深拷贝(复制对象及引用对象)的区别。优点包括提高性能、简化创建过程,缺点在于实现复杂且可能破坏封装性。典型应用包括Spring的prototype作用域、游戏角色复制等。使用时应权衡对象创建成本,避免过度设计。
2026-01-04 19:27:42
821
原创 【设计模式】抽象工厂模式(Abstract Factory)详解:一次创建“一整套产品”
本文介绍了抽象工厂模式的设计思想与应用场景。该模式通过创建产品族(一组相互关联的对象)来解决工厂方法模式在复杂场景下的局限性。文章详细阐述了抽象工厂的角色组成、实现方式(以跨平台UI组件库为例)及其优缺点。相比工厂方法模式,抽象工厂更适合需要创建整套产品的系统,如JDBC数据库访问组件等框架级应用。核心优势是保证产品一致性,但扩展新产品等级较困难。适用于强调产品协作关系的平台系统,而不适合产品结构频繁变化的小型项目。
2026-01-03 16:08:09
1021
原创 【设计模式】工厂方法模式(Factory Method)详解:从简单工厂到真正的“面向扩展”
摘要: 工厂方法模式通过将对象创建延迟到子类,解决了简单工厂模式违反开闭原则的问题。它包含抽象产品、具体产品、抽象工厂和具体工厂四个角色,以日志系统为例展示了文件日志和数据库日志的实现方式。相比简单工厂,工厂方法模式扩展性更强,但会增加类的数量。适用于产品类型频繁扩展的场景(如框架开发),但不适合小型项目。JDK中的Collection.iterator()体现了该模式思想。核心优势是解耦客户端与具体产品,支持灵活扩展,但需权衡设计复杂度。
2026-01-03 12:16:40
1195
原创 简单工厂模式介绍
简单工厂模式是一种创建型设计模式,通过专门的工厂类封装对象创建过程,实现创建与使用的解耦。该模式包含抽象产品、具体产品和工厂类三个角色,将原本分散的对象创建逻辑集中管理。其优点是简化客户端代码、提高可维护性,但缺点是违背开闭原则,扩展时需要修改工厂类。适用于产品种类少、创建逻辑简单的场景,不适用于需要频繁扩展的大型系统。作为基础模式,它为更复杂的工厂方法模式和抽象工厂模式奠定了基础。
2026-01-02 20:37:28
727
原创 【Java】深入理解 Java 枚举(Enum)
本文介绍了Java枚举(Enum)的特性与应用场景。首先分析了传统int/String常量存在的问题,如类型不安全、可读性差等。然后详细讲解了枚举的定义、基本用法和优势,包括类型安全、可读性强、天然单例等特点。重点阐述了枚举作为类的本质,如何添加字段和方法,以及常用内置方法的使用。文章还探讨了枚举实现接口、作为单例模式的最佳实践,以及与常量类的对比。最后指出枚举在序列化安全性和线程安全方面的优势,是表示固定常量集合的理想选择。
2026-01-01 19:14:40
1110
原创 【Java】 理解Java 的 binarySearch 方法
二分查找是一种高效的搜索算法,适用于有序序列。其核心思想是通过每次将搜索区间减半来快速定位目标值。Java提供了Arrays.binarySearch和Collections.binarySearch两种实现,分别用于数组和集合。使用时必须确保数据有序,否则结果不可靠。当找到目标时返回其索引;未找到时返回-(插入点)-1,其中插入点是保持有序时应插入的位置。对象数组需实现Comparable或提供匹配的Comparator。该算法时间复杂度为O(log n),空间复杂度O(1),是处理有序数据的理想选择。
2025-12-31 10:57:33
728
原创 【设计模式】理解单例模式:从原理到最佳实践
单例模式是一种确保类只有一个实例并提供全局访问点的设计模式。文章介绍了单例模式的多种实现方式,包括饿汉式(静态变量、静态代码块)、懒汉式(基础版、同步方法、双重检查锁、静态内部类)以及枚举式实现。重点分析了各种方式的线程安全性、性能优劣及适用场景,推荐使用枚举或静态内部类实现。此外,还探讨了防御反射攻击和序列化破坏的方法,强调枚举实现是最佳实践。单例模式适用于配置中心、数据库连接池等需要全局唯一实例的场景。
2025-12-28 12:48:15
1305
原创 【UML】面向对象中类与类之间的关系详解
作为程序员,在学习或使用面向对象编程(OOP)时,类与类之间的关系是一个绕不开的话题。合理地建模类之间的关系,不仅能让代码更清晰,也能显著提升系统的可维护性和扩展性。本文将详细介绍类和类之间的关系模式。
2025-12-27 20:21:36
1382
C++编程测试题,考察范围:面向对象特性与函数重载机制:基于类继承和多态的代码优化与异常处理技术解析
2025-10-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅