对不同的业务以及不同的中间件提问题的方式不同 首先我们在每一种类型的提问前都需要对AI进行定义也就是让AI明白你提问的问题是那个行业的那个技术
定义身份话术 常见的
#接下来的对话你将以一名java高级开发工程师的身份和我聊天
接下来的对话你将以一名XXXX的身份和我聊天
提问技巧
首先定义身份
#接下来的对话你将以一名java高级开发工程师的身份和我聊天
然后介绍下自己的项目场景 然后提出自己的问题
#我们的项目是一个百万级别的并发项目,在这个项目中遇到mysql 8.0 版本下的sql 优化问题
针对自己的问题提出追问
#根据你的优化建议出一份优化后的代码/sql
尝试解决自己的问题
#代入代码后出现了XXX异常
解决中出现的问题
tip: 回答过长我们用发“继续”在上下文短没问题,长的话可能出现问题
可以使用下面这句:你刚因为回复长度限制问题中断了,我需要你继续回答
数据库相关问题案例
案例一
这段 SQL 查询语句是用于获取最近更新的前 10 个销售订单(dwd_sales_order)及其关联的交付信息(dwd_sales_order_delivery_info)。
单表里面有40多万数据 , sql语句在分页前进行orderBy执行效率立刻下降,有什么好的建议
SELECT
*
FROM
(
SELECT
*
FROM
dwd_sales_order a # 订单交付表
WHERE
a.trans_type = '0' #trans_type 订单交易类型
AND a.is_obsolete = '0' #is_obsolete 是否过时
ORDER BY
a.update_date DESC # 根据日期进行排序
LIMIT 0, # 执行分页
10
) t
LEFT JOIN dwd_sales_order_delivery_info f ON t.order_id = f.sales_order_id #
表链接 指定 order_id(订单ID) 和 sales_order_id(订单交付ID) 进行关联
ORDER BY
t.update_date DESC # 再次根据日期进行排序
问题分析
mysql数据库版本: 8.0
问题前提条件: 单表有40多万数据
出现问题: sql执行orderBy执行效率下降
常规思路:优化全表扫码查询只查询相关字段
优化子查询
基于上面的问题向GPT进行提问
接下来的对话你将以一名数据库管理工程师的身份和我聊天目前我们使用的数据库版本为mysql 8.0
在单表中数据有40多万 sql语句在分页前进行orderBy执行效率立刻下降 请根据上述的业务sql
给出优化建议 具体sql如下:
SELECT
*
FROM
(
SELECT
*
FROM
dwd_sales_order a
WHERE
a.trans_type = '0'
AND a.is_obsolete = '0'
ORDER BY
a.update_date DESC
LIMIT 0,
10
) t
LEFT JOIN dwd_sales_order_delivery_info f ON t.order_id = f.sales_order_id
ORDER BY
t.update_date DESC
#OpenAI底层非中文,不能在SQL语句后跟中文
我的业务要求sql语句查询高效 并且支持高并发业务场景 基于这个业务前提请再给我一份优化后的sql语句并详细解释一下优化后的sql语句
案例二
项目中 一张客户表有1亿条记录,如果要删除其中的10万条记录 能有什么处理方法和步骤
问题分析
mysql数据库版本: 8.0
问题前提条件:
表结构: 这个表包含了客户的基本信息,包括 ID、名字、邮箱、电话、地址、城市、省、邮政编码、
国家等。还有两个时间戳字段,用于记录该记录的创建时间和最后更新时间
出现问题: 要删除其中的10万条记录
常规思路: 根据条件进行执行删除 分页
基于上面的问题向GPT进行提问
接下来的对话你将以一名数据库管理工程师的身份和我聊天 我的数据库版本为 mysql8.0 在项目中一张客户表有1亿条记录,其中表包含了客户的基本信息,包括 ID、名字、邮箱、电话、地址、城市、省、邮政编码、国家等。还有两个时间戳字段,用于记录该记录的创建时间和最后更新时间 要删除其中的符合条件10万条记录 请提供思路以及实现步骤 同时详细为什么这样做
请在上述基础上进行性能优化 提供实现具体代码 并详细阐述过程 在代码中要有详细注释
环境问题提问技巧以及解决思路
案例一
刚看了一集docker视频,使用docker启动redis,那么redis再docker中的配置文件在哪
里?容器中redis的配置文件不能用默认的,所以想修改它
问题分析
环境记录 : centos 7.6.1
dokcer/redis版本: CE(社区版本最新的) /5.0.2
问题前置条件: 使用docker启动redis
问题内容: redis在docker中的配置文件在哪里?
常规思路: 直接使用 -v 文件:docker目录(挂载名)进行目录挂载
基于上面的问题向GPT进行提问
接下来的对话你将以一名运维工程师的身份和我聊天 我的环境 centos 7.6.1 docker的版本是最新稳定版 我的redis版本为 5.0.2 我使用docker部署了redis 我的默认配置文件在哪里 请问如何修改 以及我如何将它挂载到本地文件
GPT辅助源码学习提升
源码阅读准备: 在开始阅读源码之前,确保对Java语言有足够的了解,熟悉常用的设计模式和数据结构。对于GPT,你可以询问一些Java编程知识或设计模式的问题,帮助更好地理解源码。
案例一
问题分析 :
nacos源码问题 : 版本 2.0
问题描述:在nacos中的源码中 为什么这个set方法一调用就往服务端发了个请求
grpcconn.setPayloadstreamobserver(payloadstream0bserver);
常规理解:这段代码的目的是为gRPC连接设置一个观察者,以便在异步通信中处理从服务器返回的负载数据流。
基于上面的问题向GPT进行提问
接下来的对话你将以一名java高级开发工程师的身份和我聊天
在nacos 2.0版本中的源码里面 为什么这个set方法一调用就往服务端发了个请求 请详细阐述
grpcconn.setPayloadstreamobserver(payloadstream0bserver);
类似问题:
那这个ID是怎么生成获取的 final string connectionId = CONTEXT_KEY_CONN_ID.get();
问题分析
nacos源码问题 : 版本 2.0
问题描述:requestBistream 中的这个ID是怎么生成获取的 final string connectionId =CONTEXT_KEY_CONN_ID.get();
字面意思:
基于上面的问题向GPT进行提问
接下来的对话你将以一名java高级开发工程师的身份和我聊天
在nacos 2.0版本中的源码里面 requestBistream 中的这个ID是怎么生成获取的 final string
connectionId = CONTEXT_KEY_CONN_ID.get();
总结性技巧
- 源码阅读准备: 在开始阅读源码之前,确保对Java语言有足够的了解,熟悉常用的设计模式和数据结构。对于GPT,可以询问一些Java编程知识或设计模式的问题,以帮助更好地理解源码。
- 提出问题: 在阅读源码时,有针对性地提出问题,例如询问某个类或方法的作用、某个设计模式在代码中的应用等。通过与GPT的互动,了解代码的功能和结构。
- 请求代码解释: 当遇到难以理解的代码片段时,可以将代码片段复制并粘贴到GPT中,请求解释代码的功能和作用。GPT可以帮助理解这部分代码的逻辑和执行过程。
- 代码重构与优化: 如果觉得源码中有可以改进的地方,可以请教GPT关于重构和优化的建议。GPT可以提供一些实用的代码优化建议,帮助提高代码质量。
- 编写测试用例: 为了确保源码的稳定性和可靠性,可以请教GPT如何编写针对特定功能的测试用例。GPT可以为提供测试用例的示例和建议,帮助编写有效的测试。
- 学习新技术: 当在阅读源码时,可能会遇到一些不熟悉的技术和框架。在这种情况下,可以向GPT咨询相关技术的使用方法和最佳实践,以便更好地理解和应用这些技术。
- 问题总结与反馈: 在源码学习过程中,整理遇到的问题和疑惑,并向GPT进行反馈。GPT可以帮助总结这些问题的解决方案,巩固在源码学习过程中的收获