Spiga

程序员的AI体验(二):Cursor初体验

2025-05-10 17:58:58

摘要:一、安装Cursor 官网下周window版本,2025-6-5发布了1.0版本 Cursor - The AI Code Editor 设置语言包,跟vscode设置方法一样。(Cursor就是基于VSCode开发的) 设置Cursor 文件---自动保存 文件---首选项---功能---终端:window默认上终端配置文件,选择 git bush 设置Cursor所选的模型:取消自动 配置规则: 总是使用简体中文来进行回复 也可以添加项目规则,如 -总是使用uv作为Python环境和包管理工具 -总是将wsl+Ubuntu作为开发环境 -所有函数必须团结类型注释 -函数名使用snake_case,类名使用PascalCase -所有api都应该遵循restful规范 -注释必须使用简体中文 -总是遵循《代码整洁之道》 -总数遵循《设计原则与设计模式》 定价 Pricing | Cursor - The AI Code Editor 配置linux开发环境 安装wsl:wsl install 安装 uv:curl -LsSf https://astral.sh/uv/install.sh | sh 安装python环境:uv python install --preview 安装pip:sudo apt install python3-pip Cursor里面安装wsl插件 在Cursor左下方的按键就可以连接到wsl子系统了 连接上后在使用 /mnt挂在本机文件夹 二、生成前台代码体验 生成Login前台页面 初学者使用AI生成login页面的提示词 规范化提示词 请在login目录中设计一个响应式、风格美观的登录页面,页面应包含用户名和密码输入框,以及一个登录按钮。 请分别从HTML结构、CSS样式、JavaScript功能三个方面实现,确保用户体验良好,并具备基础的交互逻辑 创建一个标准的HTML登录页面结构,要求如下: -页面居中显示,使用一个主容器; -包含输入字段:用户名(type=username)和密码(type=p…… 阅读全文

程序员的AI体验(一):提示词工程

2025-05-03 21:35:10

摘要:一、提示词基础 1.1 定义与作用 graph LR A[人类] -- B(提示词) -- C[AI系统] -- D[输出结果] 本质:AI系统的指令(问题/描述/关键词) 核心作用: 🗝️ 打开AI能力的钥匙 🌉 人机沟通的桥梁 🎯 决定输出质量的关键因素 1.2 重要性体现 | 维度 | 影响 | 案例 | | :------: | :-----------------------: | :--------------------: | | 输出质量 | GIGO原则(垃圾进=垃圾出) | 模糊提示→无关结果 | | 创新能力 | 突破常规思维 | “设计反重力咖啡杯”提示 | | 人机协作 | 理解AI工作原理 | 通过迭代优化提示词 | 二、高质量提示词编写 2.1 常见形式 指令式: “分析2023年Q4电商报告,关注用户增长趋势” 问答式: “什么是思维链提示?” 填空式: “AI在__(领域)的应用改变了(行业)__” 对话式: “作为产品经理,如何设计年轻人社交APP定位?” 创意式: “写科幻小说:外星咖啡入侵地球” 思维链提示词 “让我们一步步来思考这个问题……” 2.2 关键要素 flowchart TD A[明确目标] -- B[提供背景] B -- C[设定约束] C -- D[优化输出] 目标公式 动词+对象+限定条件 ✘ “帮我看看代码” ✔ “审查支付系统代码,检查安全漏洞和性能瓶颈” 背景信息 客户邮件回复需求: 客户类型:VIP客户 问题:产品X的兼容性问题 语气:专业且热情 约束条件类型: 格式:表格/编号列表 字数:≤200字 关键词:必须包含“创新” 风格:高中生可读 三、提示词工程进阶 3.1 核心技能矩阵 | 技能 | 要点 | …… 阅读全文

云原生电商微服务实战4:品类微服务

2024-10-03 14:48:20

摘要:用户服务开发好之后,本来是要先介绍认证中心的。由于写了几篇了还没有看到电商业务的痕迹,于是今天先介绍品类微服务,做一期业务方面的设计与实现,下回再介绍认证中心。 一、品类与品牌 任何一个电商平台,品类是最先存在的一个业务功能。比如京东它最开始的定位就一个家电行业的垂直电商,后来最大了才有更多的其他品类。而现实中,可能会真正存在一个专门的品类管理处的部门,他们的职责可能是研究公司战略方向的。品类微服务不仅仅只是一个名称,它可能有专门的单独品类首页,有专门的营销策略,商品的存活的、推荐等等,因而品类对于电商业务来说是非常重要的。 品牌决定了电商平台具体卖什么东西,不同的平台品牌同意可能有不同的业务。比如营销方式、合作模式、分成方式等等。 对电商平台访问者来说,他们可能只是搜索商品,选择满意的商品后就下单了。他们知道品类和品牌的存在,但不会考虑到品类和品牌还有那么多具体的后台业务逻辑。而对于电商平台来说,品类和品牌是真正存在的可能还是非常复杂的业务。 接着我们来访问一下京东网站: 可以看到左侧有一个很大的品类选项。展开品类后又有二级或三级选择。随便点击一个三级品类选项后,可以看到URL地址:https://list.jd.com/list.html?cat=652,654,834 cat对应的值就是一个三级分类,分别提供了3个id值。 接着我们再在搜索框上随便搜个结果,可以看到品牌的筛选筛选项,品牌下面还会动态出现一些跟搜索的内容相关参数的筛选项,这些选择项都是动态的。比如我们搜索手机,出现的选择项是CPU、内存,电池,而我们搜索衣服时,出现的选择项变成了颜色、尺码、适用年龄。 根据分析京东的页面,我们大致可以了解到几个信息: 京东的品类有3级分类。 选择具体的品类后,才有关联的品牌。比如选择衣服后才有衣服对应的品牌,选择手机后才有手机的品牌。 筛选项是根据选择的品类后,动态出现的,也就是说筛选项会根据不同的品类有不同的内容,甚至还有高级选项。 于是我们就有了电商平台第一个业务相关的微服务品类微服务: 为什么品类服务要单独出来了,合并到商品服务里面不行吗? 微服务的划分没有标准答案,业务不是很复杂时,可以把品类服务合并到商品服务里面。而我们这里单独出来,是因为电商业务最…… 阅读全文

云原生电商微服务实战3:Asprise和Dapr集成

2024-09-28 13:27:01

摘要:一、云原生介绍 概念 什么是云原生:云原生是一种软件开发的方法论,通俗来说就是在云计算环境中构建和运行应用程序 云计算的特点:弹性、可扩展、高可用 云原生关键点: 容器化 微服务 动态管理 CI/CD 弹性(容错机制) 服务网格 容器编排工具 监控平台(指标、链路、日志) 云原生开发与微服务开发 理念(云原生:云计算为基础;传统:固定的硬件) 架构(云原生:微服务、Serverless;传统:单机架构) 开发流程(云原生:CI/CD;传统:瀑布模型(没有自动化)) 基础设施(云原生:通过代码管理依赖资源、自动配置;传统:事先准备、手动配置) 服务发现通信(云原生:环境中自带服务发现;传统:Consul、自己实现、提前准备、依赖硬编码、配置文件) 监控和日志(云原生:环境中准备好了各种监控、日志、链路追踪;传统:过于依赖外部组件) 资源利用率(云原生:动态调整资源;传统:资源分配不灵活) 开发环境和生产环境 云原生概要已经提出很久了,k8s可以说就是上就是一个云原生环境。 我在2019年的时候就开始带团队成员来是公司的微服务转型,那个时候都是自己手撸k8s环境,各种中间件集群也是自己搭建的。 那个时候云原生环境确实不好,虽然各大云平台都提供直接的paas产品,但很多收费都较贵,最终还是自己搭建。 更重要的时候本地开发时虽然安装的docker版本,提供了mini k8s环境,但是开发和部署的环境还是不一样的。 二、Asprise介绍 如果能有一个让开发和部署都是云原生的,开发的时候不需要自己去安装mysql,redis;同时开发的时候也不需要知道最终部署的是阿里云,还是微软云。只要开发环境是基于云原生的,开发环境拥有云原生的特性,比如监控、日志、链路追踪。部署的时候只需要提供对应的云产品的产品就能让系统跑起来,这种跑起来的方式,可能就是提供一个连接字符串就可以了。如果有这样的环境,那云原生开发将变得简单很多。 对的,这就是我们当前的明星出场的时候了。 .NET Aspire是NET 8.0 LTS提出的一套开发工具,它的作用就是构建和运行云原生应用程序。 特点: Dashboard - 中心化的应用监控和探查:F5 启动 .NET Aspire可显示服务的统…… 阅读全文

云原生电商微服务实战2:用户微服务

2024-09-14 11:51:22

摘要:上一篇我们介绍了本项目的基础架构,实际上共享项目里面还有很多内容并没有介绍。这是因为在没有具体业务前,光谈抽象类并不是很好理解,因此除了领域模型的规范和通用EFCore的实现外,其他的通用共享类都放到具体的业务中讲。 接下来,本次的出题就开始直接进入业务实现了,首先我们来谈第一个微服务,用户微服务。 一、用户服务领域层 因为我们整个项目采用的是基于洋葱模型的整洁架构,结合DDD的经典分层,我们的微服务基本上都分层四层。 ps:因为是培训项目,实际业务并不一定每个微服务都要采用一样的分层,实际开发中如果是小的,业务相对稳定微服务哪怕直接用文件夹来区分层次也是可以了。 在services文件夹中创建user文件夹,再创建DDM.DHT.UserService.Core类库项目,可以讲项目默认命名空间改成DDM.DHT.UserService。 接着创建Entities文件夹,再创建User.cs类,代码如下: public class User : BaseAuditEntity, IAggregateRoot { protected User() { } public User(string loginId, string phone) { LoginId = loginId; Phone = phone; Random random = new Random(); Name = Phone.Substring(0, Phone.Length - 4) + _ + random.Next(100, 999); UseAble = true; Salt = loginId.MD5EncodingOnly(); PasswordHash = 123456.MD5EncodingWithSalt(Salt); // default password is 123456 } public string LoginId { get; private set; } = null!; public string Name { get; private se…… 阅读全文

云原生电商微服务实战1:搭建基础框架

2024-09-07 22:29:37

摘要: 一直以来想专心写一个基于云原生的微服务案例,但总角色要写的内容太多了。电商案例本身并不会太难,而要搭建好一整套云原生和微服务的基础设施,并不是一项轻松的工作。随着.Net Asprise的推出,再集成Dapr,开发和生产几乎可以保持一样的环境了。这让我惊喜,曾经我们手动搭建k8s,手动配置集群以及可以成为历史,我们需要的就是使用这些工具,重新把核心回归到业务上来。 ​ 正好新公司也是做电商业务的,于是我终于决定开始写一套云原生电商微服务的案例。一方面可以学习Asprise和Dapr的相关知识,也是一次属性电商核心业务的机会。 ​ 这次的内容会写得比较细,目标是把这个项目当成一个培训项目来写。让不了解云原生、不了解微服务和不了解电商业务的人,也能看得懂该项目。 一、DDD DDD相关的文章以及很多了,我在几年前也写过一个DDD的学习系列,本文就只是做个总结,毕竟微服务是离不开DDD的。 解决什么问题 问题域 需求分析 分析理解复杂业务领域问题 准确反映业务语言 领域分析概念 领域 子域 核心域、通用域和支撑域 限界上下文 领域建模概念 实体与值对象 聚合与聚合根 领域事件 领域服务 仓储 工作单元模式 规约 应用服务 防腐层 领域驱动设计 CQRS: 命令与查询分离,作为一种战术办法,是实现DDD建模领域的最佳途径之一。 充血模型: 让模型自带业务逻辑,业务属性的改变只有模型自身可以操作。 二、整洁架构 核心原则 独立于框架:整洁架构的系统核心业务逻辑不依赖于具体的软件框架,业务逻辑部分都能够独立运行。这样在框架更新或者替换时,对核心业务的影响最小。 可测试性:架构设计使得业务规则可以很方便地被测试。因为业务逻辑是独立于外部组件(如数据库、用户界面等)的,所以可以使用单元测试来验证业务规则的正确性。比如,在一个电商系统中,“计算商品折扣”的业务规则可以通过提供模拟的商品价格数据来进行单元测试,而不需要真正地连接数据库或者启动整个用户界面。 独立于UI(用户界面):业务逻辑与用户界面相互独立。这意味着可以方便地替换用户界面,比如从一个命令行界面转换为图形界面,或者从Web界面转换为移动应用界面,而不会影响到业务逻辑。 独立于数据库:系统的核心不依赖于数据库的类型…… 阅读全文

ASP.NET Core 7 源码阅读7:CAR

2023-09-25 23:01:42

摘要:一、CAR 1. CAR本质 URL请求----调用Action----生成html响应(或其他响应) CAR就是个普通类---普通方法---最终生成HTML(也可能是其他的) 一个URL,怎么调用的Action---一定是反射----反射创建控制器实例,反射准备方法参数,反射调用Action方法(也许来点优化) 然后生成一段内容(啥都可以),写入到Response里面---然后由Kestrel回发到浏览器----浏览器解析报文做呈现 先Get这个本质,不要被各种封装各种特性看花眼了~ 2. 关键节点-上帝视角 CAR虽然是最后才生效,但是在前面也出现了---全流程debug一下,回顾一下: 启动环节services.AddControllers注册IOC时扫描dll,保存到ApplicationManager 初始化中间件MapControllerRoute()转成ControllerActionDescripter 第一次请求进入,路由初始化DFAMatcher时触发转换成Endpoint,路由匹配找到Endpoint---鉴权授权--- 执行Endpoint时实例化和缓存各种工厂、 Filter等---做好调用准备 执行Filter管道, ActionBegin状态实例化控制器, Bind参数 ActionInside状态开始执行Action,得到ActionResult ResultInside状态开始执行ExecuteResult,得到结果 Controller-Action-Result流程结束 3. CAR源码 按照主流程往后走,先关注Controller,再Action,再Result,其中会有回溯 步骤1: services.AddControllers注册时扫描dll,转成ApplciationPart,保存到ApplciationPartManager 知识点:当前项目引用的dll都算数,所以是独立类库---扩展PartDemo 收集完的内容都是保存在ApplciationPartManager—等于是个中间层,其实就可以开个后门,通过其他方式添加数据进去---所以可以热插拔 甚至可以动态编译脚本---后插拔进去 步骤2:初始化中间件MapControll…… 阅读全文

ASP.NET Core 7 源码阅读6:Filter

2023-08-20 21:32:52

摘要:一、快速认识Filter 1. 流程衔接点 MVC(Filter+Controller+Action+Result)流程和前面的各种中间件Middleware处理,是如何衔接起来的? Http请求穿过一系列中间件,最终由路由RoutingMiddleware匹配得到RouteEndpoint 在EndpointMiddleware里面会执行其RequestDelegate,委托执行时就是FilterController-Action-Result 该委托在ControllerRequestDelegateFactory里面来构建的,里面通过ControllerActionInvoker来调用 这里有个新名字叫 FilterPipeline 2. 快速认识Filter Filter是MVC里面核心组成部分,有着丰富的种类,交叉的顺序,复杂的嵌套,很有挑战! Filter分2种: 声明特性,实现Filter接口:CustomSimpleShowActionFilterAttributeCustomSimpleShowAsyncActionFilterAttributeCustomSimpleShowDoubleActionFilterAttribute:一个Filter里面既有同步,又有异步,只执行异步!能改参数,能改结果,非常强大注意异步版本的结果修改坑 控制器类实现Filter接口包括Action同步异步-Result同步异步---控制器生效,全部Action都有效 3. AOP面向切面编程 要说Filter,得理解下AOP面向切面编程Aspect Oriented Programming POP面向过程,没有封装没有边界,难以应对复杂需求OOP面向对象,有封装有边界,能应付复杂需求,但原子---类---不容破坏,否则会影响稳定性---开闭原则 AOP能在不破坏封装的前提下,去额外扩展功能比如ActionFilter,啥都没修改,就能增加执行逻辑AOP的好处: 聚焦业务逻辑,轻松扩展功能 代码复用,集中管理 4. 框架中的AOP 现代化开发框架中,要灵活应用AOP面向切面编程思想: ASP.NET Core三层AOP 中间件:离MVC比较远,面向与请求级的事儿 Filter:更贴近MVC,面向单…… 阅读全文

ASP.NET Core 7 源码阅读5:鉴权授权

2023-07-10 15:35:12

摘要:从Http无状态协议---用户持久化的需求---最初是Cookie+Session---Token但是不管是哪种方式,有一段内容是不变的: 请求服务端,获取凭证 客户端再次请求,带上凭证 服务端识别凭证,判断是否允许访问 鉴权授权的本质是做啥的? 其实就是第3步解决用户识别和判断授权的问题被拆分成了2个动作: 鉴权Authentication:凭证识别解析,有没有登陆,凭证有没有过期,是张三还是李四 授权Authorization:基于解析来权限检测,判断下张三/李四有没有权限访问这个资源 一、实操 1. 没有任何权限要求实操 添加相关控制器, Cookie式登陆方法 UseAuthentication + AddAuthentication + Cookie UseAuthorization + AddAuthorization(可不写) [Authorize] [AllowAnonymous] 校验流程: 未登陆,直接访问,跳转登录页 AllowAnonymous可直接访问 登陆后跳转,正常访问 退出后访问,跳转登陆页 2. 授权 Roles授权: [Authorize(Roles = Admin)] Policy授权: [Authorize(Policy = AdminPolicy)] 复杂Policy授权: [Authorize(Policy = MutiPolicy)] 授权的设计,也是可以满足开发者各种这样的需求—目前还没演示完 如果是没有登陆,是跳转LoginPath---401 如果是有凭证,但没有权限,是跳转AccessDeniedPath--403 3. 发送了什么? 请求到达Action之前,即使没有标记,也会自动鉴权 主动鉴权:理解鉴权信息保存 主动授权:理解授权检测过程 4. 理解总结 鉴权授权是ASP.NET Core框架封装的2个中间件,目的在于请求进入具体的Filter-M-V-C之前,通过中间件完成用户权限检测包含2个步骤: 鉴权Authentication:鉴别有没有登陆,解析是张三还是李四(且将信息传递下去)---UseAuthentication配置Http管道,保证请求来了,都要做一次凭证的解析AddAu…… 阅读全文

ASP.NET Core 7 源码阅读4:MVC核心中间件

2023-06-26 16:24:03

摘要:一、核心流程概述 执行AddMVC() 将MVC的核心服务注册到容器,且通过反射扫描把相关dll收集起来 执行app.UseRouting() 将EndpointRoutingMiddleware中间件注册到http管道 执行app. MapControllerRoute() 将本程序集定义的所有Controller-Action-ParameterConversion转换为一个个的ControllerActionDescriptor放到路由中间件的配置对象RouteOptions中,注册并传入EndpointMiddleware中间件注册到http管道中 请求来了,管道模型Build---没啥动作,倒序执行中间件的实例化 收到一条http请求,先进入EndpointRoutingMiddleware,首次请求时会完成ControllerActionDescriptor到EndPoint的转化,然后通过DFA算法匹配一个Endpoint,并放到HttpContext中去 鉴权/授权/其他中间件可以根据根据Endpoint的信息对这个请求进行鉴权授权或其他操作。 EndpointMiddleware中间件执行Endpoint中的RequestDelegate逻辑,即执行FilterController-Action-Result等系列操作(MVC) 二、AddMVC 1. 上帝视角 AddMVC(AddControllersWithViews)是最初发生的,是IOC注册环节的事儿,在管道注册之前,其职责有2个: 添加MVC各种IOC注册,超多。。 反射遍历相关程序集,封装成ApplicationPart,供后续使用 2. 源码解读 从MvcServiceCollectionExtensions开始,绕一圈,最终是AddMvcCore()方法 先实例化ApplicationPartManager-----拿着项目名字,通过反射加载Dll,将信息封装到ApplciationPartManager的ApplicationParts属性中---扩展点 ConfigureDefaultFeatureProviders(partManager);的调用,这行代码是创建了一个新的ControllerFeatureProvide…… 阅读全文

1 2 3 4 5 ... 28 下一页