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 核心技能矩阵 | 技能 | 要点 | …… 阅读全文

WPF学习笔记5:MVVM

2022-09-04 23:46:49

摘要:一、了解MVVM 1. 什么是MVVM 一种设计模式 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 为什么需要MVVM?解决什么问题? 降低耦合、独立开发、逻辑重用(Xamarin MAUI多平台应用)、可测试 响应式布局 2. 控件交互到MVVM模式的转变 控件交互:基于控件的功能开发 -**MVVM**模式 代码/项目结构 Models: Views: ViewModels: 3. MVVM绑定模式下的信息交互 数据类型:INotifyPropertyChanged接口 public event PropertyChangedEventHandler? PropertyChanged; 执行事件,发公告 ContextMenu,注意:命令的数据源的指定 行为动作:ICommand接口 public event EventHandler? CanExecuteChanged; public bool CanExecute(object? parameter) public void Execute(object? parameter) 是不是所有控件都有Command属性?是不是所有动作都可以使用Command? 无法绑定的动作如何处理? 4. MVVM绑定扩展 无法绑定的对象属性 通过附加属性进行扩展 无法绑定的动作事件 (InputBindings: ) 单击鼠标左键 :LeftClick 双击鼠标左键:LeftDoubleClick 单击鼠标中键 :MiddleClick 双击鼠标中键:MiddleDoubleClick 单击鼠标右键:RightClick 双击鼠标右键:RightDoubleClick 不执行任何操作:None 旋转鼠标滚…… 阅读全文

WPF学习笔记4:控件模版

2022-08-29 23:42:50

摘要:一、WPF控件的组成 1. 逻辑与呈现的分离 ​ 控件模板旨在成为展示详细信息的自包含单元,对外部用户和对象(包括 Style 对象)不可见。 操作控件模板内容的唯一方法是在当前控件模板中。 2. 模板修改:显示区域的内容重组 Button模板Template:渲染对象、属性值的关联、触发器 样式与模板 3. 基础控件如何显示的? 功能最强大,布局最灵活的容器 主要属性配置: ColumnDefinitions(ColumnDefinition)、RowDefinitions(RowDefinition)、ShowGridLines、IsSharedSizeScope(SharedSizeGroup)、给子项控件使用:Grid.Row Grid.Column 使用场景:广泛,不知道用什么布局,就用Grid,意外(WrapPanel) 二、模板中的基础控件 1. 基础元素的呈现:DrawingContext DrawRect TextBlock Border OnRender 2. 控件模板案例解析 Label、GroupBox、CheckBox、RadioButton、ToggleButton TextBox/PasswordBox、TabControl/TabItem、TreeView/TreeViewItem、ListBox/ListBoxItem、ListView/ListViewItem、Menu/MenuItem ComboBox、ScrollViewer、ProgressBar、Slider Calendar/DatePicker、DataGrid 模板的添加与修改 默认模板:wpf\src\Microsoft.DotNet.Wpf\src\Themes 3. 控件模板案例解析 基本控件的使用 名称、基本作用表现、特征 常用属性:尺寸、定位、显示内容 常用事件:点击、输入 控件的特殊属性 Style:用来统一设置控件属性的对象 Resources:资源管理,存放可共用的数据(变量、样式、模板) Template:用来控制控件的呈现 目的: 三、属性与绑定 1. WPF的数据关系 绑定关系:数…… 阅读全文

WPF学习笔记3:基本布局

2022-08-28 17:14:17

摘要:一、界面布局 1. 布局原则 不用显式的方式设定元素的尺寸 不使用屏幕坐标来指定位置 2. 常用布局控件与布局处理 Grid StackPanel DockPanel WrapPanel UniformGrid Canvas InkCanvas Border(装饰控件:背景色/边框 圆角 子对象也只能一个) 3. Grid 功能最强大,布局最灵活的容器 主要属性配置: ColumnDefinitions(ColumnDefinition)、RowDefinitions(RowDefinition)、ShowGridLines、IsSharedSizeScope(SharedSizeGroup)、给子项控件使用:Grid.Row Grid.Column 使用场景:广泛,不知道用什么布局,就用Grid,意外(WrapPanel) 4. StackPanel 最简单的布局容器之一 主要属性配置:Orientation-调整排列方向、FlowDirection 使用场景:图文并显、工具栏 可以Grid代替 5. WrapPanel 唯一一个不能被Grid替代的布局控件,水平方向排列,过程中当前子项出界了,进行折行 主要属性配置:Orientation-调整排列方向 使用场景:桌面式图标排列、搜索历史关键词排列 6. DockPanel 通过设置Dock停靠进行布局 主要属性配置:LastChildFill、DockPanel.Dock 使用场景:应用的主窗口布局(标题栏、状态栏、工具栏、菜单栏) 7. UniformGrid 另一种行列风格布局,自动生成统一一致的行列 主要属性配置:Columns、Rows 指定的是当前区域均分多少行和列,不存在指定行高和列宽 使用场景:9宫格的功能区域、图表 8. Canvas 通过精确坐标定位放置子元素 主要属性配置:Canvas.Left、Top、Right、Bottom 使用场景:组态、组件封装(仪表) 9. InkCanvas 支持任意笔画输入的画布组件 主要属性配置: 使用场景:手写墨迹识别(不是手写图像识别):文字、图形 …… 阅读全文

WPF学习笔记2:3D绘图

2022-08-22 12:37:23

摘要:一、基本对象 1. WPF 3D WPF 中 3D 功能的设计初衷并非提供功能齐全的游戏开发平台。 WPF 中的 3D 图形内容封装在 Viewport3D 元素中,该元素可以参与二维元素结构。 该图形系统将 Viewport3D 视为一个二维视觉元素,就像 WPF 中的许多其他元素一样。 Viewport3D 充当三维场景中的窗口(即视区)。 更准确地说,它是 3D 场景所投影到的图面。 2. 模型3D场景 3D视口 坐标系 点、线、面、三角顶点网格 材质 光源 相机 3. 3D对象模型结构 MeshGemetry3D Positions TraiangleIndices TextureCoordinates:如何对应? 4. 相机 OrthographicCamera:正交 PerspectiveCamera:透视 基本属性: Position:相机的空间坐标(X,Y,Z) LookDirection:观察方向,向量,相机观察口朝向 FieldOfView(透视相机属性) / Width(正交相机属性):视野范围(焦距),一个值 UpDirection:相机上方方向,控制相机观察口旋转 FarPlaneDistance:远景距离,大于这个距离的场景不渲染 NearPlaneDistance:近景距离,小于这个距离的场景不渲染 5. 3D对象模型材质 DiffuseMaterial:漫反射,反射场景光效果 EmissiveMaterial:自发光,类似于电灯 SpecularMaterial:全反射,可以映射场景 贴图(平面贴图、曲面贴图-地球) 背面材质 6. 3D对象模型光源 AmbientLight:环境光 DirectionalLight:平行光 PointLight:点光源 SpotLight:聚光灯 相关属性 Color:灯光颜色 Direction:光线方向(平行光、聚光灯) Position:光源坐标(点光源、聚光灯) Range:灯光范围(点光源) InnerConeAngle:内光柱照射角度(聚光灯) OuterConeAngle:外光柱照射角度(聚光灯) 7. 3D…… 阅读全文

WPF学习笔记1:基础控件

2022-08-21 19:58:54

摘要:一、基础控件汇总 | 控件类型 | 主要控件 | | ------------ | ------------------------------------------------------------ | | 按钮控件 | Button、RepeatButton、RadioButton | | 数据显示控件 | TextBlock、Label、Image、ItemsControl**、ListView、ListBox、DataGrid、DocumentViwer | | 输入控件 | TextBox、RichTextBox、CheckBox、ComboBox、DatePicker、PasswordBox、Slider、ProgressBar | | 菜单导航控件 | MenuItem、ContextMenu、ToolBar、TreeView、TabControl、Expander | | 信息提示控件 | Popup、Window、PrintDialog、ToolTip | | 布局控件 | Grid、StackPanel、WrapPanel、DockPanel、UniformGrid、Canvas、InkCanvas、**Border | | 图形控件 | Line、Rectangle、Ellipse、Polyline、Polygon、Path | | 其他控件 | ScrollViwer、GroupBox、ViewBox | 1. 常用属性 尺寸(宽高)、定位(Margin,HorizontalAlignment、VerticalAlignment)、颜色(Background、Foreground)、信息显示(Text、Content、ListViewItem、ListBoxItem、DataGridTextColumn…..) 鼠标事件、键盘事件 特别属性 RadioButton:GroupName 集合控…… 阅读全文

[推荐] kubectl 常用命令总结

2021-01-25 11:40:01

摘要:# 查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空间 kubectl get pod kubectl get pod -n kube kubectl get pod -o wide # 查看 RC 和 service 列表, -o wide 查看详细信息 kubectl get rc,svc kubectl get pod,svc -o wide kubectl get pod pod-name -o yaml # 显示 Node 的详细信息 kubectl describe node 192.168.0.212 # 显示 Pod 的详细信息, 特别是查看 pod 无法创建的时候的日志 kubectl describe pod pod-name eg: kubectl describe pod redis-master-tqds9 # 根据 yaml 创建资源, apply 可以重复执行,create 不行 kubectl create -f pod.yaml kubectl apply -f pod.yaml # 基于 pod.yaml 定义的名称删除 pod kubectl delete -f pod.yaml # 删除所有包含某个 label 的pod 和 service kubectl delete pod,svc -l name=label-name # 删除所有 Pod kubectl delete pod --all # 查看 endpoint 列表 kubectl get endpoints # 执行 pod 的 date 命令 kubectl exec pod-name -- date kubectl exec pod-name -- bash kubectl exec pod-name -- ping 10.24.51.9 # 通过bash获得 pod 中某个容器的TTY,相当于登录容器 kubectl exec -it pod-name -c container-name -- bash eg: kubectl exec -it redis-master-cln81 -- bash # 查看容器的日志 kubectl logs pod-name kube…… 阅读全文

Go学习笔记(十一):编写⾼性能的Go程序

2020-05-13 13:11:55

摘要:别让性能被“锁”住 我们来看一段代码 var cache map[string]string const NUM_OF_READER int = 40 const READ_TIMES = 100000 func init() { cache = make(map[string]string) cache[a] = aa cache[b] = bb } func lockFreeAccess() { var wg sync.WaitGroup wg.Add(NUM_OF_READER) for i := 0; i NUM_OF_READER; i++ { go func() { for j := 0; j READ_TIMES; j++ { _, err := cache[a] if !err { fmt.Println(Nothing) } } wg.Done() }() } wg.Wait() } func lockAccess() { var wg sync.WaitGroup wg.Add(NUM_OF_READER) m := new(sync.RWMutex) for i := 0; i NUM_OF_READER; i++ { go func() { for j := 0; j READ_TIMES; j++ { m.RLock() _, err := cache[a] if !err { fmt.Println(Nothing) } m.RUnlock() } wg.Done() }() } wg.Wait() } 这段程序一个没有锁,一个有锁。我们看一下测试结果 func BenchmarkLockFree(b *testing.B) { b.ResetTimer() for i := 0; i b.N; i++ { lockFreeAccess() } } //169 6618595 ns/op 77 B/op 1 allocs/op func BenchmarkLock(b *testing.B) { b.R…… 阅读全文

Go学习笔记(十):构建Restful服务

2020-05-09 17:30:49

摘要:json解析 内置json解析 利⽤反射实现,通过FeildTag来标识对应的json 值 type BasicInfo struct { Name string `json:name` Age int `json:age` } type JobInfo struct { Skills []string `json:skills` } type Employee struct { BasicInfo BasicInfo `json:basic_info` JobInfo JobInfo `json:job_info` } var jsonStr = `{ basic_info:{ name:Mike, age:30 }, job_info:{ skills:[Java,Go,C] } } ` func TestEmbeddedJson(t *testing.T) { e := new(Employee) err := json.Unmarshal([]byte(jsonStr), e) if err != nil { t.Error(err) } fmt.Println(*e) if v, err := json.Marshal(e); err == nil { fmt.Println(string(v)) } else { t.Error(err) } } 更快的JSON解析 EasyJSON 采用代码生成而非反射 安装:go get -u github.com/mailru/easyjson/... (后面的...需要带上) 使⽤:easyjson -all 结构定义.go (会生成一些代码) 1.比如我们有结构文件 struct_def.go type BasicInfo struct { Name string Age int } type JobInfo struct { Skills []string } type Employee struct { BasicInfo BasicInfo JobInfo JobInfo } 2.执行 easyjson -all struct_def.go会生成 struct_def_easyjs…… 阅读全文