- 博客(39)
- 收藏
- 关注
原创 类图+案例+代码详解:软件设计模式----桥接模式
桥接模式通过组合代替继承,将抽象(如手机品牌)与实现(如软件)分离,使两者可以独立变化。该模式包含4个核心角色:抽象化、扩展抽象化、实现化和具体实现化。以手机运行软件为例,传统继承方式会导致类爆炸(N×M个类),而桥接模式只需N+M个类。这种设计提高了可扩展性,符合开闭原则,同时避免了继承带来的强耦合问题。代码示例展示了如何通过组合方式自由搭配不同手机品牌和软件,实现灵活的系统扩展。
2025-07-05 19:14:10
439
原创 类图+案例+代码详解:软件设计模式----适配器模式
适配器模式解决接口不兼容问题,分为类适配器(继承方式)和对象适配器(推荐,组合方式)。类适配器需继承被适配类,可能面临多继承限制;对象适配器通过持有被适配对象引用实现接口转换。示例展示了将圆孔电源适配为USB接口的过程:定义目标接口USBCharger、适配者RoundHolePower,实现PowerAdapter转换器,最终通过适配器完成接口兼容。对象适配器更灵活,适用于多适配场景。
2025-07-05 19:11:40
552
原创 类图+案例+代码详解:软件设计模式----单例模式
单例模式确保一个类只有一个实例,并提供全局访问点。核心实现包括:私有化构造方法、提供静态获取实例的方法。适用于全局唯一场景如ATM总控中心、任务管理器等。在多线程环境下,需考虑线程安全问题,常见解决方案包括:同步锁方法(简单但低效)、双重检查锁定(DCL,需搭配volatile防止指令重排)以及最优的静态内部类方式(利用类加载机制保证线程安全)。静态内部类方案兼具线程安全和延迟加载优势,是推荐实现方式。
2025-07-04 19:34:00
453
原创 类图+案例+代码详解:软件设计模式----原型模式
摘要:原型模式通过复制现有对象创建新对象,避免重复初始化。其核心是对象克隆,适用于创建复杂或相似对象场景。实现步骤包括定义原型接口、具体原型类和客户端调用克隆方法。相比工厂模式,原型模式基于已有对象复制而非新建。典型应用包括游戏角色复制和Spring框架的Bean克隆。注意区分浅拷贝(共享引用对象)和深拷贝(完全独立)的实现差异。代码示例展示了熊猫对象的克隆过程,通过修改部分属性快速生成新对象。该模式优势在于提高效率、简化扩展并隔离创建细节。
2025-07-04 19:17:44
423
原创 类图+案例+代码详解:软件设计模式----生成器模式(建造者模式)
摘要:建造者模式(生成器模式)将复杂对象的构建过程与表示分离,允许相同的构建流程创建不同对象。以快餐店汉堡为例,产品(汉堡)由抽象建造者(建造接口)、具体建造者(不同汉堡实现)、指挥者(控制建造顺序)协同完成。该模式优势在于解耦构建过程、简化复杂对象创建、便于扩展新产品。与工厂模式相比,建造者模式更适用于需要分步构建的场景,如JDK的StringBuilder和SQL语句构建。典型实现包括定义产品类、抽象建造者接口、具体建造者实现和指挥者类。
2025-06-30 10:36:35
495
原创 类图+案例+代码详解:软件设计模式----简单工厂方法、工厂方法、抽象工厂方法
设计模式中的工厂模式分为三种类型:简单工厂、工厂方法和抽象工厂。简单工厂通过静态方法根据参数创建对象,但违背开闭原则;工厂方法将创建权下放给子类,每个产品对应一个工厂类;抽象工厂则能创建多个相关产品系列,保证风格统一。三种模式各有适用场景,简单工厂适合简单需求,工厂方法利于扩展单个产品,抽象工厂则适合成套产品生产。
2025-06-30 10:28:57
1350
原创 [蓝桥杯 2024 国 Python B] 设计
由于预算等因素的动态变化,小蓝经常需要拆除一些已经建设好的道路,同时,她希望知道对于当前的两个地区,是否存在一条由多条道路组成的路径能够连接这两个地区。新建一条路就是将这两个点合并(此时两个地方连通,且根节点相同),毁掉一条最近新建的路就是撤销最近一次的合并(所以需对每次新建的路的信息进行存储,同时还要区分开哪些能合并哪些不能合并,方便后面只撤销合并)。问题的意思就是找两个地方之间是否可以连通,可以用并查集做。输入的第一行包含两个正整数 n,m ,用一个空格分隔,其中 n 表示地区个数,m 表示操作次数。
2025-06-11 21:04:26
652
原创 理解什么是并查集
并查集(Union-Find)是一种高效处理元素分组和集合操作的数据结构,主要用于解决,例如判断两个元素是否属于同一集合、合并两个集合等。其核心操作包括:查找(Find)和合并(Union)。用树形结构表示集合,每个节点包含一个父节点指针。例如,元素x的父节点为parent[x],当parent[x]=x时, x是集合的根节点(代表元)。查找时将路径上的所有节点直接指向根节点,降低树的高度,使查找时间复杂度接近常数。注意:有时路径压缩会影响后续操作,因为路径压缩时路径上的节点会直接连接到根节点。
2025-06-11 21:00:53
338
原创 [蓝桥杯 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
701
原创 [蓝桥杯 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
519
原创 [蓝桥杯 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
598
原创 列表与字典应用
目的:熟练操作组合数据类型。任务:1.基础:生日悖论分析。如果一个房间有23人或以上,那么至少有两 个人的生日相同的概率大于50%。编写程序,输出在不同随机样本数量下,23个人中至少两个人生日相同的概率。2.进阶:统计《一句顶一万句》文本中前10高频词,生成词云。3.拓展:金庸、古龙等武侠小说写作风格分析。输出不少于3个金庸(古龙)作品的最常用10个词语,找到其中的相关性,总结其风格。
2025-04-25 16:00:53
310
原创 函数与代码复用(计算阶乘、实现斐波那契数列、科赫曲线正向、反向绘制)
目的:理解函数封装与递归思想任务:1.基础:编写函数cal_factorial(n)计算阶乘(循环实现)。2.进阶:用递归实现斐波那契数列(考虑添加缓存优化)。3.拓展:科赫曲线正向、反向绘制,加入绘制速度、绘制颜色等额外功能提示:递归函数需注意终止条件,避免栈溢出。
2025-04-25 15:45:00
373
原创 turtle库绘制进阶图形
2. 设计函数绘制自定义正多边形(边数与颜色参数化)1.绘制嵌套彩色五角星(大小逐层递减)3. 扩展:实现动态旋转花瓣图案。
2025-04-19 16:00:00
314
原创 蒙特卡罗方法手搓图形
的函数,用于实现蒙特卡罗方法估算圆形面积的逻辑。然后,设置了圆形的半径和随机点的数量,并调用该函数进行计算。库绘制出随机点和圆形,其中蓝色点表示在圆内的点,红色点表示在圆外的点。同时,在图形的标题中显示了估算得到的圆形面积。下面使用 Python 语言,结合蒙特卡罗方法来估算圆形的面积,并绘制出相应的可视化图形。蒙特卡罗方法是一种基于随机抽样的统计方法,可用于估算复杂图形的面积、体积等。
2025-04-18 11:09:29
175
原创 动态规划:石子合并 图文+举例超详细说明
在一个圆形操场的四周摆放 N 堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的 2 堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出一个算法,计算出将 N 堆石子合并成 1 堆的最小得分和最大得分。数据的第 1 行是正整数 N ,表示有 N 堆石子。第 2 行有 N 个整数,第 i 个整数 ai 表示第 i 堆石子的个数。输出共 2 行,第 1 行为最小得分,第 2 行为最大得分。
2024-12-22 10:45:50
2629
原创 动态规划:最少添加次数构成回文串问题 图文+举例超详细说明
一个字符串,如果从左到右读和从右到左读是完全一样的,比如"aba",我们称其为回文串。现在给你一个字符串,可在任意位置添加字符,求最少添加几个字符,才能使其变成一个回文串。任意给定的一个字符串,其长度不超过1000.能变成回文串所需添加的最少字符数。在这里给出一组输入。Ab3bdAbb在这里给出相应的输出。21。
2024-12-15 16:25:06
1282
原创 动态规划: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
959
原创 实现一个最基本的web应用(没有java小程序)
可能会有疑问,明明可以直接双击打开index.html文件,也一样可以在浏览器展示效果,为什么还要在浏览器中输入URL。我们要知道,我们现在之所以能直接双击打开,是因为这个项目在我们的电脑里。我们可以想象一下,项目在别处的服务器上,我们要想访问项目,那么就得通过浏览器输入URL来进行访问,而不能直接双击打开。
2024-10-20 17:33:34
294
原创 B/S结构的系统通信原理(含什么是请求、响应、域名、IP地址、端口号)
这是一个网址是一个域名在浏览器地址栏输入域名,回车,域名解析器会将域名解析出来一个具体的IP地址和端口号等IP地址相当于计算机在网络中的一个身份证号。同一个网络中,IP地址是唯一的A计算机要想和B计算机通信,首先A计算机要知道B计算机的IP地址,有了IP地址才能建立连接一个端口代表一个软件(一个端口代表一个应用,一个端口仅代表一个服务)一个计算机中有很多软件,每个软件启动后都有一个端口号在同一个计算机中,端口号具有唯一性。
2024-10-19 17:32:25
463
原创 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
1321
1
原创 什么是模块化,为什么要模块化
模块化是将一个大型系统拆分成更小、更易管理的模块或部件的过程。模块化的主要目的是将复杂系统分解成更易于管理和理解的部分,从而简化开发和维护过程。:模块化使得修改和维护代码变得更容易,因为每个模块都是相对独立的,修改一个模块不会影响其他模块。:模块化使得代码可以更容易地被重用,因为一个模块可以在不同的系统或项目中使用。:模块化设计使得系统更容易扩展,可以通过添加新的模块来增加系统的功能。:模块化可以使团队并行开发不同的模块,从而加快整体开发进度。:模块化使得系统更容易测试和调试,从而减少潜在的错误和问题。
2024-05-25 16:44:21
606
原创 如果你要开发一个中小学生学习数学的软件,你应该找谁去做用户调研?
家长:家长是学生的第一位老师,他们对孩子的学习兴趣和需求了如指掌。通过与家长交流,可以了解到他们对于数学学习软件的期望,以及他们希望软件能够解决的问题。中小学生:直接向目标用户群体了解他们对数学学习软件的看法、偏好和需求,可以为产品设计提供重要参考。教育机构:与学校、培训机构等合作,了解他们对数学教学软件的需求,以及可能的合作模式和市场推广途径。教育专家和教师:他们对学生的学习需求和教学方法有深入了解,能提供宝贵的教育理念和建议。
2024-05-14 15:18:37
269
1
原创 学生、教师、课程ER图
学校规定: 一个学生可选修多门课,一门课有若千学生选修;一个教师可讲授多门课,一门课只有一个教师讲投;一个学生选修一门课,仅有一个成绩。学生的属性有学号、学生姓名,教师的属性有教师编号,教师姓名,课程的属性有课程号、课程名。要求:根据上述语义画出ER图,要求在图中画出实体的属性并注明联系的类型。
2024-05-13 13:08:41
3598
1
原创 入学管理系统数据流图
1、报名:由报名处负责,需要在学员登记表上进行报名登记,需要查询课程表让学员选报课程,学院所报课程将记录到学员选课表。2、交费:由收费处负责,需要根据学员所报课程的收费标准进行收费,然后在账目表上记账,并打印收款收据给办理交费的学员。3、就读:由培训处负责,其在验证学员收款收据后,根据学员所报课程学员安排到合适班级就读。画出入学管理系统的顶层图和1层图。
2024-05-11 18:11:59
344
1
原创 了解WBS
它将项目的工作内容层层分解成更小的、更易于管理和控制的工作包或任务,从而帮助项目团队理解项目的范围、组织工作、分配资源、制定计划和跟踪进度。工作分解结构通常呈现为一个层次化的树状结构,顶层是整个项目的总体目标或最终成果,然后逐级向下分解,直到最底层的具体任务或工作包。每一层的工作都是上一层工作的细分和拆分,直到工作包的级别,这些工作包通常是可独立执行的、有明确交付成果的任务单元。WBS 是项目管理过程中的重要工具,它不仅有助于项目团队理清项目的结构和工作内容,还能提高项目的管理效率和成功率。
2024-05-11 13:15:00
267
1
原创 分而治之策略
"分而治之"(Divide and Conquer)是一种解决问题的算法设计策略,它将一个大问题分解成多个小问题来解决,然后将这些小问题的解合并起来得到最终的解决方案。这种分而治之的策略在解决各种类型的问题时都非常有用,特别是对于那些可以被分解为相互独立的子问题的情况。如果子问题足够小,可以直接求解;3. 合并(Combine): 将子问题的解合并起来,得到原始问题的解。1. 分解(Divide): 将原始问题分解成若干个规模更小、相对简单的子问题,这些子问题通常是相互独立的,可以并行处理。
2024-05-11 13:00:00
301
1
原创 形式化方法
形式化方法是一种通过形式化符号系统来描述、分析和设计计算系统、软件系统或其他系统的方法。它通常涉及使用数学、逻辑或形式化语言来精确描述系统的行为、结构和属性,以便进行验证、推理和证明。
2024-05-05 15:00:00
460
原创 理解结对编程
结对编程是一种软件开发实践,两名程序员共同工作,共同参与同一任务。他们共同使用一个计算机,一个负责编写代码,另一个负责即时代码审查、提出建议和解决问题。这种实践有助于提高代码质量、减少错误,并促进团队合作和知识共享。
2024-05-03 21:11:05
619
1
原创 什么是scrum中的3355
团队是“跨职能”的,它包含了所有专业能力,如开发、测试、需求分析等,并且它是“自组织”[自管理]的,被给予很高程度的自治和责任。Scrum五大事件,包括:Sprint、Sprint 计划会、每日 Scrum 站会、Sprint 评审会、Sprint 回顾会。冲刺Sprint或迭代是一个特殊的事件,或者说其一个容器事件。冲刺结束后,团队一起复盘本次冲刺的过程,总结经验与教训,并形成切实可行的改进清单。Scrum3355指的是:3个核心角色,3个工件,5个关键事件和5个价值观。建造产品负责人所指定的产品。
2024-04-30 20:00:00
1173
1
原创 DevOps是什么
DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。DevOps 的三大支柱之中,即人(People)、流程(Process)和平台(Platform)。DevOps概念的提出:单体架构+瀑布模型、分布式架构+敏捷开发模式、微服务架构+DevOps。”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。而现在的DevOps已经扩大到“端到端”的概念了。DevOps=人+流程+平台。
2024-04-29 20:15:00
179
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅