之前写过基于ChatGPT M3模型开放接口的聊天、代码程序https://qqil.cn,后面由于帐号免费配额该程序一直停用了。后来用的https://chatbot.theb.ai (需要外网)。ChatGPT带给我的影响真的挺大的。主要原因之一我是做软件开发相关工作的,写代码是习以为常的事。经常会造很多轮子(程序语言中译为封装好的组件、库),或者遇到问题会在搜索引擎找各种的轮子。这就潜移默化的浪费了很多时间在造轮子上。举个小例子:
理解问题生成可用代码
有一个需求是这样。我拿到了一个Excel,里面是业务系统导出的部门数据。如图:
需要转换成如下JSON格式:
[{
"code":"5ef36f6269a4cfc3",
"parentCode":"0",
"name":"测试部",
"child":[
{
"code":"b9bced6d9d9c1b71",
"parentCode":"5ef36f6269a4cfc3",
"name":"测试一部",
"child":[]
},
{
"code":"de2adbb31fea9168",
"parentCode":"5ef36f6269a4cfc3",
"name":"测试二部",
"child":[]
}
]
},{
"code":"g239ef6548a45ab1",
"parentCode":"0",
"name":"研发部",
"child":[
...
]
}]
所以就需要我们自己做两件事,1.读取excel数据,组装json 2.处理父子关系组装json
第一步比较简单直接看第二步,其实就是列表转为树形结构的算法,应该通常通过递归实现的。(假设前提不知道怎么实现)
通过ChatGPT提问形象的问题如下https://chatbot.theb.ai:java写一个可以解析反斜杠隔开的部门层级关系递归完成拼接父子级关系json
它给出的回答包含了代码和解释:
// 以下是一个Java示例,可以解析反斜杠隔开的部门层级关系递归完成拼接父子级关系json:
// 该示例中,parseDepartments方法将输入字符串解析为一个Map对象,其中键为部门名称,
// 值为其父级部门名称列表。然后,generateJson方法使用递归算法生成JSON字符串,
// 表示部门及其子部门的层次结构。最后,main方法演示了如何调用这两个方法并输出结果。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DepartmentParser {
public static void main(String[] args) {
String input = "A\\B\\C,D\\E,F,G,H\\I,J,K\\L\\M,N,O\\P,Q,R,S,T\\U,V,W,X,Y,Z";
Map<String, List<String>> departments = parseDepartments(input);
String json = generateJson(departments, null);
System.out.println(json);
}
public static Map<String, List<String>> parseDepartments(String input) {
Map<String, List<String>> departments = new HashMap<>();
String[] parts = input.split(",");
for (String part : parts) {
String[] names = part.split("\\\\");
for (int i = 0; i < names.length; i++) {
String name = names[i];
if (!departments.containsKey(name)) {
departments.put(name, new ArrayList<>());
}
if (i > 0) {
String parentName = names[i - 1];
departments.get(name).add(parentName);
}
}
}
return departments;
}
public static String generateJson(Map<String, List<String>> departments, String parent) {
StringBuilder sb = new StringBuilder();
sb.append("[");
boolean first = true;
for (Map.Entry<String, List<String>> entry : departments.entrySet()) {
String name = entry.getKey();
List<String> parents = entry.getValue();
if ((parent == null && parents.isEmpty()) || parents.contains(parent)) {
if (!first) {
sb.append(",");
}
sb.append("{\"name\":\"").append(name).append("\",");
sb.append("\"children\":").append(generateJson(departments, name)).append("}");
first = false;
}
}
sb.append("]");
return sb.toString();
}
}
将该代码放到我的JAVA在线运行环境跑下,改下DepartmentParser类名为Main,可直接执行。
将给的输入改成多级的结构为:A\\B\\C,A\\B\\D,A
则输出为:
[
{
"name":"A",
"children":[
{
"name":"B",
"children":[
{
"name":"C",
"children":[
]
},
{
"name":"D",
"children":[
]
}
]
}
]
}
]
所以如果通过代码简单的二次处理转换就可以直接应用到业务中,将会节省很多开发时间。
它能做到真正的理解你的真实需求,并快速准确的给出答案。这是我们所需要的。
案例2
提问:mongodb添加几张表的只读权限帐号
回答:
要将MongoDB中的几张表指定为只读权限,您可以执行以下步骤:
- 创建一个具有只读访问权限的新角色。您可以使用以下命令创建一个角色,并将其指定为只读:
use yourDatabaseName
db.createRole(
{
role: "readRole",
privileges: [
{ resource: { db: "yourDatabaseName", collection: "table1" }, actions: [ "find" ] },
{ resource: { db: "yourDatabaseName", collection: "table2" }, actions: [ "find" ] },
{ resource: { db: "yourDatabaseName", collection: "table3" }, actions: [ "find" ] }
],
roles: []
}
)
此命令将创建一个名为“readRole”的新角色,并将其授予对“table1”,“table2”和“table3”表中只读访问的特权。
- 创建一个新的只读用户,然后将该用户分配给新角色。您可以使用以下命令创建一个新用户,并将它指定为只读用户:
db.createUser(
{
user: "readOnlyUser",
pwd: "readOnlyPassword",
roles: [ { role: "readRole", db: "yourDatabaseName" } ]
}
)
在这里,“readOnlyUser”是新用户的用户名,“readOnlyPassword”是新用户的密码,“readRole”是刚才创建的只读角色,“yourDatabaseName”是包含要读取的表的数据库名称。
完成上述步骤后,新用户现在可以使用它的凭据登录到您的MongoDB数据库,并只能读取指定的表。
更多软件开发工作中用法
- 生成代码模板
- 理解并重构代码
- 程序语言转换
- 解释代码
- 生成SQL
- 生成程序文档
日常生活相关
- 对基本的问题进行问答
- 对文字做摘要说明,比如会议纪要和书本
- 语言语法纠正
- 语言翻译
- 文字生成颜色
- 美食制作配方生成
- 生成点评意见,比如餐馆点评
- 段落关键字提取
职业相关
- 生成面试问题帮助面试者准备面试
- 创作一个短故事
- 对各种问题进行头脑风暴,比如创业者项目,或者公司新项目开展
- 帮助产品取名
- 产品广告设计
遇到不熟练的知识点以往会在互联网上海底捞针,搜索很久才找到方案,但是chatgpt很轻松地找出结果,可以节约大量事情,但是在互联网搜索的过程中会接触到其他知识点,收获的更多,也有点好处
确实可以减少一些工作,另外可以为部分内容提供不错的方向和思路