获取商铺信息,以及商铺信息的增删改查

本文章主要讲述如何对商铺信息进行基本的增删改查操作,及数据库对比。

1、获取首页仪表盘统计数据接口

待收费金额:

SELECT count(1) as count,IFNULL(sum(total),0)as sum FROM payment_bill WHERE enabled_mark = '1' AND pay_state='0'

欠费数据:

SELECT count(1) as count,IFNULL(sum(total),0)as sum FROM payment_bill WHERE enabled_mark = '1' AND pay_state='0'  and deadline<now()

1.1 接口测试分析

结合数据库进行了验证点的分析

1.1.1 何时要进行数据库方面的验证?

1、接口数据的读取与数据库有关

2、接口的测试点要进行数据来源的验证

3、接口处理后会导致数据库记录的变化,例如新增、更新、删除

4、满足1的前提下,满足2或3,建议追加数据库的验证点

1.1.2  如何编写数据库的验证点

1、统计,查询

和开发进行确认,明确对应的SQL命令

2、新增、更新、删除

要与select命令相对应

如注册了一个用户,可以用表名,手工表打开,人工核对一下,编写SQL的select命令

如更新了一个用户,手机号。数据库查看表名,手工表打开,人工核对一下,编写SQL的select命令。

1.2 接口冒烟测试

1.3接口脚本研发

技术试验:

数据库测试脚本

# 试验1:数据库访问试验
# 导入类库
import pymysql
# 打开数据库连接
db=pymysql.connect(host='vip.51env.net',user='readonly',password='******',port=30001,db='zh******',charset='utf8')
# 用cursor()方法获取操作游标
cursor = db.cursor()
# 使用execute方法执行SQL语句
sql="SELECT count(1) as count,IFNULL(sum(total),0)as sum FROM payment_bill WHERE enabled_mark = '1' AND pay_state='0'"# 使用fetchall()方法获取一条数据
cursor.execute(sql)
data=cursor.fetchall()
data1=data[0][0]
data2=data[0][1]
print(data1,data2)
# 关闭数据库连接
db.close()

实验结果:

95 9157423.75Process finished with exit code 0

注意:这个连接数据库时要先装一个pymysql的库。目前程序用的是1.0.2

1.3.1 获取首页仪表盘统计数据接口 V1.0

主要任务:面向过程的方法封装,主要封装三个方法。

方法1:获取接口实际返回结果

方法2:获取数据库统计结果

方法3:进行二者的比对

注意:注意:逐一封装,逐一调试

方法定义好之后,进行调用。

实现方式:可以分两种

第一种是单一变量,4个变量代表4个参数,def check_result(count1,count2,sum1,sum2)

第二种返回值,一次返回多个:

return data1,data2

默认类型是元组类型

# **********************************************************
# 获取首页仪表盘统计数据接口V1.0脚本实现
# 功能:常量参数传递
# 问题1:token的值放在请求的headers中是否可行?
# ***********************************************************# 导入类库
import requests,csv
import pymysql
#************************************************************************
# 获取接口的实际统计返回结果
def getdashboard_result():# 定义接口地址url = 'https://svr-6-9009.share.51env.net/prod-api/statistics/dashboard'# 定义token参数token = "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjBlNTJhNGUyLWRjNzgtNDg5ZC05Y2E1LTUzYTcyOTI5ZWZjMiJ9.EcPEAg1J86qBwwCxzFm7V2pQ_2FgZuVYTPIaWLqJKPxdKNO3BJ8Y5BVz3YvZpia3XagmmlCB0JywQfXPBZMgHg"header = {'Authorization': 'Bearer ' + token}# 发送请求并获取response = requests.get(url, headers=header).json()print(response)# 获取代缴费的记录总数data_exp1 = response['data']['needPay']['count']print(data_exp1)# 获取待缴费的金额data_exp2 = response['data']['needPay']['sum']print(data_exp2)return data_exp1,data_exp2
#************************************************************************#定义数据库统计结果获取def getdatabase_result():# 打开数据库连接db=pymysql.connect(host='vip.51env.net',user='readonly',password='zhaoxin@2021',port=30001,db='zhaoxinpms',charset='utf8')# 用cursor()方法获取操作游标cursor = db.cursor()# 使用execute方法执行SQL语句sql="SELECT count(1) as count,IFNULL(sum(total),0)as sum FROM payment_bill WHERE enabled_mark = '1' AND pay_state='0'"# 使用fetchall()方法获取一条数据cursor.execute(sql)data=cursor.fetchall()print("1",data)data1=data[0][0]data2 = data[0][1]# 关闭数据库连接db.close()return data1,data2
#******************************************************************
#进行接口实际结果和数据库统计结果的比对
def check_result(count1,count2,sum1,sum2):# 比对记录总数是否一致if count1==count2:print("统计的记录总数一致")else:print("统计的记录总数不一致")# 比对记录总数是否一致if sum1==sum2:print("统计的总金额一致")else:print("统计的总金额不一致")#*******************************************************************************
if __name__ == '__main__':#调用接口运行,获取实际结果jsondata=getdashboard_result()# print(jsondata)#调用数据库检查点获取方法,获取数据库的统计结果resultdata=getdatabase_result()# print(resultdata)check_result(jsondata[0], resultdata[0],jsondata[1], resultdata[1])

1.3.2  数据结构和参数的优化V2.0

1、直接使用元组进行比对

实际返回结果的内容通过return来获取,

数据库返回结果要注意去掉元组的嵌套

2、对比方法的参数从4个调整为2个

def check_result(data1,data2):

比对的方法,

# **********************************************************
# 获取首页仪表盘统计数据接口V2.0脚本实现
# 功能:常量参数传递
# 问题1:将测试数据的类型由独立变量改为元组类型
# ***********************************************************# 导入类库
import requests,csv
import pymysql
#************************************************************************
# 获取接口的实际统计返回结果
def getdashboard_result():# 定义接口地址url = 'https://svr-6-9009.share.51env.net/prod-api/statistics/dashboard'# 定义token参数token = "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjcxNjI1NGE0LTUwY2YtNDJhYi1hYTUzLWUyNmRiNDM2NzBlNyJ9.tNoHS2La_nGWG_q-KKlfBRUtFSpocYFuONMl2BklWMMKYCz-o762dXnIwgul7bT1uw_Qay7mH1Va1eDMsgIgWg"header = {'Authorization': 'Bearer ' + token}# 发送请求并获取response = requests.get(url, headers=header).json()print(response)data1=response['data']['needPay']# # 获取代缴费的记录总数# data_exp1 = response['data']['needPay']['count']# print(data_exp1)# # 获取待缴费的金额# data_exp2 = response['data']['needPay']['sum']# print(data_exp2)return data1
#************************************************************************#定义数据库统计结果获取def getdatabase_result():# 打开数据库连接db=pymysql.connect(host='vip.51env.net',user='readonly',password='******',port=30001,db='******',charset='utf8')# 用cursor()方法获取操作游标cursor = db.cursor()# 使用execute方法执行SQL语句sql="SELECT count(1) as count,IFNULL(sum(total),0)as sum FROM payment_bill WHERE enabled_mark = '1' AND pay_state='0'"# 使用fetchall()方法获取一条数据cursor.execute(sql)data2=cursor.fetchall()[0]# print("1",data)# 关闭数据库连接db.close()return data2
#******************************************************************
#进行接口实际结果和数据库统计结果的比对
def check_result(data1,data2):print("比对前的打印",data1,data2)if data1==data2:print("统计的总金额一致")else:print("统计的总金额不一致")#*******************************************************************************
if __name__ == '__main__':#调用接口运行,获取实际结果jsondata=getdashboard_result()# print(jsondata)#调用数据库检查点获取方法,获取数据库的统计结果resultdata=getdatabase_result()# print(resultdata)check_result(jsondata,resultdata)

1.3.3  数据结构和参数的优化

直接使用字典进行比对,

实际返回结果本身就是字典类型

data_exp=response['data']['needPay']

数据库返回结果转为字典类型,将元素的数据提取出来,再将其逐一添加到字典中。

# **********************************************************
# 获取首页仪表盘统计数据接口V3.0脚本实现
# 功能:常量参数传递
# 问题1:将测试数据的类型由独立变量改为字典类型
# ***********************************************************# 导入类库
import requests,csv
import pymysql
#************************************************************************
# 获取接口的实际统计返回结果
def getdashboard_result():# 定义接口地址url = 'https://svr-6-9009.share.51env.net/prod-api/statistics/dashboard'# 定义token参数token = "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjU3MTA5ZDU2LTNiYjYtNGI5ZC04YmEwLWE1MDZiNzk5MDNiZiJ9.xSGXVDBbagKmwWMxB0ojnZr6LyY1_LtDbFHrasN1GVAlImHe7WiMnqYqWNCgWUJcd0icnVWmnJ86uflwYki9Fw"header = {'Authorization': 'Bearer ' + token}# 发送请求并获取response = requests.get(url, headers=header).json()print(response)data_exp=response['data']['needPay']# # 获取代缴费的记录总数# data_exp1 = response['data']['needPay']['count']# print(data_exp1)# # 获取待缴费的金额# data_exp2 = response['data']['needPay']['sum']# print(data_exp2)return data_exp
#************************************************************************#定义数据库统计结果获取def getdatabase_result():dicdata={}# 打开数据库连接db=pymysql.connect(host='vip.51env.net',user='readonly',password='zhaoxin@2021',port=30001,db='zhaoxinpms',charset='utf8')# 用cursor()方法获取操作游标cursor = db.cursor()# 使用execute方法执行SQL语句sql="SELECT count(1) as count,IFNULL(sum(total),0)as sum FROM payment_bill WHERE enabled_mark = '1' AND pay_state='0'"# 使用fetchall()方法获取一条数据cursor.execute(sql)data=cursor.fetchall()data1=data[0][0]data2=data[0][1]dicdata['count']=data1dicdata['sum']=data2# 关闭数据库连接db.close()return dicdata
#******************************************************************
#进行接口实际结果和数据库统计结果的比对
def check_result(data1,data2):# 比对记录总数是否一致if data1==data2:print("统计的记录总数一致")else:print("统计的记录总数不一致")#*******************************************************************************
if __name__ == '__main__':#调用接口运行,获取实际结果jsondata=getdashboard_result()# print(jsondata)#调用数据库检查点获取方法,获取数据库的统计结果dbdata=getdatabase_result()print(dbdata)check_result(jsondata,dbdata)

2、创建商铺接口

真正高效的工作方法是边学边干,边干边完善。

创建商铺接口的难点和重点,是和数据库进行对比验证。分为可见字段和不可见字段。其中不可见字段是测试是否全面深入的分水岭。

脚本技术,在设计脚本时,要构造传入商铺信息的参数是正确的以及不正确的。

添加商铺的收费数据

进入商铺管理里面

里面参数结合前台的参数进行分析。

冒烟测试结果:

#创建商铺接口V1.0接口脚本实现
#功能:常量参数传递
#*************************************************************************
# 导入类库
import jsonimport requests
# 定义接口地址
url='https://svr-6-9009.share.51env.net/prod-api/baseconfig/House'
# 传入接口参数,获取实际返回值
housedata={"block": "01","code": "05-09-12","buildingsquare": "100","usesquare": "50","state": "empty","floor": "12","rentFee": "12000","remark": "test"
}
housejson=json.dumps(housedata)
token = "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImZmNDA5N2M4LWJkMTUtNDc5NC1iNTkxLTlhZmQ2OTExMDJmMSJ9.twNDaNr_d2MLmJjRePp5oNmcSc-gC1UpLSp5O9qQ-zWu6I7GHgc5PropoA3Xa_vdBux8W7z19jsxih6IbbJIXQ"
header = {'Authorization': 'Bearer ' + token,"Content-Type":"application/json"}
# 比对结果1:接口返回值
response=requests.post(url,data=housejson,headers=header).json()
print(response)

3、修改商铺接口

实现对商铺信息的修改,put类型

冒烟测试结果:

#更新商铺接口V1.0接口脚本实现
#功能:常量参数传递
#*************************************************************************
# 导入类库
import jsonimport requests
# 定义接口地址
url='https://svr-6-9009.share.51env.net/prod-api/baseconfig/House/ca0d768d47ec486b8901b2180b8f5766'
# 传入接口参数,获取实际返回值
housedata={"id": "ca0d768d47ec486b8901b2180b8f5766","code": "05-09-13","block": "01","state": "empty","floor": "9","buildingsquare": "900.00","rentFee": "9000.00","usesquare": "90.00","remark": "修改3"
}
housejson=json.dumps(housedata)
token = "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjljMzFjNWViLTIyMzUtNGQ2YS1hYTM5LTIxYmY2NWM0ODI5MCJ9.kZSY8EL9OurhRdTfcRkRwJ_QdRspm4i0i2JXQyR-AnJ9Fv0pzt64BOuZEAgB1m4ECmkeNm4ze24Rg3PLanQb8g"
header = {'Authorization': 'Bearer ' + token,"Content-Type":"application/json"}
# 比对结果1:接口返回值
response=requests.put(url,data=housejson,headers=header).json()
print(response)

4、删除商铺接口

冒烟结果:

4.1 一般的删除功能

一般的删除功能,从数据库进行数据的删除,Delete类型

4.2 假删除

为什么进行假删除?因为有的数据可能还有用,或者关联它数据的表数据还存在,所以要进行假删除,在数据库设计时,让这条数据的标志位置0进行逻辑删除。

如果数据库没有做假删除的设计,开发人员真正的进行了数据删除,这可能是数据库设计的缺陷。

那么什么样的数据可以进行真删除呢?刚刚创建的商铺、还有没有任何的关联数据的。

假删除什么样的需要用假删除呢?

已经有了关联数据,探讨关联数据是否有必要进行删除,如果有必要,则进行级联删除,那么主表被删除,关联的所有的从表记录也要同时被删除。

如果关联数据不能被删除,只能进行假删除

假删除如何测试?
    1、当前主表关联了哪些其他的从表
    2、新建了一个主表记录,没有关联的从表数据
        进行删除
    3、新建了一个主表记录,关联了一个从表数据
        进行删除
    4、新建了一个主表数据,关联了多个从表数据
        进行删除

#*****************************************************
# 删除商铺接口V1.0脚本实现
# 功能:常量参数传递
#*****************************************************
#导入类库
import requests
#定义接口地址
url='https://svr-6-9009.share.51env.net/prod-api/baseconfig/House/ca0d768d47ec486b8901b2180b8f5766'
token = "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjliMzkyYjFkLTQxZjktNDIwYy1iYTU3LWJkOTdhYTNhNDcyMiJ9.lmOdIGc8f8RpYr2lNx859tlOASHLAz6QtsZRK6XMbKCr9m1qjaZJePrMG72jb3Ck7fVWgv_1JKqqYOGZ-yMhZA"
header = {'Authorization': 'Bearer ' + token}
# 发送接口请求
response=requests.delete(url,headers=header).json()
print(response)

5、分页展示商铺列表接口

分页展示商铺列表接口
    1、参数放在请求头的地址中
    2、返回的结果包含多个内容,如何验证?
        总数量
        随机取一个内容进行验证
    3、脚本封装
        1、接口方法
            返回随机的一个ID
        2、数据库验证的方法
            接收ID,进行数据库的验证

分页展示冒烟结果:

分页展示获取商铺信息列表接口V1.0

#************************************************************************
# 获取商铺信息列表接口V1.0脚本实现
# 功能:常量参数传递
# 重点:参数在地址中体现+验证点如何提取?
#************************************************************************
# 导入类库
import requests
#存放返回结果id列表
idlist=[]
# 定义分页显示的数量
num=10
# 定义接口地址+参数
url='https://svr-6-9009.share.51env.net/prod-api/baseconfig/House?currentPage=1&pageSize='+str(num)+'&sort=desc&sidx='# 发送请求,获取返回值
# 定义token参数
token = "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjliMzkyYjFkLTQxZjktNDIwYy1iYTU3LWJkOTdhYTNhNDcyMiJ9.lmOdIGc8f8RpYr2lNx859tlOASHLAz6QtsZRK6XMbKCr9m1qjaZJePrMG72jb3Ck7fVWgv_1JKqqYOGZ-yMhZA"
header = {'Authorization': 'Bearer ' + token}
response=requests.get(url,headers=header).json()
print(response)
# 返回值进行验证
# 获取某一个id
for i in range(0,num):id=response['data']['list'][i]['id']idlist.append(id)print(id)
print(idlist)
if len(idlist)==num:# print("该接口返回的房屋数量是"+str(num)+",符合接口参数要求")print("该接口返回的房屋数量是%d,符合接口参数要求"%num)
else:print("该接口返回的房屋数量不符合接口参数请求要求")

分页展示商铺列表接口V2.0

#************************************************************************
# 获取商铺信息列表接口V2.0脚本实现
# 功能:常量参数传递
# 重点:任意提取一个
#************************************************************************
# 导入类库
import requests
import random
import pymysql
#定义后去商铺信息ID的接口方法
def gethouseID():idlist = []# 定义分页显示的数量num = 10# 定义接口地址+参数url = 'https://svr-6-9009.share.51env.net/prod-api/baseconfig/House?currentPage=1&pageSize=' + str(num) + '&sort=desc&sidx='# 发送请求,获取返回值# 定义token参数token = "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjliMzkyYjFkLTQxZjktNDIwYy1iYTU3LWJkOTdhYTNhNDcyMiJ9.lmOdIGc8f8RpYr2lNx859tlOASHLAz6QtsZRK6XMbKCr9m1qjaZJePrMG72jb3Ck7fVWgv_1JKqqYOGZ-yMhZA"header = {'Authorization': 'Bearer ' + token}response = requests.get(url, headers=header).json()print(response)# 返回值进行验证# 获取某一个idfor i in range(0, num):id = response['data']['list'][i]['id']idlist.append(id)print(id)print(idlist)n=random.randint(0,num-1)print(n)return idlist[n]#连接后台数据库进行ID的检查,并给出测试结论
def checkID(id):# 打开数据库连接db=pymysql.connect(host='vip.51env.net',user='readonly',password='zhaoxin@2021',port=30001,db='zhaoxinpms',charset='utf8')# 用cursor()方法获取操作游标cursor = db.cursor()# 使用execute方法执行SQL语句#查找是否存在对应id的商铺信息sql="SELECT * FROM `config_house` WHERE id ='"+id+"'"# 使用fetchall()方法获取一条数据cursor.execute(sql)db_ID=cursor.fetchall()[0][0]print("1",db_ID)# 关闭数据库连接db.close()#判断是否执行成功if db_ID=='5c7100ce60d044768223daf1546b3b61':print("获取商铺列表接口测试通过")else:print("获取商铺列表接口测试失败")if __name__ == '__main__':# #调用获取商铺id方法id = gethouseID()print(id)#调用数据库ID检查方法checkID('5c7100ce60d044768223daf1546b3b61')

愿每个测试都能成为测试开发,提高职业技能,成为前1%的存在,为社会创造更大的价值,为公司节约更多的成本,为自己和家庭谋求更高的收入,所有人不受职业年龄限制,越老越吃香,直至财富自由;愿测试技术越来越进步,软件质量进一步得到提高,效率提高。愿祖国更加美好,人民更加幸福。多喜乐,常安宁。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2970. 统计移除递增子数组的数目 I

解题思路 本题中的子数组&#xff0c;称为递增子数组。 子数组指的是一个数组中一段连续的数组序列。 假设nums的长度为n&#xff0c;则nums的子数组的个数为 n ( n 1 ) 2 \frac{n\times(n1)}{2} 2n(n1)​。 因此只需要找出不满足的递增子数组即可。 python class Solutio…

C++基础编程100题-021 OpenJudge-1.4-01 判断数正负

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0104/01/ 描述 给定一个整数N&#xff0c;判断其正负。 输入 一个整数N(-109 < N < 109) 输出 如果N > 0, 输出positive; 如果N 0, 输出zero; 如果N < 0, 输出negative 样例输入 1样例输出…

MySQL 程序简介

以下是常用的 MySQL 程序 程序名作用 mysqldMySQL 的守护进程&#xff0c;即 MySQL 服务器&#xff0c;若要使用 mysql 服务&#xff0c;那么 mysqld 必须处在运行状态 mysqlMySQL 客户端程序&#xff0c;用户交互式输入 SQL 语句或以批处理模式从文件执行 SQL 的命令行…

【Neo4j】实战 (数据库技术丛书)学习笔记

Neo4j实战 (数据库技术丛书) 第1章演示了应用Neo4j作为图形数据库对改进性能和扩展性的可能性, 也讨论了对图形建模的数据如何正好适应于Neo4j数据模型,现在到了该动 手实践的时间了。第一章 概述 Neo4j将数据作为顶点和边存储(或者用Neo4j术语,节点和关系存 储)。用户被定…

原生android的内存性能提升方面的测试和优化方案大致设计

一 测试目标&#xff1a; 以满足用户设备的内存性能和不杀后台为目标。 1&#xff1a;满足用户设备的内存性能是指不出现因为内存原因导致的安卓设备死机&#xff0c;卡顿等问题。 2&#xff1a;满足不杀后台是指整个设备使用时&#xff0c;不出现后台app被杀。 通常是估算如果…

Pytorch版本、安装和检验

基于conda包的环境创建、激活、管理与删除 CUDA版本 CUDA 是 NVIDIA 专为图形处理单元 (GPU) 上的通用计算开发的并行计算平台和编程模型&#xff0c;CUDA版本需满足对应的Pytorch要求 进入NVIDIA控制面板 进入左下角“系统信息”&#xff0c;找到组件 “NVIDIA CUDA 12.3.10…

7. 有奖猜谜

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小明很喜欢猜谜语。 最近&#xff0c;他被邀请参加了 X 星球的猜谜活动。 每位选手开始的时候都被发给 777777 个电子币。 规则是&#xff1a;猜对了&#xff0c;手…

PostgreSQL关闭数据库服务的三种模式

PostgreSQL 提供了三种关闭数据库服务的不同方式&#xff0c;它们最终都是发送一个关闭信号到 postgres 主服务进程。 智能关闭模式 智能关闭&#xff08;Smart Shutdown&#xff09;模式向 postgres 主服务进程发送一个 SIGTERM 信号。此时服务器不允许新的客户端连接&#…

DNS 杂谈

一、定义 DNS&#xff08;Domain Name System&#xff09;&#xff0c;域名系统&#xff0c;该系统记录域名和Ip地址的相互映射关系。用户访问互联网时&#xff0c;通过域名地址得到对应的IP地址&#xff0c;这个过程称为域名解析。DNS运行于UDP协议之上&#xff0c;使用的端口…

手撸俄罗斯方块(一)——简单介绍

手撸俄罗斯方块 简单介绍 《俄罗斯方块》&#xff08;俄语&#xff1a;Тетрис&#xff0c;英语&#xff1a;Tetris&#xff09;&#xff0c;是1980年末期至1990年代初期风靡全世界的电脑游戏&#xff0c;是落下型益智游戏的始祖&#xff0c;电子游戏领域的代表作之一&a…

【代码随想录】【算法训练营】【第64天】 [卡码117]软件构建 [卡码47]参加科学大会

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 64&#xff0c;周三&#xff0c;继续ding~ 题目详情 [卡码117] 软件构建 题目描述 卡码117 软件构建 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 [卡码…

算法的复杂度

文章目录 一、算法的效率1、复杂度的概念2、复杂度的重要性 二、时间复杂度三、空间复杂度四、大O的渐进表示发五、计算复杂度案例1、计算Func1函数的复杂度2、计算Fun2的时间复杂度3、计算Func3的时间复杂度4、计算Func4的时间复杂度5、计算strchr的时间复杂度6、计算Func5的时…

大模型/NLP/算法面试题总结5——Transformer和Rnn的区别

Transformer 和 RNN&#xff08;循环神经网络&#xff09;是两种常见的深度学习模型&#xff0c;广泛用于自然语言处理&#xff08;NLP&#xff09;任务。 它们在结构、训练方式以及处理数据的能力等方面有显著的区别。以下是它们的主要区别&#xff1a; 架构 RNN&#xff0…

MySQL空间索引

空间类型是建立在空间类型字段上的。 空间类型 MySQL的空间类型很多&#xff0c;我就不逐一介绍了。重要分四大类&#xff1a; GeometryCurveSurfaceGeometryCollection 前三种&#xff0c;地理、曲线、曲面都是不可实例化的。Geometry有一个子类Point, Curve有一个直接子类L…

docker无法拉取镜像,推荐可以使用下面镜像源

sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF { "registry-mirrors": ["请替换为您自己的代理服务ip或者域名"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker 查看是否换源成功 docker info …

电脑误删除的文件怎么恢复免费 电脑误删文件导致无法开机怎么办

在使用电脑的时候&#xff0c;有时候可能会因为一些错误的操作&#xff0c;导致删除一些文件&#xff0c;如果是普通的文件&#xff0c;最坏的情况也就是文件找回来&#xff0c;如果删除的是系统文件&#xff0c;那么很有可能导致电脑开不了机。下面就给大家详细讲解&#xff0…

Spring Boot项目Jar包加密详解

目录 引言Jar包加密的基础知识 为什么需要加密Jar包Jar包加密的基本原理 常用的Jar包加密工具 ProGuardJavaguardJava Agent Spring Boot项目Jar包加密实战 使用ProGuard对Spring Boot项目进行加密集成Javaguard到Spring Boot项目中通过Java Agent实现动态加密 Jar包加密的安全…

什么牌子充电宝好用?推荐四款质量与性价比双优充电宝!

在如今高度数字化的生活中&#xff0c;充电宝已经成为我们日常生活中必不可少的电子设备。然而&#xff0c;随着市场上充电宝品牌的不断增多&#xff0c;人们对充电宝的质量和安全性也越来越关注。充电宝作为一个涉及电池和充电技术的产品&#xff0c;安全性至关重要。选择一款…

打造Perl编译器后端:自定义编程语言的终极指南

&#x1f6e0;️ 打造Perl编译器后端&#xff1a;自定义编程语言的终极指南 在编程语言的世界里&#xff0c;编译器后端是将中间代码转换成目标代码的桥梁。对于Perl这样一种强大的脚本语言&#xff0c;实现自定义的编译器后端不仅可以加深对其内部机制的理解&#xff0c;还可…

gosnmp库 - GetBulk() | Walk()

GetBulk() 方法 GetBulk()方法是对GetNext()方法的二度封装,GetNext()方法返回的是传入的oid的下一个对象,而GetBulk方法则是返回传入的oid的接下来的N个对象。 通过GetBulk传入的oid,SNMP代理会根据传入的参数去循环取值,构造PDU,但是,如果符合传入的oid的对象的数量超…