- 博客(59)
- 收藏
- 关注
原创 类图+案例+代码详解:软件设计模式----桥接模式
桥接模式通过组合代替继承,将抽象(如手机品牌)与实现(如软件)分离,使两者可以独立变化。该模式包含4个核心角色:抽象化、扩展抽象化、实现化和具体实现化。以手机运行软件为例,传统继承方式会导致类爆炸(N×M个类),而桥接模式只需N+M个类。这种设计提高了可扩展性,符合开闭原则,同时避免了继承带来的强耦合问题。代码示例展示了如何通过组合方式自由搭配不同手机品牌和软件,实现灵活的系统扩展。
2025-07-05 19:14:10
431
原创 类图+案例+代码详解:软件设计模式----适配器模式
适配器模式解决接口不兼容问题,分为类适配器(继承方式)和对象适配器(推荐,组合方式)。类适配器需继承被适配类,可能面临多继承限制;对象适配器通过持有被适配对象引用实现接口转换。示例展示了将圆孔电源适配为USB接口的过程:定义目标接口USBCharger、适配者RoundHolePower,实现PowerAdapter转换器,最终通过适配器完成接口兼容。对象适配器更灵活,适用于多适配场景。
2025-07-05 19:11:40
545
原创 类图+案例+代码详解:软件设计模式----单例模式
单例模式确保一个类只有一个实例,并提供全局访问点。核心实现包括:私有化构造方法、提供静态获取实例的方法。适用于全局唯一场景如ATM总控中心、任务管理器等。在多线程环境下,需考虑线程安全问题,常见解决方案包括:同步锁方法(简单但低效)、双重检查锁定(DCL,需搭配volatile防止指令重排)以及最优的静态内部类方式(利用类加载机制保证线程安全)。静态内部类方案兼具线程安全和延迟加载优势,是推荐实现方式。
2025-07-04 19:34:00
431
原创 类图+案例+代码详解:软件设计模式----原型模式
摘要:原型模式通过复制现有对象创建新对象,避免重复初始化。其核心是对象克隆,适用于创建复杂或相似对象场景。实现步骤包括定义原型接口、具体原型类和客户端调用克隆方法。相比工厂模式,原型模式基于已有对象复制而非新建。典型应用包括游戏角色复制和Spring框架的Bean克隆。注意区分浅拷贝(共享引用对象)和深拷贝(完全独立)的实现差异。代码示例展示了熊猫对象的克隆过程,通过修改部分属性快速生成新对象。该模式优势在于提高效率、简化扩展并隔离创建细节。
2025-07-04 19:17:44
410
原创 类图+案例+代码详解:软件设计模式----生成器模式(建造者模式)
摘要:建造者模式(生成器模式)将复杂对象的构建过程与表示分离,允许相同的构建流程创建不同对象。以快餐店汉堡为例,产品(汉堡)由抽象建造者(建造接口)、具体建造者(不同汉堡实现)、指挥者(控制建造顺序)协同完成。该模式优势在于解耦构建过程、简化复杂对象创建、便于扩展新产品。与工厂模式相比,建造者模式更适用于需要分步构建的场景,如JDK的StringBuilder和SQL语句构建。典型实现包括定义产品类、抽象建造者接口、具体建造者实现和指挥者类。
2025-06-30 10:36:35
485
原创 类图+案例+代码详解:软件设计模式----简单工厂方法、工厂方法、抽象工厂方法
设计模式中的工厂模式分为三种类型:简单工厂、工厂方法和抽象工厂。简单工厂通过静态方法根据参数创建对象,但违背开闭原则;工厂方法将创建权下放给子类,每个产品对应一个工厂类;抽象工厂则能创建多个相关产品系列,保证风格统一。三种模式各有适用场景,简单工厂适合简单需求,工厂方法利于扩展单个产品,抽象工厂则适合成套产品生产。
2025-06-30 10:28:57
1323
原创 [蓝桥杯 2024 国 Python B] 设计
由于预算等因素的动态变化,小蓝经常需要拆除一些已经建设好的道路,同时,她希望知道对于当前的两个地区,是否存在一条由多条道路组成的路径能够连接这两个地区。新建一条路就是将这两个点合并(此时两个地方连通,且根节点相同),毁掉一条最近新建的路就是撤销最近一次的合并(所以需对每次新建的路的信息进行存储,同时还要区分开哪些能合并哪些不能合并,方便后面只撤销合并)。问题的意思就是找两个地方之间是否可以连通,可以用并查集做。输入的第一行包含两个正整数 n,m ,用一个空格分隔,其中 n 表示地区个数,m 表示操作次数。
2025-06-11 21:04:26
639
原创 理解什么是并查集
并查集(Union-Find)是一种高效处理元素分组和集合操作的数据结构,主要用于解决,例如判断两个元素是否属于同一集合、合并两个集合等。其核心操作包括:查找(Find)和合并(Union)。用树形结构表示集合,每个节点包含一个父节点指针。例如,元素x的父节点为parent[x],当parent[x]=x时, x是集合的根节点(代表元)。查找时将路径上的所有节点直接指向根节点,降低树的高度,使查找时间复杂度接近常数。注意:有时路径压缩会影响后续操作,因为路径压缩时路径上的节点会直接连接到根节点。
2025-06-11 21:00:53
334
原创 [蓝桥杯 2024 国 Java B] 美丽区间
要找出输入的整数在第几个区间,因为我们可以先根据题目要求把所有的美丽区间找到,并存储好美丽区间的左边界以及该区间属于第几个区间。为了方便我们后续进行查找,我们可以用TreeMap存储这些数据,key存储左边界,value存储第几区间。对于 100% 的评测用例:1≤T≤10^6,1≤K≤10^6,1≤n≤10^6。对于 60% 的评测用例:1≤T≤10^3,1≤K≤10^6,1≤n≤10^6。对每个输入的整数 n,输出一行,包含一个整数,表示 n 属于第几个美丽区间。第 1 个美丽区间为:[1,11]。
2025-06-09 10:28:24
693
原创 [蓝桥杯 2024 国 B] 蚂蚁开会
二维平面上有 n 只蚂蚁,每只蚂蚁有一条线段作为活动范围,第 i 只蚂蚁的活动范围的两个端点为 (uix,uiy),(vix,viy)。对于 100% 的评测用例,保证 n≤500,0≤uix,uiy,vix,viy≤10000,保证任意蚂蚁的活动范围不会退化成一个点,后面 n 行,每行 4 个由空格分开的整数表示 uix,uiy,vix,viy。所有线段之间共有 3 个不同的交点:(0,4),(4,3),(2,2),其中整点有 2 个:(0,4),(2,2)。输出共 1 行,一个整数表示答案。
2025-06-08 14:52:10
511
原创 [蓝桥杯 2024 国 B] 立定跳远
②再判断所需的检查点数requireM是否满足<=m+1 ③若满足,再使right=mid-1,减小mid,看能否取更小 ④若不满足,则使left=mid+1,增大mid,使满足 ⑤直到找到最小的mid (即L)通过计算每两个相邻检查点之间的距离d可以划分为多少段长度为L的段落(向上取整),即(d+mid-1)/mid(在数学中与ceil( d/mid )等价), 这两个检查点间所需的检查点数即为段落数-1即可,为(d+mid-1)/mid-1,即(d-1)/mid。输出共 1 行,一个整数表示答案。
2025-06-06 16:44:45
582
原创 操作系统----软考中级软件工程师(自用学习笔记)
目录1、计算机系统层次结构2、程序顺序执行的特征3、程序并发执行的特征4、三态模型5、同步与互斥6、信号量机制7、PV操作8、死锁9、进程资源图10、死锁避免11、线程12、程序局部性原理13、分页存储管理14、单缓冲器15、双缓冲区16、磁盘调度算法17、旋转调度算法18、多级索引结构19、文件目录20、多级目录结构21、位示图22、补充
2025-05-20 20:44:40
250
原创 设计模式----软考中级软件设计师(自用学习笔记)
目录1、设计模式的要素2、设计模式的分类3、简单工厂模式4、工厂方法5、抽象工厂6、生成器7、原型8、单例模式9、适配器10、桥接11、组合模式12、装饰13、外观14、享元15、代理16、责任链17、命令18、解释器19、迭代器20、中介者21、备忘录22、观察者23、状态24、策略25、模版方法25、访问者
2025-05-20 20:35:17
596
原创 数据库----软考中级软件设计师(自用学习笔记)
目录1、E-R图2、结构数据模型3、数据库的三级模式结构4、关系代数5、查询6、SQL控制语句7、视图编辑8、索引9、关系模式10、函数依赖11、通过闭包求候选码12、范式13、无损连接和保持函数依赖14、数据库设计15、数据库的控制功能 16、数据库的备份与恢复17、并发控制技术18、分布式数据库
2025-05-20 20:24:31
248
原创 程序设计语言----软考中级软件设计师(自用学习笔记)
本文涵盖了编程语言和编译原理的核心概念,包括解释器与编译器的区别、程序控制结构、数据类型的重要性以及编译和解释的翻译阶段。还涉及符号表、上下文无关文法、表达式计算、语法树遍历、脚本语言与动态语言、语法和语义分析方法、内存管理(栈区与堆区)、可执行程序的形成,以及机器学习和可视化的基本知识。这些内容为理解编程语言的设计、实现和优化提供了基础框架。
2025-05-14 14:53:56
240
原创 字符田字格绘制
完成字符田字格的绘制。编写程序,用字符方式打印输出一个简单的田字格,输出结果如图所示,要求采用函数方式,以田字格宽度为参数,能够根据参数绘制任意大小的田字格。
2025-05-14 14:37:17
206
原创 计算机系统----软考中级软件设计师(自用学习笔记)
本文目录涵盖了计算机硬件系统及其核心组件的详细内容,包括CPU、运算器、控制器等基本硬件,以及计算机的基本单位和进制转换问题。此外,还涉及了原码、反码、补码、移码等编码方式,浮点数表示,寻址方式,奇偶校验码、海明码、循环冗余校验码等错误检测与纠正技术。指令集架构(RISC和CISC)、指令处理方式、存储器、中断机制、输入输出控制方式、总线结构等也是讨论的重点。最后,还介绍了加密技术与认证技术、加密算法、可靠性公式等内容,为读者提供了全面的计算机硬件与系统知识框架。
2025-05-13 20:00:04
282
原创 列表与字典应用
目的:熟练操作组合数据类型。任务:1.基础:生日悖论分析。如果一个房间有23人或以上,那么至少有两 个人的生日相同的概率大于50%。编写程序,输出在不同随机样本数量下,23个人中至少两个人生日相同的概率。2.进阶:统计《一句顶一万句》文本中前10高频词,生成词云。3.拓展:金庸、古龙等武侠小说写作风格分析。输出不少于3个金庸(古龙)作品的最常用10个词语,找到其中的相关性,总结其风格。
2025-04-25 16:00:53
305
原创 函数与代码复用(计算阶乘、实现斐波那契数列、科赫曲线正向、反向绘制)
目的:理解函数封装与递归思想任务:1.基础:编写函数cal_factorial(n)计算阶乘(循环实现)。2.进阶:用递归实现斐波那契数列(考虑添加缓存优化)。3.拓展:科赫曲线正向、反向绘制,加入绘制速度、绘制颜色等额外功能提示:递归函数需注意终止条件,避免栈溢出。
2025-04-25 15:45:00
366
原创 turtle库绘制进阶图形
2. 设计函数绘制自定义正多边形(边数与颜色参数化)1.绘制嵌套彩色五角星(大小逐层递减)3. 扩展:实现动态旋转花瓣图案。
2025-04-19 16:00:00
307
原创 蒙特卡罗方法手搓图形
的函数,用于实现蒙特卡罗方法估算圆形面积的逻辑。然后,设置了圆形的半径和随机点的数量,并调用该函数进行计算。库绘制出随机点和圆形,其中蓝色点表示在圆内的点,红色点表示在圆外的点。同时,在图形的标题中显示了估算得到的圆形面积。下面使用 Python 语言,结合蒙特卡罗方法来估算圆形的面积,并绘制出相应的可视化图形。蒙特卡罗方法是一种基于随机抽样的统计方法,可用于估算复杂图形的面积、体积等。
2025-04-18 11:09:29
168
原创 if __name__ == “__main__“:的含义
在 Python 里,是个常用的代码结构,它的作用是判断当前的 Python 文件是否作为主程序直接运行。下面详细阐释其含义和用途。
2025-04-18 10:56:17
228
原创 动态规划:石子合并 图文+举例超详细说明
在一个圆形操场的四周摆放 N 堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的 2 堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出一个算法,计算出将 N 堆石子合并成 1 堆的最小得分和最大得分。数据的第 1 行是正整数 N ,表示有 N 堆石子。第 2 行有 N 个整数,第 i 个整数 ai 表示第 i 堆石子的个数。输出共 2 行,第 1 行为最小得分,第 2 行为最大得分。
2024-12-22 10:45:50
2554
原创 动态规划:最少添加次数构成回文串问题 图文+举例超详细说明
一个字符串,如果从左到右读和从右到左读是完全一样的,比如"aba",我们称其为回文串。现在给你一个字符串,可在任意位置添加字符,求最少添加几个字符,才能使其变成一个回文串。任意给定的一个字符串,其长度不超过1000.能变成回文串所需添加的最少字符数。在这里给出一组输入。Ab3bdAbb在这里给出相应的输出。21。
2024-12-15 16:25:06
1259
原创 动态规划:0-1背包问题 图文+举例超详细说明
因为由dp数组的递推公式:dp[i] [j] =max(dp[i-1] [j],dp[i-1] [j-weight[i]]+value[i])可知,所求dp[i] [j]的值由dp[i] [j]的左上角的值推导而来,无论先遍历物品还是先遍历背包容量,在求dp[i] [j]的值时,dp[i] [j]的左上角区域都已经正确赋值,可以动手推导试试。②由dp数组的递推公式:dp[i] [j] =max(dp[i-1] [j],dp[i-1] [j-weight[i]]+value[i]);在这里给出相应的输出。
2024-12-14 19:11:56
944
原创 实现一个最基本的web应用(没有java小程序)
可能会有疑问,明明可以直接双击打开index.html文件,也一样可以在浏览器展示效果,为什么还要在浏览器中输入URL。我们要知道,我们现在之所以能直接双击打开,是因为这个项目在我们的电脑里。我们可以想象一下,项目在别处的服务器上,我们要想访问项目,那么就得通过浏览器输入URL来进行访问,而不能直接双击打开。
2024-10-20 17:33:34
288
原创 B/S结构的系统通信原理(含什么是请求、响应、域名、IP地址、端口号)
这是一个网址是一个域名在浏览器地址栏输入域名,回车,域名解析器会将域名解析出来一个具体的IP地址和端口号等IP地址相当于计算机在网络中的一个身份证号。同一个网络中,IP地址是唯一的A计算机要想和B计算机通信,首先A计算机要知道B计算机的IP地址,有了IP地址才能建立连接一个端口代表一个软件(一个端口代表一个应用,一个端口仅代表一个服务)一个计算机中有很多软件,每个软件启动后都有一个端口号在同一个计算机中,端口号具有唯一性。
2024-10-19 17:32:25
453
原创 Git分布式版本控制工具使用教程(超详细!!!)
以上步骤执行完后,以后如果对项目的文件进行了修改,我们只需执行git add.(添加) 和git commit -m "xxx" (形成版本)和git push origin "master"(-u可省)(上传远程仓库) 命令即可。注:一定要在git add 之前创建.gitignore文件,不然.gitignore文件无法作用于执行了git add后添加到缓存区的文件。还有版本冲突、Branch、Tags等内容......。选择“仓库URL”,把仓库地址复制粘贴在URL中,点击克隆即可。
2024-06-10 20:37:57
1297
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅