开发者社区测试报告(功能测试+性能测试)
功能测试
测试相关用例
开发者社区功能背景
在当今数字化时代,编程已经成为一项核心技能,越来越多的人开始学习编程,以适应快速变化的科技 环境。基于这一需求,我设计开发了一个类似博客的论坛系统,专注于方便程序员与学习编程者之间的交流和 学习,旨在创建一个开放、友好且充满活力的社区。
测试用例思维导图
测试页面
以下是要测试的页面:
页面排版渲染与需求一致,同时按钮能够进行正确点击
登录页面
注册页面
主界面
用户个人信息
帖子详情
短信页面
测试用例
设置了部分基础的测试用例,尽可能的全覆盖,这里只展示部分用例(篇幅有限)
登录界面
-
正确输入用户名和密码
-
输入密码为空
注册页面
-
正确注册
-
用户名为空
-
用户已存在
-
密码为空
个人页面
-
邮箱修改失败
-
电话号码失败
-
密码修改失败
帖子页面
-
创建帖子失败
-
回复帖子失败
站内信页面
回复失败
代码编写
基础配置
先进行驱动配置以及截图配置
public class InitUtils {public static WebDriver webDriver ;public static WebDriver createDriver(){if(webDriver==null){System.setProperty("webdriver.chrome.driver", "C:\\学习使我快乐\\测试\\demo\\chromedriver-win64\\chromedriver.exe");ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");webDriver=new ChromeDriver(options);webDriver.manage().timeouts().implicitlyWait(Duration.ofMillis(5));}return webDriver;}public InitUtils(String url){webDriver = createDriver();webDriver.get(url);}//截图public static void getImage(String str) throws IOException {SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sim2 = new SimpleDateFormat("HH_mm_ss_SSS");String dirTime = sim1.format(System.currentTimeMillis());String pngTime = sim2.format(System.currentTimeMillis());//名字String fileName = "./src/test/image/"+dirTime+"/"+str+"_"+pngTime+".png";File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);FileUtils.copyFile(file,new File(fileName));}
}
登录页面
public class LoginPageTest extends InitUtils {public static String url = "http://127.0.0.1:58080/sign-in.html";public LoginPageTest() {super(url);}//登录成功public void LoginSuc() throws InterruptedException, IOException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();//先找到输入框,输入正确的用户名和密码getImage(str);//用方法名进行命名Thread.sleep(2000);webDriver.findElement(By.cssSelector("#username")).sendKeys("小明");webDriver.findElement(By.cssSelector("#password")).sendKeys("123123");webDriver.findElement(By.cssSelector("#submit")).click();Thread.sleep(2000);getImage(str);//webDriver.quit();}//退出登录public void logout() throws IOException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();getImage(str);webDriver.findElement(By.cssSelector("#index_user_logout")).click();getImage(str);//webDriver.quit();}//登录失败public void LoginFail() throws IOException, InterruptedException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();//先找到输入框,输入错误的用户名和密码getImage(str);
// webDriver.findElement(By.cssSelector("#username")).sendKeys("小明");
// webDriver.findElement(By.cssSelector("#password")).sendKeys("123456111");webDriver.findElement(By.cssSelector("#username")).sendKeys("");webDriver.findElement(By.cssSelector("#password")).sendKeys("");webDriver.findElement(By.cssSelector("#submit")).click();Thread.sleep(2000);getImage(str);//webDriver.quit();}
}
注册页面
public class RegisterTest extends InitUtils {public static String url = "http://127.0.0.1:58080/sign-up.html";public RegisterTest() {super(url);}//注册成功public void registerSuc() throws IOException, InterruptedException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);Thread.sleep(2000);webDriver.findElement(By.cssSelector("#username")).sendKeys("小喜");webDriver.findElement(By.cssSelector("#nickname")).sendKeys("happiness");webDriver.findElement(By.cssSelector("#password")).sendKeys("123456");webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123456");webDriver.findElement(By.cssSelector("#policy")).click();Thread.sleep(2000);getImage(str);webDriver.findElement(By.cssSelector("#submit")).click();Thread.sleep(2000);getImage(str);//webDriver.quit();}//注册失败public void fail() throws IOException, InterruptedException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);//webDriver.findElement(By.cssSelector("#username")).sendKeys("");//用户名为空//webDriver.findElement(By.cssSelector("#username")).sendKeys("小明");//用户名重复webDriver.findElement(By.cssSelector("#username")).sendKeys("明明");webDriver.findElement(By.cssSelector("#nickname")).sendKeys("mingming");//webDriver.findElement(By.cssSelector("#password")).sendKeys("");//密码为空//webDriver.findElement(By.cssSelector("#password")).sendKeys("123");//密码小于6位webDriver.findElement(By.cssSelector("#password")).sendKeys("123456");//webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123");//两次密码输入不一样webDriver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("123456");//不点击同意信息//webDriver.findElement(By.cssSelector("#policy")).click();Thread.sleep(2000);getImage(str);webDriver.findElement(By.cssSelector("#submit")).click();Thread.sleep(2000);getImage(str);}
}
帖子页面
public class ListPageTest extends InitUtils {public static String url = "http://127.0.0.1:58080/index.html";public ListPageTest() {super(url);}//点击帖子public void listDetail() throws IOException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);webDriver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();//因为是外部的文件 MD输入,所以一般是找不到的webDriver.findElement(By.cssSelector("#article_details_reply > div.CodeMirror.cm-s-default.CodeMirror-wrap.CodeMirror-empty > div.CodeMirror-scroll")).sendKeys("这是自动化测试内容");getImage(str);webDriver.findElement(By.cssSelector("#details_btn_article_reply")).click();getImage(str);//webDriver.quit();}//点击板块public void listBoard() throws IOException, InterruptedException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);webDriver.findElement(By.cssSelector("#topBoardList > li:nth-child(5) > a > span.nav-link-title")).click();Thread.sleep(2000);getImage(str);webDriver.findElement(By.cssSelector("#topBoardList > li:nth-child(8) > a > span.nav-link-title")).click();Thread.sleep(2000);getImage(str);webDriver.quit();}//发布新帖子public void createNewText() throws IOException, InterruptedException{String str = Thread.currentThread().getStackTrace()[1].getMethodName();webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")).click();getImage(str);webDriver.findElement(By.cssSelector("#article_post_borad > option:nth-child(6)")).click();//选择板块webDriver.findElement(By.cssSelector("#article_post_title")).sendKeys("自动化测试");Thread.sleep(2000);webDriver.findElement(By.cssSelector("#edit-article > div.CodeMirror.cm-s-default.CodeMirror-wrap.CodeMirror-empty > div.CodeMirror-scroll")).sendKeys("自动化测试内容");Thread.sleep(2000);getImage(str);webDriver.findElement(By.cssSelector("#article_post_submit")).click();Thread.sleep(2000);getImage(str);webDriver.quit();}
}
用户页面
public class UserTest extends InitUtils {//用户有两个页面,所以需要进行跳转public static String url="http://127.0.0.1:58080/index.html";public UserTest() {super(url);}//获取当前用户帖子public void myText() throws InterruptedException, IOException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);Thread.sleep(2000);webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();webDriver.findElement(By.cssSelector("#index_user_profile")).click();Thread.sleep(2000);getImage(str);//点击帖子webDriver.findElement(By.cssSelector("#profile_article_body > li > div.card.timeline-event-card > div > div > div > div > div.text-truncate > a > strong")).click();getImage(str);webDriver.quit();}//修改个人信息成功public void updateInfoSuc() throws IOException, InterruptedException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);Thread.sleep(2000);webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();webDriver.findElement(By.cssSelector("#index_user_settings")).click();Thread.sleep(2000);//修改个人信息//修改之前要先清空//修改头像webDriver.findElement(By.cssSelector("#bit-forum-content > div.page-body > div > div > div > div.col.d-flex.flex-column > div > div.row.align-items-center > div:nth-child(2) > a")).sendKeys("C:\\Users\\asus\\Desktop\\证件照压缩版.jpg");//修改昵称
// webDriver.findElement(By.cssSelector("#setting_input_nickname")).clear();
// webDriver.findElement(By.cssSelector("#setting_input_nickname")).sendKeys("NickName");
// Thread.sleep(2000);
// webDriver.findElement(By.cssSelector("#setting_submit_nickname")).click();
//
// //修改邮箱
// webDriver.findElement(By.cssSelector("#setting_input_email")).clear();
// webDriver.findElement(By.cssSelector("#setting_input_email")).sendKeys("qweqwe123@qq.com");
// Thread.sleep(2000);
// webDriver.findElement(By.cssSelector("#setting_submit_email")).click();
//
// //修改电话号码
// webDriver.findElement(By.cssSelector("#setting_input_phoneNum")).clear();
// webDriver.findElement(By.cssSelector("#setting_input_phoneNum")).sendKeys("15136698733");
// Thread.sleep(2000);
// webDriver.findElement(By.cssSelector("#setting_submit_phoneNum")).click();
//
// //修改密码
// webDriver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys("123123");
// webDriver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys("1123456");
// webDriver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys("123456");
// webDriver.findElement(By.cssSelector("#settings_submit_password")).click();
//
// //修改个人简介
// webDriver.findElement(By.cssSelector("#settings_textarea_remark")).clear();
// webDriver.findElement(By.cssSelector("#settings_textarea_remark")).sendKeys("这是自动化测试");
// Thread.sleep(2000);
// webDriver.findElement(By.cssSelector("#settings_submit_remark")).click();Thread.sleep(2000);getImage(str);Thread.sleep(2000);webDriver.quit();}//修改个人信息失败public void updateInfoFail()throws IOException, InterruptedException{String str = Thread.currentThread().getStackTrace()[1].getMethodName();getImage(str);Thread.sleep(2000);webDriver.findElement(By.cssSelector("#index_nav_avatar")).click();webDriver.findElement(By.cssSelector("#index_user_settings")).click();Thread.sleep(2000);//修改个人信息//修改邮箱
// webDriver.findElement(By.cssSelector("#setting_input_email")).clear();
// webDriver.findElement(By.cssSelector("#setting_input_email")).sendKeys("qweqwe123");
// Thread.sleep(2000);
// webDriver.findElement(By.cssSelector("#setting_submit_email")).click();
// getImage(str);// //修改电话号码
// webDriver.findElement(By.cssSelector("#setting_input_phoneNum")).clear();
// webDriver.findElement(By.cssSelector("#setting_input_phoneNum")).sendKeys("15136698");
// Thread.sleep(2000);
// webDriver.findElement(By.cssSelector("#setting_submit_phoneNum")).click();
// getImage(str);//修改密码
// webDriver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys("123123");
// webDriver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys("1123456");//前后密码不一致
// webDriver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys("123456");
// webDriver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys("");//没有输入旧密码
// webDriver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys("123456");
// webDriver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys("123456");webDriver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys("123123");webDriver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys("123456");webDriver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys("");//没有输入确认密码Thread.sleep(2000);webDriver.findElement(By.cssSelector("#settings_submit_password")).click();Thread.sleep(1000);getImage(str);webDriver.quit();}
}
短信页面
public class MessageTest extends InitUtils {public static String url = "http://127.0.0.1:58080/index.html";public MessageTest() {super(url);}//打开站内信板块,点击站内信public void getMessage() throws InterruptedException, IOException {String str = Thread.currentThread().getStackTrace()[1].getMethodName();webDriver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div > a > svg")).click();Thread.sleep(2000);getImage(str);webDriver.findElement(By.cssSelector("#index_div_message_list > div:nth-child(1) > div > div.col.text-truncate > a > span:nth-child(2)")).click();Thread.sleep(2000);getImage(str);//webDriver.quit();}//回复站内信public void responseMsg()throws InterruptedException, IOException{String str = Thread.currentThread().getStackTrace()[1].getMethodName();webDriver.findElement(By.cssSelector("#btn_index_message_reply")).click();Thread.sleep(2000);getImage(str);webDriver.findElement(By.cssSelector("#index_message_reply_receive_content")).sendKeys("用来测试一下");Thread.sleep(2000);getImage(str);webDriver.findElement(By.cssSelector("#btn_index_send_message_reply")).click();Thread.sleep(2000);getImage(str);webDriver.quit();}
}
性能测试
对部分接口进行了性能测试,设置了600个线程
总结
-
总体性能:
-
总请求数为6000,所有请求均成功执行,错误率为0.00%。
-
平均响应时间为5.20毫秒,最小响应时间为0毫秒,最大响应时间为133毫秒。
-
网络吞吐量为512.30 KiB/s,接收数据量为4521.95 KiB,发送数据量为113.35 KiB。
-
-
各请求类型的性能:
-
发起帖子:平均响应时间为10.06毫秒,最大响应时间为32毫秒。
-
点赞帖子:平均响应时间为5.10毫秒,最大响应时间为13毫秒。
-
登出:平均响应时间为1.06毫秒,是所有请求中最快的。
-
登录:平均响应时间为2.83毫秒,最大响应时间为36毫秒。
-
获取帖子内容:平均响应时间为32.46毫秒,是所有请求中最慢的,最大响应时间为63毫秒。
-
获取帖子详情:平均响应时间为5.24毫秒,最大响应时间为31毫秒。
-
获取板块:平均响应时间为2.47毫秒,最大响应时间为8毫秒。
-
获取用户帖子:平均响应时间为16.25毫秒,最大响应时间为44毫秒。
-
获取用户详情:平均响应时间为1.17毫秒,最大响应时间为6毫秒。
-
获取短信内容和获取站内信列表:平均响应时间均为4.44毫秒,最大响应时间为133毫秒。
-
获取站内信:平均响应时间为3.39毫秒,最大响应时间为14毫秒。
-
-
APDEX指数:
-
所有请求的APDEX指数均为1.000,表示所有请求的响应时间都在用户可接受的范围内(容忍阈值500毫秒,沮丧阈值1.5秒)。
-
-
网络使用情况:
-
接收数据量最大的是“获取帖子内容”和“获取用户帖子”,分别为4450.46 KiB和4290.84 KiB。
-
发送数据量最大的是“发起帖子”和“登录”,分别为21.53 KiB和15.27 KiB。
-
-
结论:
-
系统整体性能良好,所有请求的响应时间都在可接受范围内,且没有错误发生。
-
“获取帖子内容”和“获取用户帖子”是系统中响应时间较长的操作,可能需要进一步优化。
-
网络吞吐量和数据传输量在合理范围内,没有明显的瓶颈。
-
相关文章:
开发者社区测试报告(功能测试+性能测试)
功能测试 测试相关用例 开发者社区功能背景 在当今数字化时代,编程已经成为一项核心技能,越来越多的人开始学习编程,以适应快速变化的科技 环境。基于这一需求,我设计开发了一个类似博客的论坛系统,专注于方便程序员…...
环形链表问题的探究与代码实现
在数据结构与算法的学习中,环形链表是一个经典的问题。它不仅考察对链表这种数据结构的理解,还涉及到指针操作和逻辑推理。本文将结合代码和图文,深入分析如何判断链表中是否有环以及如何找到环的入口点。 目录 一、判断链表中是否有环 …...
【C++】vector(下):vector类的模拟实现(含迭代器失效问题)
文章目录 前言一、vector类的常用接口的模拟实现1.头文件(my vector.h)整体框架2.模拟实现vector类对象的常见构造3.模拟实现vector iterator4.模拟实现vector类对象的容量操作5.模拟实现vector类对象的访问6.模拟实现vector类对象的修改操作 二、vector…...
NLTK和jieba
NLTK与jieba概述 自然语言处理(NLP)领域是计算机科学领域与人工智能领域中的一个重要方向,主要研究方向是实现人与计算机之间用自然语言进行有效通信的各种理论和方法。 在自然语言处理领域中,文本类型的数据占据着很大的市场&a…...
Java后端高频面经——计算机网络
TCP/IP四层模型?输入一个网址后发生了什么,以百度为例?(美团) (1)四层模型 应用层:支持 HTTP、SMTP 等最终用户进程传输层:处理主机到主机的通信(TCP、UDP&am…...
CSDN博客:Markdown编辑语法教程总结教程(中)
❤个人主页:折枝寄北的博客 Markdown编辑语法教程总结 前言1. 列表1.1 无序列表1.2 有序列表1.3 待办事项列表1.4 自定义列表 2. 图片2.1 直接插入图片2.2 插入带尺寸的图片2.3 插入宽度确定,高度等比例的图片2.4 插入高度确定宽度等比例的图片2.5 插入居…...
Springboot redis bitMap实现用户签到以及统计,保姆级教程
项目架构,这是作为demo展示使用: Redis config: package com.zy.config;import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.Ob…...
AI Agent系列(一) - Agent概述
AI Agent系列【一】 前言一、AI代理的特点二、 AI Agent的技术框架三、 开源自主代理 前言 AI Agent,即人工智能代理,一般直接叫做智能体 百度百科给AI Agent定义为: “以大语言模型为大脑驱动的系统,具备自主理解、感知、规划、…...
Scala 中trait的线性化规则(Linearization Rule)和 super 的调用行为
在 Scala 中,特质(Trait)是一种强大的工具,用于实现代码的复用和组合。当一个类混入(with)多个特质时,可能会出现方法冲突的情况。为了解决这种冲突,Scala 引入了最右优先原则&#…...
【Linux系统编程】初识系统编程
目录 一、什么是系统编程1. 系统编程的定义2. 系统编程的特点3. 系统编程的应用领域4. 系统编程的核心概念5. 系统编程的工具和技术 二、操作系统四大基本功能1. 进程管理(Process Management)2. 内存管理(Memory Management)3. 文…...
Unsloth - 动态 4 bit 量化
文章目录 💔 量化可能会破坏模型🦙 Llama 3.2 Vision 细节Pixtral (12B) 视觉🦙 Llama 3.2 (90B) 视觉指令 本文翻译自:Unsloth - Dynamic 4-bit Quantization (2024年12月4日 Daniel & Michael https://unsloth.…...
技术领域,有许多优秀的博客和网站
在技术领域,有许多优秀的博客和网站为开发者、工程师和技术爱好者提供了丰富的学习资源和行业动态。以下是一些常用的技术博客和网站,涵盖了编程、软件开发、数据科学、人工智能、网络安全等多个领域: 1. 综合技术博客 1.1 Medium 网址: ht…...
黑金风格人像静物户外旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!
调色教程 针对人像、静物以及户外旅拍照片,运用 Lightroom 软件进行风格化调色工作。旨在通过软件中的多种工具,如基本参数调整、HSL(色相、饱和度、明亮度)调整、曲线工具等改变照片原本的色彩、明度、对比度等属性,将…...
Manus 与鸿蒙 Next 深度融合:构建下一代空间计算生态
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/north 文章目录 一、技术融合背景与意义1.1 技术栈协同优势1.2 典型应用场景 二、系统架构设计2.1 整体架构图…...
并查集模板
注意理解路径压缩 static class UnionFind {int[] fa;public UnionFind(int n) {fa new int[n];for (int i 0; i < n; i) {fa[i] i;}}public int find(int i) {if (fa[i] ! i) {fa[i] find(fa[i]);}return fa[i];}public void union(int i, int j) {int fai find(i);in…...
推流项目的ffmpeg配置和流程重点总结一下
ffmpeg的初始化配置,在合成工作都是根据这个ffmpeg的配置来做的,是和成ts流还是flv,是推动远端还是保存到本地, FFmpeg 的核心数据结构,负责协调编码、封装和写入操作。它相当于推流的“总指挥”。 先来看一下ffmpeg的…...
使用 Python 开发的简单招聘信息采集系统
以下是一个使用 Python 开发的简单招聘信息采集系统,它包含用户登录、招聘信息收集和前后端交互的基本功能。我们将使用 Flask 作为后端框架,HTML 作为前端页面。 项目结构 recruitment_system/ ├── app.py ├── templates/ │ ├── login.html │ ├── index…...
Selenium库打开指定端口(9222、9333等)浏览器【已解决!!!】
就是在写动态爬虫爬取数据的过程中,如果用selenium的话,有一个缺点,就是当我们去测试一个网站能不能爬取,它都会重新换端口打开一个浏览器,不会使用上一次使用的浏览器,在实际使用过程中这样调试很烦&#…...
Android MVI架构模式详解
MVI概念 MVI(Model-View-Intent)是一种Android应用架构模式,旨在通过单向数据流和不可变性来简化应用的状态管理。MVI的核心思想是将用户操作、状态更新和界面渲染分离,确保应用的状态可预测且易于调试。 MVI的核心组件 Model&a…...
低代码开发直聘管理系统
低代码 DeepSeek 组合的方式开发直聘管理系统,兼职是开挂的存在。整个管理后台系统 小程序端接口的输出,只花了两个星期不到。 一、技术栈 后端:SpringBoot mybatis MySQL Redis 前端:Vue elementui 二、整体效果 三、表结…...
LVGL开发说明
准备工作 LVGL图形化工具:Gui-Guider-Setup-1.8.0-GA.exeLVGL库:lvgl-release-v8.3屏幕触摸驱动:CST816屏幕驱动:ST7789屏幕尺寸:320 * 170 触发事件 按键的点击事件 添加点击事件 触摸屏点击对应的按键后就会触发回…...
推荐优秀的开源软件合集
在信息化高度发达的今天,数据安全与远程协作变得越来越重要。很多企业和个人都在寻找可替代商业闭源软件的开源解决方案。今天,我们向大家推荐几款优秀的开源软件,涵盖私有云存储、远程桌面、团队协作、内容管理等多个领域。 1. Nextcloud —…...
代码随想录刷题day41|(二叉树篇)二叉树的最大深度(递归)
目录 一、二叉树理论基础 二、二叉树的深度和高度 三、递归和迭代思路 3.1 递归法 3.2 迭代法 四、相关算法题目 五、总结 一、二叉树理论基础 详见:代码随想录刷题day34|(二叉树篇)二叉树的递归遍历-CSDN博客 二、二叉树的深度和高…...
向量内积(点乘)和外积(叉乘)
文章目录 1. 向量的内积(点积)1.1 定义1.2 几何意义表征两个向量的投影关系计算向量夹角的余弦值 1.3 重要性质1.4 应用场景 2. 向量的外积(叉积)2.1 定义(仅适用于三维空间)2.2 几何意义2.3 重要性质2.4 应…...
PDF转JPG(并去除多余的白边)
首先,手动下载一个软件(poppler for Windows),下载地址:https://github.com/oschwartz10612/poppler-windows/releases/tag/v24.08.0-0 否则会出现以下错误: PDFInfoNotInstalledError: Unable to get pag…...
【无人机路径规划】基于麻雀搜索算法(SSA)的无人机路径规划(Matlab)
效果一览 代码获取私信博主基于麻雀搜索算法(SSA)的无人机路径规划(Matlab) 一、算法背景与核心思想 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种受麻雀群体觅食行为启发的元启发式算法࿰…...
2020CVPR-SiamBAN:用于视觉跟踪的Siamese框自适应网络
原文标题:Siamese Box Adaptive Network for Visual Tracking 中文标题:用于视觉跟踪的Siamese框自适应网络 代码地址: GitHub - hqucv/siamban: Siamese Box Adaptive Network for Visual Tracking Abstract 大多数现有的跟踪器通常依靠多尺…...
带你从入门到精通——自然语言处理(五. 自注意力机制和transformer的输入部分)
建议先阅读我之前的博客,掌握一定的自然语言处理前置知识后再阅读本文,链接如下: 带你从入门到精通——自然语言处理(一. 文本的基本预处理方法和张量表示)-CSDN博客 带你从入门到精通——自然语言处理(二…...
MySql自动安装脚本
一、脚本安装流程 1. 添加MySQL的Repository 使用wget命令从MySQL官方网站下载Yum Repository的RPM包。使用rpm -ivh命令安装下载的RPM包,以添加MySQL的Yum Repository。 2. 安装mysql-community-server 使用yum install -y mysql-community-server --nogpgchec…...
3.9【Q】csd
在计算机存储领域,CSD是什么? 基于CXL™-Type3 实现内存池化 CPU访问内存的瓶颈是什么?具体矛盾是什么? 计算型存储-2:标准、API实现 NUMA是什么?详细解释一下它的核心思想?...
Qt常用控件之表格QTableWidget
表格QTableWidget QTableWidget 是一个表格控件,行和列交汇形成的每个单元格,是一个 QTableWidgetItem 对象。 1. QTableWidget属性 QTableWidget 的属性只有两个: 属性说明rowCount当前行的个数。columnCount当前列的个数。 2. QTableW…...
数据库批处理
数据库批处理是一种处理数据的方法,通常用于对大量数据进行一次性操作。批处理可以有效地减少数据库操作的次数,提高数据处理的效率。在数据库中,批处理通常通过编写批处理脚本或使用相应的工具来实现。 一般情况下,数据库批处理…...
Flask 框架简介
Flask 框架简介 Flask 框架简介 Flask 框架简介 Flask 是一个 Python 微型网页开发框架。微型指明了 Flash 的核心是轻量级的,但是可以灵活扩展。下面的简单的例子要和一个数据库系统交互。Django附带了与最常见的数据库交互所需的库。另一方面,Flask允…...
KMP 算法的 C 语言实现
# include <stdio.h> # include <stdlib.h> # include <string.h>// 打印 KMP 匹配结果. void ColorPrint(char *T, int *result, int result_size, int m) {int green_size strlen("\x1b[31m");int reset_size strlen("\x1b[0m");cha…...
深入理解 TCP 协议:可靠传输、连接管理与经典面试题解析
TCP(Transmission Control Protocol)是互联网中最重要的传输层协议之一,其设计目标是提供可靠的、面向连接的、全双工的数据传输服务。本文将从核心机制、工作原理到经典面试题,全面解析 TCP 协议的关键特性。 一、TCP 核心特性 …...
雪花算法
雪花算法(Snowflake) 雪花算法是一种由Twitter开源的分布式ID生成算法,广泛应用于分布式系统中,用于生成全局唯一的ID。这些ID不仅具有唯一性,还按照时间顺序递增,便于排序和查询。以下是雪花算法的详细解…...
coding ability 展开第二幕(双指针——巩固篇)超详细!!!!
文章目录 前言有效的三角形个数思路 查找总价格为目标值的两个商品思路 两数之和思路 三数之和思路 四数之和思路 总结 前言 本专栏的上篇,讲述了双指针的一些基础的算法习题 今天我们来学习更进一步的双指针用法吧 其实也是大相径庭,和前面的差不多&…...
系统安全阶段练习真题(高软44)
系列文章目录 系统安全阶段练习真题 文章目录 系列文章目录前言一、真题总结 前言 本节就是系统安全的阶段练习真题,带答案与解析。 一、真题 总结 就是高软笔记,大佬请略过!...
Mybatis Generator 使用手册
第一章 什么是Mybatis Generator? MyBatis Generator Core – Introduction to MyBatis Generator MyBatis生成器(MBG)是MyBatis框架的代码生成工具。它支持为所有版本的MyBatis生成代码,通过解析数据库表(或多个表&…...
Android中AIDL和HIDL的区别
在Android中,AIDL(Android Interface Definition Language) 和 HIDL(HAL Interface Definition Language) 是两种用于定义跨进程通信接口的语言。AIDL 是 Android 系统最早支持的 IPC(进程间通信࿰…...
Gazebo 启动时候配置物体
1. 准备模型 mkdir -p ~/.gazebo/models/table echo export GAZEBO_MODEL_PATH$HOME/.gazebo/models:$GAZEBO_MODEL_PATH >> ~/.bashrc source ~/.bashrc # 从https://github.com/osrf/gazebo_models下载模型 # 桌子 cd ~/.gazebo/models/table wget https://raw.github…...
展示深拷贝与移动语义的对比
定义 Buffer 类(含深拷贝和移动语义) #include <iostream> #include <chrono> #include <cstring>class Buffer { public:// 默认构造函数(分配内存)explicit Buffer(size_t size) : size_(size), data_(new in…...
STM32基础教程——对射式红外传感器计数实验
前言 对射式红外传感器介绍 对射式红外传感器是一种非接触式的距离检测器,主要由发射器和接收器两部分组成。发射器发出特定波长的红外光束,当物体阻挡了这条光束时,接收器无法接收到光线信号,从而产生一个开关信号来判断物体的存…...
Git与GitHub:理解两者差异及其关系
目录 Git与GitHub:理解两者差异及其关系Git:分布式版本控制系统概述主要特点 GitHub:基于Web的托管服务概述主要特点 Git和GitHub如何互补关系现代开发工作流 结论 Git与GitHub:理解两者差异及其关系 Git:分布式版本控…...
【时时三省】(C语言基础)赋值语句2
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 赋值运算符 赋值符号“”就是赋值运算符,它的作用是将一个数据赋给一个变量。如a 3的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。也可以…...
服务器上通过ollama部署deepseek
2025年1月下旬,DeepSeek的R1模型发布后的一周内就火了,性能比肩OpenAI的o1模型,且训练成本仅为560万美元,成本远低于openAI,使得英伟达股票大跌。 下面我们来看下如何个人如何部署deepseek-r1模型。 我是用的仙宫云的…...
自动控制原理【知识点总结、复习笔记】
1.控制系统定义 控制系统是指通过监测和调整系统的行为,以达到预期目标的一套系统。它由一组相互关联的组件组成,这些组件协同工作,用于控制物理过程、机械设备、电子设备或其他系统。例如,一个简单的温控系统可以通过监测房间温…...
【AI】什么是Embedding向量模型?我们应该如何选择?
我们之前讲的搭建本地知识库,基本都是使用检索增强生成(RAG)技术来搭建,Embedding模型则是RAG的核心,同时也是大模型落地必不可少的技术。那么今天我们就来聊聊Embedding向量模型: 一、Embedding模型是什么? Embedding模型是一种将离散数据(如文本、图像、用户行为等)…...
openwrt路由系统------Linux 驱动开发的核心步骤
以下是 Linux 驱动开发的核心步骤,结合实践案例与注意事项,适合嵌入式设备(如 OpenWrt 路由器)开发: 一、驱动开发基本流程 1. 环境准备 工具链与内核源码 # 安装交叉编译工具链(如 ARM) sudo apt-get install gcc-arm-linux-gnueabihf# 获取目标内核源码(需匹配运行的…...
Educational Codeforces Round 7 F. The Sum of the k-th Powers 多项式、拉格朗日插值
题目链接 题目大意 求 ( ∑ i 1 n i k ) (\sum_{i1}^{n} i^k) (∑i1nik) m o d ( 1 0 9 7 ) mod(10^97) mod(1097) . 数据范围 : 1 ≤ n ≤ 1 0 9 1 \leq n \leq 10^9 1≤n≤109 , 0 ≤ k ≤ 1 0 6 0 \leq k \leq 10^6 0≤k≤106 . 思路 令 f ( n ) ∑ …...