当前位置: 首页 > news >正文

个人博客测试报告

作者前言

🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
​🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言、C++和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂个人主页::小小页面🎂
🎂gitee页面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂


个人博客自动化测试项目

  • **作者前言**
  • 1.项目背景
  • 2. 项目功能
  • 3. 测试内容
    • 3.1编写测试用例
    • 3.2 功能测试
      • 3.2.1 登入测试
      • 3.2.2 博客首页测试
      • 3.2.3博客详情页测试
      • 3.2.4发布博客测试
  • 4. 自动化测试
    • 4.1测试工具
    • 4.2测试脚本
      • 4.2.1 登入测试脚本
      • 4.2.1 博客首页测试脚本
      • 4.2.1 博客详情页脚本
      • 4.2.1 发布博客测试脚本
  • Bug简述
  • 测试结论
  • gitee

1.项目背景

本项目是基于 SSM 框架(Spring、Spring MVC、MyBatis)开发的 个人博客系统,包括用户登录、博客发布、编辑、删除、查看等功能,提供博客列表页和详情页展示博客内容。用户登录后可以查看自己和其他用户的博客,并通过系统记录博客的发布时间、标题和发布者信息。

2. 项目功能

登录功能:没有实现账户注册功能,用户名以及密码是已经存在的。登录成功后就会跳转到列表页.

列表页面:可以在列表页查看有限数量的博客简介,其包括博客标题、发布时间以及内容概要。在左侧可以看到登录的用户以及文章数、分类数等的模块。在右上角有主页、写博客和注销三个功能:主页即列表页,写博客即博客编辑页,注销即注销用户,回到登录页面。

详情页面:在列表页面点击“查看全文”按钮就会跳转到详情页,此时就可以看到该篇博客的完整内容。在右上角同样有主页、写博客、删除和注销四个功能:删除即删除该篇博客,删除之后就会跳转到列表页面,该篇博客就被成功删除。

写博客:在登录之后的任意界面点击“写博客”之后就会进入博客编辑页面,此时就可以进行博客的编写,点击“发布文章”后就可以成功发布文章,此时就会跳转到列表页。

3. 测试内容

3.1编写测试用例

在这里插入图片描述

3.2 功能测试

3.2.1 登入测试

界面展示:
在这里插入图片描述

步骤 :
(1)点击登入链接,进入登入界面
(2)输入账号和密码
(3),点击登入按钮,
测试用例1: 输入正确的账号和密码 (账号:zhangsan 密码: 123456)
预期结果 成功登入,跳转到博客首页
实际效果: 成功登入,跳转到博客首页,如图:
在这里插入图片描述

测试用例2: 输入正确的账号和错误密码 (账号:zhangsan 密码: 23456)
预期结果 登入失败,出现警告弹窗
实际效果:登入失败,出现警告弹窗, 如图:
在这里插入图片描述

测试用例2: 输入错误的账号和正确密码 (账号:zhangsa 密码: 123456),
预期结果 登入失败,出现警告弹窗
实际效果:
在这里插入图片描述

3.2.2 博客首页测试

界面展示:
在这里插入图片描述
步骤:

  1. 点击右上角的的主页、写博客,查看跳转功能
  2. 点击GitHub,查看跳转页面
  3. 查看博客列表
  4. 点击查看全文按钮,查看跳转功能

测试用例1:点击主页,跳转到主页,
预期结果:跳转到博客首页
实际结果:跳转到博客首页 ,如图:
在这里插入图片描述
测试用例2:点击写博客
预期结果:跳转到编辑博客页面
实际结果:跳转到编辑博客页面, 如图:
在这里插入图片描述
测试用例3:点击GitHub
预期结果:跳转到GitHub界面
实际结果:
在这里插入图片描述
测试用例4:点击查看全文
预期结果:跳转到博客详情页,查看对应的信息正确
预期结果:成功进入博客详情页,但是对应的用户名错误, 如图:
在这里插入图片描述

3.2.3博客详情页测试

界面介绍:
在这里插入图片描述
步骤:
1.查看对应博客详情页的用户名,标题、按钮
2.点击按钮、GitHub
3.查看跳页页面

测试用例1:点击第一篇博客详情页, 查看对应功能是否正常
预期结果:拥有对应的编辑、删除按钮,用户名正确
实际结果:未拥有对应的编辑、删除按钮,用户名正确 如图:
在这里插入图片描述
测试用例2:点击非第一篇博客详情页, 查看对应功能是否正常
预期结果:拥有对应的编辑、删除按钮,用户名正确
实际结果:拥有对应的编辑、删除按钮,用户名正确 如图:
在这里插入图片描述
测试用例3:页面正常情况下,点击编辑按钮, 查看对应功能是否正常
预期结果:跳转到编辑博客页面,标题、内容正确
实际结果:
在这里插入图片描述
测试用例4:页面正常情况下,点击删除按钮, 查看对应功能是否正常
预期结果:跳转到博客首页页面,文章数量改变
实际结果:跳转到博客首页页面,文章数量未改变
在这里插入图片描述

3.2.4发布博客测试

界面:
在这里插入图片描述
步骤:
1.输入标题
2.输入内容
3. 点击发布按钮

测试用例1:输入标题(123)、内容(123),点击发布
预期结果:发布成功,文章数量改变,页面跳转到博客首页
实际结果:发布成功,文章数量改变,页面跳转到博客首页
在这里插入图片描述
测试用例2:未写标题、内容(123),点击发布
预期结果:发布失败,文章数量不改变
实际结果:发布失败,文章数量不改变
在这里插入图片描述
测试用例3:输入标题(123)、没有内容,点击发布
预期结果:发布失败,文章数量不改变
实际结果:
在这里插入图片描述

4. 自动化测试

4.1测试工具

系统: windows10
浏览器  Chrome 135.0.7049.95(正式版本) (64 位)
语言:python
模块:selenium4.0
软件: pyCharm2024.3.5

4.2测试脚本

本脚本的文件分Blog为AutoTest为根目录,Common文件做为驱动对象包, Test文件夹里面存储脚本,image文件夹作为截图保存
如图:
在这里插入图片描述

4.2.1 登入测试脚本

AutoTest _Login.py

import timefrom selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from Common.Util import Driver,BlogLogclass AutoTestLog():driver = ''def __init__(self):self.driver = BlogLog.driverself.url = BlogLog.urldef BloginSuccess(self,user, password):time.sleep(2)#清空self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()#定位输入self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys(user)self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys(password)# 登入self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#显示等待,判断是否登入WebDriverWait(self.driver,5).until(expected_conditions.invisibility_of_element((By.CSS_SELECTOR,"body > div.container > div.left > div")))time.sleep(3)txt = self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > img").get_attribute("src")print(txt)if(txt!=None):print("登入成功")else:print("失败")#保存截图BlogLog.imageSave()def BloginFail(self,user,password):# self.driver.back()time.sleep(2)# 清空self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()# 定位输入self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys(user)self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys(password)# 登入self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 保存截图,没有弹窗使用# BlogLog.imageSave()time.sleep(1)# 获取弹窗内容,进行print(self.driver.switch_to.alert.text)assert self.driver.switch_to.alert.text == "用户不存在"# 弹窗点击self.driver.switch_to.alert.accept()login = AutoTestLog()

4.2.1 博客首页测试脚本

AutoTest _List.py

import time
from itertools import zip_longest
from time import sleepfrom selenium.webdriver.common.by import Byfrom Common.Util import BlogLog
from test.AutoTest_Log import loginclass AutoTest_list():driver = ""url = ""def __init__(self):self.driver = BlogLog.driverself.url = BlogLog.url#点击主页def clickBlogPase(self):self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(4)").click()#获取当签页面的链接try:assert self.driver.current_url == self.urlexcept:print("主页点击失败")# self.driver.back()print("主页点击执行完")# 截图BlogLog.imageSave()#点击写博客def clickWriteBlogLogin(self):self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(5)").click()# 获取当签页面的链接try:assert self.driver.current_url == "http://8.137.19.140:9090/blog_edit.html"except:print("写博客点击失败")print("写博客点击执行完")#截图BlogLog.imageSave()self.driver.back()#点击注销def clickBLogOff(self):time.sleep(2)self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)").click()# 获取当签页面的链接try:assert self.driver.current_url == "http://8.137.19.140:9090/blog_login.html"except:print("注销点击失败")print("注销点击执行完")# 截图BlogLog.imageSave()login.BloginSuccess("zhangsan", "123456")#查看对应的博客列表数量def BlogList(self):paseNum = 0#列表是否存在文章以及文章的blogNum =int(self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > div:nth-child(5) > span:nth-child(1)").text)#文章数量定位,使用标题数量list_1= self.driver.find_elements(By.XPATH,"/html/body/div[2]/div[2]/div[@class='blog']/div[@class='title']")list_2 = self.driver.find_elements(By.XPATH,"/html/body/div[2]/div[2]/div[@class='blog']/div[@class='desc']")list_3 = self.driver.find_elements(By.XPATH,"/html/body/div[2]/div[2]/div[@class='blog']/a")for i in list_1:# print(i.text)txt = ""txt = str(i.text)paseNum+=1if( txt==None):#print("标题有错误")BlogLog.imageSave()return Nonetxt = str(list_2[paseNum-1].text)if( txt == None):print("内容有错误")BlogLog.imageSave()return Noneif(str(list_3[paseNum-1].text)== None):print("文件查看有错误")BlogLog.imageSave()return Noneif(paseNum!=blogNum):print("文章数量不对")BlogLog.imageSave()#点击GitHubdef clickBlogGitHub(self):self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > a").click()if self.driver.current_url == "https://gitee.com/bubble-fish666/class-java45":print("GitHub成功")BlogLog.imageSave()self.driver.back()else:print("GitHub失败")BlogLog.imageSave()print("GitHub运行成功")# 点击全文def clickPaseButton(self):list_3 = self.driver.find_elements(By.XPATH, "/html/body/div[2]/div[2]/div[@class='blog']/a")for i in list_3:i.click()self.driver.back()blogList = AutoTest_list()

4.2.1 博客详情页脚本

AutoTest _Detail.py

import timefrom selenium.webdriver.common.by import Byfrom Common.Util import BlogLog
from test.AutoTest_list import blogListclass BlogDetail:driver= ''url = ""title= ""content = ""def __init__(self):self.driver = BlogLog.driverself.url = BlogLog.url#查看博客详情界面def detailPase(self):list_3 = self.driver.find_elements(By.XPATH, "/html/body/div[2]/div[2]/div[@class='blog']/a")for i in list_3:#运行不成功可能师页面加载不出来,可以添加一下强制等待i.click()# 查看对应的文章标题、内容、发布时间、用户信息if(self.blogInformation()):# 点击编辑按钮self.clickEditButton()else:self.driver.back()print("返回")# 点击删除按钮# self.deteleButton()def blogInformation(self):blogList.clickBlogGitHub()time.sleep(1)if(BlogLog.user != self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3").text):print("用户名错误")BlogLog.imageSave()return Falseif(None!= self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.title").text):print("无标题")BlogLog.imageSave()return Falseelse:self.title = self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.title").textif (None != self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.date").text):print("无发布时间")BlogLog.imageSave()return Falseif (None != self.driver.find_element(By.CSS_SELECTOR,"#h2-- > a").get_attribute("name")):print("无内容")BlogLog.imageSave()return Falseelse:self.content =self.driver.find_element(By.CSS_SELECTOR,'#h2-- > a').get_attribute("name")if (None != self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(1)").text):print("无编辑按钮")BlogLog.imageSave()return Falseif (None != self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(2)").text):print("无删除按钮")BlogLog.imageSave()return FalseBlogLog.imageSave()return Truedef clickEditButton(self):time.sleep(1)self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(1)").click()# 查看对应的内容是否正确if(self.content != self.driver.find_element(By.CSS_SELECTOR,"#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre > span > span").text):print("内容有误")BlogLog.imageSave()self.driver.back()def deteleButton(self):#获取当前文章数量num = self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > div:nth-child(5) > span:nth-child(1)").text#点击删除self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(2)").click()# 弹窗确定self.driver.switch_to.alert.accept()# 页面跳转,判断文章数量是否改变if(num == self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > div:nth-child(5) > span:nth-child(1)").text):print("文章数量不变,实际上文章删除")

4.2.1 发布博客测试脚本

AutoTest _Edit.py

import timefrom selenium.webdriver.common.by import Byfrom Common.Util import BlogLog
from test.AutoTest_list import blogList
class BlogEditPase():url = ""driver =""def __init__(self):self.driver = BlogLog.driverself.url = BlogLog.url# 点击写博客self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(5)").click()# 获取当签页面的链接try:assert self.driver.current_url == "http://8.137.19.140:9090/blog_edit.html"except:print("写博客点击失败")print("写博客点击执行完")def BlogSuccess(self):# 输入标题self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("11111")#发布self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#获取最新发布的文章print("成功发布")def BloginFail(self):time.sleep(1)# 发布self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(1)self.driver.switch_to.alert.accept()

Bug简述

bug1:

版本 135.0.7049.96(正式版本) (64 位)
环境:Windons10
步骤:删除或者添加文章
预期结果:文章数量显示值改变
实际结果:文章数量显示值未改变

bug2:

版本 135.0.7049.96(正式版本) (64 位)
环境:Windons10
步骤:进入博客首页.点击第一篇文章查看全文按钮,跳转页面
预期结果:用户信息正常,拥有文章编辑按钮和删除按钮
实际结果:发现对应的用户名以及文章的编辑按钮和删除按钮错误

测试结论

本测试采用手动测试+自动化测试进行测试,主要测试个人博客的登入界面、博客首页、博客详情页以及编辑博客等,其中自动化测试采用的Selenium为测试工具,脚本具备相关界面的功能测试,其中每个类进行独立封装,提供有截图等功能, 提高了测试效率和覆盖率。

gitee

gitee个人博客测试

相关文章:

个人博客测试报告

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…...

Sentinel源码—3.ProcessorSlot的执行过程一

大纲 1.NodeSelectorSlot构建资源调用树 2.LogSlot和StatisticSlot采集资源的数据 3.Sentinel监听器模式的规则对象与规则管理 4.AuthoritySlot控制黑白名单权限 5.SystemSlot根据系统保护规则进行流控 1.NodeSelectorSlot构建资源调用树 (1)Entry的处理链的执行入口 (2…...

datagrip连接mysql问题5.7.26

1.Case sensitivity: plainmixed, delimitedexac Remote host terminated the handshake. 区分大小写:plain混合,分隔exac 远程主机终止了握手。 原因:usessl 参数用于指定是否使用 SSL(Secure Sockets Layer)加密来保护数据传…...

【电路笔记】-变压器构造

变压器构造 文章目录 变压器构造1、概述2、变压器铁芯的构造3、变压器叠片4、变压器绕组排列5、变压器点定位6、变压器铁芯损耗6.1 磁滞损耗6.2 涡流损耗6.3 铜损耗一个简单的双绕组变压器构造包括每个绕组分别缠绕在一个独立的软铁肢或磁芯上,这提供了必要的磁路。 1、概述 …...

阿里云集群开启debug

1、安装 kubectl Macos brew install kubectl Windows: https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-windows/ 下载后,放到任意目录 2、配置连接信息 mac 将以下内容复制到计算机 $HOME/.kube/config 文件下: windows 不同集…...

继承-C++

继承在我们日常中经常指我们的人伦关系中的父子关系,孩子继承父母的基因、习惯之类的,孩子也会有自己的个性等。然而在我们C计算机语言中的类也存在继承,我们将作为“父亲”的类称为父类,将作为“孩子”的类称为子类,父…...

Java并发-AQS框架原理解析与实现类详解

什么是AQS? AQS(AbstractQueuedSynchronizer)是Java并发包(JUC)的核心基础框架,它为构建锁和同步器提供了高效、灵活的底层支持。本文将从设计原理、核心机制及典型实现类三个维度展开,帮助读者…...

【FFmpeg从入门到精通】第一章-FFmpeg简介

1 FFmpeg的定义 FFmpeg既是一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。 FFmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议…...

Mac屏幕共享怎么使用?

Mac电脑要实现远程桌面连接到的工功能,可以使用其自带的屏幕共享功能。Mac屏幕共享能从一台Mac电脑远程控制另一台Mac电脑,并且无需下载第三方远程控制软件。下面,将为您介绍Mac远程桌面连接在哪,以及使用方法。 步骤 1. Mac的远…...

探索亮数据Web Unlocker API:让谷歌学术网页科研数据 “触手可及”

本文目录 一、引言二、Web Unlocker API 功能亮点三、Web Unlocker API 实战1.配置网页解锁器2.定位相关数据3.编写代码 四、Web Scraper API技术亮点 五、SERP API技术亮点 六、总结 一、引言 网页数据宛如一座蕴藏着无限价值的宝库,无论是企业洞察市场动态、制定…...

【后端】【python】利用反射器----动态设置装饰器

📘 Python 装饰器进阶指南 一、装饰器本质 ✅ 本质概念 Python 装饰器的本质是 函数嵌套 返回函数,它是对已有函数的增强,不修改原函数代码,使用语法糖 decorator 实现包裹效果。 def my_decorator(func):def wrapper(*args, …...

Oracle 中的 NOAUDIT CREATE SESSION 命令详解

Oracle 中的 NOAUDIT CREATE SESSION 命令详解 NOAUDIT CREATE SESSION 是 Oracle 数据库中用于取消对用户登录会话审计的命令,它与 AUDIT CREATE SESSION 命令相对应。 一、基本语法 NOAUDIT CREATE SESSION [BY user1 [, user2]... | BY [SESSION | ACCESS]] …...

《Chronos: Learning the Language of Time Series》

全文摘要 本文提出了Chronos,一个简单而有效的预训练概率时间序列模型框架。Chronos通过缩放和量化将时间序列值标记化为固定词汇,并利用现有的基于变换器的语言模型架构进行训练。我们在多个公开数据集和合成数据集上预训练了Chronos模型,并…...

git UserInterfaceState.xcuserstate 文件频繁更新

1> 退出 Xcdoe&#xff0c;打开终端&#xff08;Terminal&#xff09;&#xff0c;进入到你的项目目录下。 2> 在终端键入 git rm --cached <YourProjectName>.xcodeproj/project.xcworkspace/xcuserdata/<YourUsername>.xcuserdatad/UserInterfaceState.x…...

Day92 | 灵神 | 二叉树 路径总和

Day92 | 灵神 | 二叉树 路径总和 112.路径总和 112. 路径总和 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 1.递归函数意义 如果在根节点为t的树中可以找到长度为target的路径就返回true&#xff0c;找不到就返回false 2.参数和返回值 bool tra(TreeNode …...

数据集 handpose_x_plus 3D RGB 三维手势 - 打篮球 场景 play basketball

数据集 handpose 相关项目地址&#xff1a;https://github.com/XIAN-HHappy/handpose_x_plus 样例数据下载地址&#xff1a;数据集handpose-x-plus3DRGB三维手势-打篮球场景playbasketball资源-CSDN文库...

GitLab本地安装指南

当前GitLab的最新版是v17.10&#xff0c;安装地址&#xff1a;https://about.gitlab.com/install/。当然国内也可以安装极狐GitLab版本&#xff0c;极狐GitLab 是 GitLab 中国发行版&#xff08;JH&#xff09;。极狐GitLab支持龙蜥&#xff0c;欧拉等国内的操作系统平台。安装…...

云数据库:核心分类、技术优势与创新、应用场景、挑战应对和前沿趋势

李升伟 整理 云数据库技术是云计算与数据库技术融合的产物&#xff0c;它通过云服务模式提供数据库功能&#xff0c;彻底改变了数据的存储、管理和访问方式。以下从核心概念、技术优势、应用场景及挑战等方面展开分析&#xff1a; 一、云数据库的核心分类 按部署模式 托管数…...

算力狂飙时代:解码2024年上海及周边区域IDC市场的三重构局

2025年3月&#xff0c;科智咨询《2024-2025年上海及周边地区IDC市场研究报告》正式发布。报告对上海及周边地区IDC市场发展情况进行全面分析与深入解读。 在长三角地区数字经济蓬勃发展的背景下&#xff0c;上海及周边区域的数据中心产业正迎来深刻转型。随着上海市政府陆续出台…...

循环首差链码的通俗解释

循环首差链码的通俗解释 1. 链码是什么&#xff1f; 链码是一种用数字序列描述图像中物体轮廓的方法。例如&#xff0c;在 4-链码 中&#xff1a; 0 表示向右移动&#xff1b;1 表示向上移动&#xff1b;2 表示向左移动&#xff1b;3 表示向下移动。 假设有一段轮廓的链码为…...

✅ MySQL 事务 MVCC ROLLBACK

&#x1f9e0; 一、MVCC 与可重复读&#xff08;REPEATABLE READ&#xff09; 项目内容MVCC 概念多版本并发控制&#xff0c;事务中读到的是开启事务时的数据快照实现机制依赖 Read View trx_id Undo Log 实现版本判断快照读普通 SELECT&#xff0c;使用 MVCC&#xff0c;不…...

信息系统项目管理工程师备考计算类真题讲解四

一、三点估算&#xff08;PERT&#xff09; PERT&#xff08;Program Evaluation and Review Technique&#xff09;&#xff1a;计划评估技术&#xff0c;又称三点估算技术。PERT估算是一种项目管理中用于估算项目工期或成本的方法&#xff0c;以下是其详细介绍&#xff1a; …...

winfrom 查询某字符串 找到它在 richTextbox 的位置 定位 并高亮 并且滚动定位到所查询的字符串所在的行

如图&#xff1a; 代码&#xff1a; //查找关键字private void buttonSearch_Click(object sender, EventArgs e){string searchText textBoxSearch.Text;if (!string.IsNullOrEmpty(searchText)){TextBoxFinds(txtJSON, searchText);TextBoxFinds(txtSQL, searchText);}}//查…...

数据结构学习笔记 :线性表的链式存储详解

目录 单链表 1.1 无头单链表 1.2 有头单链表单向循环链表双链表 3.1 双链表 3.2 双向循环链表总结与对比 一、单链表 1. 无头单链表&#xff08;Headless Singly Linked List&#xff09; 定义&#xff1a;链表无头结点&#xff0c;直接由头指针指向第一个数据节点。 特点&…...

MyBatis-Plus 详解:快速上手到深入理解

一、前言 &#x1f31f; &#x1f9e9; MyBatis & MyBatis-Plus 是啥关系&#xff1f; MyBatis 是一个优秀的 ORM 框架&#xff08;Object Relational Mapping&#xff0c;面向对象关系映射&#xff09;&#xff0c;它让我们可以通过编写 SQL 来操作数据库&#xff0c;同…...

【软件工程大系】净室软件工程

净室软件工程&#xff08;Cleanroom Software Engineering&#xff09;是一种以缺陷预防&#xff08;正确性验证&#xff09;为核心的软件开发方法&#xff0c;旨在通过严格的工程规范和数学验证&#xff0c;在开发过程中避免缺陷的产生&#xff0c;而非依赖后期的测试和调试。…...

[区块链lab2] 构建具备加密功能的Web服务端

实验目标&#xff1a; 掌握区块链中密码技术的工作原理。在基于Flask框架的服务端中实现哈希算法的加密功能。 实验内容&#xff1a; 构建Flash Web服务器&#xff0c;实现哈希算法、非对称加密算法的加密功能。 实验步骤&#xff1a; 哈希算法的应用&#xff1a;创建hash…...

2025年- H10-Lc117-560.和为K的子数组(子串)--java版

1.题目描述 2.思路 例子1&#xff1a; 3.代码实现 class Solution {public int subarraySum(int[] nums, int k) {// List<Integer> listnew ArrayList<>();// int cnt0;// for(int i0;i<nums.length;i)// {// for(int ji1;j<nums.length;j)// {// …...

肾脏系统触发 “元数据泄漏警报“(蛋白尿+)

肾脏系统触发 "元数据泄漏警报"&#xff08;蛋白尿&#xff09; 核心故障模块&#xff1a;肾小球滤过屏障&#xff08;GlomerularFilter v2.5.0&#xff09; 漏洞类型&#xff1a;孔径屏障漏洞 电荷屏障校验失败 → 元数据&#xff08;蛋白质&#xff09;越界泄漏 …...

摄像头的工作原理与应用摄像头的工作原理与应用

一、摄像头的工作原理与应用 基本概念 V4L2的全称是Video For Linux Two&#xff0c;其实指的是V4L的升级版&#xff0c;是linux系统关于视频设备的内核驱动&#xff0c;同时V4L2也包含Linux系统下关于视频以及音频采集的接口&#xff0c;只需要配合对应的视频采集设备就可以…...

一个由通义千问以及FFmpeg的AVFrame、buffer引起的bug:前面几帧影响后面帧数据

目录 1 问题描述 2 我最开始的代码----错误代码 3 正确的代码 4 为什么前面帧的结果会叠加到了后面帧上----因为ffmpeg新一帧只更新上一帧变化的部分 5 以后不要用通义千问写代码 1 问题描述 某个项目中&#xff0c;需要做人脸马赛克&#xff0c;然后这个是君正的某款芯片…...

MyBatis-动态SQL

MyBatis Plus 作为 MyBatis 的增强工具&#xff0c;简化了 CRUD 操作&#xff0c;但在复杂查询时&#xff0c;仍需使用 MyBatis 的动态 SQL 功能。以下是一些常用的动态标签、用法示例及注意事项&#xff1a; 常用动态标签及用法示例 <if> 标签 用途&#xff1a;条件判…...

顺序表(Arraylist)和链表(Linkedlist)

List List是一个接口&#xff0c;继承自Collection。 从数据结构角度来说&#xff0c;List就是一个线性表&#xff0c;即用n个相同类型的有限序列&#xff0c;可以在此序列中可以进行增删改查操作。 List是接口不能直接实例化&#xff0c;Linkedlist和Arraylist都实现了List…...

【python】django sqlite版本过低怎么办

方法一&#xff1a;下载最新版本 复制上面的内容的链接 在服务器上进行操作 wget https://sqlite.org/2025/sqlite-autoconf-3490100.tar.gz tar -zxvf sqlite-autoconf-3490100.tar.gz cd sqlite-autoconf-3490100 ./configure --prefix/usr/local make && make in…...

解决Dify使用Docker Compose部署中无法通过OpenAI插件等国外大模型厂商的插件访问其API的问题

解决Dify使用Docker Compose部署中无法通过OpenAI插件等国外大模型厂商的插件访问其API的问题 问题描述 在使用Docker Compose部署Dify时&#xff0c;发现无法通过OpenAI等国外大模型厂商的插件访问其API。这主要是因为Docker容器内的网络环境与宿主机不同&#xff0c;导致无…...

【ROS】代价地图

【ROS】代价地图 前言代价地图&#xff08;Costmap&#xff09;概述代价地图的参数costmap_common_params.yaml 参数说明costmap_common_params.yaml 示例说明global_costmap.yaml 参数说明global_costmap.yaml 示例说明local_costmap.yaml 参数说明local_costmap.yaml 示例说明…...

Deno 统一 Node 和 npm,既是 JS 运行时,又是包管理器

Deno 是一个现代的、一体化的、零配置的 JavaScript 运行时、工具链&#xff0c;专为 JavaScript 和 TypeScript 开发设计。目前已有数十万开发者在使用 Deno&#xff0c;其代码仓库是 GitHub 上 star 数第二高的 Rust 项目。 Stars 数102620Forks 数5553 主要特点 内置安全性…...

把城市变成智能生命体,智慧城市的神奇进化

智能交通系统的建立与优化 智能交通系统&#xff08;ITS&#xff09;是智慧城市建设的核心部分之一&#xff0c;旨在提升交通管理效率和安全性。该系统利用传感器网络、GPS定位技术以及实时数据分析来监控和管理城市中的所有交通流动。例如&#xff0c;通过部署于道路两侧或交…...

青少年编程与数学 02-016 Python数据结构与算法 23课题、分布式算法

青少年编程与数学 02-016 Python数据结构与算法 23课题、分布式算法 课题摘要:一、一致性算法Paxos 算法 二、领导者选举算法Bully 算法 三、分布式锁算法基于 ZooKeeper 的分布式锁 四、分布式事务处理算法两阶段提交&#xff08;2PC&#xff09; 五、负载均衡算法最少连接法 …...

Windows10系统RabbitMQ无法访问Web端界面

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 项目场景&#xff1a; 在一个基于 .NET 的分布式项目中&#xff0c;团队使用 RabbitMQ 作为消息队列中间件&#xff0c;负责模块间的异步通信。开发环境为 Windows 10 系统&#xff0c;开发人员按照官…...

人工智能之数学基础:特征值分解与奇异值分解的区别分析

本文重点 矩阵分解是线性代数的核心工具,广泛应用于数据分析、信号处理、机器学习等领域。特征值分解与奇异值分解在数学定义、适用范围、几何意义、计算方法、应用场景及稳定性方面存在显著差异。EVD 适用于方阵,强调矩阵的固有属性;SVD 适用于任意矩阵,揭示矩阵的内在结…...

UDP概念特点+编程流程

UDP概念编程流程 目录 一、UDP基本概念 1.1 概念 1.2 特点 1.2.1 无连接性&#xff1a; 1.2.2 不可靠性 1.2.3 面向报文 二、UDP编程流程 2.1 客户端 cli.c 2.2 服务端ser.c 一、UDP基本概念 1.1 概念 UDP 即用户数据报协议&#xff08;User Datagram Protocol &…...

Go语言实现OAuth 2.0认证服务器

文章目录 1. 项目概述1.1 OAuth2 流程 2. OAuth 2.0 Storage接口解析2.1 基础方法2.2 客户端管理相关方法2.3 授权码相关方法2.4 访问令牌相关方法2.5 刷新令牌相关方法 2.6 方法调用时序2.7 关键注意点3. MySQL存储实现原理3.1 数据库设计3.2 核心实现 4. OAuth 2.0授权码流程…...

【版本控制】idea中使用git

大家好&#xff0c;我是jstart千语。接下来继续对git的内容进行讲解。也是在开发中最常使用&#xff0c;最重要的部分&#xff0c;在idea中操作git。目录在右侧哦。 如果需要git命令的详解&#xff1a; 【版本控制】git命令使用大全-CSDN博客 一、配置git 要先关闭项目&#xf…...

永磁同步电机控制中,滑模观测器是基于反电动势观测转子速度和角度的?扩展卡尔曼滤波观测器是基于什么观测的?扩展卡尔曼滤波观测器也是基于反电动势吗?

滑模观测器在PMSM中的应用&#xff1a; 滑模观测器是一种非线性观测器&#xff0c;利用切换函数设计&#xff0c;使得状态估计误差迅速趋近于零&#xff0c;实现快速响应和对外部干扰的鲁棒性。 在永磁同步电机&#xff08;PMSM&#xff09;无传感器控制中&#xff0c;滑模观测…...

十倍开发效率 - IDEA 插件之RestfulBox - API

提高效率不是为了完成更多的任务&#xff0c;而是有充足的时间摸鱼。 快速体验 RestfulBox - API 是 IDEA 的插件&#xff0c;适合本地测试接口&#xff0c;完全不需要对项目进行任何以来。 接口管理&#xff1a;支持接口扫描、浏览、搜索、跳转、导入和导出。支持接口请求&a…...

HTML、CSS 和 JavaScript 常见用法及使用规范

一、HTML 深度剖析 1. 文档类型声明 HTML 文档开头的 <!DOCTYPE html> 声明告知浏览器当前文档使用的是 HTML5 标准。它是文档的重要元信息&#xff0c;能确保浏览器以标准模式渲染页面&#xff0c;避免怪异模式下的兼容性问题。 2. 元数据标签 <meta> 标签&am…...

人工智能概念股投资:10大潜力标的深度研究

人工智能概念股投资&#xff1a;10大潜力标的深度研究 一、人工智能概念股投资的基本概念 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是指利用计算机程序模拟人类智能的一种技术&#xff0c;通过对数据的分析和学习&#xff0c;实现类似人类思维和…...

centos部署的openstack发布windows虚拟机

‌CentOS上部署的OpenStack可以发布Windows虚拟机‌。在CentOS上部署OpenStack后&#xff0c;可以通过OpenStack平台创建和管理Windows虚拟机。以下是具体的步骤和注意事项&#xff1a; ‌安装和配置OpenStack‌&#xff1a; 首先&#xff0c;确保系统满足OpenStack的最低硬件…...

Fortran 中使用 C_LOC 和 C_F_POINTER 结合的方法来实现不同类型指针指向同一块内存区域

在 Fortran 中&#xff0c;可以使用 C_LOC 和 C_F_POINTER 结合的方法来实现不同类型指针指向同一块内存区域。以下是具体方法和示例&#xff1a; 关键步骤&#xff1a; 获取内存地址&#xff1a;用 C_LOC 获取原始数组的 C 地址。类型转换&#xff1a;用 C_F_POINTER 将地址转…...