- 博客(40)
- 收藏
- 关注
原创 排序算法稳定性判断
本文介绍了排序算法的稳定性,即排序后相等元素的相对位置保持不变。判断标准是:若算法可能导致相等元素交换或跨区间移动,则不稳定。稳定算法(如冒泡、插入、归并排序)仅相邻比较且不交换相等项,而不稳定算法(如选择、快速、堆排序)会跨区交换或重建结构。通过对比各算法特性,总结出稳定性取决于处理相等元素时是否保持原始顺序。表中详细列出了常见排序算法的稳定性及其原因分析。
2025-11-06 23:29:35
416
原创 BIO、NIO、AIO详解
摘要:本文系统讲解了I/O模型中的阻塞/非阻塞与同步/异步概念区别,通过点外卖的生动例子阐释了四种组合方式。重点分析了三种主流I/O模型:BIO(同步阻塞)、NIO(同步非阻塞/多路复用)和AIO(异步非阻塞),包括其核心机制、实现原理及适用场景。其中NIO通过Selector实现多路复用,AIO则采用操作系统回调机制实现真正的异步。文章配有示意图帮助理解不同I/O模型的工作流程。(149字)
2025-10-08 22:54:23
2061
原创 YOLO框架和MMdetection框架——多光谱版本
本文介绍了两个目标检测相关开源项目:1) mmdetection框架下的RSDet,提供旋转目标检测功能;2) TwoStream_Yolov8,基于YOLOv8改进的双流目标检测算法。两个项目均托管在GitHub,分别针对不同检测任务需求。RSDet专注于遥感图像中的旋转目标检测,而TwoStream_Yolov8通过双流结构增强了YOLOv8的特征提取能力。这些项目为计算机视觉领域的研究者和开发者提供了可复用的解决方案。
2025-10-05 10:12:25
140
原创 程序关掉但显存仍占用解决方案
摘要:要确认GPU显存占用情况,可通过fuser -v /dev/nvidia*命令查看所有GPU相关进程及其PID。找到占用显存的进程后,可使用kill -9 <PID>强制终止该进程以释放显存资源。(49字)
2025-10-05 10:11:42
156
原创 YOLO11框架训练高光谱数据归一化问题
该代码将高光谱图像数据从0-1范围重新归一化到0-255范围。通过逐通道处理TIFF文件,对每个波段进行最小-最大归一化,然后将结果转换为8位无符号整型(uint8)并保存。相比之前的0-1归一化,0-255的范围调整有助于改善模型训练效果。代码会自动创建输出目录,并保留原始文件名结构。
2025-10-05 10:10:31
162
原创 联网下的python环境迁移到无联网下的电脑上
本文介绍了在无网络环境下迁移Conda环境的完整流程。首先在联网电脑上通过conda-pack打包指定环境为压缩包(Windows建议用.zip格式),然后通过U盘等工具将文件传输到目标电脑。在无网Windows电脑上解压后,需运行conda-unpack命令修复软链接问题。该方法适用于Linux/Windows系统间的环境迁移,确保开发环境完整复制到离线机器。
2025-10-05 10:09:10
221
原创 Spring中bean的生命周期
Spring Bean生命周期主要包括实例化、属性注入、Aware接口回调、BeanPostProcessor处理、初始化和销毁等阶段。核心流程为:通过构造方法实例化后,进行依赖注入,然后执行Aware接口回调。接着经过BeanPostProcessor前置处理,调用初始化方法(包括InitializingBean和init-method),再进行BeanPostProcessor后置处理。最后容器关闭时依次执行销毁方法(DisposableBean和destroy-method)。开发者可以通过实现特定接
2025-09-30 14:21:15
366
原创 HTTPS加密过程
HTTPS采用混合加密机制,结合非对称加密和对称加密的优势:先用非对称加密(如RSA)安全传输对称密钥,确保密钥分发安全;后续通信则使用对称加密(如AES)处理数据,保证传输效率。这种设计既解决了对称加密密钥分发的安全问题,又避免了非对称加密性能低下的缺陷,实现了安全与效率的平衡。
2025-09-25 21:29:09
298
原创 设计模式——行为型模式——解释器模式详解
解释器模式是一种行为设计模式,用于定义语言文法并建立解释器来解释语言中的句子。它通过抽象表达式、终结符表达式和非终结符表达式等组件,将语法规则转化为可执行的解释操作。该模式适用于需要解释执行自定义规则或脚本的场景,特别是当语言规则稳定但表达式频繁变化时。虽然易于扩展新规则且符合单一职责原则,但可能存在类爆炸和性能问题。典型应用包括数学表达式解析和规则引擎实现,本质是构建一个小型语言解释器。
2025-09-24 15:57:59
331
原创 设计模式——行为型模式——中介者模式详解
摘要:中介者模式通过引入中介对象封装对象间的交互,降低系统耦合度。其核心组成包括抽象中介者、具体中介者和同事类,典型应用如聊天室场景。该模式的优点在于解耦对象间依赖、便于维护,但可能导致中介者逻辑过重。本质是将网状依赖转为星型结构,适用于复杂交互关系的场景,如空管系统、房产中介等。实现时需注意避免中介者成为"上帝对象",保持职责单一性。
2025-09-24 15:47:59
299
原创 设计模式——行为型模式——访问者模式详解
访问者模式是一种行为设计模式,它将数据结构与操作分离,允许在不修改元素类的前提下定义新操作。该模式适用于对象结构稳定但操作频繁变化的场景,如编译器、AST处理等。核心结构包括访问者接口、具体访问者、元素接口和具体元素,通过双重分派机制实现动态方法调用。优点在于符合开闭原则和解耦数据结构与操作,缺点是新增元素类需要修改所有访问者。典型类比包括海关检查、公司报表和医院体检等场景。该模式适合"结构稳定、操作多变"的需求,通过将操作抽离为访问者实现解耦。
2025-09-24 15:37:12
325
原创 设计模式——行为型模式——状态模式详解
状态模式是一种行为设计模式,它允许对象在不同状态下表现出不同行为。该模式通过将状态封装为独立类,使对象能够根据内部状态自动改变行为,避免了复杂的条件判断语句。适用于电梯控制、订单流程等场景。与策略模式的区别在于,状态模式强调由状态驱动的行为变化,而策略模式关注算法的可互换性。状态模式提高了代码的可维护性和扩展性,但可能增加类的数量。核心思想是将状态相关的行为封装为对象,使状态转换更加清晰可控。
2025-09-24 15:22:08
389
原创 设计模式——行为型模式——备忘录模式详解
备忘录模式是一种行为设计模式,它允许在不破坏对象封装性的前提下保存和恢复对象状态。该模式包含三个核心角色:Originator(创建备忘录保存状态)、Memento(存储状态快照)和Caretaker(管理备忘录)。适用场景包括撤销/重做功能、事务回滚等。优点是提供状态恢复机制且职责清晰,缺点是可能占用大量内存。现实类比包括游戏存档、编辑器撤销功能等。该模式本质是为对象提供"存档/读档"能力,实现状态回滚。
2025-09-24 15:04:23
353
原创 设计模式——行为型模式——命令模式详解
命令模式是一种将请求封装为对象的设计模式,通过解耦请求发送者和执行者来实现灵活性。该模式包含命令接口、具体命令类、接收者、调用者和客户端五个角色。其核心思想是将"请求"抽象为独立对象,支持撤销/重做、队列执行等扩展功能。优点是解耦性强、易于扩展,但可能导致命令类数量膨胀。典型应用包括遥控器、点餐系统等场景,本质是将请求对象化以支持存储、排队和撤销操作。
2025-09-24 14:51:10
400
原创 设计模式——行为型模式——责任链模式详解
责任链模式是一种设计模式,将多个处理对象连接成链,请求在链上传递直至被处理。该模式解耦了请求发送者与处理者,适用于动态确定处理对象的场景。结构包含抽象处理者、具体处理者和客户端三部分,通过setNext方法构建处理链。其优点是降低耦合、灵活组合,缺点可能产生未处理请求和性能问题。常见应用场景包括审批流程、投诉处理和日志过滤等。核心思想是"层层上报",使多个对象都有机会处理请求。
2025-09-24 14:37:29
268
原创 设计模式——行为型模式——迭代器模式详解
迭代器模式是一种行为设计模式,它提供统一接口顺序访问聚合对象中的元素,而不暴露其内部结构。该模式由抽象迭代器、具体迭代器、抽象聚合类和具体聚合类组成,核心思想是将遍历逻辑从集合中分离。Java内置了Iterator接口支持该模式。其优点在于封装集合实现、支持多种遍历方式,符合单一职责原则;缺点是增加了类数量,简单遍历可能稍复杂。该模式适用于需要顺序访问集合但不想暴露内部结构的场景,类比遥控器换台或书签翻书。一句话概括:迭代器模式是"用统一接口遍历不同集合"的设计方案。
2025-09-24 14:21:28
379
原创 设计模式——行为型模式——观察者模式详解
观察者模式是一种发布-订阅机制,当主题对象状态改变时,自动通知所有依赖的观察者对象。该模式包含主题(维护观察者列表)、观察者接口和具体实现类,适用于需要一对多通知的场景(如公众号推送)。Java曾内置支持但已弃用,建议改用事件机制。其优点是降低耦合度,支持广播通信;缺点是大量观察者时性能开销大。典型应用包括微信公众号、电商促销通知等。核心思想是"订阅号推送"机制,主题变动触发所有订阅者更新。
2025-09-24 14:08:30
227
原创 设计模式——行为型模式——模板方法模式详解
模板方法模式是一种行为设计模式,在抽象类中定义算法框架,将可变步骤延迟到子类实现。通过固定流程、开放具体实现,实现代码复用和扩展性。该模式包含抽象类(定义模板方法和抽象步骤)和具体子类(实现可变步骤),可配合钩子方法实现流程控制。优点包括封装不变部分、提高复用性、符合开闭原则,缺点是可能增加类数量和父类依赖。典型应用场景如固定流程的业务处理(数据解析、饮品制作等)。核心思想是"骨架固定,步骤可变",通过父类控制流程,子类定制细节。
2025-09-24 13:56:32
438
原创 设计模式——行为型模式——策略模式详解
策略模式是一种行为设计模式,通过封装算法使其可相互替换,实现算法的变化独立于客户端。它由策略接口、具体策略类和上下文环境类组成,适用于需要动态切换算法的场景。优点包括避免if-else判断、符合开闭原则和运行时灵活性;缺点是增加类数量且客户端需了解策略差异。现实类比如支付方式选择等。核心思想是将算法封装为可插拔组件,用组合代替条件判断。
2025-09-24 13:44:56
321
原创 设计模式——结构型模式——享元模式详解
享元模式是一种通过共享技术减少对象创建、降低内存消耗的设计模式。其核心是将对象状态分为内部状态(可共享)和外部状态(由客户端维护),适用于需要创建大量相似对象的场景。模式结构包含享元类、具体享元类、享元工厂和客户端,通过对象池管理共享对象。优点是可减少内存占用和提高性能,但会增加程序复杂性。现实类比包括共享单车、图书馆书籍等。简言之,享元模式通过"对象池+状态分离"实现高效对象复用。
2025-09-24 13:35:13
306
原创 设计模式——结构型模式——组合模式详解
组合模式是一种结构型设计模式,用于将对象组织成树形结构,使客户端能够统一处理单个对象和组合对象。该模式包含抽象组件、叶子节点和容器节点三个核心角色,适用于文件系统、组织架构等整体-部分层次结构场景。优点包括统一接口、符合开闭原则和便于构建复杂结构,缺点是设计抽象且区分节点类型不够灵活。通过树形结构的统一处理机制,组合模式实现了整体和部分的透明操作。
2025-09-24 13:11:40
373
原创 设计模式——结构型模式——桥接模式详解
桥接模式是一种结构型设计模式,通过将抽象部分与实现部分分离,使它们能够独立变化。该模式通过组合代替继承,有效解决多维度扩展导致的类爆炸问题。核心结构包括抽象类、扩展抽象类、实现接口和具体实现类。桥接模式适用于系统需要解耦多个独立变化维度的场景,优点在于降低耦合度、减少类数量,但会增加设计的复杂性。典型应用场景如支付系统、笔与颜色组合等。相比适配器、装饰器等模式,桥接模式的核心价值在于处理多维度解耦问题。
2025-09-24 12:58:21
404
原创 设计模式——结构型模式——外观模式详解
外观模式是一种简化复杂系统的设计模式,它通过提供一个统一的高层接口来封装子系统中的复杂调用。这种模式适用于需要简化客户端调用、屏蔽底层细节或构建分层结构的场景。其核心结构包括外观类(Facade)、子系统类和客户端三部分,典型应用如电脑的一键启动/关机功能。外观模式的优点在于降低学习成本、减少系统耦合,但可能增加代码量并限制客户端灵活性。与其他模式相比,外观模式专注于"简化入口"的功能,类似于医院挂号窗口或旅行社的一站式服务。
2025-09-24 12:36:14
339
原创 设计模式——结构型模式——代理模式详解
代理模式通过代理对象间接访问目标对象,在访问前后可附加额外逻辑(如权限校验、日志、缓存等)。分为静态代理(编译时确定,需手动编写代理类)和动态代理(运行时生成,含JDK基于接口和CGLIB基于继承两种方式)。优点在于灵活控制访问、降低耦合、支持AOP扩展,但会增加系统复杂度。类比现实中的律师、经纪人或中介角色,核心区别在于:适配器解决接口不兼容,装饰器动态增强功能,而代理侧重访问控制。典型应用场景包括远程调用、延迟加载等。
2025-09-24 11:16:01
420
原创 设计模式——结构型模式——装饰器模式详解
装饰器模式是一种动态扩展对象功能的结构型设计模式,通过"包装"方式在不修改原类的情况下添加职责。它包含抽象组件、具体组件、抽象装饰器和具体装饰器四个角色,以咖啡加料为例展示了多层装饰的实现方式。相比继承,装饰器模式更灵活,支持功能叠加,但会产生较多小类且调试难度增加。该模式适用于需要动态增强对象功能的场景,如咖啡加料、穿着搭配等。与适配器模式不同,装饰器模式专注于功能扩展而非接口兼容。
2025-09-24 11:03:23
390
原创 设计模式——结构型模式——适配器模式详解
适配器模式摘要(148字) 适配器模式通过接口转换解决类间兼容问题,本质是充当中间转换层(如插头转换器)。适用于复用现有类但接口不匹配的场景,符合开闭原则。分为: 类适配器(继承方式):适配器继承适配者类并实现目标接口,但受限于单继承; 对象适配器(组合方式✅推荐):通过持有适配者对象委托调用,更灵活。 优点包括提高复用性、避免修改原类;缺点是增加结构复杂度。核心思想是将不兼容接口转化为目标接口,类比"翻译官"角色。优先选择对象适配器实现。
2025-09-24 10:42:27
246
原创 设计模式——创建型模式——原型模式详解
摘要:原型模式是一种通过复制现有对象而非new实例化的创建型设计模式。其核心是避免复杂对象重复初始化,提供对象拷贝能力(分浅拷贝和深拷贝)。结构包含抽象原型、具体原型类和客户端三部分。浅拷贝仅复制基本类型字段而共享引用对象,深拷贝则完全独立复制所有对象。优点包括高效创建、简化过程和动态扩展,缺点是深拷贝实现复杂且需为每个类实现clone方法。
2025-09-24 10:10:26
286
原创 设计模式——创建型模式——建造者模式详解
建造者模式是一种将复杂对象的构建过程与表示分离的设计模式。它通过分步骤创建对象,解耦建造过程和具体产品,使同一构建过程可生成不同类型对象。该模式适用于需要创建包含多个组成部分且装配顺序固定的复杂对象场景。主要结构包括产品类、抽象建造者、具体建造者、指挥者和客户端。优点在于构建过程清晰、可生成不同产品、便于扩展;缺点是会增加类数量,不适合结构变化太大的产品。示例展示了如何使用建造者模式创建木屋和石屋两种不同类型的房屋。
2025-09-23 23:57:29
136
原创 设计模式——创建型模式——单例模式详解
单例模式是一种 创建型设计模式,它保证在整个系统运行期间,某个类 只存在唯一一个实例,并且提供一个全局访问点。
2025-09-23 23:46:09
308
原创 设计模式——创建型模式——简单工厂模式、工厂方法模式和抽象工厂模式详解
本文介绍了三种工厂设计模式:简单工厂、工厂方法和抽象工厂。简单工厂通过一个工厂类根据参数创建不同产品,但扩展性差;工厂方法为每种产品定义独立工厂,符合开闭原则;抽象工厂则创建一组相关产品族,保证产品一致性。三者区别在于:简单工厂集中管理所有产品,工厂方法分散到独立工厂,抽象工厂处理成套产品。表格对比了它们的适用场景,总结指出简单工厂适合产品少的情况,工厂方法便于扩展,抽象工厂维护产品族风格统一。
2025-09-23 23:31:31
260
原创 sentinel中使用热点规则时需要在controller层的方法中加入@SentinelResource的原因
sentinel中使用热点规则时需要在controller层的方法中加入@SentinelResource的原因
2023-03-05 11:24:45
541
原创 两只塔姆沃斯牛 The Tamworth Two
题目描述两只牛逃跑到了森林里。Farmer John 开始用他的专家技术追捕这两头牛。你的任务是模拟他们的行为(牛和 John)。追击在 10 \times 1010×10 的平面网格内进行。一个格子可以是:一个障碍物,两头牛(它们总在一起),或者 Farmer John。两头牛和 Farmer John 可以在同一个格子内(当他们相遇时),但是他们都不能进入有障碍的格子。一个格子可以是:. 空地;* 障碍物;C 两头牛;F Farmer John。这里有一个地图的例子:*…*……*…
2021-03-21 11:22:03
364
原创 高精度之乘法
题目描述求两数的积。输入格式两行,两个整数。输出格式一行一个整数表示乘积。输入输出样例输入 #112输出 #12说明/提示每个数字不超过 10^(2000) ,需用高精。代码如下:#include<iostream>#include<string>using namespace std;const int maxn = 10001;int a[maxn], b[maxn], c[maxn];int main() { string s1,
2021-03-20 15:45:34
217
1
原创 高精度之加法
听起来高精度名字还挺高大上的(嘿嘿),其实做其他并没有那么简单。对于加法的高精度个人认为使用字符串比使用数组好用写,不用那么麻烦考虑下标。所谓高精度加法就是用平时做加法的思想将其用程序模拟出来,好吧,直接上题:题目描述高精度加法,相当于a+b problem,不用考虑负数.输入格式分两行输入。a,b \leq 10^{500}a,b≤10500输出格式输出只有一行,代表a+ba+b的值输入输出样例输入11输出2输入10019099输出10100#include<
2021-03-20 15:05:04
320
原创 作业调度方案
题目描述我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。每个工件的每个工序称为一个操作,我们用记号j-k表示一个操作,其中j为1到n中的某个数字,为工件号;k为1到m中的某个数字,为工序号,例如2-4表示第2个工件第4道工序的这个操作。在本题中,我们还给定对于各操作的一个安排顺序。例如,当n=3,m=2时,“1-1,1-2,2-1,3-1,3-2,2-2”就是一个给定的安排顺序,即先安排第1个工件的第1个工序,再安排第
2020-12-30 20:33:40
737
1
原创 简单背包问题
题目描述设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,…wn。问能否从这n件物品中选择若干件放入背包中,使得放入的重量之和正好为S。如果有满足条件的选择,则此背包有解,否则此背包问题无解。输入输入数据有多行,包括放入的物品重量为s,物品的件数n,以及每件物品的重量(输入数据均为正整数)多组测试数据。输出对于每个测试实例,若满足条件则输出“YES”,若不满足则输出“NO”样例输入20 51 3 5 7 9样例输出YES思路: .
2020-12-04 16:13:13
1830
原创 Parallelepiped walk
废话不多说,直接上题=V=题目描述Two points A (x1, y1, z1) and B (x2, y2, z2) are placed on the surface of parallelepiped with dimensions (see figure 1). These two points can be linked with various curves lying on the surface of P. You are to find out the square of th.
2020-11-27 17:51:15
184
原创 求凸包面积
求凸包面积(分治法)求凸包面积的方式有很多,本次我所讲的是利用分支法来求解该题,其它就不在讲述~~(狗头)~~,大部分都了解分治法是讲大问题化成小问题求解,恰恰好这种求凸包面积很适合用分支法,个人觉得这样代码较短我们来看看问题...
2020-11-12 17:08:14
4131
10
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅