蓝桥杯第十五界软件测试线下省赛题目分析及解决

PS 需要第十五界蓝桥杯被测系统或者功能测试模板、单元测试被测代码、自动化测试被测代码请加🐧:1940787338 备注:15界蓝桥杯省赛软件测试

题目1:功能测试

题目描述

​ 某物流公司的货运收费标准根据重量、距离和节假日三个因素来确定。如果运输地点在本省,那么收费标准如下:(1)
如果重量在

  • 0到50公斤之间(含50公斤),每公斤运费为8元;
  • 如果重量在51到100公斤之间(含100公斤),每公斤运费为12元;
  • 如果重量超过100公斤,每公斤运费为16元;
    此外,如果运输发生在节假日,每公斤运费会额外增加2元。

如果运输地点在外省,那么收费标准如下:

  • 如果重量在0到50公斤之间(含50公斤),每公斤运费为15元;
  • 如果重量在51到100公斤之间(含100公斤),每公斤运费为20元;
  • 如果重量超过 100公斤,每公斤运费为25元;
  • 此外,如果运输发生在节假日,每公斤的运费会额外增加5元。

解题步骤

​ 首先,我们分析题目,列出一下条件桩,可知条件有 C1 重量 C2 运输地点 C3 是不是发生在节假日

1、列出条件桩和条件项

在这里插入图片描述

​ 根据排列组合公式 我们可以得出有12条测试用例

2、列出动作桩和动作项
动作桩动作项
A1:每公斤运费8T/F
A2:每公斤运费12T/F
A3:每公斤运费16T/F
A4:每公斤额外增加2元T/F
A5:每公斤运费15元T/F
A6:每公斤运费20元T/F
A7:每公斤运费25元T/F
A8:每公斤运费额外增加5元T/F
3、写出判定表

在这里插入图片描述

4、根据判定表写出测试用例
编号重量(公斤)省份节假日预期结果
case11本省10元
case21本省8元
case31外省20元
case41外省15元
case551本省918元
case651本省612元
case751外省1275元
case851外省1020元
case9101本省1818元
case10101本省1616元
case11101外省2020元
case12101外省2525元

综合测试用例

【功能模块】
模块名称:运费模板
功能名称:【搜索】功能(红框标记出来的部分)
【功能截图】

在这里插入图片描述

判分规则

​ 本题满分16分(主要考察测试用例的综合设计思路,会从用例覆度编写规范两个方面进行判分。

  • 用例覆盖度:每覆盖1条用例得1分,最高得11分。
  • 编写规范:按照模板的说明进行规范填写,规范最高得5分。
  • 提交的用例数目不要超过11条,否则只对前11条用例进行判分。

【答案提交】
答案完成后,选手需把【省赛测试用例.xlsx】文件保存到【答案提交】文件夹中,等待和其他答案一起提交。

用例答案

用例编号一级功能二级功能前置条件用例标题操作步骤测试数据预期结果用例优先级
YFMB-SS-001运费模板搜索1. 已成功登录系统 2. 打开【运费模板】页面不输入【模块名称】(为空),进行搜索操作1. 输入正确的【模块名称】(为空); 2. 点击【搜索】;模块名称:(为空)查询全部数据
YFMB-SS-002运费模板搜索1. 已成功登录系统 2. 打开【运费模板】页面 3. 页面中有【模块名称】数据输入精确的【模块名称】(已存在),进行搜索1. 输入正确的【模块名称】; 2. 点击【搜索】;模块名称:包邮正确显示查找的数据
YFMB-SS-003运费模板搜索1. 已成功登录系统 2. 打开【运费模板】页面 3. 页面中有【模块名称】数据输入模糊的【模块名称】(一个或多个),进行搜索1. 输入正确的【模块名称】; 2. 点击【搜索】;模块名称:广州单正确显示查找的数据
YFMB-SS-004运费模板搜索1. 已成功登录系统 2. 打开【运费模板】页面 3. 页面中有【模块名称】数据输入含有特殊字符的【模块名称】(一个或多个),进行搜索1. 输入正确的【模块名称】; 2. 点击【搜索】;模块名称:#¥%……&正确显示查找的数据
YFMB-SS-005运费模板搜索1. 已成功登录系统 2. 打开【运费模板】页面输入不存在【模块名称】,进行搜索1. 输入正确的【模块名称】; 2. 点击【搜索】;模块名称:北京页面正确显示“暂无数据”
YFMB-SS-006运费模板搜索1. 已成功登录系统 2. 打开【运费模板】页面输入【模板名称】,进行清空1. 输入正确的【模块名称】; 2. 点击【清空】;模块名称:北京【模块名称】输入框内容被清空
YFMB-SS-007运费模板搜索1. 已成功登录系统 2. 打开【运费模板】页面输入【模板名称】,输入框的×清空1. 输入正确的【模块名称】; 2. 点击输入框内的【×】;模块名称:北京【模块名称】输入框内容被清空
YFMB-SS-008运费模板搜索1. 已成功登录系统 2. 打开【运费模板】页面 3. 页面中有【模块名称】数据输入【模板名称】,进行回车搜索1. 输入正确的【模块名称】; 2. 点击键盘【回车】;模块名称:包邮正确显示查找的数据
YFMB-SS-009运费模板搜索1. 已成功登录系统 2. 打开【运费模板】页面输入【模板名称】(十万个字),进行回车搜索1. 输入正确的【模块名称】(十万个字); 2. 点击键盘【回车】;模块名称:一二三四五…等十万个字提示:字符数超出限制
YFMB-SS-010运费模板搜索1. 已成功登录系统 2. 打开【运费模板】页面 3. 页面中有【模块名称】数据输入【模板名称】(含有空格),进行搜索1. 输入正确的【模块名称】(含有空格); 2. 点击键盘【回车】;模块名称:包 邮去除空格,然后进行搜索

题目2:缺陷报告

题目描述

​ 功能测试题目3(编写缺陷报告)(满分 40分)
​ 利用所学知识,请对被测系统中的如下2个页面进行测试,寻找其中预埋的缺陷,包括但不限于功能缺陷和易用性界面缺陷。并把发现的缺陷填写在指定的【省赛缺陷报告.xisx】文件中。

在这里插入图片描述

在这里插入图片描述

下面是16个Bug

缺陷编号功能名称缺陷描述操作步骤预期结果实际结果缺陷级别
YFMB-BUG-001运费模板运费模板页面,点击【清空】按钮没有反应1. 登录系统->进入运费模板页面 2. 输入【模板名称】 3. 点击【清空】清空【模板名称】输入框的内容【清空】按钮没有反应1
YFMB-BUG-002运费模板运费模板页面,点击【全选】复选框,偶数行不选中1. 登录系统->进入运费模板页面 2. 点击【全选】复选框所有数据被选中只选中了奇数行数据1
YFMB-BUG-003运费模板运费模板页面,【批量删除】按钮无法删除所有选中数据1. 登录系统->进入运费模板页面 2. 点击【全选】复选框 3. 点击【批量删除】所有被选中的数据都删除成功只删除了第一条数据1
YFMB-BUG-004运费模板运费模板页面,【修改】、【删除】按钮的图标显示不正确1. 登录系统->进入运费模板页面 2. 查看【修改】、【删除】按钮【删除】按钮显示垃圾桶图标 【修改】按钮显示笔图标【删除】、【修改】按钮图标反过来了2
YFMB-BUG-005运费模板运费模板页面,【搜索】、【清空】按钮没有对齐,不美观1. 登录系统->进入运费模板页面 2. 查看【搜索】、【清空】按钮【搜索】、【清空】按钮对齐,且间距相同【搜索】、【清空】按钮没有对齐,间距不相同2
YFMB-BUG-006运费模板运费模板页面,【模板名称】不支持模糊匹配1. 登录系统->进入运费模板页面 2. 【运费模板】输入:包 3. 点击【搜索】或按【回车】输入框支持模糊匹配,且正确查询数据不支持模糊匹配1
YFMB-BUG-007运费模板运费模板页面,【刷新】按钮没有反应1. 登录系统->进入运费模板页面 2. 点击页面上【刷新】按钮图标页面数据进行刷新【刷新】按钮图标没有反应1
YFMB-BUG-008运费模板运费管理页面,【模板名称】输入过多的字符提示不正确1. 登录系统->进入运费模板页面 2. 【模板名称】输入5000字以上字符提示:字符长度超出限制提示:服务器出了点小差,请稍后再试2
YFMB-BUG-009运费模板运费管理页面,不可以选择偶数行的数据1. 登录系统->进入运费模板页面 2. 点击偶数行的【复选框】当前【复选框】行被选中无法选中当前【复选框】行1
YFMB-BUG-010运费模板运费管理页面,【批量删除】按钮,没有图标,不美观1. 登录系统->进入运费模板页面 2. 查看【批量删除】按钮建议【批量删除】按钮里添加【垃圾桶】图标,更美观【批量删除】按钮,里面没有图标,不够美观2
YFMB-BUG-011运费模板运费管理页面,在新增完成 运费模板时,最新的数据不是最上面1. 登录系统->进入运费模板页面 2. 正确添加一条运费模板 3. 查看位置最新的数据将被添加在最前面最新的数据不是放置在最前面1
XJYFMB-BUG-001新增运费模板新增运费模板页面,添加可以添加重复的数据1. 登录系统>进入运费模板页面>点击【新增】 2. 输入页面中已有的【模板名称】 3. 点击【确定】提示:模板名称已存在,请重新输入添加成功1
XJYFMB-BUG-002新增运费模板新增运费模板页面,【首件(个)】,可以输入负数1. 登录系统>进入运费模板页面>点击【新增】 2. 输入【首件(个)】(负数) 3. 其他项输入正确 4. 点击【确定】提示:请输入正确的首件(个)没有提示,且可以成功保存1
XJYFMB-BUG-003新增运费模板新增运费模板页面,【续件(个)】,可以输入小数1. 登录系统>进入运费模板页面>点击【新增】 2. 输入【续(个)】(小数) 3. 其他项输入正确 4. 点击【确定】提示:请输入正确的续件(个)没有提示,且可以成功保存1
XJYFMB-BUG-004新增运费模板新增运费模板页面,点击【按体积】单选框时,无法选择1. 登录系统>进入运费模板页面>点击【新增】 2.【收费方式】点击【按体积】单选框成功进入到相应页面系统无反应1
XJYFMB-BUG-005新增运费模板新增运费模板页面,在指定条件包裹时,输入框没有做检验,可以输入任何值1. 登录系统>进入运费模板页面>点击【新增】 2. 勾选【指定条件包裹】复选框 3. 勾选【满件/重量/体积且满金额包邮】 4. 输入框输入(英文特殊字符及数字和空格组合)输入框进行输入数值的校验输入框没有做任何校验1

题目3:单元测试

题目描述

​ 请使用“基本路径法”为被测源代码 GroupPurchase 类中的submitOrder()方法设计单元测试用例,并在GroupPurchaseTest类中完成单元测试代码。

【源代码功能】
某团购网站开展团购活动,用户参团下单时,如果满足成团规则即可按折扣单价成交。成团规则如下:

  • 参团时间在该团购的活动时间段内:14:00:00~14:30:00;若不满足该条件,系统提示“当前时问没有正在进行中的活动”;
  • 当前参团用户为“已登录”状态。若不满足该条件,系统提示“请登录”
  • 该团购当前的参团用户不少于3个且团购总量不少于100。若不满足该条件,系统提示“参团用户少于3家或团购数量不足100,暂未成团”

​ 若以上三个成团规则全部符合,则该团购的所有参团用户可按相应的折扣单价成交,具体折扣标准如下:

  • 团购总量小于等于200时,成交单价打九五折;

  • 团购总量大于200日小于等于500时,成交单价打九折。

  • 团购总量大于500 时,成交单价打八折。

工具操作
第1步:请继续在 eclipse 中编写 Java 单元测试代码。
注意:如果您单元测试使用的是Python代码,请查看Python的单元测试题目,并在 eclipse 工具中也切换到 Python 工程中编写代码,并注意提交正确的答案。
第2步:打开题目压缩包中的【学生源码包】→【unit】文件夹,查看如下2个文件:

  • 被测源代码文件 GroupPurchase.java

  • 测试代码文件 GroupPurchaseTest.java

第3步:请把上述2文件复制到Eclipse 工具中对应的位置,然后开始填写单元测试代码。文件位置如下图所示:

在这里插入图片描述

单元测试答案代码

package cn.lanqiao.unit;import static org.junit.Assert.assertEquals;import org.junit.Before;
import org.junit.Test;import cn.lanqiao.GroupPurchse;public class GroupPurchseTest {static GroupPurchse pruchase;@Beforepublic void initGroupPurchseTest() {pruchase = new GroupPurchse();}@Testpublic void test01() {//TODOassertEquals("当前时间没有正在进行中的活动", pruchase.submitOrder("13:30:00", true, 3, 100, 300));}@Testpublic void test02() {//TODOassertEquals("当前时间没有正在进行中的活动", pruchase.submitOrder("15:30:00", true, 3, 100, 300));}@Testpublic void test03() {//TODOassertEquals("请登录", pruchase.submitOrder("14:15:00", false, 3, 100, 300));}@Testpublic void test04() {//TODOassertEquals("参团用户少于3家或团购数量不足100,暂未成团", pruchase.submitOrder("14:10:00", true, 2, 0, 50));}@Testpublic void test05() {//TODOassertEquals("参团用户少于3家或团购数量不足100,暂未成团", pruchase.submitOrder("14:15:00", true, 4, 80, 300));}@Testpublic void test06() {//TODOassertEquals("成交单价打九五折", pruchase.submitOrder("14:15:00", true, 4, 120, 120));}@Testpublic void test07() {//TODOassertEquals("成交单价打九折。", pruchase.submitOrder("14:15:00", true, 4, 300, 500));}@Testpublic void test08() {//TODOassertEquals("成交单价打八折。", pruchase.submitOrder("14:15:00", true, 4, 600, 300));}}

题目4:自动化测试 python

​ 这里是使用python做的,题目描述的虽然是java,但大差不差

题目描述

​ 请使用 Java 编程语言,结合 PO 模式(Page Object Model,页面对象模型)思想,使用 Selenium 自动化测试工具补全如下4个类文件中 TODO 处缺失的代码:

  • Pagel:LognPage.java,“登录”页面
  • Page2:FreightPage.java,“运费模板”页面
  • Page3:AddFreightPage.java,“新增运费模板”页面

WebCaseTest.java:测试用例代码文件请按照用例步骤,在测试用例 WebCaseTest.java文件中通过调用3个Page 类中的方法完成自动化测试代码。

具体的操作步骤如下:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评分标准

  • 3个page 类中方法的实现,每个占1.5分,共计27分。

  • WebCaseTest类文件中分别从规范、测试用例覆盖度、断言结果3个方面进行判分,共 23 分。

    • 规范(共4分):未合理使用等待方法,扣4分。
    • 测试用例步骤(共16分):每个步骤1分,共16分。
    • 测试用例断言(共3分):每个断言1分,共3处断言,断言不正确或者不通过,则按照已通过的断言个数给分。
  • 如整个项目代码编译失败,则扣除Page页中方法分和测试用例分数,但不影响规范得分。

代码实现

​ login_page.py

from selenium.webdriver.common.by import By
"""* Page1-【登录】页面* * * 1. 输入【用户名】* 2. 输入【密码】* 3. 点击【登录】按钮
"""class LoginPage:def __init__(self, driver):self.driver = driverdef input_login_name(self, loginName):# TODO 实现 【登录名称】输入的方法self.driver.find_element(By.XPATH, '/html/body/div[1]/div/div[2]/form/div[1]/div/div[1]/input').send_keys(loginName)def input_login_password(self, password):# TODO 实现【密码】输入的 方法self.driver.find_element(By.XPATH, '/html/body/div[1]/div/div[2]/form/div[2]/div/div/input').send_keys(password)def click_login_button(self):# TODO 实现 【登录】按钮的点击方法self.driver.find_element(By.XPATH, '/html/body/div[1]/div/div[2]/form/div[3]/div/div/input').click()

​ fright_page.py

from selenium.webdriver.common.by import By
"""* * * * 1. 获取登录成功后用户名文本方法2. 点击【门店管理】菜单的方法3. 点击【运费模板】菜单的方法4. 点击【+新增】按钮的方法5. 搜索项输入模板名称方法6. 点击【搜索】按钮的方法7. 点击列表【删除】按钮的方法8. 点击弹框【确定】按钮的方法9. 获取分页文本方法"""class FrightPage:def __init__(self, driver):self.driver = driverdef get_username_text(self):# TODO 实现 获取登录成功后用户名文本方法return self.driver.find_element(By.XPATH, '/html/body/div[1]/nav/div[2]/ul[2]/li/div/span').textdef click_store_meun(self):# TODO 实现 点击【门店管理】菜单的方法self.driver.find_element(By.XPATH, '/html/body/div[1]/aside/div/ul/li[3]/div').click()def click_model_meun(self):# TODO 实现 点击【运费模板】菜单的方法self.driver.find_element(By.XPATH, '/html/body/div[1]/aside/div/ul/li[3]/ul/li[4]').click()def click_add_button(self):# TODO 实现 点击【+新增】按钮的方法self.driver.find_element(By.XPATH, '/html/body/div[1]/div/main/div/div[2]/div[2]/div/div/div/div/div[2]/div/div[1]/div[1]/button[1]').click()def input_freight_name(self, name):# TODO 实现 搜索项输入模板名称方法self.driver.find_element(By.XPATH, '/html/body/div[1]/div/main/div/div[2]/div[2]/div/div/div/div/div[1]/div/div/form/div/div/div/div/div[2]/div/div/div[1]/div/div/div/div/input').send_keys(name)def click_search_button(self):# TODO 点击【搜索】按钮的方法self.driver.find_element(By.XPATH, '/html/body/div[1]/div/main/div/div[2]/div[2]/div/div/div/div/div[1]/div/div/form/div/div/div/div/div[2]/div/div/div[2]/div/div/button').click()def click_delete_button(self):# TODO 点击列表【删除】按钮的方法self.driver.find_element(By.XPATH, '/html/body/div[1]/div/main/div/div[2]/div[2]/div/div/div/div/div[2]/div/form/div/div[5]/div[2]/table/tbody/tr/td/div/button[2]').click()def get_page_number_text(self):# TODO 获取分页文本方法return self.driver.find_element(By.XPATH, '/html/body/div[1]/div/main/div/div[2]/div[2]/div/div/div/div/div[2]/div/div[2]/div/span[1]').textdef click_confirm_button(self):# TODO 点击弹框【确定】按钮的方法self.driver.find_element(By.XPATH, '/html/body/div[3]/div/div[3]/button[2]').click()

​ add_fright_page.py

from selenium.webdriver.common.by import By
"""* * * * 1. 输入模板名称【运费模板】2. 输入首件(个)【1】方法3. 输入运费(元)【2】方法4. 输入续件(个)【3】方法5. 输入续费(元)【4】方法6. 点击【确定】按钮方法"""class AddFrightPage:def __init__(self, driver):self.driver = driverdef input_freight_name(self, name):# TODO 实现 输入模板名称【运费模板】的方法self.driver.find_element(By.XPATH, '/html/body/div[1]/div/main/div/div[2]/div[2]/div/div/div/div[2]/div/div[2]/form/div[1]/div/div/input').send_keys(name)def input_firstArticle(self, num):# TODO 实现 输入输入首件(个)【1】的方法self.driver.find_element(By.XPATH, '/html/body/div[1]/div/main/div/div[2]/div[2]/div/div/div/div[2]/div/div[2]/form/div[4]/div[3]/table/tbody/tr/td[2]/div/div/div/div/input').send_keys(num )     def input_freight(self, money):# TODO 实现 输入运费(元)【2】的方法self.driver.find_element(By.XPATH, '/html/body/div[1]/div/main/div/div[2]/div[2]/div/div/div/div[2]/div/div[2]/form/div[4]/div[3]/table/tbody/tr/td[3]/div/div/div/div/input').send_keys(money)def input_contiunation(self, individual):# TODO 实现 输入续件(个)【3】的方法self.driver.find_element(By.XPATH, '/html/body/div[1]/div/main/div/div[2]/div[2]/div/div/div/div[2]/div/div[2]/form/div[4]/div[3]/table/tbody/tr/td[4]/div/div/div/div/input').send_keys(individual)def input_renew(self, money):# TODO 实现 输入续费(元)【4】的方法self.driver.find_element(By.XPATH, '/html/body/div[1]/div/main/div/div[2]/div[2]/div/div/div/div[2]/div/div[2]/form/div[4]/div[3]/table/tbody/tr/td[5]/div/div/div/div/input').send_keys(money)def click_ok_button(self):# TODO 实现 点击【确定】按钮方法self.driver.find_element(By.XPATH, '/html/body/div[1]/div/main/div/div[2]/div[2]/div/div/div/div[2]/div/div[3]/span/button[2]').click()    

​ web_case_test.py

import unittest
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from cn.lanqiao.web.login_page import LoginPage
from cn.lanqiao.web.freight_page import FrightPage
from cn.lanqiao.web.add_freight_page import AddFrightPage
from time import sleepclass TestWebCase(unittest.TestCase):# 浏览器初始化def setUp(self):# 不要改动此处 driver 位置gecko_path = "C:\\LanQiaoTest\\project\\PythonLanqiaoTest\\driver\\geckodriver.exe"options = webdriver.FirefoxOptions()options.set_preference('security.fileuri.strict_origin_policy', False)options.set_preference('security.fileuri.origin_policy', '*')self.driver = webdriver.Firefox(service=Service(gecko_path),options=options)self.driver.implicitly_wait(10)self.driver.maximize_window()# TODO 打开被测系统的网址self.driver.get("http://localhost:8090/#/login")# 请在此方法中续写测试用例def test_browser(self):# 创建 login_page 对象login_page = LoginPage(self.driver)# 创建 freight_page 对象freight_page = FrightPage(self.driver)# 创建 add_freight_page 对象add_freight_page = AddFrightPage(self.driver)# TODO 请调用以上3个实例化对象中的方法完成测试用例代码(具体请参照题目中的用例步骤描述和截图)login_page.input_login_name('admin')login_page.input_login_password('LQSTesting@2004')login_page.click_login_button()sleep(1)username = freight_page.get_username_text()self.assertEqual('admin', username)freight_page.click_store_meun()freight_page.click_model_meun()freight_page.click_add_button()sleep(1)add_freight_page.input_freight_name('运费模板')add_freight_page.input_firstArticle('1')add_freight_page.input_freight('2')add_freight_page.input_contiunation('3')add_freight_page.input_renew('4')add_freight_page.click_ok_button()sleep(5)page_num = freight_page.get_page_number_text()self.assertEqual('共 4 条', page_num)freight_page.input_freight_name('运费模板')freight_page.click_search_button()freight_page.click_delete_button()freight_page.click_confirm_button()sleep(5)page_num_2 = freight_page.get_page_number_text()        self.assertEqual('共 3 条', page_num_2)        def tearDown(self):sleep(3)self.driver.quit()

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

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

相关文章

聊聊应用商城评分4.9的Apipost IDEA插件

Apipost Helper,作为IDEA插件,可以快速生成和查询API文档,直观友好地在IDE中调试接口。它简化了开发流程并提升效率,即使新手也能够迅速掌握。Apipost Helper提供了诸多便捷功能,如通过代码查找接口或者通过接口查找代…

UE5、CesiumForUnreal实现建筑白模生成及白模美化功能

1.实现目标 在专栏上篇文章基于GeoJson文件生成城市级白模(本文建筑白模数量12w+)的基础上修改,计算法线和纹理坐标,并基于特定材质进行美化,美化后的白模GIF动图如下所示: 文章目录 1.实现目标2.实现过程2.1 基于Cesium材质美化2.1.1实现原理2.1.2 C++代码2.1.3 蓝图应…

(自学用)正演理论

基于波动方程如何解决数值频散问题——快速正演方法 NAD方法: 怎样离散/逼近高阶偏导数(如何采样): 传统方法是用某一点及其周围点的函数f的线性组合来逼近导数。只有函数值,要想提高精度,压制数值频散就必…

【Django】学习笔记

文章目录 [toc]MVC与MTVMVC设计模式MTV设计模式 Django下载Django工程创建与运行创建工程运行工程 子应用创建与注册安装创建子应用注册安装子应用 数据模型ORM框架模型迁移 Admin站点修改语言和时区设置管理员账号密码模型注册显示对象名称模型显示中文App显示中文 视图函数与…

分布式锁实现方案-基于zookeeper的分布式锁实现(原理与代码)

目录 一、基于zookeeper的分布式锁 1.1 基于Zookeeper实现分布式锁的原理 1.1.1 分布式锁特性说明 1.1.1.1 特点分析 1.1.1.2 本质 1.1.2 Zookeeper 分布式锁实现原理 1.1.2.1 Zookeeper临时顺序节点特性 1.1.2.2 Zookeeper满足分布式锁基本要求 1.1.2.3 Watcher机制 …

UE5增强输入系统 Enhanced Input

关键字: Enhanced Input 、 输入、映射、事件、鼠标、键盘、键鼠、动作、Trigger、触发器、 疑问: 新输入系统怎么做一个基础的案例?Trigger修改器中每个项都是什么功能?功能边界问题:如时刻、时段、单次事件、持续事…

Linux驱动开发——(一)设备树的基本属性及其应用

目录 一、常见基本属性 1.1 compatible属性 1.2 status属性 1.3 reg属性 1.4 #address-cells属性和#size-cells属性 二、基本属性在设备树的表现 三、基本属性在驱动代码的表现 3.1 驱动代码 3.2 驱动代码中的OF函数 3.2.1 of_find_node_by_path 3.2.2 of_find_prope…

Unity类银河恶魔城学习记录13-5,6 p146 Delete save file,p147 Encryption of saved data源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili FileDataHandler.cs using System; using System.IO; using UnityEngine; p…

Spring Boot + Thymeleaf 实现的任务发布网站

角色: 管理员雇主雇员 功能 雇主:登录、注册、发布任务、选择中标雇员、评价雇员雇员:登录、注册、查看任务列表、投标任务、收藏任务、完成任务管理员、登录、任务管理、雇主管理、雇员管理 部分功能截图 部署 导入数据库…

.NET 邮件发送 SMTP邮件发送

SMTP(Simple Mail Transfer Protocol)是用于电子邮件传输的规则集,可以从邮件客户端向接收电子邮件服务器发送、中继或转发邮件。发件人可使用SMTP 服务器来执行发送电子邮件的过程。SMTP服务器则是按照这些规则中转电子邮件的服务器。 IMAP…

视频质量评价 PSNR 算法详细介绍

PSNR PSNR(Peak Signal-to-Noise Ratio,峰值信噪比)是一种常用的评价图像质量的指标,尤其在图像压缩和图像处理领域。它基于最大可能的图像信号功率和图像的噪声功率之间的比率,通常用于衡量图像恢复或图像压缩算法的效果。 原理 PSNR是基于MSE(Mean Squared Error,均…

node-sass报错

node-sass报错 解决方案 有几种解决方案,但感觉都是为了下载vsta_sdk这个工具的。 有的电脑下载C开发程序时可以顺带下载这个插件。 可以直接下载VS之后点击下载C桌面开发,但是有的不行,所以网上也就有另外一种方式,就是下载V…

C# danbooru Stable Diffusion 提示词反推 OpenVINO Demo

C# danbooru Stable Diffusion 提示词反推 OpenVINO Demo 目录 说明 效果 模型信息 项目 代码 下载 说明 模型下载地址:https://huggingface.co/deepghs/ml-danbooru-onnx 效果 模型信息 OVVersion { BuildNumber 2023.1.0-12185-9e6b00e51cd-releases/20…

桌面软件使用到的开源库

想了解一下桌面软件开发中可能使用到的dll库 联想锁屏 libcef-常用概念-框架特点-CSDN博客 libcurl库使用详情、libcurl库的制作-CSDN博客 使用Cef和Qt做一个跨平台的多标签多窗口浏览器_cef3 多个标签-CSDN博客 cef 依赖的文件 libcef - Bigben - 博客园 (cnblogs.com) Q…

Hikyuu 2.0.2 发布,高性能量化交易研究框架

新增特性 历史财务信息入库,对于使用 MySQL 存储,可以直接使用服务端的财务数据(之前只能在执行数据下载的机器上获取)增加指标 FINANCE 获取相应历史财务数据,具体财务字段信息可通过StockManager.get_history_finan…

Android AIDL接口

一.AlDI接口简介 AIDL(Android Interface Definition Language)是一种 IDL 语言,用于生成可以在 Android 设备上两个进程之间进行进程间通信(IPC)的代码。 通过 AIDL,可以在一个进程中获取另一个进程的数据…

开源博客项目Blog .NET Core源码学习(16:App.Hosting项目结构分析-4)

本文学习并分析App.Hosting项目中前台页面的文章专栏页面和文章详情页面。< 文章专栏页面 文章专栏页面总体上为左右布局&#xff0c;左侧显示文章列表&#xff0c;右侧从上向下为关键词搜索、分类导航、热门文章等内容。整个页面使用了layui中的面包屑导航、表单、模版、流…

MySQL数据库外键约束打开与关闭 ️

MySQL数据库外键约束打开与关闭 &#x1f6e0;️ MySQL数据库外键约束打开与关闭 &#x1f6e0;️摘要 &#x1f4dd;引言 &#x1f680;正文内容&#xff08;详细介绍&#xff09; &#x1f4a1;关闭外键约束检查外键约束检查关闭的作用风险与最佳实践建议 &#x1f914; QA环…

使用Spring进行文件的上传和下载

概览 使用Spring进行文件的上传和下载Spring上传文件接口设计dubbo接口设计上传文件流的RPC的接口设计 Spring文件下载接口设计dubbo接口设计下载文件流的RPC的接口设计 spring上传文件大小控制 使用Spring进行文件的上传和下载 本文主要介绍在Spring框架下面调用微服务的dubb…

LeetCode36: 有效的数独(Java)

题目&#xff1a; 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例…