博客系统测试报告
文章目录
- 目录
- 1. 项目背景
- 2. 项目简介
- 3. 测试工具
- 4. 测试用例
- 5. 功能测试
- 6. 性能测试
- 7. 弱网测试
- 8. 自动化测试
- 9. bug简述
- 10. 测试结论
目录
- 项目背景
- 项目简介
- 测试工具
- 测试用例
- 功能测试
- 性能测试
- 弱网测试
- 自动化测试
- bug简述
- 测试结论
1. 项目背景
为了将平时自己写的笔记、知识点进行记录和保存,从而编写了一个个人博客系统,这样就可以将个人笔记保存在网上,便于随时进行查看和复习。
2. 项目简介
博客系统共分为四个页面:博客登录页、博客列表页、博客详情页、博客编辑页。
在博客登录页,可以通过输入正确的账号和密码进行登录。
在博客列表页,我们可以查看用户信息和发布的博客。
在博客详情页,我们可以查看博客标题、博客发布时间、博客内容、编辑按钮、删除按钮。
在博客编辑页,我们可以通过填写标题和内容并点击发布按钮来发布博客。
3. 测试工具
在进行性能测试时,我们会用到jmeter工具;在进行弱网测试时,我们会用到fiddler工具;在进行自动化测试时,我们会用到PyCharm以及selenium库来编写自动化脚本。
4. 测试用例
5. 功能测试
6. 性能测试
7. 弱网测试
在弱网情况下,博客列表页加载会变慢,先加载出用户信息,再加载出博客列表,但页面并不会出现错误。
8. 自动化测试
# common/Utils.pyimport datetime
import os.path
import sysfrom selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManagerclass Driver:driver = ""def __init__(self):options = webdriver.ChromeOptions()self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=options)self.driver.implicitly_wait(2)def getScreenShot(self):dirname = datetime.datetime.now().strftime("%Y-%m-%d")if not os.path.exists("../images/"+dirname):os.mkdir("../images/"+dirname)filename = sys._getframe().f_back.f_code.co_name+"-"+datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")+".png"self.driver.save_screenshot("../images/"+dirname+"/"+filename)BlogDriver = Driver()
# tests/BlogLogin.pyfrom selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWaitfrom common.Utils import BlogDriverclass BlogLogin:url = ""driver = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_login.html"self.driver = BlogDriver.driverself.driver.get(self.url)def LoginSucTest(self):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("lisi")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR,"#submit").click()WebDriverWait(self.driver,3).until(EC.title_is("博客列表页"))BlogDriver.getScreenShot()self.driver.back()def LoginFailTest(self):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("lisi")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()WebDriverWait(self.driver,3).until(EC.alert_is_present())self.driver.switch_to.alert.accept()BlogDriver.getScreenShot()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("li")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()WebDriverWait(self.driver, 3).until(EC.alert_is_present())self.driver.switch_to.alert.accept()BlogDriver.getScreenShot()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("li")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()WebDriverWait(self.driver, 3).until(EC.alert_is_present())self.driver.switch_to.alert.accept()BlogDriver.getScreenShot()
# tests/BlogList.pyfrom selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWaitfrom common.Utils import BlogDriverclass BlogList:url = ""driver = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_list.html"self.driver = BlogDriver.driverself.driver.get(self.url)def ListTestByLogin(self):# 检查头像是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > img")# 检查昵称是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")# 检查文章数量是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > div:nth-child(5) > span:nth-child(1)")# 检查分类数量是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > div:nth-child(5) > span:nth-child(2)")# 检查博客标题是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div > div.title")# 检查博客发布时间是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div > div.date")# 检查博客内容是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div > div.desc")# 检查查看全文按钮是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div > a")BlogDriver.getScreenShot()def ListTestByNotLogin(self):WebDriverWait(self.driver,3).until(EC.title_is("博客登陆页"))BlogDriver.getScreenShot()
# tests/BlogDetail.pyfrom common.Utils import BlogDriverclass BlogDetail:url = ""driver = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=46533"self.driver = BlogDriver.driverself.driver.get(self.url)def DetailTestByLogin(self):# 检查博客标题是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.title")# 检查博客发表时间是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.date")# 检查博客内容是否存在self.driver.find_element(By.CSS_SELECTOR,"#h2-u5728u8FD9u91CCu5199u4E0Bu4E00u7BC7u535Au5BA2")# 检查博客编辑按钮是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(1)")# 检查博客删除按钮是否存在self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(2)")BlogDriver.getScreenShot()def DetailTestByNotLogin(self):WebDriverWait(self.driver,3).until(EC.title_is("博客登陆页"))BlogDriver.getScreenShot()
# tests/BlogEdit.pyimport datetime
import timefrom selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWaitfrom common.Utils import BlogDriverclass BlogEdit:url = ""driver = ""def __init__(self):self.url = "http://8.137.19.140:9090/blog_edit.html"self.driver = BlogDriver.driverself.driver.get(self.url)def EditSucTestByLogin(self):self.driver.get("http://8.137.19.140:9090/blog_list.html")# 计算博客数量elementsbegin = self.driver.find_elements(By.CSS_SELECTOR,"body > div.container > div.right > div")countbegin = len(elementsbegin)# 返回博客编辑页self.driver.back()# 清空标题self.driver.find_element(By.CSS_SELECTOR,"#title").clear()# 填写标题self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("自动化测试"+datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))# 清空内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()# 填写内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()# 点击发布按钮self.driver.find_element(By.CSS_SELECTOR,"#submit").click()# 计算博客数量elementsend = self.driver.find_elements(By.CSS_SELECTOR, "body > div.container > div.right > div")countend = len(elementsend)assert countbegin == countend - 1BlogDriver.getScreenShot()# 返回博客编辑页self.driver.back()def EditFailTestByLogin(self):# 不写标题# 清空标题self.driver.find_element(By.CSS_SELECTOR, "#title").clear()# 清空内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()# 填写内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()# 点击发布按钮self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 出现弹窗,点击确定关闭弹窗WebDriverWait(self.driver,3).until(EC.alert_is_present())self.driver.switch_to.alert.accept()# 屏幕截图BlogDriver.getScreenShot()# 不写内容# 清空内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()# 清空标题self.driver.find_element(By.CSS_SELECTOR, "#title").clear()# 填写标题self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))# 点击发布按钮time.sleep(0.5)self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 出现弹窗,点击确定关闭弹窗WebDriverWait(self.driver, 3).until(EC.alert_is_present())self.driver.switch_to.alert.accept()# 屏幕截图BlogDriver.getScreenShot()# 不点击发布按钮# 清空标题self.driver.find_element(By.CSS_SELECTOR, "#title").clear()# 填写标题self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))# 清空内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()# 填写内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()# 检查是否还在当前页面title = self.driver.titleassert title == "博客编辑页"# 屏幕截图BlogDriver.getScreenShot()def EditTestByNotLogin(self):# 清空标题self.driver.find_element(By.CSS_SELECTOR, "#title").clear()# 填写标题self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("自动化测试" + datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S"))# 清空内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(39) > a > i").click()# 填写内容self.driver.find_element(By.CSS_SELECTOR,"#editor > div.editormd-toolbar > div > ul > li:nth-child(20) > a > i").click()# 点击发布按钮self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 检查是否返回博客登陆页WebDriverWait(self.driver,3).until(EC.title_is("博客登陆页"))
# tests/RunTest.pyfrom common.Utils import BlogDriver
from tests import BlogLogin, BlogList, BlogDetail, BlogEditif __name__ == "__main__":# 未登录状态BlogLogin.BlogLogin().LoginFailTest()BlogList.BlogList().ListTestByNotLogin()BlogDetail.BlogDetail().DetailTestByNotLogin()BlogEdit.BlogEdit().EditTestByNotLogin()# 登录状态BlogLogin.BlogLogin().LoginSucTest()BlogList.BlogList().ListTestByLogin()BlogDetail.BlogDetail().DetailTestByLogin()BlogEdit.BlogEdit().EditFailTestByLogin()BlogEdit.BlogEdit().EditSucTestByLogin()BlogDriver.driver.quit()
9. bug简述
在功能测试时发现博客列表页的文章数量显示是一个固定值,不会随着博客数量的变化而变化。
10. 测试结论
通过对博客系统进行测试,可以得出博客系统功能方面存在一个bug;在性能方面也可以达到标准,在并发较多时不会出现异常,可靠性较好,响应时间在正常范围内,吞吐量可以达标;在弱网状态下,页面也不会发生错误;界面美观;用户使用简单易上手;可以兼容不同浏览器;在输入密码时有掩码行为,可以很好的保护用户隐私。
相关文章:
博客系统测试报告
文章目录 目录1. 项目背景2. 项目简介3. 测试工具4. 测试用例5. 功能测试6. 性能测试7. 弱网测试8. 自动化测试9. bug简述10. 测试结论 目录 项目背景项目简介测试工具测试用例功能测试性能测试弱网测试自动化测试bug简述测试结论 1. 项目背景 为了将平时自己写的笔记、知识…...
window 显示驱动开发-线程同步和 TDR
下图显示了 Windows 显示驱动程序模型 (WDDM) 中显示微型端口驱动程序的线程同步的工作原理 如果发生硬件超时,则会启动 超时检测和恢复 (TDR) 进程。 GPU 计划程序调用驱动程序的 DxgkDdiResetFromTimeout 函数,这将重置 GPU。 DxgkDdiResetFromTimeou…...
GEC6818蜂鸣器驱动开发
相关知识:Linux设备驱动开发 insmod 编译好的.ko文件后再运行beep_app.c编译完成的可执行文件即可使板子蜂鸣。 beep_drv.c: #include <linux/module.h> //包含了加载模块时需要使用的大量符号和函数声明 #include <linux/kernel.h> //包含了printk内…...
WPF MVVM入门系列教程(五、命令和用户输入)
🧭 WPF MVVM入门系列教程 一、MVVM模式介绍二、依赖属性三、数据绑定四、ViewModel五、命令和用户输入六、ViewModel案例演示 WPF中的命令模型 在WPF中,我们可以使用事件来响应鼠标和键盘动作。 但使用事件会具备一定的局限性,例如&#x…...
基于Jetson Nano与PyTorch的无人机实时目标跟踪系统搭建指南
引言:边缘计算赋能智能监控 在AIoT时代,将深度学习模型部署到嵌入式设备已成为行业刚需。本文将手把手指导读者在NVIDIA Jetson Nano(4GB版本)开发板上,构建基于YOLOv5SORT算法的实时目标跟踪系统,集成无人…...
创建简易个人关系图谱(Neo4j )
1. 启动 Neo4j 并进入 Neo4j Browser 确保 Neo4j 已启动,访问: http://localhost:7474/2. 创建人物节点(Person) (1) 创建 Alice CREATE (alice:Person {name: "Alice", age: 28, gender: "Female"}) RETUR…...
JavaScript 到命令和控制 (C2) 服务器恶意软件分析及防御
攻击始于一个经过混淆的JavaScript文件,该文件从开源服务中获取编码字符串以执行PowerShell脚本。然后,该脚本从一个IP地址和一个URL缩短器下载一个JPG图像和一个文本文件,这两个文件都包含使用隐写术嵌入的恶意MZ DOS可执行文件。这些有效载荷一旦执行,就会部署Stealer恶意…...
[原创](现代Delphi 12指南):[macOS 64bit App开发]: 如何自动打开“安全性与隐私“控制面板?
[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…...
springboot微服务连接nacos超时
问题现象 java应用启动失败,查看日志,发现是连接Nacos超时,获取不到配置,导致dubbo注册失败,错误日志如下: 2025-05-01 14:50:08.973 ERROR [TW-172.29.245.61-9063-3] [com.alibaba.nacos.common.utils.…...
react-transition-group 在 React 18 及以上版本中的兼容性问题
出现问题 在React19中下载react-transition-group(4.4.5),正常导入使用: 出现下述报错: 报错原因 React18开始,已废弃findDOMNode ,而 react-transition-group 的 4.4.5 版本仍然使用了 findD…...
day17 天池新闻数据KMeans、DBSCAN 与层次聚类的对比
在数据分析中,聚类是一种常见的无监督学习方法,用于将数据划分为不同的组或簇。本文将通过news数据集(news.csv),使用 KMeans、DBSCAN 和层次聚类三种方法进行聚类分析,并对比它们的性能。 数据来源于天池 …...
数学复习笔记 3
background music 《有人懂你》赵十三 前言 也别开始强化吧,复盘前面复习过的内容,可能是更稳的方式。 无穷级数 写无穷级数的例题。感觉自己真的学会了么,我生怕一写一个不吱声了。呜呜呜。这一章有 27 个例题。我从最后一个例题开始写…...
Navicat Premium 17 备份,还原数据库(PostGreSql)
目录 备份 还原备份 备份 1、点击数据库,点击备份 2、点击新建备份 3、点击备份,查看执行日志 还原备份 1、点击备份、右键还原备份从... 2、 选择文件目录,以及xxx.nb3文件,点击打开 3、点击还原 4、执行日志...
25_05_02Linux架构篇、第1章_03安装部署nginx
Linux_基础篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:安装部署nginx 版本号: 1.0,0 作者: 老王要学习 日期: 2025.05.02 适用环境: Centos7 文档说明 本文档聚焦于 CentOS 7 环境下 Nginx 的安装部…...
PostgreSQL存储过程“多态“实现:同一方法名支持不同参数
引言 在传统编程语言中,方法重载(同一方法名不同参数)是实现多态的重要手段。但当我们将目光转向PostgreSQL数据库时,是否也能在存储过程(函数)中实现类似的功能?本文将深入探讨PostgreSQL中如…...
Messenger.Default.Send 所有重载参数说明
Messenger.Default.Send 是 MVVM 框架中实现消息传递的核心方法,其重载参数主要用于控制消息的发送范围和接收条件。以下是其所有重载形式及参数说明: 1. 基本消息发送 Send<TMessage>(TMessage message) 参数说明: TMessage:消息类型(泛型参数),可以是任…...
java安全入门
文章目录 java基础知识this变量方法可变参数构造方法继承的关键字protected super阻止继承方法重载向上转型和向下转型多态抽象接口static静态字段default方法 包final内部类 java序列化与反序列化反射urldns链动态代理类加载器(ClassLoader)双亲委派模型…...
【开源深度解析】从零打造AI暗棋对战系统:Python实现中国象棋暗棋全攻略
🎲【开源深度解析】从零打造AI暗棋对战系统:Python实现中国象棋暗棋全攻略 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,…...
UE5 Daz头发转Blender曲线再导出ABC成为Groom
先安装Daz to Blender Import插件 【神器】 --DAZ一键导入blender插件的详细安装和使用,自带骨骼绑定和控制器,多姿势动画,Importer桥接插件_哔哩哔哩_bilibili 然后安装DAZHairConverter插件 一分钟将DAZ头发转化成Blender粒子毛发_哔哩哔…...
【Java学习】反射
目录 反射类 一、泛型参数 二、反射类类型 三、实例化 1.实例化材料 2.结构信息可使用化 四、使用 1.Class —类完整结构信息 1.1Class<类>实例化 1.2Class<类>实例获取 1.2.1Class类静态获取: 1.2.2信息类静态获取 1.2.3信息类非静态获取 …...
SQLite数据类型
目录 1 SQLite的类型概述 1.1 存储类(Storage Classes) 1.2 类型亲和性(Type Affinity) 2 类型亲和性分配规则 3 数据类型详细说明 3.1 INTEGER类型 3.2 REAL类型 3.3 TEXT类型 3.4 BLOB类型 3.5 NULL类型 3.6 NUMERI…...
Django异步任务处理方式总结
在 Django 中实现异步任务处理是优化性能和用户体验的关键。以下是几种常见的异步任务处理方式及详细说明: 1. Celery(最主流方案) 适用场景:需要可靠、分布式、复杂任务队列的项目(如定时任务、重试机制、多节点部署…...
AI技术下研发体系重构
导语: 人工智能技术已发展70余年,经历了从逻辑符号主义向数据驱动范式的转变,目前正处于向多模态、通用化以及伦理化方向演化的阶段。在接下来的五年内,人工智能技术的商业化应用预计将迎来关键性的转变。大模型技术的突破、多模…...
UE5 使用插槽和物理约束对角色新增的饰品添加物理效果
这是一条项链,分为链部分和吊坠部分 新增物理碰撞资产,链部分在前面(作为固定),吊坠部分在后面(作为物理模拟) 链部分的Physics设置 连接部分的设置 吊坠部分 添加物理约束,在Constraint里面添加角色名和饰品名 在约束里面可以对特定骨骼约束,这里需要把链部分约束...
邂逅蓝耘元生代:ComfyUI 工作流与服务器虚拟化的诗意交织
往期推荐: 探秘蓝耘元生代:ComfyUI 工作流创建与网络安全的奇妙羁绊-CSDN博客 工作流 x 深度学习:揭秘蓝耘元生代如何用 ComfyUI 玩转 AI 开发-CSDN博客 探索元生代:ComfyUI 工作流与计算机视觉的奇妙邂逅-CSDN博客 解锁元生代&a…...
【Elasticsearch】在kibana中能获取已创建的api keys吗?
在 Kibana 中,目前没有直接的界面功能可以列出或查看已创建的 API 密钥(API keys)。API 密钥的管理和查看主要通过 Elasticsearch 的 REST API 来完成,而不是通过 Kibana 的管理界面。 在 Kibana 中使用 Dev Tools 查看 API 密钥…...
[论文阅读]Deep Cross Network for Ad Click Predictions
摘要 特征工程是许多预测模型成功的关键。然而,这个过程是困难的,甚至需要手动特征工程或穷举搜索。DNN能够自动学习特征交互;然而,它们隐式地生成所有的交互,并且不一定有效地学习所有类型的交叉特征。在本文中&…...
薪技术|0到1学会性能测试第45课-apache调优技术
前面的推文我们掌握了apache监控技术,今天我们继续来看下apache调优技术,究竟是怎么做性能调优???后续文章都会系统分享干货,带大家从0到1学会性能测试。 Apache调优技术 Apache最近的版本是2.2版,Apache2.2是一个多用途的web服务器,其设计在灵活性、可移植性和性能中…...
Linux之基础开发工具二(makefile,git,gdb)
目录 一、自动化构建-make/makefile 1.1、背景 1.2、基本使用 1.3、推导过程 1.4、语法拓展 二、进度条小程序 2.1、回车与换行 2.2、行缓冲区 2.3、练手-倒计时程序 2.4、进度条程序 三、版本控制器-Git 3.1、版本控制器 3.2、gitee的使用 3.2.1、如何创建仓库 …...
cesium之自定义地图与地图叠加
在appvue中,cesium支持更换不同的地图资源,代码如下 <template><div id"cesiumContainer" ref"cesiumContainer"></div> </template><script setup> import * as Cesium from cesium; import "./Widgets/widgets.css&…...
链表结构深度解析:从单向无头到双向循环的实现全指南
上篇博客实现动态顺序表时,我们会发现它存在许多弊端,如: • 中间/头部的插⼊删除,时间复杂度为O(N) • 增容需要申请新空间,拷⻉数据,释放旧空间。会有不⼩的消耗。 • 增容⼀般是呈2倍的增⻓,…...
Apache Velocity代码生成简要介绍
Apache Velocity 概述 Apache Velocity 是一个基于 Java 的模板引擎,它允许将 Java 代码与 HTML、XML 或其他文本格式分离,实现视图与数据的解耦。在 Web 开发中,Velocity 常用于生成动态网页内容;在其他场景下,也可用…...
阿里云前端Nginx部署完,用ip地址访问却总访问不到,为什么?检查安全组是否设置u为Http(80)!
根据你的描述,Ping测试显示数据包无丢失但无法通过公网IP访问服务,说明网络基础层(ICMP协议)是通畅的,但更高层(如TCP/UDP协议或服务配置)存在问题。以下是系统性排查与解决方案: 一…...
【Hive入门】Hive行级安全:基于Apache Ranger的细粒度访问控制深度解析
引言 在大数据时代,数据安全与隐私保护已成为企业不可忽视的核心需求。传统表级权限控制已无法满足"同一张表不同用户看到不同数据"的业务场景,行级安全(Row-Level Security)成为数据仓库系统的必备能力。 1 行级安全概述 1.1 什么是行级安全…...
Marin说PCB之1000-BASE-T1的PCB设计总结--04
另外一路的1000-BASE-T1 Circuit:千兆以太网的仿真电路原理图的连接搭建方式如下: (共模电感的连接需要特别注意一下PIN序别搞错了) 这一路1000-BASE-T1 Circuit是做了兼容设计的: 其中电容C2099和C2100是百兆以太网的…...
两数之和(暴力+哈希查找)
目录 一.题目 二.解题过程 题目解析 方法一(暴力求解) 思路 代码 提交结果 方法二(哈希查找) 思路 代码 提交结果 作者的个人gitee 作者的算法讲解主页▶️ 每日一言:“愿你纵踩淤泥,也要…...
Qt项目——天气预报
目录 前言结果预览工程文件窗体无状态栏窗口跟随移动HTTP基本概念JSON数据QT解析JSON数据结语 前言 通过对之前Qt的学习其实我们就已经有一点经验了,做天气预报只需要了解以下内容: stylesheet界面美化 Json数据解析 HTTP通信 自定义控件绘制温度 结果预…...
智能推理DeepSeek-R1+Word深度整合业级智能办公构建
前引: 当我们将DeepSeek-R1深度集成到Word时,实际上是在构建智能办公的"数字神经系统"。这个系统不仅理解文字内容,更能感知用户意图,在恰当的时刻提供精准的智能辅助。随着RAG(检索增强生成)技术…...
【C++ Qt】常用输入类下:Combo Box/Spin Box/DataTimeEdit/Dial/Slide
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论: 在Qt开发框架中,UI组件是构建用户交互界面的基石。本章将详细探讨Qt中常用的UI组件,包括下拉框(QComboBoxÿ…...
基于Piecewise Jerk Speed Optimizer的速度规划算法(附ROS C++/Python仿真)
目录 1 时空解耦运动规划2 PJSO速度规划原理2.1 优化变量2.2 代价函数2.3 约束条件2.4 二次规划形式 3 算法仿真3.1 ROS C仿真3.2 Python仿真 1 时空解耦运动规划 在自主移动系统的运动规划体系中,时空解耦的递进式架构因其高效性与工程可实现性被广泛采用。这一架…...
K8s 常用命令、对象名称缩写汇总
K8s 常用命令、对象名称缩写汇总 前言 在之前的文章中已经陆续介绍过 Kubernetes 的部分命令,本文将专题介绍 Kubernetes 的常用命令,处理日常工作基本够用了。 集群相关 1、查看集群信息 kubectl cluster-info # 输出信息Kubernetes master is run…...
C++编程语言:从高效系统开发到现代编程范式的演进之路
目录 前言一、c简介1.1 起源1.2 c的特点 二、开发环境搭建 2.1. 安装 Qt 开发工具2.2 修改编码环境 2.3创建第一个 Qt 项目2.4 c的编译过程2.5 代码示例 2.6 qt疑难杂症 2.6.1 遇到无法删除代码,一点击光标就变成小黑块2.6.2 遇到运行不弹出终端 编辑 2.6.3 遇到…...
OpenCV进阶操作:角点检测
文章目录 一、角点检测1、定义2、检测流程1)输入图像2)图像预处理3)特征提取4)角点检测5)角点定位和标记6)角点筛选或后处理(可选)7)输出结果 二、Harris 角点检测&#…...
广州华锐视点邀您参与2025广交会VRAR展【5月10-12日】
2025 广交会数字显示与元宇宙生态博览会暨第 9 届世界 VR&AR 展将在广州盛大举行 。时间:2025 年 5 月 10 日至 12 日,广州华锐视点作为一家深耕 VR、AR、AI、元宇宙内容制作领域的企业,也将携旗下众多创新产品和解决方案闪耀登场&#x…...
mac m2 安装 hbase
默认安装好了 homebrew。 1. 终端先更新下 homebrew brew upgrade再安装 hbase brew install hbase 安装完会有如下图的内容 2. 按照提示启动 hbase brew services start hbase返回启动成功 3. 访问 http://localhost:16010 检验一下 启动成功 4. 在启动 hbase shell之…...
k8s node 报IPVS no destination available
在 Kubernetes 集群中,IPVS no destination available 错误通常表示 kube-proxy(IPVS 模式)无法为 Service 找到可用的后端 Pod。这会导致流量无法正确转发,影响服务可用性。以下是详细的排查和解决方法: 一、错误原因…...
MySQL 中 EXISTS (SELECT 1 FROM ...) 的用法详解
EXISTS (SELECT 1 FROM ...) 是 MySQL 中用于存在性检查的核心语法,其核心逻辑是判断子查询是否返回至少一行数据。以下从作用原理、使用场景、性能优化等方面展开解析,并结合具体示例说明。 1. 基本语法与作用原理 语法结构: SELECT 列名 F…...
荣耀A8互动娱乐组件部署实录(第3部分:控制端结构与房间通信协议)
作者:曾在 WebSocket 超时里泡了七天七夜的苦命人 一、控制端总体架构概述 荣耀A8控制端主要承担的是“运营支点”功能,也就是开发与运营之间的桥梁。它既不直接参与玩家行为,又控制着玩家的行为逻辑和游戏规则触发机制。控制端的主要职责包…...
前端-HTML+CSS+JavaScript+Vue+Ajax概述
HTML(超文本标记语言)常见标签 <html><head> <title>这是标题的内容,显示在浏览器的头部</title></head><body><!-- 这里面的内容在浏览器显示给用户看 --><!-- h1 -> h6 : 标题从大到小 …...
20250506格式化NanoPi NEO开发板使用Ubuntu core16.04系统的TF启动卡
https://www.sdcard.org/downloads/formatter/eula_windows/SDCardFormatterv5_WinEN.zip 20250506使用SDCardFormatter工具格式化NanoPi NEO开发板使用Ubuntu core16.04系统的TF启动卡 2025/5/6 20:04 缘起:使用友善之臂的NanoPi NEO开发板,制作了Ubunt…...