Python+requests+unittest+excel实现接口自动化测试框架
一、框架结构:
工程目录
二、Case文件设计
三、基础包 base
3.1 封装get/post请求(runmethon.py)
1 import requests2 import json3 class RunMethod:4 def post_main(self,url,data,header=None):5 res = None6 if header !=None: 7 res = requests.post(url=url,data=data,headers=header)8 else:9 res = requests.post(url=url,data=data)
10 return res.json()
11
12 def get_main(self,url,data=None,header=None):
13 res = None
14 if header !=None:
15 res = requests.get(url=url,data=data,headers=header,verify=False)
16 else:
17 res = requests.get(url=url,data=data,verify=False)
18 return res.json()
19
20 def run_main(self,method,url,data=None,header=None):
21 res = None
22 if method == 'Post':
23 res = self.post_main(url,data,header)
24 else:
25 res = self.get_main(url,data,header)
26 return json.dumps(res,ensure_ascii=False,sort_keys=True,indent=2)
3.2 封装mock(mock.py)
1 from mock import mock
2 #模拟mock 封装
3 def mock_test(mock_method,request_data,url,method,response_data):
4 mock_method = mock.Mock(return_value=response_data)
5 res = mock_method(url,method,request_data)
6 return res
四、数据操作包 operation_data
4.1 获取excel单元格中的内容(get_data.py)
1 #coding:utf-82 from tool.operation_excel import OperationExcel3 import data_config4 from tool.operation_json import OperetionJson5 from tool.connect_db import OperationMysql6 class GetData:7 def __init__(self):8 self.opera_excel = OperationExcel()9 10 #去获取excel行数,就是case的个数 11 def get_case_lines(self):12 return self.opera_excel.get_lines()13 14 #获取是否执行15 def get_is_run(self,row):16 flag = None17 col = int(data_config.get_run())18 run_model = self.opera_excel.get_cell_value(row,col)19 if run_model == 'yes':20 flag = True21 else:22 flag = False23 return flag24 25 #是否携带header26 def is_header(self,row):27 col = int(data_config.get_header())28 header = self.opera_excel.get_cell_value(row,col)29 if header != '':30 return header31 else:32 return None33 34 #获取请求方式35 def get_request_method(self,row):36 col = int(data_config.get_run_way())37 request_method = self.opera_excel.get_cell_value(row,col)38 return request_method39 40 #获取url41 def get_request_url(self,row):42 col = int(data_config.get_url())43 url = self.opera_excel.get_cell_value(row,col)44 return url45 46 #获取请求数据47 def get_request_data(self,row):48 col = int(data_config.get_data())49 data = self.opera_excel.get_cell_value(row,col)50 if data == '':51 return None52 return data53 54 #通过获取关键字拿到data数据55 def get_data_for_json(self,row):56 opera_json = OperetionJson()57 request_data = opera_json.get_data(self.get_request_data(row))58 return request_data59 60 #获取预期结果61 def get_expcet_data(self,row):62 col = int(data_config.get_expect())63 expect = self.opera_excel.get_cell_value(row,col)64 if expect == '':65 return None66 return expect67 68 #通过sql获取预期结果69 def get_expcet_data_for_mysql(self,row):70 op_mysql = OperationMysql()71 sql = self.get_expcet_data(row)72 res = op_mysql.search_one(sql)73 return res.decode('unicode-escape')74 75 def write_result(self,row,value):76 col = int(data_config.get_result())77 self.opera_excel.write_value(row,col,value)78 79 #获取依赖数据的key80 def get_depend_key(self,row):81 col = int(data_config.get_data_depend())82 depent_key = self.opera_excel.get_cell_value(row,col)83 if depent_key == "":84 return None85 else:86 return depent_key87 88 #判断是否有case依赖89 def is_depend(self,row):90 col = int(data_config.get_case_depend())91 depend_case_id = self.opera_excel.get_cell_value(row,col)92 if depend_case_id == "":93 return None94 else:95 return depend_case_id96 97 #获取数据依赖字段98 def get_depend_field(self,row):99 col = int(data_config.get_field_depend())
100 data = self.opera_excel.get_cell_value(row,col)
101 if data == "":
102 return None
103 else:
104 return data
4.2 获取excel中每个列(data_config.py)
1 #coding:utf-82 class global_var:3 #case_id4 Id = '0'5 request_name = '1'6 url = '2'7 run = '3'8 request_way = '4'9 header = '5'
10 case_depend = '6'
11 data_depend = '7'
12 field_depend = '8'
13 data = '9'
14 expect = '10'
15 result = '11'
16 #获取caseid
17 def get_id():
18 return global_var.Id
19
20 #获取url
21 def get_url():
22 return global_var.url
23
24 def get_run():
25 return global_var.run
26
27 def get_run_way():
28 return global_var.request_way
29
30 def get_header():
31 return global_var.header
32
33 def get_case_depend():
34 return global_var.case_depend
35
36 def get_data_depend():
37 return global_var.data_depend
38
39 def get_field_depend():
40 return global_var.field_depend
41
42 def get_data():
43 return global_var.data
44
45 def get_expect():
46 return global_var.expect
47
48 def get_result():
49 return global_var.result
50
51 def get_header_value():
52 return global_var.header
4.3 解决数据依赖(dependent.py )
1 #coding:utf-82 import sys3 import json4 sys.path.append('C:/Users/lxz/Desktop/InterFace_JIA')5 from tool.operation_excel import OperationExcel6 from base.runmethod import RunMethod7 from operation_data.get_data import GetData8 from jsonpath_rw import jsonpath,parse9 class DependdentData:
10 def __init__(self,case_id):
11 self.case_id = case_id
12 self.opera_excel = OperationExcel()
13 self.data = GetData()
14
15 #通过case_id去获取该case_id的整行数据
16 def get_case_line_data(self):
17 rows_data = self.opera_excel.get_rows_data(self.case_id)
18 return rows_data
19
20 #执行依赖测试,获取结果
21 def run_dependent(self):
22 run_method = RunMethod()
23 row_num = self.opera_excel.get_row_num(self.case_id)
24 request_data = self.data.get_data_for_json(row_num)
25 #header = self.data.is_header(row_num)
26 method = self.data.get_request_method(row_num)
27 url = self.data.get_request_url(row_num)
28 res = run_method.run_main(method,url,request_data)
29 return json.loads(res)
30
31 #根据依赖的key去获取执行依赖测试case的响应,然后返回
32 def get_data_for_key(self,row):
33 depend_data = self.data.get_depend_key(row)
34 response_data = self.run_dependent()
35 json_exe = parse(depend_data)
36 madle = json_exe.find(response_data)
37 return [math.value for math in madle][0]
38
39 if __name__ == '__main__':
40 order = {
41 "data": {
42 "_input_charset": "utf-8",
43 "body": "京东订单-1710141907182334",
44 "it_b_pay": "1d",
45 "notify_url": "http://order.imooc.com/pay/notifyalipay",
46 "out_trade_no": "1710141907182334",
47 "partner": "2088002966755334",
48 "payment_type": "1",
49 "seller_id": "yangyan01@tcl.com",
50 "service": "mobile.securitypay.pay",
51 "sign": "kZBV53KuiUf5HIrVLBCcBpWDg%2FnzO%2BtyEnBqgVYwwBtDU66Xk8VQUTbVOqDjrNymCupkVhlI%2BkFZq1jOr8C554KsZ7Gk7orC9dDbQl pr%2BaMmdjO30JBgjqjj4mmM%2Flphy9Xwr0Xrv46uSkDKdlQqLDdGAOP7YwOM2dSLyUQX%2Bo4%3D",
52 "sign_type": "RSA",
53 "string": "_input_charset=utf-8&body=京东订单-1710141907182334&it_b_pay=1d¬ify_url=http://order.imooc.com/pay/ notifyalipay&out_trade_no=1710141907182334&partner=2088002966755334&payment_type=1&seller_id=yangyan01@ tcl.com&service=mobile.securitypay.pay&subject=京东订单-1710141907182334&total_fee=299&sign=kZBV53KuiUf5H IrVLBCcBpWDg%2FnzO%2BtyEnBqgVYwwBtDU66Xk8VQUTbVOqDjrNymCupkVhlI%2BkFZq1jOr8C554KsZ7Gk7orC9dDbQlpr%2BaMmdjO30 JBgjqjj4mmM%2Flphy9Xwr0Xrv46uSkDKdlQqLDdGAOP7YwOM2dSLyUQX%2Bo4%3D&sign_type=RSA",
54 "subject": "京东订单-1710141907182334",
55 "total_fee": 299
56 },
57 "errorCode": 1000,
58 "errorDesc": "成功",
59 "status": 1,
60 "timestamp": 1507979239100
61 }
62 res = "data.out_trade_no"
63 json_exe = parse(res)
64 madle = json_exe.find(order)
65 print [math.value for math in madle][0]
五、工具类包 tool5.1 操作excel (operation_excel.py)
1 #coding:utf-82 import xlrd3 from xlutils.copy import copy4 class OperationExcel:5 def __init__(self,file_name=None,sheet_id=None):6 if file_name:7 self.file_name = file_name8 self.sheet_id = sheet_id 9 else:
10 self.file_name = '../dataconfig/case1.xls'
11 self.sheet_id = 0
12 self.data = self.get_data()
13
14 #获取sheets的内容
15 def get_data(self):
16 data = xlrd.open_workbook(self.file_name)
17 tables = data.sheets()[self.sheet_id]
18 return tables
19
20 #获取单元格的行数
21 def get_lines(self):
22 tables = self.data
23 return tables.nrows
24
25 #获取某一个单元格的内容
26 def get_cell_value(self,row,col):
27 return self.data.cell_value(row,col)
28
29 #写入数据
30 def write_value(self,row,col,value):
31 '''
32 写入excel数据
33 row,col,value
34 '''
35 read_data = xlrd.open_workbook(self.file_name)
36 write_data = copy(read_data)
37 sheet_data = write_data.get_sheet(0)
38 sheet_data.write(row,col,value)
39 write_data.save(self.file_name)
40
41 #根据对应的caseid 找到对应行的内容
42 def get_rows_data(self,case_id):
43 row_num = self.get_row_num(case_id)
44 rows_data = self.get_row_values(row_num)
45 return rows_data
46
47 #根据对应的caseid找到对应的行号
48 def get_row_num(self,case_id):
49 num = 0
50 clols_data = self.get_cols_data()
51 for col_data in clols_data:
52 if case_id in col_data:
53 return num
54 num = num+1
55
56
57 #根据行号,找到该行的内容
58 def get_row_values(self,row):
59 tables = self.data
60 row_data = tables.row_values(row)
61 return row_data
62
63 #获取某一列的内容
64 def get_cols_data(self,col_id=None):
65 if col_id != None:
66 cols = self.data.col_values(col_id)
67 else:
68 cols = self.data.col_values(0)
69 return cols
70
71
72 if __name__ == '__main__':
73 opers = OperationExcel()
74 print opers.get_cell_value(1,2)
5.2判断字符串包含,判断字典是否相等(common_util.py)
1 #coding:utf-82 import json3 class CommonUtil:4 def is_contain(self,str_one,str_two):5 '''6 判断一个字符串是否再另外一个字符串中7 str_one:查找的字符串8 str_two:被查找的字符串9 '''
10 flag = None
11 if isinstance(str_one,unicode):
12 str_one = str_one.encode('unicode-escape').decode('string_escape')
13 return cmp(str_one,str_two)
14 if str_one in str_two:
15 flag = True
16 else:
17 flag = False
18 return flag
19
20
21 def is_equal_dict(self,dict_one,dict_two):
22 '''
23 判断两个字典是否相等
24 '''
25 if isinstance(dict_one,str):
26 dict_one = json.loads(dict_one)
27 if isinstance(dict_two,str):
28 dict_two = json.loads(dict_two)
29 return cmp(dict_one,dict_two)
5.3 操作header(operation_herder.py)
1 #coding:utf-82 import requests3 import json4 from operation_json import OperetionJson5 6 7 class OperationHeader:8 9 def __init__(self,response):
10 self.response = json.loads(response)
11
12 def get_response_url(self):
13 '''
14 获取登录返回的token的url
15 '''
16 url = self.response['data']['url'][0]
17 return url
18
19 def get_cookie(self):
20 '''
21 获取cookie的jar文件
22 '''
23 url = self.get_response_url()+"&callback=jQuery21008240514814031887_1508666806688&_=1508666806689"
24 cookie = requests.get(url).cookies
25 return cookie
26
27 def write_cookie(self):
28 cookie = requests.utils.dict_from_cookiejar(self.get_cookie())
29 op_json = OperetionJson()
30 op_json.write_data(cookie)
31
32 if __name__ == '__main__':
33
34 url = "http://www.jd.com/passport/user/login"
35 data = {
36 "username":"18513199586",
37 "password":"111111",
38 "verify":"",
39 "referer":"https://www.jd.com"
40 }
41 res = json.dumps(requests.post(url,data).json())
42 op_header = OperationHeader(res)
43 op_header.write_cookie()
5.4 操作json文件(operation_json.py)
1 #coding:utf-82 import json3 class OperetionJson:4 5 def __init__(self,file_path=None):6 if file_path == None:7 self.file_path = '../dataconfig/user.json'8 else:9 self.file_path = file_path
10 self.data = self.read_data()
11
12 #读取json文件
13 def read_data(self):
14 with open(self.file_path) as fp:
15 data = json.load(fp)
16 return data
17
18 #根据关键字获取数据
19 def get_data(self,id):
20 print type(self.data)
21 return self.data[id]
22
23 #写json
24 def write_data(self,data):
25 with open('../dataconfig/cookie.json','w') as fp:
26 fp.write(json.dumps(data))
27
28
29
30 if __name__ == '__main__':
31 opjson = OperetionJson()
32 print opjson.get_data('shop')
5.5 操作数据库(connect_db.py)
1 #coding:utf-82 import MySQLdb.cursors3 import json4 class OperationMysql:5 def __init__(self):6 self.conn = MySQLdb.connect(7 host='localhost',8 port=3306,9 user='root',
10 passwd='123456',
11 db='le_study',
12 charset='utf8',
13 cursorclass=MySQLdb.cursors.DictCursor
14 )
15 self.cur = self.conn.cursor()
16
17 #查询一条数据
18 def search_one(self,sql):
19 self.cur.execute(sql)
20 result = self.cur.fetchone()
21 result = json.dumps(result)
22 return result
23
24 if __name__ == '__main__':
25 op_mysql = OperationMysql()
26 res = op_mysql.search_one("select * from web_user where Name='ailiailan'")
27 print res
5.6 发送报告邮件(send_email.py)
1 #coding:utf-82 import smtplib3 from email.mime.text import MIMEText4 class SendEmail:5 global send_user6 global email_host7 global password8 email_host = "smtp.163.com"9 send_user = "jiaxiaonan666@163.com"
10 password = "jia_668"
11 def send_mail(self,user_list,sub,content):
12 user = "jiaxiaonan"+"<"+send_user+">"
13 message = MIMEText(content,_subtype='plain',_charset='utf-8')
14 message['Subject'] = sub
15 message['From'] = user
16 message['To'] = ";".join(user_list)
17 server = smtplib.SMTP()
18 server.connect(email_host)
19 server.login(send_user,password)
20 server.sendmail(user,user_list,message.as_string())
21 server.close()
22
23 def send_main(self,pass_list,fail_list):
24 pass_num = float(len(pass_list))
25 fail_num = float(len(fail_list))
26 count_num = pass_num+fail_num
27 #90%
28 pass_result = "%.2f%%" %(pass_num/count_num*100)
29 fail_result = "%.2f%%" %(fail_num/count_num*100)
30
31
32 user_list = ['609037724@qq.com']
33 sub = "接口自动化测试报告"
34 content = "此次一共运行接口个数为%s个,通过个数为%s个,失败个数为%s,通过率为%s,失败率为%s" %(count_num,pass_num,fail_num,pass_result,fail_result )
35 self.send_mail(user_list,sub,content)
36
37 if __name__ == '__main__':
38 sen = SendEmail()
39 sen.send_main([1,2,3,4],[2,3,4,5,6,7])
六、主函数run_test.py
1 #coding:utf-82 import sys3 sys.path.append("C:/Users/lxz/Desktop/InterFace_JIA")4 from base.runmethod import RunMethod5 from operation_data.get_data import GetData6 from tool.common_util import CommonUtil7 from operation_data.dependent_data import DependdentData8 from tool.send_email import SendEmail9 from tool.operation_header import OperationHeader
10 from tool.operation_json import OperetionJson
11 class RunTest:
12 def __init__(self):
13 self.run_method = RunMethod()
14 self.data = GetData()
15 self.com_util = CommonUtil()
16 self.send_mai = SendEmail()
17
18 #程序执行的
19 def go_on_run(self):
20 res = None
21 pass_count = []
22 fail_count = []
23 #10 0,1,2,3
24 rows_count = self.data.get_case_lines()
25 for i in range(1,rows_count):
26 is_run = self.data.get_is_run(i)
27 if is_run:
28 url = self.data.get_request_url(i)
29 method = self.data.get_request_method(i)
30 request_data = self.data.get_data_for_json(i)
31 expect = self.data.get_expcet_data_for_mysql(i)
32 header = self.data.is_header(i)
33 depend_case = self.data.is_depend(i)
34 if depend_case != None:
35 self.depend_data = DependdentData(depend_case)
36 #获取的依赖响应数据
37 depend_response_data = self.depend_data.get_data_for_key(i)
38 #获取依赖的key
39 depend_key = self.data.get_depend_field(i)
40 request_data[depend_key] = depend_response_data
41 if header == 'write':
42 res = self.run_method.run_main(method,url,request_data)
43 op_header = OperationHeader(res)
44 op_header.write_cookie()
45
46 elif header == 'yes':
47 op_json = OperetionJson('../dataconfig/cookie.json')
48 cookie = op_json.get_data('apsid')
49 cookies = {
50 'apsid':cookie
51 }
52 res = self.run_method.run_main(method,url,request_data,cookies)
53 else:
54 res = self.run_method.run_main(method,url,request_data)
55
56 if self.com_util.is_equal_dict(expect,res) == 0:
57 self.data.write_result(i,'pass')
58 pass_count.append(i)
59 else:
60 self.data.write_result(i,res)
61 fail_count.append(i)
62 self.send_mai.send_main(pass_count,fail_count)
63
64 #将执行判断封装
65 #def get_cookie_run(self,header):
66
67
68 if __name__ == '__main__':
69 run = RunTest()
70 run.go_on_run()
【整整200集】超超超详细的Python接口自动化测试进阶教程合集,真实模拟企业项目实战
相关文章:

Python+requests+unittest+excel实现接口自动化测试框架
一、框架结构: 工程目录 二、Case文件设计 三、基础包 base 3.1 封装get/post请求(runmethon.py) 1 import requests2 import json3 class RunMethod:4 def post_main(self,url,data,headerNone):5 res None6 if heade…...

25807-2020 间脲基苯胺盐酸盐 课堂随笔
声明 本文是学习GB-T 25807-2020 间脲基苯胺盐酸盐. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了间脲基苯胺盐酸盐的要求、采样、试验方法、检验规则以及标志、标签、包装、运输和 贮存。 本标准适用于间脲基苯胺盐酸盐产品…...

苹果手机通讯录联系人如何一键删除? 1个方法轻松解决!
手机通讯录里存了上百个之前公司客户的电话,结果苹果手机不支持一键清空联系人。有什么其他办法可以将这些联系人一次性全部删除吗? 随着时间的增长,手机通讯录中难免会积累许多不再联系的用户或者是已经失效的联系人。对于这些许久不联系的人…...

【Linux成长史】Linux编辑器-gcc/g++使用
🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如…...

【CNN-FPGA开源项目解析】卷积层03--单格乘加运算单元PE 单窗口卷积块CU 模块
03–单格乘加运算单元PE & 单窗口卷积块CU 文章目录 03--单格乘加运算单元PE & 单窗口卷积块CU前言单格乘加运算单元PE代码模块结构时序逻辑分析对其上层模块CU的要求 单窗口卷积块CU代码逻辑分析 前言 第一和第二篇日志已经详细阐述了"半精度浮点数"的加…...

一文教你学会ArcGIS Pro地图设计与制图系列全流程(2)
ArcGIS Pro做的成果图及系列文章目录: 系列文章全集: 《一文教你学会ArcGIS Pro地图设计与制图系列全流程(1)》《一文教你学会ArcGIS Pro地图设计与制图系列全流程(2)》《一文教你学会ArcGIS Pro地图设计与…...

ICML 2017: 基于卷积的Seq2Seq解决方案
一.文章概述 通常而言,Seq2Seq解决方案一般都采用循环神经网络,但在本文,作者提出了基于卷积神经网络的解决方案ConvS2S。基于卷积神经网络的方案有两大优势:计算并行化更高,优化更容易(非线性的数量是固定…...

探索GmSSL+Nginx实践及原理
前言 随着大国崛起步伐的迈进,敏感单位的数据安全问题越发受到重视,数据的加密安全传输尤为重要,对于安全问题,国家自研加密算法提供了有力的保障。 作为信创行业的国有企业,十分有必要在网络通信中使用国密算法加密…...

Mybatis框架学习
什么是mybatis? mybatis是一款用于持久层的、轻量级的半自动化ORM框架,封装了所有jdbc操作以及设置查询参数和获取结果集的操作,支持自定义sql、存储过程和高级映射 mybatis用来干什么? 用于处理java和数据库的交互 使用mybat…...

基于微信小程序的电影院订票系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言运行环境说明用户微信小程序端的主要功能有:管理员的主要功能有:具体实现截图详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考论文参考源码获取 前言 💗博主介绍&…...

LeetCode-热题100-笔记-day32
二分查找 今日刷到二分查找,以前做过的题忘的一干二净;庆幸自己用新的方法做了出来两道“中等”题;(我都能做出来我认为应该标“简单”)由于之前题的难度基本在抄答案,所以停更几天。今天没抄答案就更新一…...

STP生成树协议基本配置示例---STP逻辑树产生和修改
STP是用来避免数据链路层出现逻辑环路的协议,运行STP协议的设备通过交互信息发现环路,并通过阻塞特定端口,最终将网络结构修剪成无环路的树形结构。在网络出现故障的时候,STP能快速发现链路故障,并尽快找出另外一条路径…...

Java版企业电子招标采购系统源码—企业战略布局下的采购寻源
项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审…...

华纳云:SQLserver配置远程连接的方法是什么
在 SQL Server 中配置远程连接涉及一些步骤,包括启用远程连接、配置网络协议、设置防火墙规则和授权远程访问。以下是一些配置远程连接的主要步骤: 启用远程连接: 打开 SQL Server Management Studio(SSMS)并连接到你的…...

CryptoCTF easy
文章目录 2023suctionBlue Office 2022Baphomet 2023 suction 题目描述: from Crypto.Util.number import * from flag import flagdef keygen(nbit, r):while True:p, q [getPrime(nbit) for _ in __]e, n getPrime(16), p * qphi (p - 1) * (q - 1)if GCD(e…...

计算机视觉技术的革新:医疗领域的应用
近年来,计算机视觉技术在医疗领域引起了广泛的关注和应用。通过将计算机视觉与医疗技术相结合,我们可以实现更准确、高效的医疗诊断和治疗,为患者提供更好的医疗服务。 首先,计算机视觉在医疗图像分析中的应用是其中的一个重要方…...

python找出文件夹里文件名以特定字符结尾的文件并移动到另一个目录
python找出文件夹里文件名以特定字符结尾的文件并移动到另一个目录 代码 import os import shutil# 源文件夹路径 source_folder "./data/deep/test"# 目标文件夹路径 target_folder "./data/deep/A"# 确保目标文件夹存在,如果不存在则创建…...

面试官问:大量的 TIME_WAIT 状态 TCP 连接,对业务有什么影响?怎么处理?
几个方面: 问题描述:什么现象?什么影响? 问题分析 解决方案 底层原理 1.问题描述 模拟高并发的场景,会出现批量的 TIME_WAIT 的 TCP 连接: 短时间后,所有的 TIME_WAIT 全都消失࿰…...

前端就业宝典---目录
工作时候扭螺丝,面试时候造火箭,现状就是如此。不管是背八股文,还是掌握了知识的精华,对答如流才是硬道理。本专栏就是要集具前端精华,规范、算法、架构、封装、原理等一并汇集,让前端的小伙伴有个思路。 大剑师的微信 gis-dajianshi, 欢迎一起交流,并非常期望您能够提…...

Uniboot 系列光纤跳线简介
飞速(FS)Uniboot 系列光纤跳线产品质量可靠,性能优良,可满足数据中心的各种需求。其中,包括LC、CS™、MDC 和 SN 在内的不同类型的连接器能够满足不同应用的特定需求。下面将进一步介绍飞速(FS)…...

【面试题】Promise只会概念远远不够,还需这17道题目巩固!
前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 表妹一键制作自己的五星红旗国庆头像,超好看 在学习Promise相关题目之前,我们先做一些知识的回顾:JavaScript 是一门单…...

互联网医院牌照|互联网医院牌照审批流程和材料
随着科技的不断进步和社会的发展,互联网医院已经成为了当前的热点。而互联网医院的准入门槛自然也就越来越高。如果您计划成立一个互联网医院,您需要了解申请互联网医院牌照所需要注意的方面以及申请的流程。 一、资质申请前的准备 1、立项阶段准备 在立…...

第五章:C语言的数组
文章目录 1、数组的理解2、各类数组的定义3、变长数组4、字符数组 1、数组的理解 一维数组:比如定义一个int a[3];,那么可以将其看成两部分,a【3】为①,int为②。意思就是有一个数组名字为a,里面包含3个(池࿰…...

Spring面试题3:说一说MVC框架的底层实现
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说MVC框架的底层实现 MVC(Model-View-Controller)是一种软件设计模式,常被用于构建用户界面和应用程序的架构。MVC框架的底层实现可以分为…...

云原生周刊:K8s 的 13 个最佳开源监控工具
开源项目推荐 Silver Surfer 该项目旨在检查 Kubernetes 对象的 API 版本兼容性,并为其提供迁移路径,以便为集群升级做好准备。 Actions Runner Controller Actions Runner Controller (ARC) 是一个 Kubernetes 操作器,可为 GitHub Actio…...

怎么克服一篇论文写作前的恐惧感?
作者 代陈锐 中国科学技术大学生命科学与医学部在读博士生,主要探究生理和病理过程中组蛋白翻译后修饰的调控机制。 1. 引言 在我们开始一篇文章的撰写时,往往不知如何下笔或是不停否认自己撰写的内容,最终的结果自然是撰写效率低而且陷入自我纠结。在这里我通过结合平时…...

Linux 安全 - Credentials
文章目录 一、简介1.1 Objects1.2 Object ownership1.3 The objective context1.4 Subjects1.5 The subjective context1.6 Actions1.7 Rules, access control lists and security calculations 二、Types of Credentials2.1 Traditional UNIX credentials2.2 Capabilities2.3 …...

网站服务器怎么部署
网站服务器怎么部署 1. 选择合适的服务器:根据网站的需求和流量,选择合适的服务器,包括硬件配置、操作系统和网络环境等。 2. 安装操作系统:根据服务器硬件配置选择合适的操作系统,并进行安装和配置,包括安…...

密码学【第一节:密码学概述】
前言 在区块链的整个体系中大量使用了密码学算法,比如用于 PoW 的哈希算法,用于完整性验证的 Merkle Tree,用于交易签名与验证的数字签名算法,用于隐私保护的零知识证明等等。 可以说密码学是保证区块链安全的基石,而区…...

Leetcode 95. 不同的二叉搜索树 II
文章目录 题目代码(9.21 首刷看解析) 题目 Leetcode 95. 不同的二叉搜索树 II 代码(9.21 首刷看解析) class Solution { public:vector<TreeNode*> generateTrees(int n) {return build(1,n);}vector<TreeNode*> bu…...