当前位置: 首页 > news >正文

ChatGPT使用案例之写代码

ChatGPT使用案例之写代码

可以对于许多开发者而言又惊又喜的是我们可以使用ChatGPT 去帮我们完成一些代码,或者是测试用例的编写,但是正如我们提到的又惊又喜,可能开心的是可以解放一部分劳动力,将自己的精力从繁琐无聊的一些任务中脱离出来,但是担心的又是如果ChatGPT真的能做到写代码,那我们开发的小伙伴又何去何从呢,引用之前在[数仓建模] 专栏里的一句话

时代的变迁,生死的轮回,历史长河滔滔,没有什么是永恒的,只有变化才是不变的,技术亦是如此,当你选择互联网的那一刻,你就相当于乘坐了一个滚滚向前的时代列车,开往未知的方向,不论什么样的技术架构只有放在当前的时代背景下,才是有意义的,人生亦是如此。

既然革命或者变革是必然的,我们还不如早点拥抱!

案例一 SQL

SQL 是我们日常工作中,接触最频繁的编程语言了,不论你是数据开发、后端开发都需要了解SQL,下面我们就看一下ChatGPT 能不呢帮我们写一些简单的SQL呢,以及质量怎么样

简单SQL

下面是我给它的prompt ,也就是提示信息

我有一张表customers, 有这些列CustomerId, FirstName, LastName, Company, Address, City, State, Country, PostalCode, Phone, Fax, Email, SupportRepId
帮我写一句SQL 查询State是Texas,FirstName 是Jane 的记录

下面是它给我的返回,简直完美,因为还提示了我如果只需要特定列,就可以写列名字进去,而不是使用*

image-20230327185100830

复杂SQL

上面的例子比较简单,下面我们看一个逻辑复杂一些的SQL,其实你可以自己写一下看自己能不能写出来,需要用多就

我有一张数据表,叫做 user_events,有两个字段分别叫做 user_id 以及 event_date
请帮我写一句SQL,统计每天的新用户数。新用户的定义是,首次在表内出现,或者连续90天没有在表内出现之后再一次出现。

这是它给我的返回,并且还给了一些解释

image-20230327185728719

下面是它针对它给出的代码的解释,其实很明显这个代码是有问题的逻辑不对,但是应该是可以运行的,至于哪里有问题你可以思考一下

这个查询语句使用了一个子查询来计算每个用户的第一次事件日期(如果用户之前未出现,则为 null)。然后,它计算了每个用户在每个事件日期之前是否符合新用户的定义。最后,查询按照事件日期进行分组,计算每天符合条件的新用户数。具体来说,子查询中的 MIN(event_date) OVER (PARTITION BY user_id) 计算出每个用户的第一次事件日期。然后,DATEDIFF(day, first_event_date, event_date) 函数计算出每个用户的第一次事件日期和当前事件日期之间的天数差。如果这个差值小于等于90天,或者第一次事件日期为null,则该用户符合新用户的定义。最后,查询使用 GROUP BY 子句按照事件日期进行分组,并使用 COUNT(*) 函数计算每天符合条件的新用户数。

当我发现有问题的时候,这个时候你可以去提示它,但是我没有,我把这个问题重新输入了一下,这是它给我的返回

SELECT event_date, COUNT(*) as new_users
FROM (SELECT user_id,MIN(event_date) as first_event_dateFROM user_eventsGROUP BY user_id
) as t1
WHERE first_event_date = event_date OR DATEDIFF(day, first_event_date, event_date) > 90
GROUP BY event_date

我只能说它比上次聪明了一点点,但是这次的代码不能运行,因为子查询中根本没有把event_date 字段带出来,后面还多次使用了,肯定报错,但是聪明在哪里呢?

  1. 子查询里面做了数据去重,使得数据量减少了
  2. 连续90天 的条件写对了,是大于90 不是小于等于90

这里我还是再次输入了上面的问题,这次它终于对了

SELECT event_date,COUNT(DISTINCT user_id) AS new_user_count
FROM (SELECT user_id, event_date,ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY event_date) AS row_num,LAG(event_date, 1) OVER (PARTITION BY user_id ORDER BY event_date) AS prev_event_dateFROM user_events
) AS user_events_with_row_num
WHERE row_num = 1 OR DATEDIFF(day, prev_event_date, event_date) > 90
GROUP BY event_date;

它还给出了解释,重点是LAG 函数

这个查询首先使用了一个子查询来给每个用户的事件数据分配一个行号(使用 ROW_NUMBER() 函数),并将每个用户的前一个事件日期(使用 LAG() 函数)与当前事件日期一起作为一个结果列返回。在外部查询中,我们根据以下条件来筛选新用户:用户是表中的第一个事件,也就是 row_num = 1。
用户在过去90天内没有出现过,也就是当前事件日期与前一个事件日期之间的天数大于90天。
最后,我们使用 GROUP BY 子句和 COUNT(DISTINCT ...) 函数来统计每天的新用户数。

我们可以看到这个代码是正确的,所以我们可以看到ChatGPT 虽然可以帮我们写代码,但是我们还是需要自己去判断写的对不对

案例二 Java

这里我们直接去力扣上找两个题让ChatGPT 来做

简单题目

输入:

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文数,而 123 不是。 请帮我写一段Java 代码实现上述方法

输出:

以下是一个Java方法,可以判断一个整数是否为回文数:

public boolean isPalindrome(int x) {if (x < 0) { // 负数不是回文数return false;}int temp = x;int reverse = 0;while (temp != 0) {int digit = temp % 10;reverse = reverse * 10 + digit;temp /= 10;}return x == reverse;
}

下面是它的解释

该方法首先检查输入整数是否为负数,因为负数不是回文数。接下来,将输入整数的每个数字提取出来并反转它们。这可以通过取模运算和整数除法来完成。在每一次循环中,将提取的数字添加到一个反转的数字中。例如,如果输入整数为 123,首先将提取数字 3 并将其添加到反转数字中,变成 3。接下来,提取数字 2 并将其添加到反转数字中,变成 32。最后,提取数字 1 并将其添加到反转数字中,变成 321。最后,比较原始整数和反转后的整数是否相等,如果相等,则返回 true,否则返回 false。

这个代码写的是对的,我们直接在力扣上测试

image-20230326141956564

复杂题目

我们在力扣上找了一个相对复杂的题目,我们的prompt 如下

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:
输入:n = 1
输出:["()"]请帮我写一段Java代码实现上述方法

ChatGPT 竟然写出来了,而且它还给你写在了一个类中,那我简单提示一下它,写个方法就行

image-20230327192754338

提示之后,我们就不验证这个代码的正确性了,直接提交试试看

image-20230327192951640

我们发现测试顺利通过

image-20230327193037943

案例三 Python

还会上面那个题目,我们稍微修改一下提示,也就是让ChatGPT 用python 写出来

def generateParenthesis(n):if n == 0:return ['']ans = []for c in range(n):for left in generateParenthesis(c):for right in generateParenthesis(n-1-c):ans.append('({}){}'.format(left, right))return ans if n > 0 else []

这个代码在力扣上报错,提示找不到generateParenthesis,我们值需要稍微改动一下,将generateParenthesis 改成self.generateParenthesis 即可,即可通过测试

image-20230327193516695

总结

这一节我们主要尝试使用ChatGPT去给我们写代码,可以看到常见的代码它得确能帮我们写出来,但是很多时候可能或多或少是有点问题的,这个时候我们可以尝试改变我们的prompt 引导ChatGPT 产生一个正确的结果。

后面我们继续尝试ChatGPT 的其他场景,以达到解放我们的生产力的目的,虽然有时候写出的代码可能存在bug,但是只要我们稍加调整即可,而且对于ChatGPT而言它不像我们,它擅长各种编程语言。

相关文章:

ChatGPT使用案例之写代码

ChatGPT使用案例之写代码 可以对于许多开发者而言又惊又喜的是我们可以使用ChatGPT 去帮我们完成一些代码&#xff0c;或者是测试用例的编写&#xff0c;但是正如我们提到的又惊又喜&#xff0c;可能开心的是可以解放一部分劳动力&#xff0c;将自己的精力从繁琐无聊的一些任务…...

蓝桥杯刷题第二十五天

第一题:全球变暖 题目描述 你有一张某海域 NxN 像素的照片&#xff0c;"."表示海洋、"#"表示陆地&#xff0c;如下所示&#xff1a; ....... .##.... .##.... ....##. ..####. ...###. ....... 其中"上下左右"四个方向上连在一起的一片陆地组成一…...

【牛客网】

目录知识框架No.1 前缀和NC14556&#xff1a;数圈圈NC14600&#xff1a;珂朵莉与宇宙NC21195 &#xff1a;Kuangyeye and hamburgersNC19798&#xff1a;区间权值NC16730&#xff1a;runNC15035&#xff1a;送分了qaqNo.2 字符串&#xff1a;小知识点&#xff1a;基于KMP算法的…...

SpringBoot中的事务

事务 Springboot有3种技术方式来实现让加了Transactional的方法能使用数据库事务&#xff0c;分别是"动态代理(运行时织入)"、“编译期织入”和“类加载期织入”。这3种技术都是基于AOP(Aspect Oriented Programming&#xff0c;面向切面编程)思想。&#xff08;在网…...

Zookeeper客户端Curator5.2.0节点事件监听CuratorCache用法

Curator提供了三种Watcher&#xff1a; &#xff08;1&#xff09;NodeCache&#xff1a;监听指定的节点。 &#xff08;2&#xff09;PathChildrenCache&#xff1a;监听指定节点的子节点。 &#xff08;3&#xff09;TreeCache&#xff1a;监听指定节点和子节点及其子孙节点。…...

C++ using:软件设计中的面向对象编程技巧

C using:理解头文件与库的使用引言using声明a. 使用方法和语法b. 实际应用场景举例i. 避免命名冲突ii. 提高代码可读性c. 注意事项和潜在风险using指令a. 使用方法和语法b. 实际应用场景举例i. 将整个命名空间导入当前作用域ii. 代码组织和模块化using枚举a. C11的新特性b. 使用…...

修建灌木顺子日期

题目 有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修剪灌木。直到修剪了最左的灌木后再次调转方…...

深入学习JavaScript系列(七)——Promise async/await generator

本篇属于本系列第七篇 第一篇&#xff1a;#深入学习JavaScript系列&#xff08;一&#xff09;—— ES6中的JS执行上下文 第二篇&#xff1a;# 深入学习JavaScript系列&#xff08;二&#xff09;——作用域和作用域链 第三篇&#xff1a;# 深入学习JavaScript系列&#xff…...

Mybatis中的Map的使用和模糊查询的需求实现及其防SQL注入优化

文章目录一.Map的使用和模糊查询的需求实现及其防SQL注入优化1.1 Map的使用1.2 模糊查询的实现1.2.1 防SQL注入优化1.2.2 总结一.Map的使用和模糊查询的需求实现及其防SQL注入优化 1.1 Map的使用 替换之前的根据ID查询信息&#xff1a; 1.编写接口&#xff1a; User getUse…...

【redis】redis缓存更新策略

目录一、缓存更新策略二、主动更新策略三、Cache Aside Pattern3.1 删除缓存还是更新缓存?3.2 如何保证缓存与数据库的操作同时成功或失败&#xff1f;3.3 先操作缓存还是先操作数据库3.3.1 先删缓存再删库3.3.2 先删库再删缓存一、缓存更新策略 1.内存淘汰&#xff1a;不用自…...

LeetCode刷题--复制带随机指针的链表

复制带随机指针的链表1.题目2.解题思路3.完整代码1.题目 题目链接: https://leetcode.cn/problems/copy-list-with-random-pointer/ 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 …...

关于我的第一台电脑 华硕

2011年买的&#xff0c;第一台电脑是华硕 U36KI243SD 13.3英寸 白色 i5 1G独显 USB3.0 500G 当时花了5699&#xff0c;着实是一笔巨款&#xff0c;我同学看了一眼就说“我C&#xff0c;这本真好”。 买它主要还是因为好看。当时win7也才开始流行&#xff0c;感觉用上这个本&…...

【华为OD机试 2023最新 】 最大化控制资源成本(C++ 100%)

文章目录 题目描述输入描述输出描述备注用例题目解析C++题目描述 公司创新实验室正在研究如何最小化资源成本,最大化资源利用率,请你设计算法帮他们解决一个任务混部问题: 有taskNum项任务,每个任务有开始时间(startTime),结束时间(endTime),并行度(parallelism)…...

leetcode 有序数组的平方(977)

题目 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&#xff0c;数组变…...

文本三剑客之awk

文本三剑客之awkawk命令的简要处理流程awk命令的执行过程NR输出分割符和输入分割符案例awk命令引用shell变量awk的几个内置函数流控数组awk命令的简要处理流程 awk命令的执行过程 awk BEGIN{commands} pattern{commands} END{commands}files 执行BEGIN {commands}语句块中的语…...

RK3568平台开发系列讲解(驱动基础篇)IS_ERR函数的使用

🚀返回专栏总目录 文章目录 一、IS_ERR函数二、内核错误码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 IS_ERR 函数的使用。 一、IS_ERR函数 对于任何一个指针来说,必然存在三种情况: 一种是合法指针一种是 NULL (也就是空指针)一种是错误指针(也就…...

特殊的类之注解

注解&#x1f699;注解的入门和作用以及原理示例注解的方法名就是属性名Retention的作用Target的作用注解的属性设置默认值天生我材必有用&#xff0c;千金散尽还复来。——唐代李白《将进酒》 在Java中&#xff0c;注解实际上是特殊类型的接口&#xff0c;当我们使用注解时&am…...

商业分享:盲盒电商开启电商新可能

盲盒&#xff0c;顾名思义&#xff0c;一个看不出里面装着什么东西的盒子。当你看不见盲盒里的商品时&#xff0c;你会思考盲盒里可能装着什么&#xff0c;它会诱发你的好奇心&#xff0c;而在好奇心的促使下&#xff0c;你会不由自主地买一个拆开来看&#xff0c;刚好大多数盲…...

【计算机架构】如何计算 CPU 时间

目录 0x00 响应时间和吞吐量&#xff08;Response Time and Throughput&#xff09; 0x01 相对性能&#xff08;Relative Performance&#xff09; 0x02 执行时间测量&#xff08;Measuring Execution Time&#xff09; 0x03 CPU 时钟&#xff08;Clocking&#xff09; 0x…...

银行数字化转型导师坚鹏:银行行长如何进行数字化转型

银行行长如何进行数字化转型 ——数字化转型背景下重塑银行行长核心竞争力 授课背景&#xff1a; 很多银行存在以下问题&#xff1a;银行行长不知道如何进行数字化转型&#xff1f;银行行长不清楚银行数字化能力模型的内涵&#xff1f;银行行长不知道如何通过数字化转型提…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...