让ChatGPT帮我写shell脚本, 结局很感人

七问ChatGPT, 剑指shell脚本编写

    • step1: 初问
    • step2: 再问
    • step3: 三问
    • step4: 四问
    • step5: 五问
    • step6: 问个der
    • step7: 解决问题
    • step8: 小问一下
    • 关于ChatGPT
    • 思考

昨天浏览一篇关于脚本的技术文章的时候, 偶然看见一篇文章中写道关于mysql备份的脚本.
但是这个脚本时基于本地的MySQL服务写的, 由于我近年来使用的mysql基本上都是docker部署的,
因此, 我就在想, 如何能把脚本改造成docker部署的服务也能使用的脚本呢?
而我, 作为shell脚本学习的劣等生, 就想到了最近很火的一个技术 ——ChatGPT
嗯, 就觉定是你了

阅读提示

  • 如果有些大佬shell脚本玩的非常6的话, 可以跳过此文.
  • 本文使用的是ChatGPT3模型搭建的镜像网站, 现在ChatGPT已经迭代到ChatGPT4了,
    可能已经完全解决了我在这一版所以才所存在的问题. 但目前没有机会使用最新版本的工具,
    因此本文仅表达个人对ChatGPT3这个版本的使用看法.

step1: 初问

一开始我没想那么多, 就把当时的想法表达出来. 所以问题表述没那么详细, 建议描述问题时尽量详细点.
理论上来说, 描述的越详细, 提供的代码就越规范, 正确率高

在这里插入图片描述
可以看到, 真的很神奇, ChatGPT能够基本理解我所提出的问题, 并给我提供了如上图的脚本代码, 而且贴心的为我加上了中文注释. 不仅如此, 在脚本代码提供之后还为我们总结了脚本的过编写核心逻辑
在这里插入图片描述
在此特将脚本分享在下面, 方便各位读者尝试

#!/bin/bash
# 定义变量
MYSQL_CONTAINER_NAME="mysql" # MySQL容器的名称
MYSQL_DB_NAME="mydatabase" # MySQL数据库的名称
BACKUP_DIR="/backup/mysql" # 备份文件存放的目录
# 创建备份目录
mkdir -p $BACKUP_DIR
# 获取当前时间
DATETIME=$(date +%!Y(MISSING)%!m(MISSING)%!d(MISSING)%!H(MISSING)%!M(MISSING)%!S(MISSING))
# 备份MySQL数据库
docker exec $MYSQL_CONTAINER_NAME sh -c 'exec mysqldump --databases $MYSQL_DB_NAME -uroot -p"$MYSQL_ROOT_PASSWORD"' > $BACKUP_DIR/$MYSQL_DB_NAME-$DATETIME.sql
# 压缩备份文件
gzip -f $BACKUP_DIR/$MYSQL_DB_NAME-$DATETIME.sql
# 删除7天前的备份文件
find $BACKUP_DIR -type f -name "*.gz" -mtime +7 -delete

唯一美中不足的是有两点

  • 其在说明创建完脚本后, 是不能够直接运行的, 还缺少一步为脚本授权的操作 chmod +x 脚本名称
  • 在备份MySQL数据库这一步, 执行的脚本中变量 MYSQL_ROOT_PASSWORD没定义, 需要自己在脚本开头定义下

修改上面两点之后执行脚本, 结果仍然执行失败, 错误信息如图所示
在这里插入图片描述

step2: 再问

我们将执行脚本时出现的错误信息反馈给ChatGPT, 看它如何进行回答

在这里插入图片描述
可以看出, ChatGPT确实是根据我的反馈, 对代码进行了适当的修改, 并在结尾说明修改的内容.
我对第10行的单引号改成了双引号,并使用了反斜线来转义双引号,这样就可以在命令替换中使用变量了
为了能够清晰的观察出改动了什么, 这里通过代码比对的工具对两个代码进行比对来查看二者不同

在这里插入图片描述
在这里插入图片描述
并且在比对的时候, 我突意识到如果按照上面的方式进行全量备份的话, 会十分耗时,
因此, 我决定修改问题条件, 并让ChatGPT重新帮助我编写脚本
在这里插入图片描述

step3: 三问

将问题再次进行凝练之后, ChatGPT提供的脚本如下
在这里插入图片描述
相关代码(这部分代码很重要, 后面还会用到)

#!/bin/bash
# 定义变量
MYSQL_CONTAINER_NAME="mysql" # MySQL容器的名称
BACKUP_DIR="/backup/mysql" # 备份文件存放的目录
# 创建备份目录
mkdir -p $BACKUP_DIR
# 获取当前时间
DATETIME=$(date +%!!(MISSING)Y(MISSING)%!!(MISSING)m(MISSING)%!!(MISSING)d(MISSING)%!!(MISSING)H(MISSING)%!!(MISSING)M(MISSING)%!!(MISSING)S(MISSING))
# 获取MySQL中所有的数据库名称
DATABASES=$(docker exec $MYSQL_CONTAINER_NAME sh -c "exec mysql -uroot -p\$MYSQL_ROOT_PASSWORD -s -e 'show databases;'")
# 备份每个数据库
for DB_NAME in $DATABASES
do
  if [ $DB_NAME != "information_schema" ] && [ $DB_NAME != "performance_schema" ] && [ $DB_NAME != "mysql" ]; then
    docker exec $MYSQL_CONTAINER_NAME sh -c "exec mysqldump $DB_NAME -uroot -p\$MYSQL_ROOT_PASSWORD" > $BACKUP_DIR/$DB_NAME-$DATETIME.sql
    gzip -f $BACKUP_DIR/$DB_NAME-$DATETIME.sql
    find $BACKUP_DIR -type f -name "$DB_NAME*.gz" -mtime +7 -delete
  fi
done

这里在代码底部给出了修改的内容

在这里插入图片描述
我们来修改下此脚本, 修改变量MYSQL_CONTAINER_NAME, BACKUP_DIRMYSQL_ROOT_PASSWORD, 然后执行脚本,
可以看到依旧报错, 最明显的错误是 Using a password on the command line interface can be insecure
在这里插入图片描述

step4: 四问

我们继续将这个问题抛给ChatGPT, 看看它是怎么回答
在这里插入图片描述
相关代码

#!/bin/bash
# 定义变量
MYSQL_CONTAINER_NAME="mysql" # MySQL容器的名称
BACKUP_DIR="/backup/mysql" # 备份文件存放的目录
MYSQL_CONFIG_FILE="/root/.my.cnf" # MySQL的配置文件,用于存储用户名和密码
# 创建MySQL的配置文件
echo "[client]" > $MYSQL_CONFIG_FILE
echo "user=root" >> $MYSQL_CONFIG_FILE
echo "password=\$MYSQL_ROOT_PASSWORD" >> $MYSQL_CONFIG_FILE
# 创建备份目录
mkdir -p $BACKUP_DIR
# 获取当前时间
DATETIME=$(date +%!!(MISSING)!(MISSING)Y(MISSING)%!!(MISSING)!(MISSING)m(MISSING)%!!(MISSING)!(MISSING)d(MISSING)%!!(MISSING)!(MISSING)H(MISSING)%!!(MISSING)!(MISSING)M(MISSING)%!!(MISSING)!(MISSING)S(MISSING))
# 获取MySQL中所有的数据库名称
DATABASES=$(docker exec $MYSQL_CONTAINER_NAME sh -c "exec mysql -s -e 'show databases;'")
# 备份每个数据库
for DB_NAME in $DATABASES
do
  if [ $DB_NAME != "information_schema" ] && [ $DB_NAME != "performance_schema" ] && [ $DB_NAME != "mysql" ]; then
    docker exec $MYSQL_CONTAINER_NAME sh -c "exec mysqldump $DB_NAME" > $BACKUP_DIR/$DB_NAME-$DATETIME.sql
    gzip -f $BACKUP_DIR/$DB_NAME-$DATETIME.sql
    find $BACKUP_DIR -type f -name "$DB_NAME*.gz" -mtime +7 -delete
  fi
done
# 删除MySQL的配置文件
rm $MYSQL_CONFIG_FILE

在新的脚本中,核心就是在原来脚本的基础上创建了一个MySQL账号密码信息的配置文件/root/.my.cnf,
通过将重要信息保存在配置文件来解决上面问题
在这里插入图片描述
那么, 我们修改脚本文件中 user, password 信息后, 继续执行如下代码, 可以看到提示账户密码信息不对.

在这里插入图片描述

step5: 五问

本着尽量多依靠ChatGPT的想法, 继续将代码执行的问题反馈
在提问时, 我试图引诱他往这方面考虑, 我们且看他的回答
在这里插入图片描述
相关代码

#!/bin/bash
# 定义变量
MYSQL_CONTAINER_NAME="mysql" # MySQL容器的名称
BACKUP_DIR="/backup/mysql" # 备份文件存放的目录
# 创建备份目录
mkdir -p $BACKUP_DIR
# 获取当前时间
DATETIME=$(date +%!!(MISSING)Y(MISSING)%!!(MISSING)m(MISSING)%!!(MISSING)d(MISSING)%!!(MISSING)H(MISSING)%!!(MISSING)M(MISSING)%!!(MISSING)S(MISSING))
# 获取MySQL中所有的数据库名称
DATABASES=$(docker exec $MYSQL_CONTAINER_NAME sh -c "exec mysql -uroot -p\$MYSQL_ROOT_PASSWORD -s -e 'show databases;'")
# 备份每个数据库
for DB_NAME in $DATABASES
do
  if [ $DB_NAME != "information_schema" ] && [ $DB_NAME != "performance_schema" ] && [ $DB_NAME != "mysql" ]; then
    docker exec $MYSQL_CONTAINER_NAME sh -c "exec mysqldump $DB_NAME -uroot -p\$MYSQL_ROOT_PASSWORD" > $BACKUP_DIR/$DB_NAME-$DATETIME.sql
    gzip -f $BACKUP_DIR/$DB_NAME-$DATETIME.sql
    find $BACKUP_DIR -type f -name "$DB_NAME*.gz" -mtime +7 -delete
  fi
done

可以看到, ChatGPT仅仅在三问给出的代码基础上把代码定义成变量, 然后在执行备份命令时加上这些参数,
这种执行方式结果我们可想而知, 依旧是失败
在这里插入图片描述
这里我已经发现, 对于ChatGPT来说, 现在是陷入了一个循环: 无论是账号密码定义在脚本最开始定义, 还是在脚本执行时添加, 执行备份的时候都会出现Using a password on the command line interface can be insecure, 而将问题再次反馈给ChatGPT之后, 就会给出一种将账号密码信息保存成配置文件之后然后执行的脚本解决方案, 但是在执行其给出的脚本执行仍会出现账号密码不正确的情况, 再然后将问题进行反馈, 得到的脚本几乎与最开始的脚本一样.
在这里插入图片描述

step6: 问个der

就这样, 在我继续追问时, ChatGPT竟然"发脾气了", 不允许继续追问了, 没想到你竟然这么高冷 [○・`Д´・ ○]
所以, 我还是打算自己修改下这部分的代码

在这里插入图片描述

step7: 解决问题

通过step5的分析, 结合自己的判断可知, 当前脚本最好应从step4的提供的代码开始进行调试. 那么话不多说, 我们开始调试吧.

在这里插入图片描述
根据上面脚本执行的报错, 可以看到最明显的错误就是提示账号密码不正确,
而我自己也核对了账号密码也没问题, 于是开始从脚本上面找问题
在这里插入图片描述
ChatGPT也描述这段代码的逻辑, 我们再次嚼一下

在这个脚本中,我们创建了一个MySQL的配置文件/root/.my.cnf,并在其中存储了用户名和密码。我们使用echo命令将用户名和密码写入配置文件。然后在使用mysqldump命令备份MySQL数据库时,不再需要在命令行中输入密码,而是使用配置文件中的密码。备份完成后,我们删除了MySQL的配置文件。希望这个修改后的脚本可以帮助你解决这个问题。

而我发现, 在执行备份命令的时候, 是需要进入MySQL的命令行的, 但是我的MySQL是通过docker部署的.
因此需要进入MySQL的docker容器内的命令行才能执行备份命令.
所以, 存储MySQL信息的配置文件只有在docker容器内才可以被发现并执行.
为了验证自己的猜想, 我决定进入MySQL的docker容器中去查看是否有这个配置文件 (其实不用查看,
因为脚本中就不存在复制MySQL信息的配置文件到Docker容器的命令! 但是抱着眼见为实的想法还是进行了验证)

在这里插入图片描述

这时, 就需要docker cp命令了, 利用docker cp 来将生成的MySQL信息的配置文件复制到容器中, 修改后代码如下docker cp /目录/文件名 容器id:目录 , 这里需要利用docker ps命令来获取当前容器的容器id

#!/bin/bash
# 定义变量
MYSQL_CONTAINER_NAME="mysql" # MySQL容器的名称
BACKUP_DIR="/backup/mysql" # 备份文件存放的目录
MYSQL_CONFIG_FILE="/root/.my.cnf" # MySQL的配置文件,用于存储用户名和密码
# 创建MySQL的配置文件
echo "[client]" > $MYSQL_CONFIG_FILE
echo "user=账号" >> $MYSQL_CONFIG_FILE
echo "password=密码" >> $MYSQL_CONFIG_FILE
# 将生成的文件复制到容器中 ( 这里需要注意容器id应改为自己的 )
docker cp /root/.my.cnf  cf22ab9c8f17:/root
# 创建备份目录
mkdir -p $BACKUP_DIR
# 获取当前时间
DATETIME=$(date +%!!(MISSING)!(MISSING)Y(MISSING)%!!(MISSING)!(MISSING)m(MISSING)%!!(MISSING)!(MISSING)d(MISSING)%!!(MISSING)!(MISSING)H(MISSING)%!!(MISSING)!(MISSING)M(MISSING)%!!(MISSING)!(MISSING)S(MISSING))
# 获取MySQL中所有的数据库名称
DATABASES=$(docker exec $MYSQL_CONTAINER_NAME sh -c "exec mysql -s -e 'show databases;'")
# 备份每个数据库
for DB_NAME in $DATABASES
do
  if [ $DB_NAME != "information_schema" ] && [ $DB_NAME != "performance_schema" ] && [ $DB_NAME != "mysql" ]; then
    docker exec $MYSQL_CONTAINER_NAME sh -c "exec mysqldump $DB_NAME" > $BACKUP_DIR/$DB_NAME-$DATETIME.sql
    gzip -f $BACKUP_DIR/$DB_NAME-$DATETIME.sql
    find $BACKUP_DIR -type f -name "$DB_NAME*.gz" -mtime +7 -delete
  fi
done
# 删除MySQL的配置文件
rm $MYSQL_CONFIG_FILE

可以看到执行脚本之后, 仍然给出了警告信息
在这里插入图片描述
但是, docker 容器里面已经存在MySQL账号密码信息的配置文件(算是成功了一半)
在这里插入图片描述

step8: 小问一下

本着简单的事情问ChatGPT, 复杂的问题自己来解决的思路
继续上面执行的问题交给ChatGPT(没错, 我又偷懒了~)

在这里插入图片描述
根据提示然后继续修改代码
在这里插入图片描述

执行后依然报错, 很容易推测出是转义符号和空格会导致生成备份文件失败,因此我们可以通过-将日期和时间进行连接
在这里插入图片描述
最终代码

#!/bin/bash
# 定义变量
MYSQL_CONTAINER_NAME="mysql" # MySQL容器的名称
BACKUP_DIR="/backup/mysql" # 备份文件存放的目录
MYSQL_CONFIG_FILE="/root/.my.cnf" # MySQL的配置文件,用于存储用户名和密码
# 创建MySQL的配置文件
echo "[client]" > $MYSQL_CONFIG_FILE
echo "user=mysql账号" >> $MYSQL_CONFIG_FILE
echo "password=mysql密码" >> $MYSQL_CONFIG_FILE
# 将生成的文件复制到容器中 ( 这里需要注意容器id应改为自己的 )
docker cp /root/.my.cnf  cf22ab9c8f17:/root
# 创建备份目录
mkdir -p $BACKUP_DIR
# 获取当前时间
DATETIME=$(date +%Y-%m-%d-%H:%M:%S)
# 获取MySQL中所有的数据库名称
DATABASES=$(docker exec $MYSQL_CONTAINER_NAME sh -c "exec mysql -s -e 'show databases;'")
# 备份每个数据库
for DB_NAME in $DATABASES
do
  if [ $DB_NAME != "information_schema" ] && [ $DB_NAME != "performance_schema" ] && [ $DB_NAME != "mysql" ]; then
    docker exec $MYSQL_CONTAINER_NAME sh -c "exec mysqldump $DB_NAME" > $BACKUP_DIR/$DB_NAME-$DATETIME.sql
    gzip -f $BACKUP_DIR/$DB_NAME-$DATETIME.sql
    find $BACKUP_DIR -type f -name "$DB_NAME*.gz" -mtime +7 -delete
  fi
done
# 删除MySQL的配置文件
rm $MYSQL_CONFIG_FILE

在这里插入图片描述

关于ChatGPT

在博客写完之后. 又在b站上面了解下ChatGPT, 特此分享下学习到的内容.

ChatGPT的概念

  • ChatGPT的实质功能是单字接龙
  • 长文由单字接龙的自回归所生成
  • 通过提前训练才能让它生成人们想要的问答, 训练方式是让它按照问答范例来做单字接龙.
    这样训练是为了让它学会能举一反三的规律, 缺点是可能混淆记忆,无法直接查看和更新所学. 且高度依赖学习材料.

ChatGPT 的基础原理(对应下面三个阶段)

  • 无监督学习
  • 监督学习
  • 强化学习

ChatGPT 的三个训练阶段

  • “开卷有益”阶段:
    让ChatGPT对海量互联网文本做单字接龙,以扩充模型的词汇量、语言知识、世界的信息与知识. 使ChatGPT从“哑巴鹦鹉”变成“脑容量超级大的懂王鹦鹉”
  • “模板规范”阶段:
    让ChatGPT对优质对话范例做单字接龙,以规范回答的对话模式和对话内容。使ChatGPT变成“懂规矩的博学鹦鹉”.
  • “创意引导”阶段:
    让ChatGPT根据人类对它生成答案的好坏评分来调节模型, 以引导它生成人类认可的创意回答. 使ChatGPT变成“既懂规矩又会试探的博学鹦鹉’

意义和价值

  • ChatGPT 的革命意义是向人们展示了大语言模型的可行性(为此前几天61岁李开复准备筹备创建新公司).
  • 人类群体通过语言处理来实现知识的创造、继承和应用
  • 机器处理语言有着速度快、记忆大、覆盖广、无疲劳的优点
  • 大语言模型能减轻语言处理工作, 改变人与人、人与机器的协作方式
  • 人类的理解和机器的理解不同,语言模型不知道符号的指代
  • 大语言模型对社会的未来影响,相当于口语、文字、电脑、互联网对社会的影响.
  • 对教育界、学术界、新闻界、内容生产行业的影响颇深. 它将方便人类对既有知识的继承.
    推进教育去培养高层次人才, 也将带来网络安全和社会安全的新挑战

思考

通过以上对话可以得出结论, ChatGPT虽然已经很智能了, 甚至能够强到会写代码了.
但是, 在很多情况下, 给出的代码往往只是对每个单独功能代码的堆砌(个人感觉).
并且, 因为它自身没有编译器, 无法验证自己提供的代码, 也就是说它无法保证代码的正确性, 健壮性以及并发性,.
因此, AI 当前并不能取代人类进行编码. 但ChatGPT在当下可以作为相关技术领域开发人员提升生产力水平的一个辅助工具. 由ChatGPT来写出代码, 技术人员来进行修改和调试. 最终较为快速的实现代码编写.
或许, 不久的将来, 随着AI技术的成熟, 能够最终实现写出的代码复制即可运行, 并且健壮性以及并发性都能得到保证的代码.
那时候, 可能一些程序员的工作就完全会被替代了…
为了不被淘汰, 我们也要学习拥抱新知识, 去学习如何使用它.
一些新工具的出现可能会淘汰调一批人, 但是却大概率淘汰不了会灵活使用这些新工具的人.

在这里插入图片描述


就这样, 在ChatGPT的帮助下, 我以一个外行的身份写完了一个脚本:
实现在docker容器中能够部分mysql指定数据库数据备份
虽然我已经把问题说的尽量简单, 但是一点点的调试确实比较繁琐且费时. 可能是我对ChatGPT不太熟悉的原因
其实后面还可以做成, 开机自启动+每天定时执行脚本功能, 后续有机会我会继续进行分享.
也欢迎大家在评论区相互交流~~~

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

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

相关文章

Idea+maven+spring-cloud项目搭建系列--13 整合MyBatis-Plus多数据源dynamic-datasource

前言:对于同一个系统,不同的租户需要自己独立分隔的数据库(每个数据库的表结构可以是相同的),同时也要支持跨数据源的查询;并且支持分布式事务,如果这里不使用分库分表插件,需要怎样…

使用dd复制将乌班图系统(Ubuntu22.04)完整迁移到新硬盘并扩容

我的折磨历程 开始的时候用乌班图的时候,不懂事,根目录太小了,后来就满了,就就感觉完全没法用,看着现在硬盘贼便宜,去狗东买了个新的硬盘。感觉挂载硬盘并不能解决我的问题,最后选择了保留系统数…

ython和PyTorch实现ChatGPT批量AI智能写作

怎么实现用chatgpt批量写作 ChatGPT是一种针对文本生成的自然语言处理工具,它可以用于生成大量的文本内容。但是,由于ChatGPT需要的计算资源较大,处理时间较长,因此在批量写作时需要考虑花费的时间和资源。 以下是一些步骤&…

又一个免费GPT-4工具 Cursor,程序员写代码将被颠覆

每天都被openai震撼到, 他们家被广为人知的产品是chatgpt,就是那个聊天工具。现在已经开始有越来越多的产品集成openai,比如微软的office,bing。现在又一个工具出现,一个叫Cursor的编辑器已经集成了openai的GPT-4&…

Spring系列(六) --- SpringBoot 与 Servlet 的比较及 Spring 读取配置文件的方式

SpringSpringBoot VS ServletSpring 读取配置文件的方式yml 和 properties 的区别SpringBoot VS Servlet Spring 读取配置文件的方式 1 Value 注解获取单个配置项 如在 yml 中定义一个 qq 音乐的 token; 然后输出, 如下: 2 针对对象的读取: ConfigurationProperties 在 yml 中…

YOLOv5添加辅助训练头

1. 介绍 思路 添加 Aux head 的主要原因是让网络中间层学到更多信息,有更丰富的梯度信息帮助训练。这里要注意,好的梯度信息能够让相同参数量的网络学的更好。 作者原文为: By letting the shallower auxiliary head directly learn the information that lead head has l…

【C#基础】泛型的概念?有什么例子?在游戏中有什么可以使用的地方?

概念 让chatGpt来为我们讲解。 在C#中,泛型是一种允许开发人员编写可重用代码,可以处理多种数据类型的特性。 使用泛型,可以创建类、方法、接口和委托这种不属于任何特定数据的类型,但可以处理满足某些约束条件的任何数据类型。…

手机银行评测系列:北京银行“京彩生活”7.0从用户视角出发,实现沉浸式体验重塑

易观:2023年3月28日,北京银行发布“京彩生活”APP 7.0版本,从旅程再造、特色金融、场景生态、平台联动、协同经营、体验管理和安全守护七大方面全面升级,从用户视角出发,重塑用户旅程,简化操作流程&#xf…

PDF Extra(安卓)

首先,软件是一个一体化的扫描仪和编辑器,工具主要包含有编辑,创建,转换,阅读和查看,其它等等多个功能类型。 编辑里面包含有编辑文本和图像,填写并签署,组织页面,压缩&am…

PLG 基础概念和关键点

什么是 PLGPLG 是 Product Led Growth 的缩写,常翻译为产品增长或产品主导型增长。这个概念最早是风投公司 OpenView 2016年提出的。定义:PLG 是一个聚焦终端用户的增长模型,依赖于产品自身作为获取、转化、扩展客户的核心动力。• 以产品来驱…

入行软件测试7年,才知道原来字节跳动这么容易进

当前就业环境,裁员、失业消息满天飞,好像有一份工作就不错了,更别说高薪了。其实这只是一方面,而另一方面,各大企业依然求贤若渴,高技术人才依然紧缺,只要你技术过硬,拿个年薪50w不是…

vue3快速上手

Vue3快速上手 1.Vue3简介 2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王)耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址:https://github.com/vuejs/vue-next/release…

核心 Android 调节音量的过程

核心 Android 系统提供的调节音量的方法 核心 Android 系统提供了多种调节音量的方法,这些方法主要包括如下这些。 如在 Android Automotive 调节音量的过程 中我们看到的,CarAudioService 最终在 CarAudioDeviceInfo 中 (packages/services/Car/servi…

开源DataX集成可视化项目Datax-Web的使用

上一篇文章我们已经搭建好了 Datax-Web 后台,这篇文章我们具体讲一下如何通过Datax-Web来配置,同步MySQL数据库。 目标 MySql数据库全量同步 1.执行器配置 1、"调度中心OnLine:"右侧显示在线的"调度中心"列表, 任务执行结束后, 将会…

红黑树、B树以及B+树及应用

目录 一.二叉查找树(二叉搜索树,BST) 1.1查找操作 1.2插入操作 1.3删除操作 1.4支持重复数据的二叉查找树 1.5二叉查找树的性能分析 二.平衡二叉查找树 2.1定义 2.2红黑树 2.3为什么红黑树这么受欢迎 三.哈希表为什么不能替代二叉查找树 四.MySQL数据库索…

基于springboot实现学生综合成绩测评系统【源码】分享

基于springboot实现学生综合成绩测评系统演示开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包…

机器学习模型部署PMML

PMML 简介 预测模型标记语言PMML(Predictive Model Markup Language)是一套与平台和环境无关的模型表示语言,是目前表示机器学习模型的实际标准。从2001年发布的PMML1.1,到2019年最新4.4,PMML标准已经由最初的6个模型…

python+vue高校教务选课管理系统django

1. 简介:学生选课系统是学校管理中不可缺少的一部分,它将方便教师发布课程信息、学生浏览课程信息和选课,为两者提供充分的课程信息和方便的查询手段,极大的提高人事劳资管理的效率。 2. 功能:实现基于B/S架构学…

使用SpringBoot+JWT+MybatisPlus实现简单的登陆状态验证

文章目录前言一、JWT是什么?二、使用步骤1.创建项目,导入依赖,配置、引入工具类2.编写LoginController和UserController3.编写跨域拦截器和token验证拦截器4.全局拦截器配置三、业务逻辑四、测试总结前言 登陆功能是每个系统的最基本功能&am…

国内怎么注册chatgpt4-gptchat账号用多久

GPT (Generative Pre-trained Transformer)是一种强大的自然语言处理人工智能技术,可以用于各种语言任务,包括机器翻译、问答系统、自然语言生成等。作为一种技术,GPT并没有一个固定的玩法,但可以通过各种工…