Cursor编程初体验,搭载GPT-4大模型,你的AI助手,自然语言编程来了

news/2024/5/14 15:00:06/文章来源:https://blog.csdn.net/u013810234/article/details/129685006

背景

这两天体验了下最新生产力工具Cursor,基于最新的 GPT-4 大模型,目前免费国内可访问不限次数跨平台,你确定不来体验一把?官方的 Slogan

Build Software. Fast. Write, edit, and chat about your code with GPT-4
In partnership with OpenAI

2023-03-20-Home.jpg

  • 在进行初步体验时,以下几点需要了解:
  1. Cursor编程的上下文是你所在的代码文件,即如果你的文件后缀名为.py,那么在具体沟通时,就无需再出现“使用Python实现……”这种多余的前提,可以用更具体的限制;
  2. 代码生成之后还会提示合并还是丢弃:Accept或者Reject
  3. 支持回滚:如果想撤销某次的PromptCtrl+Z, Reject
  4. 偶尔会出现生产的代码不完整的问题,只需问一句:没写完吧?
  5. Ctrl+K,生成代码或者对选定的代码段进行优化;
  6. Ctrl+L,对聊模式,对编程问题或者选定的代码段直接提问;
  • 支持的语言

2023-03-20-Language.jpg

  • 聊天模式

2023-03-20-Chat.jpg

  • 提示合并还是丢弃

2023-03-20-AcceptReject.jpg
以下通过12个简单的问题,从语言支持语法支持业务场景代码解释代码优化等方面来体验一把这个编程生产力利器。

理论上,对于复杂的任务,只要分解到GPT能够理解的那一步,都可以胜任。程序员的AI助手(它竟然可以帮我们找Bug~~),自然语言编程真的来了。至于下面生成的代码能不能用,还需要进行实际验证,但目测从语言支持、语义理解以及逻辑推理等方面来看,可用率至少80%吧。

语言支持

编程语言支持: TypeScript , HTML , CSS , Python , C , Rust , Go , CSharp , Java , PHP , SQL 等数十种。

Node.js

  • 第一问(源自于我的一篇文章:使用bcryptjs对密码加密时,其校验原理是怎样的?):
    • 使用bcryptjs生成hash
    • 校验密码
// Welcome to Cursor// 1. Try generating with command K on a new line. Ask for a new react component of an error popup.
// 2. Then, select the outputted code and hit chat. Ask if there's a bug. Ask how to improve.
// 3. Try selecting some code and hitting edit. Ask the bot to add a button that updates a statefield.
// 4. To try out cursor on your own projects, go to file menu (top left) and open a folder.
const bcrypt = require('bcryptjs');const password = 'myPassword123';
const salt = bcrypt.genSaltSync(10);
const hash = bcrypt.hashSync(password, salt);console.log(hash);const isMatch = bcrypt.compareSync('myPassword123', hash);
console.log(isMatch); // true

2023-03-20-1.gif

Python

  • 第二问:
    • 编写一个聚类算法,并提供实例
# Welcome to Cursor# 1. Try generating with command K on a new line. Ask for a pytorch script of a feedforward neural network
# 2. Then, select the outputted code and hit chat. Ask if there's a bug. Ask how to improve.
# 3. Try selecting some code and hitting edit. Ask the bot to add residual layers.
# 4. To try out cursor on your own projects, go to the file menu (top left) and open a folder.
# K-Means Clustering Algorithmimport numpy as np
import matplotlib.pyplot as pltclass KMeans:def __init__(self, k=2, max_iter=100):self.k = kself.max_iter = max_iterdef fit(self, X):self.centroids = {}# Initialize centroids randomlyfor i in range(self.k):self.centroids[i] = X[np.random.choice(len(X))]# Iterate until convergence or max iterations reachedfor i in range(self.max_iter):self.clusters = {}for j in range(self.k):self.clusters[j] = []# Assign each data point to the closest centroidfor x in X:distances = [np.linalg.norm(x - self.centroids[c]) for c in self.centroids]closest_centroid = distances.index(min(distances))self.clusters[closest_centroid].append(x)# Update centroids to be the mean of their assigned data pointsfor c in self.clusters:self.centroids[c] = np.mean(self.clusters[c], axis=0)def predict(self, X):predictions = []for x in X:distances = [np.linalg.norm(x - self.centroids[c]) for c in self.centroids]closest_centroid = distances.index(min(distances))predictions.append(closest_centroid)return predictions# Example usage
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
kmeans = KMeans(k=2)
kmeans.fit(X)
predictions = kmeans.predict(X)
colors = ['r', 'g', 'b', 'c', 'm', 'y']
for i in range(len(X)):plt.scatter(X[i][0], X[i][1], color=colors[predictions[i]])
plt.show()

2023-03-20-2.gif

Java

  • 第三问(源自于一道面试题或者日常工作中遇到的一个小需求):
    • 请简单封装一个函数,实现友好时间的功能,要求该函数可输入一个参数【时间戳】,输出一个字符串【三天前、昨天、今天、明天、刚刚(10分钟内)】。
public static String friendlyTime(long timestamp) {long current = System.currentTimeMillis();long diff = current - timestamp;if (diff < 10 * 60 * 1000) {return "刚刚";} else if (diff < 24 * 60 * 60 * 1000) {return "今天";} else if (diff < 2 * 24 * 60 * 60 * 1000) {return "昨天";} else if (diff < 3 * 24 * 60 * 60 * 1000) {return "前天";} else {return "更早之前";}
}

2023-03-20-3.gif

Java

  • 第四问(源自于一道面试题或者日常工作中遇到的一个小需求):
    • 请将一维数组的内容进行正向排序,并进行反向输出。[1,7,8,4,3,6,2,5,9]
public class Array {public static void main(String[] args) {int[] arr = {1, 7, 8, 4, 3, 6, 2, 5, 9};Arrays.sort(arr); // sort the array in ascending orderfor (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();for (int i = arr.length - 1; i >= 0; i--) {System.out.print(arr[i] + " ");}}
}

2023-03-20-4.gif

Java

  • 第五问(源自于一道面试题或者日常工作中遇到的一个小需求):
    • 请将两个数组的交集与并集取出,存放于新的数组中。[q,w,e,r,t],[a,w,d,s,r,g]
public static void main(String[] args) {String[] arr1 = {"q", "w", "e", "r", "t"};String[] arr2 = {"a", "w", "d", "s", "r", "g"};Set<String> set1 = new HashSet<>(Arrays.asList(arr1));Set<String> set2 = new HashSet<>(Arrays.asList(arr2));// IntersectionSet<String> intersection = new HashSet<>(set1);intersection.retainAll(set2);System.out.println("Intersection: " + intersection);// UnionSet<String> union = new HashSet<>(set1);union.addAll(set2);System.out.println("Union: " + union);
}

2023-03-20-5.gif

SQL

  • 数据表结构

2023-03-20-DB.png

  • 第六问:
    • 连接本地数据库:localhost:3306,用户名:root,密码:root,从数据库poetry中的poems读取前10条数据并打引,通过author_id关联poems_author表。
USE poetry;
SELECT poems.title, poems.content, poems_author.name 
FROM poems 
JOIN poems_author 
ON poems.author_id = poems_author.id 
LIMIT 10;

2023-03-20-12.gif

语法支持

  • 第七问:
    • 编码实现从数组中找出最小值:[8, 1, 4, 0, -3]
    • 采用lambda方式实现
public class Min {public static void main(String[] args) {int[] arr = {8, 1, 4, 0, -3};int min = Arrays.stream(arr).min().getAsInt();System.out.println("The minimum value in the array is: " + min);}
}

2023-03-20-6.gif

业务场景

  • 第八问(源自于实际的物联网开发场景):
    • 使用YoLoV5编码实现识别烟雾火焰
import torch
from PIL import Image
import requests
from io import BytesIO# Load model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)# Define class names
class_names = ['smoke', 'fire']# Define function to predict image
def predict_image(image_url):# Load image from URLresponse = requests.get(image_url)img = Image.open(BytesIO(response.content))# Predict imageresults = model(img)# Get class predictionsclass_predictions = results.pred[0].softmax(-1)# Get class indicesclass_indices = class_predictions.argmax(-1).tolist()# Get class namesclass_names_predicted = [class_names[i] for i in class_indices]return class_names_predicted

2023-03-20-7.gif

  • 第九问:
    • 连接本地数据库:localhost:3306,用户名:root,密码:root,从数据库poetry中的poems读取前5条数据并打印。
    • 把这5条数据导出到Excel
    • 发送到钉钉
import java.sql.*;public class Database {public static void main(String[] args) {try {// Connect to local databaseString url = "jdbc:mysql://localhost:3306/poetry";String user = "root";String password = "root";Connection connection = DriverManager.getConnection(url, user, password);// Read first 5 rows from poems tableStatement statement = connection.createStatement();ResultSet resultSet = statement.executeQuery("SELECT * FROM poems LIMIT 5");// Print resultswhile (resultSet.next()) {System.out.println(resultSet.getString("title") + " by " + resultSet.getString("author") + " " + resultSet.getString("content") + " " + resultSet.getString("style") + " " + resultSet.getString("dynasty") + " " + resultSet.getString("notes"));}// Export results to ExcelResultSetToExcelConverter converter = new ResultSetToExcelConverter(resultSet);converter.export("poems.xlsx");DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/robot/send?access_token=ACCESS_TOKEN");OapiRobotSendRequest request = new OapiRobotSendRequest();request.setMsgtype("text");OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();text.setContent("Results from database query: " + resultSet.toString());request.setText(text);client.execute(request);// Close connectionresultSet.close();statement.close();connection.close();} catch (SQLException e) {System.out.println("Error connecting to database: " + e.getMessage());}}
}

2023-03-20-8.gif

  • 第十问(源自于实际的物联网开发场景):
    • 编码实现一个OPC UA客户端
import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
import org.eclipse.milo.opcua.stack.core.types.builtin.QualifiedName;
import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
import org.eclipse.milo.opcua.stack.core.types.structured.ReadValueId;
import org.eclipse.milo.opcua.stack.core.types.structured.ReadValueId;
import org.eclipse.milo.opcua.stack.core.types.structured.ReadResponse;
import org.eclipse.milo.opcua.stack.core.types.structured.WriteValue;
import org.eclipse.milo.opcua.stack.core.types.structured.WriteResponse;import java.util.concurrent.CompletableFuture;public class OPCClient {public static void main(String[] args) throws Exception {// Create a new OPC UA clientOpcUaClient client = OpcUaClient.create("opc.tcp://localhost:12686/example");// Connect to the serverclient.connect().get();// Read a value from the serverNodeId nodeId = new NodeId(2, "/HelloWorld/ScalarTypes/Int32");ReadValueId readValueId = new ReadValueId(nodeId, QualifiedName.DEFAULT, null, null);CompletableFuture<ReadResponse> readResponse = client.read(readValueId);Variant value = readResponse.get().getResults()[0].getValue().getValue();System.out.println("Value: " + value);// Write a value to the serverWriteValue writeValue = new WriteValue(nodeId, QualifiedName.DEFAULT, new Variant(42));CompletableFuture<WriteResponse> writeResponse = client.write(writeValue);Boolean success = writeResponse.get().getResults()[0].isGood();System.out.println("Write success: " + success);// Disconnect from the serverclient.disconnect().get();}
}

2023-03-20-9.gif

代码解释

public static int test(int n) {int cnt = 0;while(0 != n) {n = n & (n - 1);++cnt;}return cnt;}public static void main(String[] args) {System.out.println(test(15));}
}

先将上述代码写入一个.java文件,然后 Ctrl+K 输入以下问题。

  • 第十一问:
    • 解释下这段代码(或者:这段代码是什么意思?)
// 这段代码是一个Java程序,其中定义了一个名为test的静态方法,该方法接受一个整数参数n并返回一个整数。该方法使用while循环计算n的二进制表示中1的个数,并将其存储在cnt变量中。最后,该方法返回cnt的值。在main方法中,该程序调用test方法并将15作为参数传递给它,然后将结果打印到控制台。

2023-03-20-10.gif

代码优化

public class Improve {public static int test(int n) {int cnt = 0;while(0 != n) {if((n & 1) != 0) {++cnt;n >>= 1;				} else {n >>= 1;				}			}return cnt;	}public static void main(String[] args) {System.out.println(test(15));}
}

先将上述代码写入一个.java文件,然后选择需要优化的代码段或者全选, Ctrl+K 输入以下问题。

  • 第十一问:
    • 优化下
public class Improve {public static int test(int n) {int cnt = 0;cnt = Integer.bitCount(n);return cnt;}public static void main(String[] args) {System.out.println(test(15));}
}

从结果看, Cursor 将我们自己编写的通过位运算右移计算二进制表示中1的个数,改成了一个内置方法调用。

2023-03-20-11.gif

小总结

其实,除了上述的入门体验,还有其他很多事情可以做,eg: 编写测试用例,解决力扣编程问题,网络爬虫,制作网页,小游戏编程,you name it,这一切仅受限于我们的想象力。

以下引用池建强的一句话:

人们需要警惕的是,当年因为汽车的诞生而失业的马车夫,他们并不是转行去干司机了,而是真失业了,或者去干别的苦力活。
当上时代司机的,是另一群人。


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_273942.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

差速巡线机器人设计-良好(80+)的报告-2023

如何提分&#xff1f;将一篇报告提升20分以上呢&#xff1f;差速巡线机器人设计-及格&#xff08;60&#xff09;的报告-2023_zhangrelay的博客-CSDN博客姓名&#xff1a; 学号&#xff1a; 实践项目1名称&#xff1a;差速巡线机器人设计 60分&#xff1a;缺乏思考、没有对比、…

攻防世界-first

题目下载&#xff1a;下载 IDA载入 __int64 __fastcall main(int a1, char **a2, char **a3) {__useconds_t *v3; // rbpunsigned int v4; // eaxint *v5; // rcxint v6; // edxunsigned int v7; // eaxsigned __int64 v8; // rcx__int64 v9; // raxchar v10; // blchar v11;…

为知笔记私有化部署

前言 原来一直买的为知笔记vip&#xff0c;但是随着内容越来越&#xff0c;并且不好整理。同时还不能一键全部导出&#xff0c;最后决定将数据迁移到自己服务器上。为止笔记提供了docker镜像&#xff0c;这也方便了部署&#xff08;其实吧&#xff0c;从产品层面&#xff0c;可…

C++ Lambda表达式的常见用法

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

【Django 网页Web开发】05. 数据库操作,实战用户管理(保姆级图文)

目录1. 安装第三方模块2. ORM2.1 自己手动创建数据库2.2 django连接数据库2.3 建表语句写在哪里&#xff1f;2.4 建表语句写好后如何运行生效&#xff1f;3. 操作表3.1 创建数据表3.2 修改数据表4. 操作数据4.1 插入数据4.2 删除数据4.3 修改数据4.4 查询数据5. 实战&#xff1…

pytest学习和使用22-allure特性 丨总览中的Environment、Categories设置以及Flaky test使用

22-allure特性 丨总览中的Environment和Categories设置1 Environment设置1.1 设置方法1.2 创建文件2 Categories设置2.1 设置方式2.2 创建文件3 关于Flaky test3.1 Flaky test介绍3.2 产生Flaky Tests的原因3.3 Flaky安装3.4 Flaky使用3.5 小结小结1小结2如下图&#xff0c;我们…

开始学习HTML5

HTML5 简介 HTML5是HTML最新的修订版本&#xff0c;2014年10月由万维网联盟&#xff08;W3C&#xff09;完成标准制定。 HTML5的设计目的是为了在移动设备上支持多媒体。 HTML5简单易学。 什么是 HTML5? HTML5 是下一代 HTML 标准。 HTML , HTML 4.01的上一个版本诞生于 1…

如何将3张图片横向拼在一起

如何将3张图片横向拼在一起&#xff1f;遇到这个情况你可能马上就会说出很多图片处理的app&#xff0c;比如用某秀秀来操作&#xff0c;但是也有很多时候某秀秀也处理不了的。当我们的图片非常大&#xff0c;图片数量很多&#xff0c;图片的格式不是jpg那种通用的格式&#xff…

如何监控和诊断JVM堆内和堆外内存使用?

第26讲 | 如何监控和诊断JVM堆内和堆外内存使用&#xff1f; 上一讲我介绍了 JVM 内存区域的划分&#xff0c;总结了相关的一些概念&#xff0c;今天我将结合 JVM 参数、工具等方面&#xff0c;进一步分析 JVM 内存结构&#xff0c;包括外部资料相对较少的堆外部分。 今天我要…

Java栈和队列·下

Java栈和队列下2. 队列(Queue)2.1 概念2.2 实现2.3 相似方法的区别2.4 循环队列3. 双端队列 (Deque)3.1 概念4.java中的栈和队列5. 栈和队列面试题大家好&#xff0c;我是晓星航。今天为大家带来的是 Java栈和队列下 的讲解&#xff01;&#x1f600; 继上一个讲完的栈后&…

视听场景理解经典任务

文章目录1. 视听场景理解简介2. 主要任务2.1 Audio-visual Event Localization (AVE) 2.2 Audio-visual Video Parsing &#xff08;AVVP&#xff09;2.3 Audio-visual Question Answering &#xff08;AVQA&#xff09;2.4 Audio-visual Segmentation &#xff08;AVS&#xf…

STM32中systick中断的优先级

1、systick中断的优先级 systick为内核外设中断&#xff0c;与普通外设中断的优先级有些区别&#xff0c;并没有抢占优先级和子优先级的说法。 对于M3来说内核外设的中断优先级由内核SCB这个外设的寄存器&#xff1a;SHPRx&#xff08;x1.2.3&#xff09;来配置。 内核外设的中…

佳明安夺(Garmin Enduro)续航简单测试

文章目录&#xff08;一&#xff09;结论&#xff08;二&#xff09;测试条件&#xff08;2.1&#xff09;Garmin Connect APP 日历&#xff08;2.2&#xff09;具体运动记录&#xff08;2.3&#xff09;步数情况&#xff08;三&#xff09;补充和探讨&#xff08;3.1&#xff…

信捷PLC通过EtherCat与松下伺服通讯时的断电重启时会产生巨大异响的Bug原因及解决办法

信捷PLC支持ethercat通讯协议,可以和支持ethercat的从站通讯,像伺服驱动器或IO站点等。 其中,信捷XLH系列PLC在与松下伺服驱动器通讯时,有一个比较严重的问题,就是PLC断电再上电时,有时候会出现bug,这个bug的现象是,使用PLC的指令方式去控制伺服轴动作时,会产生巨大的…

kali内置超好用的代理工具proxychains

作者&#xff1a;Eason_LYC 悲观者预言失败&#xff0c;十言九中。 乐观者创造奇迹&#xff0c;一次即可。 一个人的价值&#xff0c;在于他所拥有的。所以可以不学无术&#xff0c;但不能一无所有&#xff01; 技术领域&#xff1a;WEB安全、网络攻防 关注WEB安全、网络攻防。…

Mybatis的课程总结

1.mybatis Mybatis主要是对代码进行少写&#xff0c;分别加入核心配置文件和mapper映射文件&#xff0c; 核心配置文件主要是为了连接数据库&#xff0c;mapper映射文件是为了编写sql语句 1.如何配置mybatis ①先创建一个moudle ②然后配置jar包 ③然后进行mybatis的分层 bean…

pcb成型板aoi检测,6种PCB板常用的检测方法

6种PCB板常用的检测方法&#xff0c;主要包括&#xff1a;PCB板人工目测、PCB板在线测试、PCB板功能测试、自动光学检测、自动X光检查、激光检测系统1、PCB板人工目测使用放大镜或校准的显微镜&#xff0c;利用操作人员视觉检查来确定电路板合不合格&#xff0c;并确定什么时候…

我们再次看看 ARB 女巫空投策略,做到知彼知己,不敢说百战不殆

女巫检测选项该项目旨在从 Arbitrum 空投中删除 Sybil 地址&#xff0c;确保只有合法用户才能收到空投代币。方法我们使用链上数据来识别同一用户拥有的相关地址&#xff0c;并使用来自 Nansen、Hop 和 OffChain Labs 的数据删除实体地址&#xff0c;例如网桥、交易所和智能合约…

Verilog学习之触发器与modelsim仿真

目录 一、前言 二、触发器介绍 三、测试文件代码 一、前言 ​ ​本文将学习常见类型触发的verilog编写&#xff0c;结合仿真结果来熟悉。 二、触发器介绍 ​ ​触发器在verilog中的作用主要是具有存储作用&#xff0c;由时钟信号来触发改变存储内容&#xff0c;较常见…

银河麒麟v10系统硬盘挂载

一、查看磁盘 近期由于centos系统停止更新用户服务器要更换银河麒麟v10&#xff0c;拿到服务器后使用lsblk -f或fdisk -l命令查看磁盘名称 可以看到sdb200G就是要挂载的硬盘&#xff0c;还没有uuid需要初始化才可以挂载。 二、分区 分区命令&#xff1a; fdisk /dev/【你的…