当前位置: 首页 > 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;银行行长不知道如何通过数字化转型提…...

N32G45x学习笔记--- gpio引脚复用

关于gpio的引脚复用需要开启复用时钟 RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO, ENABLE);官方引脚复用: 芯片上电默认使能 SWD-JTAG 调试接口,调试接口被映射到 GPIO 端口上 禁止 JTAG 使能SWJ-DP /* 禁止 JTAG 使能SWJ-DP */GPIO_ConfigPinRemap(GPIO_RMP_SW_JTAG_S…...

ArcGIS Pro中使用深度学习的高分辨率土地覆盖制图

本文非常详细的讲解了利用深度学习在高分辨率土地覆盖制图的应用&#xff0c;本文作者&#xff1a;Amin Tayyebi&#xff0c;文章从数据准备到训练U-Net模型等等细节都有讲解。本译文只是使用谷歌翻译而成。文章可能有错误语句及不通顺情况&#xff0c;所以仅供参考学习。有需要…...

【学习笔记】「NOI2018」冒泡排序

从题解的角度来说&#xff0c;这是一道简单题。不过考场上在没有任何人提示的情况下要想出正确的结论其实并不容易。 我自己做这道题的时候&#xff0c;因为没有想清楚题目给出的下界能取到的充要条件是什么&#xff0c;所以到了很晚才猜到结论&#xff0c;以至于难以为继。 …...

【Ruby学习笔记】3.Ruby 语法及数据类型

前言 本章介绍Ruby的语法和数据类型。 Ruby 语法 让我们编写一个简单的 Ruby 程序。所有的 Ruby 文件扩展名都是 .rb。所以&#xff0c;把下面的源代码放在 test.rb 文件中。 实例 #!/usr/bin/ruby -wputs "Hello, Ruby!";在这里&#xff0c;假设您的 /usr/bin …...

华为OD机试题【字符匹配】用 Java 解 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:字符匹配 题目 给你一个字符串…...

JavaScript数组对象的浅拷贝与深拷贝(二)实现对象深拷贝的方法(5种)

JavaScript实现对象深拷贝的方法&#xff08;5种&#xff09;知识回调&#xff08;不懂就看这儿&#xff01;&#xff09;场景复现实现对象深拷贝的五种方法1.json暴力转化2.es6扩展运算符3.for in循环遍历对象4.Object.assign()对象的合并5.利用循环和递归的方式实现对象浅拷贝…...

iPhone屏幕适配(之屏幕尺寸)

Device screen size 各设备屏幕尺寸 DeviceDimensions (portrait)iPhone 14 Pro Max430x932 pt (1290x2796 px 3x)iPhone 14 Pro393x852 pt (1179x2556 px 3x)iPhone 14 Plus428x926 pt (1284x2778 px 3x)iPhone 14390x844 pt (1170x2532 px 3x)iPhone 13 Pro Max428x926 pt (…...

手机变砖修复神器之 8 个的 Android手机系统修复工具

如果您经常在 Android 设备上遇到问题&#xff0c;则需要找到最好的 Android 系统修复应用程序并使用它来一劳永逸地解决您的问题。如果您不确定执行此操作的好应用是什么&#xff0c;我们在这里为您列出了一些最好的 Android 修复软件。 虽然现在出货的 Android 手机相当稳定…...

稀疏矩阵(Sparse Matrix)

1.背景 在数据科学和深度学习等领域常会采用矩阵格式来存储数据&#xff0c;但当矩阵较为庞大且非零元素较少时&#xff0c; 如果依然使用dense的矩阵进行存储和计算将是极其低效且耗费资源的。所以&#xff0c;通常我们采用Sparse稀疏矩阵的方式来存储矩阵&#xff0c;提高存储…...

深度学习中的损失函数

文章目录一. Loss函数1. 均方差损失&#xff08;Mean Squared Error Loss&#xff09;2. 平均绝对误差损失&#xff08;Mean Absolute Error Loss&#xff09;3.&#xff08;Huber Loss&#xff09;4. 分位数损失&#xff08;Quantile Loss&#xff09;5. 交叉熵损失&#xff0…...