自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

原创 Manus AI Agent 技术解读:架构、机制与竞品对比

在分析股票相关性的案例中,Manus 调用了雅虎财经API获取股票历史数据,并进行数据清洗、相关系数计算和可视化,把三支科技股三年来的联动关系用图表和详尽文字说明呈现出来,简直就像一个尽职的金融分析师完成了全部工作。这种模块化、多Agent分工的架构,能够发挥各模型所长,避免单一模型在某些任务上的弱点。Monica.im 的创始团队在 AI 助手领域有深厚积累,此前推出的 Monica AI 浏览器插件整合了 GPT-4、Claude 3 等多个模型,为全球超过千万用户提供服务,并实现盈利。

2025-03-07 10:56:56 3945

原创 手脑革命:中国AI黑马Manus如何用‘数字员工’引爆千亿市场?

Manus是由中国团队研发的全球首款通用型AI Agent(自主智能体),其名称源自拉丁语“Mens et Manus”(意为“手脑并用”),核心能力在于自主思考、任务分解与全流程执行,而非仅停留在建议生成阶段。作为一个能够自主决策并执行任务的 AI 代理,Manus 为我们展示了人工智能技术的无限潜力,未来的人工智能应用将不再是简单的工具,而是更为智能、独立的助理。Manus的爆发标志着AI从“辅助工具”向“生产力中枢”的跨越。未来,人与AI的关系将从“主仆”转向“协作伙伴”,而这场变革,才刚刚开始。

2025-03-06 13:11:14 2413

原创 使用VS Code远程开发OpenAI API

由于OpenAI的API在国内不可用,我们要针对API进行开发困难比较大。如果你有一个能使用OpenAI API的Linux服务器,我们可以方便地使用VS Code的远程开发功能来解决这个问题。

2025-02-24 10:41:01 1287

原创 使用php调用openai api

使用php调用openai api

2025-02-19 12:55:38 744

原创 使用PHP 调用Deepseek API

本文将介绍如何通过 PHP 调用 Deepseek API,并通过简易代码展示如何与 Deepseek 的 AI 模型进行交互,帮助开发者更好地在自己的项目中应用这一强大的工具。我们将提供一个基本的 PHP 示例,帮助你快速了解如何通过 Deepseek API 进行调用。

2025-02-12 16:41:02 1195

原创 16.状态模式:思考与解读

假设你有一个对象,它的行为会随着状态的变化而变化。你是如何实现这些变化的?是通过在一个方法中增加大量的if条件判断来处理不同的状态,还是使用其他方式来管理这些状态?你是否觉得,过多的条件判断会导致代码的复杂性增加?passOrderStateself.state = NewOrderState() # 初始状态为新订单状态模式的核心思想是:对象的行为会根据其内部状态的变化而变化。换句话说,状态模式让对象在不改变其类的情况下,根据状态的不同做出不同的反应。

2025-05-07 09:53:56 814

原创 15.命令模式:思考与解读

原文地址:外观模式:思考与解读 更多内容请关注:7.深入思考与解读设计模式在软件开发中,尤其是当系统涉及多个请求、操作或任务时,你是否遇到过这样的情况:每个操作都有自己的执行逻辑,且这些操作可能会在不同的时刻被调用?你是否曾经感到,这样的操作代码耦合在一起,难以管理和扩展?如何让这些操作可以独立于调用者和执行者而进行管理和扩展?命令模式正是为了解决这个问题而设计的。它通过将请求封装成对象,使得你可以将请求的发送者和接收者解耦,从而更加灵活地控制请求的执行。你是否觉得,这种封装请求和操作解耦的设计模式能够提

2025-05-06 10:28:33 1124

原创 14.外观模式:思考与解读

假设你在使用一个复杂的库或框架,涉及到许多不同的类和方法。如果每次都需要调用多个类和方法,是否会导致你的代码变得臃肿和难以维护?你是否考虑过,通过提供一个简单的接口来封装这些复杂操作,是否能提高代码的可读性和易用性?外观模式的核心思想是:为复杂的子系统提供一个统一的接口,使得客户端通过这个接口与系统进行交互。这样,客户端无需了解系统内部的复杂细节,只需要调用外观提供的简单方法即可。通俗地讲,外观模式就像是你在使用一个智能家居系统。

2025-04-29 10:32:33 1066

原创 13.组合模式:思考与解读

假设你正在开发一个文件管理系统,其中有文件夹和文件。每个文件夹可能包含其他文件夹和文件。你是如何组织这些对象的?是否每次都需要分别处理文件和文件夹,分别使用不同的逻辑?在组合模式中,通常有三个主要角色:抽象组件(Component):定义所有节点的公共接口,让叶子节点和容器节点有统一的操作方式。叶子节点(Leaf):实际的对象,没有子节点,执行具体的操作。容器节点(Composite):有子节点的对象,可以包含其他叶子节点或容器节点。

2025-04-27 10:23:36 560

原创 12.桥接模式:思考与解读

假设你有多个功能模块,它们每个都需要支持不同的平台。如果每个功能模块都直接嵌入对平台的支持代码,是否会导致代码重复且难以维护?你是否考虑过将平台的特定实现部分与功能模块解耦,使得两者可以独立变化?# 实现部分接口passDrawingAPI接口定义了平台相关的绘图操作。你是否理解,为什么将平台特定的绘图操作抽象成接口,让不同平台的实现变得更加独立和灵活?passself.x = xself.y = y桥接模式的核心思想是将一个对象的抽象部分和它的实现部分分开,分别处理。

2025-04-24 10:49:42 947

原创 11.原型模式:思考与解读

通常,当我们需要创建新对象时,我们会通过构造函数初始化对象的各个属性。然而,如果对象的构建过程非常复杂,是否每次都需要重复这套步骤?在这种情况下,是否存在一种方法可以通过“复制”现有的对象来创建新对象,而无需重复初始化过程?# 定义原型接口passclone()原型模式的核心思想是,通过复制一个现有的对象来创建新的对象,而不是重新创建一个全新的对象。原型模式通常用于需要大量对象,且这些对象的创建开销较大的情况。通过克隆现有对象,可以节省对象创建的时间和资源。

2025-04-24 09:21:59 984

原创 10.建造者模式:思考与解读

假设你正在创建一个复杂对象,这个对象有多个属性,并且这些属性可能有不同的值。你如何设计代码来生成这个对象?你会逐步为每个属性赋值,还是使用构建器来管理这些步骤?Computer类定义了计算机的核心属性:CPU、内存和硬盘。你是否理解,为什么这些是构建计算机对象时的关键组成部分?在实际应用中,是否可能有更多的可选组件?passpasspasspass建造者接口定义了如何构建计算机的各个部分。你能理解,为什么通过接口来定义构建步骤可以提高灵活性?不同的具体建造者类将根据具体需求来实现这些方法。

2025-04-22 09:52:50 760

原创 9.策略模式:思考与解读

首先,让我们从一个简单的问题开始。策略模式是一个行为型设计模式,它让我们能够在运行时选择并切换不同的“策略”来解决问题。策略指的是算法或行为。当我们有多个算法可以选择时,策略模式帮助我们将这些算法封装起来,并且在不改变客户端代码的前提下,切换不同的算法。简单来说,策略模式就是一种允许你在不同的情况下选择和切换“方法”的方式。举个简单的例子:想象一下,你在一个商店购买商品,支付方式有多种选择:支付宝、微信支付、银行卡支付等。每种支付方式都可以看作是一种策略,你可以根据实际情况选择一种支付方式。

2025-04-21 12:20:33 1010

原创 8.观察者模式:思考与解读

假设你有一个系统,其中有一个对象的状态变化会影响到其他多个对象。你是如何让这些依赖对象知道这个变化的?是否有一种方法,让这些对象在不询问的情况下,自动获取到最新的状态?# 观察者接口pass观察者接口定义了一个update()方法,所有观察者都必须实现这个方法。你是否理解,为什么这种方式能够确保所有观察者在状态变化时都能得到统一的通知,并进行相应的处理?passpasspassself.notify_observers() # 当天气数据变化时通知所有观察者。

2025-04-18 14:33:20 794

原创 7.装饰者模式:思考与解读

假设你有一个基本对象,已经完成了某些工作,但现在你需要让它完成更多的任务。你是否可以通过在不修改原始对象的情况下,增加新功能?装饰者模式允许你在现有对象的基础上,动态地增加新的行为,是否能够提高系统的灵活性和可扩展性?# 抽象组件类pass# 具体组件类:黑咖啡return 5.0return self._coffee.cost() + 1.5 # 添加牛奶的费用return self._coffee.cost() + 0.5 # 添加糖的费用。

2025-04-15 10:12:19 912

原创 6.适配器模式:思考与解读

假设你有两个模块,模块A和模块B,它们各自有不同的接口(方法参数不同、方法签名不同)。在这种情况下,是否需要对其中一个模块的代码进行修改才能使它们一起工作?如果修改其中的一个模块会导致系统不稳定,是否可以通过某种机制来避免直接修改?pass通过定义统一的接口Shape,我们能够确保所有绘图工具都能提供相同的draw()方法,方便客户端代码调用。而不管具体工具如何实现这个方法,客户端代码都无需关心具体细节。

2025-04-14 09:38:22 1262

原创 2、文件上传漏洞的防范

本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。上面的文件上传的例子,没有对被上传的文件进行任何判断,这样用户可以上传一个.php文件,然后通过浏览器访问该php文件,来达到攻击的目的。在执行文件上传操作时,都必须用这个函数来移动上传的临时文件到正式目录下,而不能自己使用move方法来移动。在文件上传后,判断上传的文件类型,如果类型不对,则不执行上传操作。在客户端提交文件上传之前,判断只允许上传指定类型的文件。

2025-04-11 11:31:01 732

原创 DeepSeek服务突发访问故障的快速诊断与DNS解决方案

2025年04月08日,使用中的DeepSeek相关服务突然无法访问。发现返回"127.0.0.1"或超时错误,表明DNS解析环节存在问题。检查代理服务器和防火墙 ERR_CONNECTION_REFUSED。右键当前网络 → 属性 → IPv4 → 使用以下DNS服务器地址。114.114.114.114或者114.114.115.115。chat.deepseek.com 拒绝了我们的连接请求。打开"网络和共享中心" → "更改适配器设置"请试试以下办法: 检查网络连接。

2025-04-08 11:39:54 578

原创 13.支持 RESTful

首先,需要在路由器中定义 RESTful 路由。这些路由通常对应于资源的 CRUD 操作:GET /resources:获取资源列表(Index)GET /resources/{id}:获取单个资源详情(Show)POST /resources:创建新资源(Store)PUT/PATCH /resources/{id}:更新资源(Update)DELETE /resources/{id}:删除资源(Destroy)在index.phpphp// ... 之前的代码 ...

2025-04-08 10:03:37 1045

原创 12.实现一个简单的依赖注入容器

通过实现一个简单的依赖注入容器,可以实现以下优势:松散耦合:组件之间不直接依赖具体实现,而是通过接口或容器进行协作。可测试性:更容易为组件编写单元测试,因为依赖项可以被轻松替换或模拟。可维护性:集中管理依赖关系,使得代码更易于维护和扩展。灵活性:更容易更换或升级依赖项,无需大规模修改代码。关键步骤回顾:实现 Container 类:管理服务的注册和解析。注册服务:在容器配置文件中定义所有需要的服务及其依赖关系。

2025-04-07 10:19:40 1005

原创 11.使用依赖注入容器实现松耦合

在容器配置文件中,可以定义所有需要的服务及其依赖关系。例如:控制器:通过自动装配,控制器的依赖项(如 Logger、Twig)将自动注入。中间件:定义中间件的依赖项,确保它们也通过容器进行管理。通过集成 依赖注入容器,可以实现以下优势:松散耦合:组件之间不直接依赖具体实现,而是通过接口或依赖注入容器进行协作。可测试性:更容易为组件编写单元测试,因为依赖项可以被轻松替换或模拟。可维护性:集中管理依赖关系,使得代码更易于维护和扩展。灵活性:更容易更换或升级依赖项,无需大规模修改代码。

2025-04-05 16:37:49 1059

原创 10.使用路由缓存提升性能

通过集成路由缓存,可以显著提升自定义 PHP 框架的性能和响应速度。以下是关键步骤的回顾:理解路由缓存:明确路由缓存的概念及其带来的性能优势。选择缓存存储方式:根据项目需求选择合适的缓存存储方式,文件缓存通常是最简单的选择。修改 Router 类:实现缓存的加载和保存逻辑。在路由添加和请求分发过程中集成缓存机制。管理路由缓存的更新:通过手动或自动方式确保缓存与路由定义保持同步。遵循最佳实践:确保缓存的安全性、性能优化和错误处理。保持缓存机制的可扩展性和一致性。

2025-04-02 09:35:57 1473

原创 9.常用模板引擎

PHP 生态中有多种模板引擎可供选择,每种引擎都有其独特的优势和适用场景。以下是关键点的回顾:Twig:功能强大,安全性高,适用于各种 PHP 项目,尤其是大型和复杂项目。Blade:与 Laravel 框架紧密集成,提供丰富的功能和高开发效率。Smarty:历史悠久,功能全面,适合需要复杂模板逻辑的项目。Mustache:逻辑无关,语法简洁,适用于简单模板需求和前后端分离项目。Plates:轻量级,使用原生 PHP,适合对性能有高要求的项目。

2025-04-01 09:34:03 1442

原创 8.集成模板引擎

通过以上步骤,已经成功在自定义的 PHP 框架中集成了 Twig 模板引擎,实现了视图与业务逻辑的分离,提升了代码的可维护性和扩展性。以下是关键点的回顾:选择合适的模板引擎:Twig 作为一个现代且强大的模板引擎,适合与自定义框架集成。通过 Composer 安装:使用 Composer 轻松管理模板引擎的依赖。配置模板目录:组织模板文件,确保项目结构清晰。更新 Controller 类:在基础控制器中集成模板渲染功能,简化控制器方法中的视图渲染。

2025-03-31 10:02:03 953

原创 7. 实现命名路由和反向路由

首先,需要在路由定义中引入路由名称的概念。可以通过扩展add方法来接受一个可选的路由名称参数。通过实现 命名路由 和 反向路由,可以显著提升 PHP 框架的灵活性和可维护性。以下是关键点的回顾:命名路由:为每个路由分配一个唯一的名称。通过名称引用路由,避免硬编码 URL。反向路由:根据路由名称和参数生成对应的 URL。简化 URL 生成过程,确保与路由定义一致。Router 类增强:修改add方法以接受路由名称。维护命名路由与路由定义的映射。实现方法,根据名称和参数生成 URL。

2025-03-28 09:43:56 1347

原创 1、SQL注入攻击的防范

虚拟站点使用的数据库用户一定不要使用root等最高权限用户,必须针对每个虚拟站点单独设置一个用户,这个用户只能允许虚拟站点所在的ip登录,只能访问当前虚拟站点所使用的数据库,并且只有有限的少数几个权限。php提供了mysql_real_escape_string方法,用于转义 SQL 语句中使用的字符串中的特殊字符,可以安全用于 mysql_query()。SQL注入攻击,指的是通过构建特殊的输入作为参数,传入后台处理程序(比如PHP代码),通过执行SQL语句,来执行攻击者所要的操作,从而达到攻击的目的。

2025-03-27 13:50:12 1076

原创 6. 理解中间件与认证中间件

确保在路由中正确指定中间件。php// ... 之前的代码 ...// 定义认证路由// 定义受保护的 RESTful 用户路由// 处理请求?通过实现一个简单的并支持 Bearer Token 认证(尤其是基于 JWT 的认证),可以显著提升自定义 PHP 框架的安全性和灵活性。以下是关键步骤的回顾:理解中间件与认证中间件:中间件在请求处理流程中扮演关键角色,认证中间件确保请求的合法性和安全性。

2025-03-26 09:27:27 1328

原创 5. 实现一个中间件

首先,定义一个中间件接口,确保所有中间件类都实现该接口。这有助于保持中间件的一致性和可扩展性。步骤:创建 Middleware 接口在目录下创建文件,并定义接口:php/*** 处理请求* @param array $params 路由参数* @return bool 返回 `true` 继续执行,`false` 中止执行*/?handle方法:接收路由参数,执行中间件逻辑。返回true表示请求可以继续执行,返回false则中止执行。

2025-03-25 10:05:25 1413

原创 26. 模板方法模式

模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个操作中的算法骨架,将一些步骤延迟到子类中。模板方法使得子类可以不改变算法结构的情况下,重新定义算法的某些特定步骤。关键点:算法骨架:在抽象类中定义算法的结构和步骤。步骤重定义:子类可以重写抽象类中定义的某些步骤,实现特定的行为。控制反转:抽象类控制算法的执行顺序,子类仅负责实现具体步骤。

2025-03-24 10:06:56 1186

原创 25. 策略模式

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,将每一个算法封装起来,并使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。通过引入策略模式,可以在不修改客户端代码的情况下,动态地更改对象的行为。关键点:算法封装:将不同的算法封装到独立的策略类中。互换性:策略类可以相互替换,客户端可以根据需要选择使用哪种策略。独立性:策略类独立于使用它们的客户端,符合开闭原则。

2025-03-21 09:52:15 1375

原创 5.工厂方法模式、简单工厂模式与抽象工厂模式的对比

通过一系列问题的引导,我们逐步揭示了简单工厂模式、工厂方法模式和抽象工厂模式的核心概念、优缺点以及适用场景。三种工厂模式各有千秋,它们都在不同的场景下发挥着重要作用。通过以上对比,我们可以得出以下结论:简单工厂模式:通过一个工厂类根据不同的参数创建不同的对象。适合产品种类较少的场景,简单易懂,灵活性较差。工厂方法模式:通过工厂接口让子类决定实例化哪种具体产品。适合产品种类较多且每个产品的创建逻辑不同的场景,增加了灵活性和扩展性。抽象工厂模式:适用于需要创建一系列相关产品的场景。

2025-03-20 09:56:46 1032

原创 24. 状态模式

状态模式(State Pattern)是一种行为型设计模式,它允许一个对象在其内部状态改变时改变其行为,使得该对象看起来似乎修改了其类。状态模式通过将状态的行为封装到独立的状态类中,实现了对象行为的动态切换,避免了大量的条件判断语句(如if-else或关键点:状态封装:将不同的状态及其对应的行为封装到独立的状态类中。动态切换:对象可以在运行时根据内部状态切换其行为。单一职责:每个状态类负责其特定状态下的行为,实现了职责的明确划分。避免条件判断:通过多态性替代条件判断,提升代码的可维护性和可扩展性。

2025-03-19 10:24:13 1160

原创 4. 支持多个和可选参数

为了支持多个参数和可选参数,我们需要更新路由定义的语法。例如:{id}和{post_id}是必需参数。和{page?是可选参数。在index.phpphp// ... 之前的代码 ...// 定义带有多个参数和可选参数的路由// 其他路由// 处理请求?通过以上步骤,已经成功地扩展了自定义 PHP 框架的路由系统,使其支持 多个参数 和 可选参数。具体实现包括:路由定义语法:使用{param}和{param?语法定义动态参数和可选参数。

2025-03-18 09:40:51 1306

原创 3. 增加对路由参数的支持

在index.php中,定义带参数的路由。例如,添加一个路由/user/{id},映射到php// ... 之前的代码 ...// 定义带参数的路由// 其他路由// 用户列表路由// 处理请求?/user/{id}表示/user/后面跟着一个动态参数id。这个参数会被提取并传递给的show方法。通过以上步骤,我们已经成功地在自定义的 PHP 框架中增加了路由参数支持。具体实现包括:路由器类的增强:通过正则表达式匹配路由模式,提取参数值,并将其传递给控制器方法。

2025-03-17 10:06:48 1177

原创 2. 使用Composer实现自动加载类

通过以上步骤,已经成功地将 Composer 集成到自定义 PHP 框架中,并在控制器类中使用了 Composer 安装的包(如 Monolog 和 Guzzle)。以下是关键点的回顾:Composer 初始化:使用初始化项目,并通过安装所需的包。自动加载配置:在中配置autoload,并使用 PSR-4 标准组织代码。命名空间使用:通过定义命名空间,使类的组织更为规范,并利用 Composer 的自动加载功能简化类的引入。

2025-03-14 09:33:08 1740

原创 1. 一个简单的PHP框架

一个基本的 PHP 框架通常包含以下几个部分:前端控制器(Front Controller):处理所有的 HTTP 请求,统一入口。路由器(Router):解析请求的 URI,并将其映射到相应的控制器和方法。控制器(Controller):处理具体的业务逻辑。视图(View):负责展示数据(本示例主要关注控制器部分)。通过这种结构,框架能够有效地组织代码,提高可维护性和扩展性。本文介绍了如何构建一个简单的 PHP 框架,实现将 HTTP 请求映射到类的方法中。

2025-03-13 08:45:00 1346

原创 4.简单工厂模式:思考与解读

假设你正在开发一个系统,需要创建不同类型的车辆(例如:汽车、卡车、摩托车等)。每个车辆类型都需要不同的初始化参数和设置。每次创建对象时,是否都需要重复相同的逻辑?你是否觉得这会让代码变得冗余且难以维护?# 定义一个车辆接口pass# 具体的车辆类print("驾驶汽车")print("驾驶卡车")print("驾驶摩托车")else:简单工厂模式的核心思想是,提供一个工厂类,通过传递不同的参数来创建不同的对象,而不需要直接在客户端代码中实例化这些对象。

2025-03-12 09:00:00 1913

原创 23. 观察者模式

观察者模式(Observer Pattern)是一种行为型设计模式,用于建立对象之间的一种一对多的依赖关系。当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。该模式通过 观察者(Observer) 和 被观察者(Subject) 之间的交互,实现了对象间的松散耦合。关键点:一对多关系:一个被观察者可以有多个观察者。松散耦合:被观察者不需要知道观察者的具体信息,反之亦然。自动通知:被观察者状态变化时,自动通知所有观察者。

2025-03-11 10:43:25 1444

原创 22. 备忘录模式

备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不暴露对象实现细节的情况下捕获和保存对象的内部状态,从而在未来需要时恢复对象到先前的状态。备忘录模式通过引入备忘录对象,实现了对象状态的保存与恢复,常用于实现 撤销(Undo) 功能。关键点:状态保存与恢复:在不破坏封装性的前提下,保存对象的内部状态,并在需要时恢复。封装性:备忘录对象只暴露必要的信息,确保对象内部状态的隐私性。独立性:备忘录模式将状态的保存与恢复操作与对象的核心职责分离。

2025-03-10 10:22:37 1238

原创 中介者模式

中介者模式(Mediator Pattern)是一种行为型设计模式,它通过一个中介对象来封装一系列对象的交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,并且可以独立地改变它们之间的交互。该模式的核心思想是引入一个中介者对象来管理对象之间的通信,避免对象之间的直接依赖。关键点:集中管理:所有对象的交互都通过中介者进行,集中管理对象之间的通信。降低耦合度:对象无需直接引用其他对象,降低了系统的耦合度。增强灵活性:通过修改中介者,可以轻松改变对象之间的交互方式,而无需修改各个对象。

2025-03-05 08:30:00 1181

空空如也

空空如也

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

TA关注的人

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