自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1795)
  • 资源 (50)
  • 收藏
  • 关注

原创 Python 从凸包中删除点(Deleting points from Convex Hull)

这篇文章介绍了如何计算点集的凸包以及在移除一个点后重新计算凸包的方法。主要内容包括: 使用分治算法计算初始点集的凸包 检查要移除的点是否属于当前凸包 如果属于,则移除该点后重新计算凸包 提供了Python实现代码示例,包含叉积计算和凸包构建函数 分析了算法的时间复杂度为O(qnlogn),其中q为要删除的点数 说明了空间复杂度为O(n) 文章还提供了编程语言Python实现凸包算法的参考。

2026-07-28 09:01:40 178

原创 Java 从凸包中删除点(Deleting points from Convex Hull)

本文介绍了如何通过分治算法求解点集的凸包,并处理移除某个点后的凸包更新问题。主要内容包括: 凸包求解算法: 使用分治法递归地将点集分割为更小的子集 对小于6个点的子集采用暴力算法直接求解 通过合并操作将子问题的解组合成最终凸包 移除点后的处理: 检查被移除点是否属于当前凸包 如果是则重新计算凸包,否则保持原凸包不变 提供了Java实现示例和复杂度分析 算法特性: 时间复杂度:O(n log n)构建凸包 空间复杂度:O(n) 包含完整的比较函数和几何运算实现 文中还提供了Java 语言的实现

2026-07-28 09:01:30 156

原创 C# 从凸包中删除点(Deleting points from Convex Hull)

本文介绍了如何利用分治算法求解点集的凸包问题,并处理删除单个点后的凸包更新。首先通过分治算法(时间复杂度O(nlogn))构建初始凸包,当需要删除点时,只需检查该点是否在凸包上:若在则重新计算凸包,否则原凸包不变。文中提供了C#实现代码,包含点集排序、凸包构建和更新等核心功能,并给出了示例输入输出。该算法适用于动态维护凸包场景,每次删除操作的最坏时间复杂度为O(nlogn),空间复杂度O(n)。文末还提供了JavaScript、C#、Python、Java和C++等语言的实现参考链接。

2026-07-27 08:48:54 273

原创 C++ 从凸包中删除点(Deleting points from Convex Hull)

本文介绍了一种计算点集凸包及删除点后重新计算凸包的算法。通过分治算法实现凸包计算,当删除的点属于原凸包时,重新构建凸包;否则保持原凸包不变。文章提供了C++实现代码,包含点集处理、凸包计算和删除点后的更新逻辑。算法时间复杂度为O(qnlogn),其中q为删除点数,空间复杂度为O(n)。适用于需要动态维护凸包的应用场景。

2026-07-27 08:48:38 276

原创 Cursor MCP 服务器完整设置指南

本文详细介绍了如何在Cursor IDE中配置MCP(模型上下文协议)服务器,以扩展其AI功能。主要内容包括: MCP服务器的作用:连接外部工具、数据库和API,实现网络搜索、GitHub集成、数据库访问等功能。 配置方法: 创建配置文件.cursor/mcp.json(项目级)或~/.cursor/mcp.json(全局) 提供JSON配置示例(本地/远程服务器) 推荐MCP服务器: Brave搜索、GitHub集成、PostgreSQL数据库等 每种服务器都配有具体配置示例和使用场景 Cursor与Cl

2026-07-25 09:39:34 454

原创 了解不同平台上的 MCP 服务器:Claude Desktop、VS Code 和 Cursor

本文介绍了在不同AI开发平台(ClaudeDesktop、VSCode和Cursor)中配置模型上下文协议(MCP)服务器的关键差异与方法。MCP服务器作为AI助手与外部系统交互的桥梁,其配置语法在各平台存在差异:VSCode使用"mcp":{...}格式,而ClaudeDesktop和Cursor使用"mcpServers":{...}。特别指出Cursor支持SSE远程连接而ClaudeDesktop受限,并提供了三种替代方案:本地命令执行、NPM包调用和Dock

2026-07-25 09:39:03 372

原创 Claude Code 和 MCP 服务器:或者说如何将你的终端变成一个超级强大的助手

本文介绍了使用ClaudeCode进行AI辅助开发的新方法。主要内容包括:1)ClaudeCode作为终端AI助手的安装和使用;2)MCP服务器的概念及其标准化、安全性和灵活性优势;3)Context7 MCP服务器如何获取最新文档避免API过时问题;4)ClaudeTaskMaster项目管理工具的任务分解和工作流管理;5)Playwright MCP实现自动化测试;6)DigitalOcean MCP简化部署流程。文章通过具体示例展示了从构思到生产的完整AI辅助开发流程,强调这些工具通过自动化重复任务和

2026-07-24 08:46:00 238

原创 Kimi K3 长文本之外的真实力,从多轮对话、逻辑推理到代码生成全面实测

KimiK3实测报告:超越长文本的全能表现 KimiK3在多轮对话、逻辑推理和代码生成等复杂任务中展现出突出实力。测试显示: 多轮对话:能精准定位50页文档细节,10轮追问准确率超90%,角色扮演连贯性优秀; 逻辑推理:因果分析深度佳,商业策略评估严谨,但抽象思维稍弱; 代码生成:Python/SQL/API调用实用性强,代码可读性高,复杂场景需优化。 优势:上下文记忆强、逻辑严谨、低“幻觉”率;不足:创意类任务和情感交互待提升。适合研究、编程辅助等场景,推荐作为深度分析工具使用。

2026-07-24 08:44:54 360

原创 如何将 Cursor MCP 与 VS Code 连接

本文介绍了如何通过Composio将Cursor与VSCode集成,实现AI驱动的自动化工作流。Composio提供单端点访问1000+应用、程序化工具调用和动态加载所需工具等功能。集成步骤包括一键安装或手动配置MCP端点,完成授权后即可在VSCode中使用Cursor相关功能。成功连接后,还可扩展集成日历、Slack等应用,构建端到端的跨应用工作流。该方案能有效减少人工操作,提升开发效率。

2026-07-23 09:04:16 266

原创 幕后揭秘:Codegen 如何为 Claude、Cline 和 Cursor 集成 MCP

Codegen通过支持模型上下文协议(MCP)实现了与主流AI编码助手(Cline、ClaudeDesktop和Cursor)的深度集成。MCP作为AI领域的标准化通信协议,使开发者能够直接在开发环境中触发Codegen的功能,实现多文件重构、测试套件运行等复杂操作。该集成支持stdio和HTTP传输协议,内置CLI功能并提供详细文档,显著减少上下文切换,提升开发效率。这一进步标志着AI代理正从辅助工具转变为深度集成的开发伙伴,为企业级工作流提供了可扩展的智能编程解决方案。

2026-07-23 09:04:07 303

原创 探索人工智能驱动的编码:在 Cursor、Claude Code 和 Codex 中使用 Xcode 26.3 MCP 工具

本文介绍了如何通过MCP协议将Xcode的AI工具与外部客户端(如Cursor、Claude CLI等)连接使用。主要内容包括:1. 前提条件:在Xcode中启用MCP服务器;2. 三种配置方法(一键安装/GUI/JSON);3. Xcode 26.3 RC1的已知限制及解决方案;4. Xcode提供的20个原生MCP工具及其功能;5. 高级配置选项和注意事项。文章还揭示了苹果开放此功能背后的生态整合意图,为开发者提供了连接Xcode与第三方工具的新思路。

2026-07-22 08:38:13 905

原创 JavaScript 利用分治算法求凸包(Convex Hull using Divide and Conquer Algorithm)

本文介绍了计算几何中凸包的概念及其应用,重点阐述了分治算法求解凸包的实现方法。凸包作为包含点集的最小凸多边形,在碰撞检测、图像处理和数据可视化等领域具有重要价值。文章详细描述了分治算法的步骤:先对点集排序,然后递归分割直至点数足够少时采用暴力算法求凸包,最后通过寻找上下切线合并左右凸包。作者提供了JavaScript实现代码,并分析了算法的时间复杂度为O(n logn)。针对特殊情况下可能出现的无限循环问题,文章建议当点数≤5时直接计算凸包。该方法有效解决了凸包计算问题,具有较高的实用价值。

2026-07-22 08:37:40 216

原创 Python 利用分治算法求凸包(Convex Hull using Divide and Conquer Algorithm)

本文介绍了计算几何中凸包的概念及其应用,重点讲解了分治算法求解凸包的实现方法。凸包是包含给定点集的最小凸多边形,在碰撞检测、图像处理和数据可视化等领域有重要应用。文章详细阐述了分治算法的步骤:将点集递归分割,对小于5个点的子集使用暴力算法求解,再通过寻找上下切线合并左右子集的凸包。提供了完整的Python实现代码,包括比较函数、方向判断和合并算法等关键部分。该算法的时间复杂度为O(n logn),空间复杂度为O(n)。文章最后展示了算法在示例点集上的运行结果。

2026-07-21 08:44:42 330

原创 Java 利用分治算法求凸包(Convex Hull using Divide and Conquer Algorithm)

本文介绍了计算几何中凸包的概念及其应用,包括碰撞检测、图像处理和数据可视化。重点阐述了分治算法求凸包的实现方法:将点集递归分割后合并左右凸包,通过寻找上下切线确定最终凸包。文章提供了Java实现代码,时间复杂度为O(nlogn),适用于少量点集时采用暴力算法处理。最后展示了算法测试结果及输出示例。

2026-07-21 08:44:31 278

原创 C# 利用分治算法求凸包(Convex Hull using Divide and Conquer Algorithm)

本文介绍了计算几何中凸包的概念及其应用,重点阐述了分治算法求解凸包的实现方法。文章首先说明了凸包在碰撞检测、图像处理和数据可视化等领域的重要性,然后详细描述了分治算法的步骤:将点集分割递归求解子集凸包,再通过寻找上下切线合并左右凸包。作者提供了C#实现代码,通过排序点和计算上下包来构建凸包,并分析了算法的时间复杂度为O(n*logn)。最后指出当点数较少时采用暴力算法,并解决了可能出现的无限循环问题。

2026-07-20 09:06:43 292

原创 C++ 利用分治算法求凸包(Convex Hull using Divide and Conquer Algorithm)

本文介绍了计算几何中的凸包概念及其应用。凸包是包含给定点集的最小凸多边形,在碰撞检测、图像处理和数据可视化等领域有重要作用。文章重点阐述了使用分治算法求解凸包的方法:将点集递归分割,对少量点使用暴力算法(时间复杂度O(n³))求凸包,再通过寻找切线合并左右子集的凸包。算法实现包括确定上下切线、合并凸包等关键步骤,整体时间复杂度为O(nlogn)。文末提供了C++代码示例,展示了如何计算给定点集的凸包。

2026-07-20 09:06:30 391

原创 C# 将逗号分割的字符串转换为long,并添加到List<long>

本文介绍了在C#中将逗号分隔的数字字符串转换为List<long>的三种方法: 基础方法:使用Split分割字符串,配合Convert.ToInt64转换; LINQ简化:通过Select(long.Parse)和ToList()一行代码完成转换; 异常处理(推荐):利用long.TryParse安全转换,避免无效输入导致程序崩溃。 每种方法均附代码示例,推荐使用第三种方式增强健壮性。适用于需要处理用户输入或外部数据的场景。

2026-07-18 09:14:18 366

原创 KMP全栈开发,从Android到AI Agent,KotlinConf 2026后KMP全面进化,用Koog框架让Kotlin写Agent不再依赖Python服务

【摘要】Kotlin多平台开发(KMP)正转向全栈AI开发范式,Koog框架实现原生Kotlin编写Agent,解决Python方案的三大痛点:IPC延迟、类型不安全性和环境部署复杂。Koog采用声明式AI流程设计,支持协程与本地模型加载,提供类型安全接口,并给出移动端内存优化方案。开发者可沿"本地→服务端→多Agent协同"三阶段进阶,建议关注ONNX运行时和单元测试。Kotlin正从移动开发语言进化为全栈AI基础设施语言。

2026-07-18 09:13:47 344

原创 VS Code Git工作树,多分支并行开发体验,新版VS Code支持通过Git工作树同时检出多个分支,无需频繁切换即可并行开发;本文分享一些多分支协同开发配置方案

VSCode的Git Worktree功能是多分支开发神器,允许在不同文件夹同时检出多个分支,无需提交或暂存当前代码。文章介绍了核心概念、配置方法和优化方案:1)使用命令创建并行分支工作树;2)通过Peacock插件颜色标记区分分支;3)配合GitLens跨分支对比代码;4)管理.gitignore避免配置冲突。还提供了避坑指南和自动化脚本示例,实现真正的并行开发自由,显著降低多任务切换成本。

2026-07-17 08:47:14 387

原创 MCP协议开发实战,从零搭建AI Agent工具链,7月28日MCP正式规范发布,手把手教你用无状态架构搭建属于自己的AI Agent服务器

摘要: ModelContextProtocol(MCP)的发布革新了AIAgent开发范式,通过标准化接口实现AI模型与外部工具的无缝连接。MCP采用无状态架构,支持弹性扩展和安全隔离,开发者可快速构建工具服务器(如Python示例中的运维查询功能),供Claude等AI直接调用。关键优势在于“一次开发,多平台复用”,同时需注意权限控制与资源分类(Tools/Resources)。MCP推动AIAgent向基础设施演进,为运维自动化和开发者生态标准化开辟新路径。

2026-07-17 08:47:02 342

原创 AI Agent可观测性,破解多步推理黑盒,Fedora目录删除事件敲响警钟,用Langfuse/Opik追踪Agent每一步推理,让你的AI不再“裸奔“

文章摘要:随着AI Agent能力提升,其"黑盒化"引发的操作风险日益凸显(如Fedora目录误删事件)。核心解决方案是通过Langfuse和Opik实现全链路追踪:1)记录输入输出;2)结构化日志审计高风险操作;3)保存中间状态快照。建议建立分级执行机制,对写/删操作加入人工确认环节,并通过异步追踪降低性能损耗。这些"审计戳"技术能有效重现AI决策过程,防止灾难性错误,是企业级AI应用的安全底线。

2026-07-16 08:52:38 428

原创 GitHub Actions自动化运维实战,用CI/CD流水线实现测试、部署、安全扫描一体化

本文介绍了如何利用GitHub Actions构建一体化CI/CD流水线,实现从代码提交到部署的全流程自动化。文章提供了标准工作流模板,包含测试、安全扫描和部署三个阶段,重点讲解了静态代码扫描(Semgrep)、依赖漏洞检测(Snyk)和容器安全扫描(Trivy)等关键环节。同时分享了4个实用技巧:1)安全密钥管理;2)缓存优化构建速度;3)高危漏洞中断机制;4)多环境矩阵测试。最后从运维角度提出优秀流水线的4个标准:快速失败、原子化部署、可观测性和环境隔离。建议开发者循序渐进地完善自动化流程,最终实现安全

2026-07-16 08:52:28 641

原创 C# 将List<long>转换为object[]

本文介绍了在C#中将List<long>转换为object[]的三种方法:1)使用LINQ的Cast<object>().ToArray()方法,这是最简洁的方式;2)直接调用ToArray()方法,但需要注意返回的是long[];3)手动遍历转换,效率较低但展示了基本原理。文章建议优先使用第一种LINQ方法,因其代码简洁高效。每种方法都配有完整示例代码,便于理解实现过程。

2026-07-15 08:31:49 389

原创 JavaScript 两个凸多边形之间的切线(Tangents between two Convex Polygons)

本文提出了一种计算两个凸多边形之间上切线和下切线的算法。通过首先确定多边形的最右和最左点,算法采用逐步调整的方法:当连接线穿过多边形时,按照特定方向移动顶点直到找到不穿过的切线。文中提供了完整的JavaScript实现,包括点的排序、方向判断等辅助函数,并以具体示例展示了如何找到连接点(0,1)和(3,3)的上切线。该算法时间复杂度为O(nlogn),空间复杂度为O(1)。

2026-07-15 08:31:25 275

原创 Python 两个凸多边形之间的切线(Tangents between two Convex Polygons)

这篇文章介绍了如何计算两个凸多边形之间的上下切线。主要思路是通过比较多边形顶点坐标来确定切线连接点。算法首先找到多边形A的最右点和多边形B的最左点,然后通过调整连接直线使其不穿过任何多边形来确定最终切线。文章提供了详细的实现步骤和Python代码示例,包括计算方向、比较顶点位置等核心函数。时间复杂度为O(nlogn),适用于处理凸多边形的切线问题。

2026-07-14 08:58:16 292

原创 Java 两个凸多边形之间的切线(Tangents between two Convex Polygons)

本文提出了一种计算两个凸多边形上下切线的算法。通过确定多边形的最右和最左点,并迭代调整连接线直至不穿过多边形边界,最终得到上下切线。算法时间复杂度为O(n1log(n1)+n2log(n2)),适用于任意凸多边形。文中给出了Java实现示例,以两个具体多边形为例,成功计算出上切线为(0,1)-(3,3)的连接线。该算法在计算几何领域具有重要应用价值。

2026-07-14 08:58:06 256

原创 C# 两个凸多边形之间的切线(Tangents between two Convex Polygons)

本文介绍了一种计算两个凸多边形之间上下切线的算法。算法通过比较多边形顶点位置关系,动态调整连接线段,最终找到不穿过任何多边形的切线。关键步骤包括:1)确定初始连接线;2)根据线段与多边形的位置关系调整顶点;3)通过方向判断优化切线位置。示例给出了具体实现代码,展示了如何找到连接点(0,1)和(3,3)的上切线,以及(0,-2)和(4,0)的下切线。该算法时间复杂度为O(nlogn),适用于计算几何中的多边形分析问题。

2026-07-13 08:27:07 263

原创 C++ 两个凸多边形之间的切线(Tangents between two Convex Polygons)

本文介绍了计算两个凸多边形上下切线的算法。通过确定多边形的最右点和最左点作为初始连接线,然后根据直线与多边形的相交情况动态调整连接点,最终找到不穿过任何多边形的切线。算法核心是利用方向判断和循环调整点位置,时间复杂度为O(nlogn)。示例中给出了上切线连接点(0,1)和(3,3)的具体实现过程,该方法同样适用于求下切线。

2026-07-13 08:26:56 349

原创 mysql 使用 CONCAT() 或者 CONCAT_WS() 函数将两列数据拼接在一起

本文介绍了MySQL中两种字符串拼接方法:CONCAT()函数直接连接多个字符串,而CONCAT_WS()允许指定分隔符。文章通过员工姓名拼接示例,展示了如何将first_name和last_name合并为full_name(带/不带分隔符),并提醒修改数据时需谨慎。最后提供了UPDATE语句示例,强调测试环境与正式环境的区别。

2026-07-11 09:55:01 336

原创 mysql 使用逗号拼接一列数据

MySQL中使用GROUP_CONCAT函数可将多行列值合并为逗号分隔字符串。基本语法为SELECT GROUP_CONCAT(column_name SEPARATOR ',') FROM table_name。示例展示了合并员工部门名称的用法,并介绍了三个注意事项:默认1024字符长度限制可通过group_concat_max_len调整;支持WHERE条件过滤;可用GROUP BY实现分组聚合。文末附有互动请求。摘要完整保留了核心技术内容和使用要点,去掉了非技术性语句。

2026-07-11 09:54:29 407

原创 Cursor安全插件链,代码审计新范式,基于Cursor构建实时SAST/DAST辅助分析工作流,强化开发安全左移

本文探讨了在AI编程时代如何通过Cursor构建实时安全审计插件链,实现"安全左移"。文章提出三层架构模型:IDE实时扫描层、AI增强分析层和CI/CD集成反馈层,并详细演示了从规则引擎部署到DAST反馈的闭环工作流。重点介绍了Semgrep工具集成、ContextualPrompting安全审计和DAST/IAST联动等关键技术,强调通过将安全规则融入AI思维模型,在编码阶段预防漏洞。最后提出企业级落地的三大保障措施,包括AI安全护栏、强制规则检查和漏洞归档系统,最终实现"安

2026-07-10 08:40:06 344

原创 Claude Code离线安装方案揭秘,企业内网、无外网场景下,本地化部署与依赖包打包实践

企业内网ClaudeCode离线部署指南 在无外网环境下部署ClaudeCode需构建完整的离线镜像环境,核心包括:1)搭建私有制品仓库(NPM/PyPI/Docker镜像);2)迁移二进制工具链(Node.js/Rust/Python);3)适配内网配置(API重定向、证书信任)。关键步骤包括依赖包预下载打包(通过pip download和npm install)、二进制文件兼容性检查(ldd验证库文件),以及通过环境变量屏蔽遥测和解决SSL证书问题。建议优先采用Docker镜像封装方案(docker s

2026-07-10 08:39:49 404

原创 开源项目在GitHub上的破圈方法论,解析Star增长、Issue响应、Contributor引导等真实运营技巧

开源项目破圈实战方法论:从技术到社区的运营闭环 成功的开源项目需要构建"流量-留存"正循环。核心策略包括:1)README视觉化呈现,通过Demo GIF和精准定位吸引5秒注意力;2)建立自动化Issue响应机制,用Stale Bot保持仓库活跃度;3)设置Good First Issue降低贡献门槛,通过贡献者墙培养社区归属感。关键要避免刷Star等虚假增长,而应聚焦真实互动——用及时反馈构建信任飞轮,将用户转化为布道者。破圈本质是建立"展示专业度-降低参与成本-给予正向反馈

2026-07-09 08:42:09 315 1

原创 在CSDN踩过的技术坑,真实运维、开发、AI实战避坑指南,少走弯路,代码更稳

本文是一篇针对技术开发者的"CSDN避坑指南",总结了11个常见的技术陷阱:1)盲目复制过时配置;2)轻信SEO垃圾文;3)执行未经测试的一行命令;4)忽略环境上下文;5)轻信AI生成代码;6)使用硬编码密码;7)只学快餐教程不学原理;8)滥用危险运维指令;9)盲信技术推荐榜单;10)忽视代码质量导致技术负债。作者建议开发者养成验证习惯、优先查阅官方文档、保持批判思维,并注重代码质量和架构稳定性。最后强调要少做"代码搬运工",多当"问题解构者"。

2026-07-09 08:41:49 332

原创 在ASP.NET Core中ActionFilterAttribute的OnActionExecuting方法中获取请求参数

本文介绍了三种在ASP.NET Core中获取请求参数的方法:1. 使用ActionExecutingContext通过HttpContext直接访问查询字符串、表单和路由数据;2. 通过依赖注入IHttpContextAccessor在IActionFilter实现中灵活获取请求参数;3. 直接在控制器方法参数中获取(不推荐用于过滤器场景)。作者推荐使用方法2,因其提供了更灵活解耦的HTTP上下文访问方式。文章最后邀请读者收藏、点赞和评论。

2026-07-08 08:33:00 809

原创 JavaScript 凸包的快速凸包算法(Quickhull Algorithm for Convex Hull)

本文介绍了计算凸包的算法及其实现。凸包是包含所有给定点的最小凸多边形,文中通过示例展示了输入点集及其对应的凸包输出结果。重点介绍了QuickHull分治算法,其思路类似快速排序,通过递归处理点集来构建凸包。文章提供了JavaScript实现代码,包括核心函数findSide、lineDist和quickHull,并分析了算法的时间复杂度(平均O(nLogn),最坏O(n²))和空间复杂度(O(n))。此外还列出了Jarvis算法和Graham扫描法的相关资源链接。

2026-07-08 08:32:45 284

原创 Python 凸包的快速凸包算法(Quickhull Algorithm for Convex Hull)

本文介绍了计算凸包的几种算法,重点讲解了QuickHull分治算法。凸包是包含所有给定点的最小凸多边形,至少需要3个点才能构成。文章通过示例演示了凸包计算结果,并详细说明了QuickHull算法的实现步骤:1)找到x坐标最小和最大的点;2)递归处理分割区域;3)保留距离最远的点作为凸包顶点。提供了Python实现代码,时间复杂度平均为O(nlogn),最坏情况下为O(n²)。文章还列出了Jarvis算法和Graham扫描法的相关资源链接。

2026-07-07 08:31:44 269

原创 Java 凸包的快速凸包算法(Quickhull Algorithm for Convex Hull)

本文介绍了凸包问题的几种算法,重点分析了QuickHull分治算法。通过示例展示了凸包的计算过程,当点数不足3个时无法构成凸包。文章详细阐述了QuickHull的实现步骤:找到极值点划分区域,递归处理子问题,排除三角形内部点。提供了完整的Java实现代码,使用快速排序处理点集,时间复杂度平均O(nlogn),最坏O(n²)。最后列出了Jarvis算法和Graham扫描法的相关资源链接。

2026-07-07 08:31:28 305

原创 C# 凸包的快速凸包算法(Quickhull Algorithm for Convex Hull)

本文介绍了计算点集凸包的算法,重点讲解了QuickHull分治算法。凸包是包含所有给定点的最小凸多边形,当点少于3个时无法构成。QuickHull算法通过递归地将点集分割并找到距离边界最远的点来构建凸包,其平均时间复杂度为O(nlogn),最坏情况为O(n²)。文中提供了C#实现代码示例,演示了如何找到输入点集的凸包顶点,并给出了Jarvis算法和Graham扫描法的相关资源链接。该算法在计算几何中有广泛应用,如模式识别和图像处理等领域。

2026-07-06 08:27:51 404

原创 C++ 凸包的快速凸包算法(Quickhull Algorithm for Convex Hull)

本文介绍了计算平面点集凸包的几种算法,重点讲解了QuickHull分治算法。该算法通过递归地寻找距离边界线最远的点来构建凸包,类似于快速排序的划分过程。文中提供了C++实现代码示例,并分析了算法的时间复杂度(平均O(nlogn),最坏O(n²))和空间复杂度(O(n))。同时列出了Jarvis算法和Graham扫描法的多语言实现参考链接,以及快速排序算法的相关资源。文章最后给出了点集输入输出示例,并说明至少需要3个点才能构成凸包。

2026-07-06 08:27:40 264

PHP API 客户端, deepseek API 交互 deepseek-php-client-2.0.3

PHP API 客户端,deepseek API 交互 deepseek-php-client-2.0.3,特点如下: 无缝 API 集成:DeepSeek 的 AI 功能的 PHP 接口。 流畅的构建器模式:可链接的方法,用于直观的请求构建。 符合:符合 PSR-18 的 HTTP 客户端集成。 模型灵活性:支持多种 DeepSeek 模型(Coder、Chat 等)。 流式传输就绪:内置对实时响应处理的支持。 许多 Http 客户端:易于使用Guzzle http client(默认),或symfony http client。 框架友好:可用 Laravel 和 Symfony 包。

2025-03-06

TypeScript 中的 WebSocket 入门

TypeScript 中的 WebSocket 入门,WebSockets 是一种行业标准方式,允许客户端和服务器实时交换消息,而无需刷新页面或轮询更改。它们通常用于同时向大量接收者广播相同的数据(消息),支持流式传输实时比分更新、发送交通更新、分发通知或新闻警报以及传输实时财务信息(如股票报价和市场更新)等用例。WebSocket API是一项先进的技术,它能够在用户浏览器和服务器之间建立双向交互式通信会话。使用此 API,您可以向服务器发送消息并接收事件驱动的响应,而无需轮询服务器以获取回复。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/148898191

2025-06-25

使用 .NET Core 和 SignalR 构建实时聊天服务-聊天客户端(前端)

使用 .NET Core 和 SignalR 构建实时聊天服务-聊天客户端(前端),实时通信是现代应用程序的必备功能。无论是在 Messenger、WhatsApp 还是 Microsoft Teams 等平台上聊天,实时消息传递已成为我们生活中不可或缺的一部分。这些平台不仅支持消息传递,还提供音频和视频通话等高级功能。重点介绍如何为一个实时聊天应用创建后端服务。该应用允许用户注册、创建聊天室,并分享房间 ID 或 URL 与他人进行群组对话。虽然使用了 ReactJS(主要由 ChatGPT 生成)来测试后端,但示例的重点在于后端开发。 文章参考:https://blog.csdn.net/hefeng_aspnet/article/details/148610920 后端参考:https://download.csdn.net/download/hefeng_aspnet/90985964

2025-06-12

使用 .NET Core 和 SignalR 构建实时聊天服务-聊天服务(后端)

使用 .NET Core 和 SignalR 构建实时聊天服务-聊天服务(后端),实时通信是现代应用程序的必备功能。无论是在 Messenger、WhatsApp 还是 Microsoft Teams 等平台上聊天,实时消息传递已成为我们生活中不可或缺的一部分。这些平台不仅支持消息传递,还提供音频和视频通话等高级功能。重点介绍如何为一个实时聊天应用创建后端服务。该应用允许用户注册、创建聊天室,并分享房间 ID 或 URL 与他人进行群组对话。虽然使用了 ReactJS(主要由 ChatGPT 生成)来测试后端,但示例的重点在于后端开发。 文章参考:https://blog.csdn.net/hefeng_aspnet/article/details/148610920 前端参考:https://download.csdn.net/download/hefeng_aspnet/90985960

2025-06-12

使用 .NET Core 7 SignalR 构建实时聊天应用程序

使用 .NET Core 7 SignalR 构建实时聊天应用程序,实时通信已成为现代 Web 应用程序不可或缺的一部分。无论您构建的是聊天应用程序、协作工作区还是实时仪表板,都需要一种可靠且高效的方式来实时发送和接收消息。SignalR 正是为此而生。SignalR 是 ASP.NET Core 的实时通信库。它允许您构建实时 Web 应用程序,这些应用程序可以在消息可用时立即将消息推送到客户端。SignalR 使用 WebSocket 作为默认传输协议,但它也可以使用其他传输协议,例如服务器发送事件 (SSE) 和长轮询。向您展示如何使用.NET Core 7 和SignalR构建实时聊天应用程序。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/148610585

2025-06-12

.NetCore 8.0 反射与源生成器(Reflection vs Source Generators)

.NetCore 8.0 反射与源生成器(Reflection vs Source Generators),探讨了两种将CSV数据映射到类属性的方法:传统反射法和现代源生成器技术。反射方法通过读取CSV标题匹配类属性实现自动映射,但存在性能开销;源生成器则在编译时生成映射代码,显著提升处理速度(比反射快2倍以上)并减少内存消耗(仅用三分之一)。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/148474206

2025-06-06

postgis测试数据库 科罗拉多州百年一遇的洪泛区 包含 kmz、geojson、shapefile

postgis测试数据库 科罗拉多州百年一遇的洪泛区 包含 kmz、geojson、shapefile。GIS 数据在许多行业中主要用于制图和空间分析。GIS 数据的主要类型是栅格和矢量。栅格文件是具有定义分辨率的连续网格数据,通常存储为 .tiff、.jpeg、.bmp 或 .png。矢量文件可以是点、线或多边形特征。最常见的是,它们存储为 Shapefile,但也可以是 GeoJSON、KML、GML、TIGER 或嵌套在地理数据库 (GDB) 中。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/146397273

2025-03-20

该项目是一个轻量级 AI 代理,利用 Deepseek LLM 在本地运行并与 Spring Boot 集成

该项目是一个轻量级 AI 代理,利用 Deepseek LLM 在本地运行并与 Spring Boot 集成,将DeepSeek LLM 与 Spring Boot集成,从而实现实时 AI 响应,而无需依赖昂贵的基于云的 API。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/146062440

2025-03-06

deepseek java sdk deepseek4j-1.4.5

deepseek java sdk deepseek4j-1.4.5,包含源码及deepseek4j-1.4.5-示例-0.0.1-SNAPSHOT.jar包。

2025-03-06

.NET 9.0 中 DeepSeek 模型入门示例

.NET 9.0 中 DeepSeek 模型入门示例,得益于 Microsoft.Extensions.AI 库,构建利用新 DeepSeek R1 模型的应用程序变得非常简单。 事实上,使用 MEAI 可以直接使用任何模型,无论它托管在 GitHub Models、Azure AI Foundry 中,还是在 Ollama 中本地运行。 这就是这个示例代码的全部内容 - 使用 MEAI 构建一个快速的 .NET 控制台来访问 DeepSeek R1 模型。

2025-03-06

DeepSeek API 的 Python 客户端

DeepSeek API 的 Python 客户端,一个功能丰富的 Python 客户端,用于与 DeepSeek 强大的语言模型进行交互,支持同步和异步操作。

2025-03-06

使用 PHP Deepseek 实现问答 ask-deepseek

使用 PHP Deepseek 实现问答 ask-deepseek,本地运行 deepseek 可选,ollama 运行 deepseek-r1:1.5b

2025-03-06

C++ 基础知识了解、学习及源代码案例分享

C++ 基础知识了解、学习及源代码案例分享,掌握默认构造函数、构造函数重载、默认析构函数、析构函数重载、复制构造函数重载、赋值构造函数重载,掌握主要运算符+、-、*、/、前后置++、+= 等重载,学会 new/delete 函数重载,对比以下两种实现区别:当 new/delete被声明为私有函数时,类只能被实例化为栈对象,而不能实例化在堆内存。掌握继承、STL 六大组件等。

2025-03-05

C语言比较全面的经典源代码示例包含220个例子

C语言比较全面的经典源代码示例包含220个例子,包含: 002.运行多个源文件 011.模拟ATM(自动柜员机)界面 023.指向数组的指针 034.用“结构”统计学生成绩 044.冒泡排序 052.背包问题 054.链表操作(1) 064.哈夫曼编码 067.求解最优交通路径 074.K阶斐波那契序列 086.爱因斯坦的数学题 095.奇数平方的有趣性质 103.兔子产子(菲波那契数列) 108.递归整数四则运算 113.实矩阵乘法运算 115.n阶方阵求逆 122.绘制圆弧 128.金刚石图案 136.绘制正多边形 138.正方形螺旋拼块图案 144.绘制布朗运动曲线 147.VGA256色模式编程 152.利用图形页实现动画 155.读取DOS系统中的国家信息 165.获取BIOS设备列表 167.备份恢复硬盘分区表 168.设计口令程序 170.水果拼盘 173.求解符号方程 181.求解三角方程 184.奇数方差 185.统计选票 190.统计最高成绩 195.括号匹配 207.商人过河游戏 216.五子棋游戏 219.图书管理系统 220.进销存管理系统 等示例具体看源码

2025-03-05

deepseek java sdk deepseek4j-1.4.3

deepseek java sdk deepseek4j-1.4.3,包含源码及deepseek4j-1.4.3-示例-0.0.1-SNAPSHOT.jar包。

2025-03-07

deepseek java sdk deepseek4j-1.3.2

deepseek java sdk deepseek4j-1.3.2,包含源码

2025-03-07

Windows 解压版 PostgreSQL16.8-1

Windows 解压版 PostgreSQL16.8-1,参考文章: https://blog.csdn.net/hefeng_aspnet/article/details/146334763 https://blog.csdn.net/hefeng_aspnet/article/details/146338962 https://blog.csdn.net/hefeng_aspnet/article/details/146339729 对应PostGIS解压版地址:https://download.csdn.net/download/hefeng_aspnet/90492842

2025-03-18

Windows 解压版 PostgreSQL16.8-1 对应 PostGIS 3.5.2

Windows 解压版 PostgreSQL16.8-1 对应 PostGIS 3.5.2,Windows 解压版 PostgreSQL16.8-1与PostGIS 3.5.2安装,参考文章: https://blog.csdn.net/hefeng_aspnet/article/details/146334763 https://blog.csdn.net/hefeng_aspnet/article/details/146338962 https://blog.csdn.net/hefeng_aspnet/article/details/146339729 对应PostgreSQL16.8-1解压版地址:https://download.csdn.net/download/hefeng_aspnet/90492835

2025-03-18

python 强大的混合专家 (MoE) 语言模型 DeepSeek-V3

python 强大的混合专家 (MoE) 语言模型 DeepSeek-V3,DeepSeek-V3,这是一个强大的混合专家 (MoE) 语言模型,总共有 671B 个参数,每个 token 激活 37B。为了实现高效的推理和经济高效的训练,DeepSeek-V3 采用了多头潜在注意力 (MLA) 和 DeepSeekMoE 架构,这些架构在 DeepSeek-V2 中得到了彻底的验证。此外,DeepSeek-V3 开创了一种无辅助损失的负载平衡策略,并设置了多 token 预测训练目标以获得更强大的性能。在 14.8 万亿个多样化和高质量的 token 上对 DeepSeek-V3 进行了预训练,然后进行监督微调和强化学习阶段,以充分利用其功能。综合评估表明,DeepSeek-V3 优于其他开源模型,并实现了与领先的闭源模型相当的性能。尽管性能出色,但 DeepSeek-V3 仅需要 2.788M H800 GPU 小时即可完成完整训练。此外,它的训练过程非常稳定。在整个训练过程中,没有遇到任何无法恢复的损失峰值或执行任何回滚。

2025-03-06

使用纯 C++ 对 DeepSeek 系列大型语言模型进行 CPU 推理

使用纯 C++ 对 DeepSeek 系列大型语言模型进行 CPU 推理,这是基于Yet Another Language Model用 C++ 编写的 DeepSeek 系列大型语言模型的仅限 CPU 的推理实现。

2025-03-06

ASP.NET Core:使用 JavaScript 加密并在控制器中解密

ASP.NET Core:使用 JavaScript 加密并在控制器中解密,介绍了在ASP.Net Core中使用CryptoJS实现AES加密解密的完整流程。前端通过CryptoJS库进行加密(ECB模式、PKCS7填充),后端控制器使用相同密钥进行解密。包含完整的代码示例,包括控制器中的解密方法、视图中的加密JavaScript实现,以及前后端密钥同步的细节。这种方案适用于需要在客户端加密敏感数据再传输到服务器的场景,提供了基本的数据安全保障。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/157470160

2026-01-28

ASP.NET 8 - Cookie 身份验证

ASP.NET 8 - Cookie 身份验证,介绍了Cookie在网络环境中的作用及其在.NET8中的实现方法。Cookie用于存储用户信息,实现身份识别和个性化体验。详细讲解了ASP.NET Core WebAPI中配置Cookie认证的步骤,包括安装必要包、创建用户实体、配置DbContext以及实现登录服务。重点说明了Cookie安全设置(HttpOnly、SecurePolicy、SameSite等)和生命周期管理,并提供了生成Cookie和实现认证控制器的完整代码示例。最后展示了如何通过Swagger测试登录功能及验证Cookie的安全属性。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/157468879

2026-01-28

ASP.NET Core 中的依赖注入

ASP.NET Core 中的依赖注入,什么是 ASP.NET Core 中的依赖注入?依赖注入(简称“DI”)是 ASP.NET Core 的一种技术,用于实现对象之间的松耦合,从而简化应用程序的维护。在 ASP.NET Core 中,.NET 运行时引擎会自动注入依赖类的对象,主要通过控制器构造函数来实现。这大大简化了开发人员的工作。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/157467520

2026-01-28

ASP.NET Core Identity 中实现用户身份验证

ASP.NET Core Identity 中实现用户身份验证,ASP.NET Core 中的身份验证是什么?身份验证是指在用户成功登录应用程序时识别其身份的过程。ASP.NET Core Identity 会显示一个登录表单,用户需要在其中输入用户名和密码进行身份验证。登录成功后,Identity 会验证用户身份,并授予其访问 ASP.NET Core 应用程序安全资源的权限。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/157466837

2026-01-28

在 ASP.NET Core 中使用 RabbitMQ 消息示例

在 ASP.NET Core 中使用 RabbitMQ 消息示例,在构建分布式系统时,后台任务扮演着非常重要的角色。最常见的场景是消费服务总线的消息。在本示例中,将介绍如何在 ASP.NET Core 中通过 BackgroundService 消费 RabbitMQ 消息。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/152317936

2025-09-30

.NET Core 8 与 RabbitMQ 和 MassTransit 示例

.NET Core 8 与 RabbitMQ 和 MassTransit 示例,该示例包含两个主要服务:QueueSenderService 和 QueueReceiverService。这两个服务通过 RabbitMQ 使用 MassTransit 进行通信。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/152270253

2025-09-29

.NET 7 和 RabbitMQ 的发布-订阅模式示例

.NET 7 和 RabbitMQ 的发布-订阅模式示例,示例简单介绍了发布-订阅模式的含义。想象一下:系统中有多个对象想要接收特定事件或更新的通知。使用发布-订阅模式,这些对象可以订阅感兴趣的主题,并只接收它们关心的通知。这样一来,再也不用被无用的更新淹没了!此外,这种模式还能降低依赖性,并促进系统组件之间的松耦合。这难道不好极了? 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/152210829

2025-09-28

.NET 8 Web 应用、Web API 和 RabbitMQ

.NET 8 Web 应用、Web API 和 RabbitMQ,本示例将探讨使用 RabbitMQ 的优势,包括更高的可扩展性、可靠性和性能,同时保持应用程序不同组件之间职责的清晰分离。此外,该项目遵循清晰架构原则,并实施健康检查以确保服务的稳健性。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/152209292

2025-09-28

WPF 如何使用现有工具进行 .NET 8 迁移

WPF 如何使用现有工具进行 .NET 8 迁移,微软技术具有多种环境,例如(桌面、Web、移动应用程序等),因此技术框架也会根据应用程序的执行环境而有所不同。因此,应用程序需要根据环境进行设计和构建。但现在挑战也随之而来。 参考链接:https://blog.csdn.net/hefeng_aspnet/article/details/152208131

2025-09-28

layer改造版及说明

layer改造版及说明: layer 移动版弹出层组件的改造版,通过颜色样式区分提示类型,类型通过style属性进行设置。增加了 layer.gt() 方法,参数包括如下: layer.gt('ok') 成功类型的提示 layer.gt('error') 错误类型的提示 layer.gt('info') 信息类型的提示 layer.gt('alert') 警告类型的提示 另外移动版不允许嵌套 iframe,该修改版本可以通过示例代码实现 iframe 的嵌套,并且可以无边距显示。 其它所有的功能均保留,可参照相关文档进行开发。 内附示例文件代码 demo.htm 使用文章参考:https://blog.csdn.net/hefeng_aspnet/article/details/152027229

2025-09-24

jquery-3.3.1、 jquery-3.3.1.min、jquery-3.3.1.slim、jquery-3.3.1.slim.min四个同版本文件

jquery-3.3.1、 jquery-3.3.1.min、jquery-3.3.1.slim、jquery-3.3.1.slim.min,压缩包内包含四个同版本文件,选择适合您需要的。 文章内使用:https://blog.csdn.net/hefeng_aspnet/article/details/152027229

2025-09-24

使用 .NET 8.0 中的 ASP.NET Core 和 Entity Framework Core 创建 RESTful Web API

使用 .NET 8.0 中的 ASP.NET Core 和 Entity Framework Core 创建 RESTful Web API,本示例向您展示如何使用 . NET 8.0中的 ASP.NET Core以及Entity Framework Core构建RESTful Web API。截至目前,.NET 8是最新长期支持 (LTS)版本,支持期预计持续到 2026 年 11 月 10 日。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/151993535

2025-09-23

使用 Entity Framework Code First 方法创建 ASP.NET Core 5.0 Web API

使用 Entity Framework Code First 方法创建 ASP.NET Core 5.0 Web API,使用 Entity Framework Core 的“Code First”方法在 ASP.Net Core 中创建 WEB API。将创建一个简单的员工 CRUD 操作,并使用 Swagger 对其进行测试。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/151991735

2025-09-23

.Net8 WebAPI CRUD 操作示例

.Net8 WebAPI CRUD 操作示例,在 .NET 8 中使用内存集合创建 CRUD(创建、读取、更新、删除)API 是 Web 开发中的常见场景。本示例将通过一个实际用例,逐步讲解如何构建一个完整的 .NET 8 Web API。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/151989349

2025-09-23

使用 MongoDB.Driver 在C# .NETCore 中实现 Mongo DB 过滤器

使用 MongoDB.Driver 在C# .NETCore 中实现 Mongo DB 过滤器。使用 .NET 和 C# 在 MongoDB 数据库中实现基本操作。使用 MongoDB.Driver 包执行各种操作。重点介绍 MongoDB 操作,因此不会为 .NET 项目实现高级架构。相反,将创建一个 .NET 8 Web API 项目,并直接在控制器中实现所有操作,而不是创建单独的服务或存储库类。您可以根据自身需求实现这些架构。通过在 .NET 应用程序中实现 MongoDB 操作,您可以高效地管理存储在 MongoDB 数据库中的数据。 参考文章: https://blog.csdn.net/hefeng_aspnet/article/details/150554627 https://blog.csdn.net/hefeng_aspnet/article/details/150554504

2025-08-20

使用 .NET Core 6 Web API 的 RabbitMQ 消息队列

使用 .NET Core 6 Web API 的 RabbitMQ 消息队列;RabbitMQ 消息队列及其使用 .NET Core 6 API 作为消息生产者和控制台应用程序作为消息消费者的实现。 Rabbit MQ 是一个消息代理,在使用多个微服务时充当中间件。 RabbitMQ 是一款开源消息代理软件。有时它也被称为面向消息的中间件。 RabbitMQ 是用 Erlang 编程语言编写的。 当某些资源花费大量时间来处理数据时,RabbitMQ 用于减少 Web 应用程序的负载和交付时间。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/150345221

2025-08-13

在 .NET 8.0 Web API 中实现 JWT 身份验证和基于角色的授权

在 .NET 8.0 Web API 中实现 JWT 身份验证和基于角色的授权。.NET 8.0 Web API JWT 身份验证和基于角色的授权 其中,JWT(JSON Web Token)身份验证作为一种强大的用户身份验证方法脱颖而出。结合基于角色的授权,它可以实现细粒度的访问控制,确保只有授权用户才能访问特定资源。本示例将引导您完成在 .NET 8.0 Web API 中实现 JWT 身份验证和基于角色的授权的过程,为构建安全且可扩展的 Web 应用程序奠定坚实的基础。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/149638160

2025-07-25

如何使用 ASP.NET Core 创建基于角色的 Web API

如何使用 ASP.NET Core 创建基于角色的 Web API,此示例介绍使用 ASP.NET Core 6 创建基于角色的 Web API 的步骤。将使用 Swagger UI 来可视化并与端点以及作为数据库的 MS SQL Server 进行交互。该应用程序将包含一个身份验证模块和一个事件模块。登录用户将能够查看与其帐户关联的事件,而具有管理员角色的用户可以创建、更新和删除事件。 参考:https://blog.csdn.net/hefeng_aspnet/article/details/149636494

2025-07-25

.NET 8.0 使用 JWT Bearer Token 的身份验证 API 示例 AuthDemoApi

.NET 8.0 使用 JWT Bearer Token 的身份验证 API 示例 AuthDemoApi。在现代 Web 开发领域,API 安全至关重要。实现此目标的可靠方法之一是使用 JWT(JSON Web Tokens)作为 Bearer Token 进行 API 身份验证。本示例将深入探讨 JWT Bearer Token 身份验证的含义、原理和方法。 JWT,即 JSON Web Token,是一项开放标准 (RFC 7519),用于在各方之间以 JSON 对象的形式安全地传输信息。由于信息经过数字签名,因此可以验证和信任。JWT 可以使用密钥(采用 HMAC 算法)或公钥/私钥对(使用 RSA 或 ECDSA 算法)进行签名。 参考:https://blog.csdn.net/hefeng_aspnet/article/details/149604808

2025-07-24

.NET 8.0 使用存储库模式和 Dapper 进行日志记录和单元测试的清洁架构

清洁架构 (Clean Architecture) 是由罗伯特·C·马丁 (Robert C. Martin)(又名鲍勃大叔)提出的系统架构指南。它衍生自许多架构指南,例如六边形架构、洋葱架构等。 清洁架构的主要概念是应用程序的核心逻辑很少改变,因此它将是独立的并被视为核心。 使这种架构发挥作用的首要规则是依赖规则。该规则规定,源代码依赖关系只能指向内部,并且内圈中的任何事物都无法知晓外圈中的任何事物。 通过将软件分层并遵循依赖规则,您将创建一个本质上可测试的系统,并享受其带来的所有好处。当系统的任何外部组件(例如数据库或 Web 框架)过时时,您可以轻松替换这些过时的元素。 在清晰架构中,领域层和应用层仍然处于设计的中心,被称为应用程序的核心。 领域层包含企业逻辑,应用层包含业务逻辑。 企业逻辑可以在许多相关系统之间共享,但业务逻辑不可共享,因为它是为特定的业务需求而设计的。 如果您没有企业而只是编写单个应用程序,那么这些实体就是该应用程序的业务对象。 清洁架构的优点: 框架独立——该架构不依赖于某些功能丰富的软件库。这使得您可以将这些框架用作工具。 UI 独立 - 它与 UI 层松散耦合。因此,您可以在不改变核心业务的情况下更改 UI。 独立于数据库 - 您可以将 SQL Server 或 Oracle 替换为 MongoDB、Bigtable、CouchDB 或其他数据库。您的业务规则不受数据库的约束。 高度可维护——遵循关注点分离。 高度可测试 - 使用这种方法构建的应用程序,尤其是核心域模型及其业务规则,极易测试。 参考文章:https://blog.csdn.net/hefeng_aspnet/article/details/149604735

2025-07-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除