个人博客系统测试报告
目录
1 项目背景
2 项目功能
3 项目测试
3.1 测试用例
3.2 登录页面测试
3.3 博客列表页面测试
3.4 博客详情页面测试
3.5 自动化测试
3.5.1 Utils类
3.5.2 登录测试页面类
3.5.3 博客列表页测试类
3.5.4 博客详情页测试类
3.5.5 博客修改页测试类
3.5.6 未登录情况下测试类
3.5.6 启动测试类
4 项目BUG
5 遇到的问题及解决方法
6 测试总结
该篇文章是我测试学习过程中的总结
1 项目背景
因为我经常在csdn上写博客, 那么我在学习Spring Boot之后呢?想着自己是自己是不是能够做一些什么东西,就想到自己做一个博客系统吧,于是你现在看到的这个博客系统就应运而生了。
2 项目功能
1. 登录功能
2. 博客列表页功能
3. 写博客并发布博客功能
4. 删除博客功能
5. 注销退出功能
3 项目测试
本次测试对博客系统主要使用selenium工具进行UI界面自动化测试,进行功能测试,对于界面测试、易用性测试、兼容性测试等其他测试仅做简单描述。
3.1 测试用例
3.2 登录页面测试
测试场景一:输入正确的用户名和密码点击提交
预期结果:登录成功,跳转到博客首页
实际结果:与预期结果一致。登录成功,跳转到博客首页
测试场景二:输入正确的用户名和错误的密码
预测结果:弹窗提示密码错误
实际结果:与预期结果一致。弹窗提示密码错误
测试场景三:输入错误的用户名和正确的密码
预期结果:弹窗提示用户不存在
实际结果:与预期结果一致。弹窗提示用户不存在
测试场景四:输入错误的用户名和错误的密码
预期结果:弹窗提示用户名不存在
实际结果:与预期结果一致。弹窗提示用户不存在
3.3 博客列表页面测试
测试场景一: 点击菜单栏的“写博客”
预期结果:页面跳转到博客编辑页,用户可以编写博客
实际结果:与预期结果一致。页面正常跳转到编辑页面
测试用例二:输入标题和内容,点击“发布文章”按钮可正常发布博客,在博客首页查看到。
预期结果:成功发布博客,在首页可看到发布的博客。
实际结果:与预期结果一致。可查看到发布的博客。
测试场景三: 点击首页的任意一个博客下方的“查看全文”
预期结果:页面跳转到博客详情页,可查看博客内容
实际结果:与预期结果一致。页面正常跳转到博客详情界面。
测试场景四: 点击菜单栏的“注销”
预期结果:页面跳转到登录界面,用户名和密码被清空,用户可重新登录。
实际结果:与预期结果一致。页面正常跳转到登录界面。
3.4 博客详情页面测试
测试用例一:点击“编辑”按钮
预期结果:进入博客更新页面,可对之前的内容进行编辑,编辑完成后点击更新文章,可在首页看到更新后的文章。
实际结果:与预期结果一致。更新内容后可在首页查看到更新后的博客。
测试用例二:点击“删除”按钮
预期结果:博客被成功删除,在首页找不到此博客。
实际结果:与预期结果一致。且弹窗提示用户确定删除。
测试用例三:在lisi的账号下,我们可以看到是无法编辑和删除zhangsan用户发布的这篇博客的,在zhangsan账号下可正常操作。
3.5 自动化测试
先将一些每个页面所需要的工具放到一个类里。
3.5.1 Utils类
package common;import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;public class Utils {public static WebDriver driver;public static WebDriver createDriver(){if(driver == null){WebDriverManager.chromedriver().setup();ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");driver = new ChromeDriver(options);driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));driver.manage().window().maximize();}return driver;}public Utils(String url) {if(url != ""){driver = createDriver();driver.get(url);}}public void getScreenShot(String str) throws IOException {// ./src/test/image/// /2024-07-17/// /test01-17453010.png// /test02-17453020.png// /2024-07-18/// /test01-17453030.png// /test02-17453034.png//屏幕截图SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");String dirTime = sim1.format(System.currentTimeMillis());String fileTime = sim2.format(System.currentTimeMillis());//./src/test/image/2024-07-17/test01-17453020.pngString filename ="./src/test/image/"+ dirTime +"/" + str + "-" + fileTime+".png";File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);//srcFile放到指定位置FileUtils.copyFile(srcFile,new File(filename));}}
3.5.2 登录测试页面类
package tests;import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;public class LoginPage extends Utils {public static String url = "http://123.60.62.52:9090/blog_login.html";public LoginPage() {super(url);}/*** 检查页面是否可以正常打开*/public void loginPageRight() {//通过检查页面元素是否存在来检查页面是否加载成功//检查提交按钮是否存在driver.findElement(By.cssSelector("#submit"));//检查输入框中登录这两个字是否存在driver.findElement(By.cssSelector("body > div.container-login > div > h3"));//检查页面中 我的博客系统是否存在driver.findElement(By.cssSelector("body > div.nav > span"));}/*** 进行登录测试---正常登录*/public void loginSuc() {driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");driver.findElement(By.cssSelector("#password")).sendKeys("123456");driver.findElement(By.cssSelector("#submit")).click();// 如何判断此时登录成功, 此时登陆成功的界面是和上述页面正常加载是不一样的// 如果此时可以点击查看全文 就说明此时是正常登陆的try{Thread.sleep(3000);}catch (Exception e){e.printStackTrace();}driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")); //你也没点呢
// String title= driver.getTitle();
// assert title.equals("博客列表");//driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();}/*** 进行登录测试---异常登录* 由于在tests中各项测试是有依赖的* 在测试异常登录之前 已经登陆过了 而我们的`drive对象并没有释放掉 并没使用这段 driver.quit();* 进入到博客列表页是获取不到错误弹窗的* 所以要在上述正常登录测试之后 让其返回到前一步* 但是返回之后 账号密码都在输入框内* 此时我们直接输入的内容 只是拼接在输入框的内容* 所以要先进行清空*/public void loginFail() throws InterruptedException {//方法1/*driver.findElement(By.cssSelector("#username")).clear();driver.findElement(By.cssSelector("#password")).clear();*///方法2 浏览器刷新driver.navigate().refresh();driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");driver.findElement(By.cssSelector("#password")).sendKeys("123456111");driver.findElement(By.cssSelector("#submit")).click();Thread.sleep(3000);Alert alert = driver.switchTo().alert();alert.accept();}
}
3.5.3 博客列表页测试类
package tests;import common.Utils;
import org.openqa.selenium.By;public class ListPage extends Utils {public static String url = "http://123.60.62.52:9090/blog_list.html";public ListPage() {super(url);}/*** 登录状态下 博客列表页测试*/public void ListPageByLogin() throws InterruptedException {driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(2) > div.title"));driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(2) > div.date"));Thread.sleep(3000);driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();Thread.sleep(3000);}}
3.5.4 博客详情页测试类
package tests;import common.Utils;
import org.openqa.selenium.By;import java.io.IOException;public class DetailPage extends Utils {public static String url = "";public DetailPage() {super(url);}public void DetailPageByLogin() throws InterruptedException, IOException {
// Thread.sleep(2000);
// getScreenShot(getClass().getName());Thread.sleep(3000);driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(2)"));driver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > button:nth-child(1)")).click();}
}
3.5.5 博客修改页测试类
package tests;import common.Utils;
import org.openqa.selenium.By;public class UpdatePage extends Utils {public static String url = "";public UpdatePage() {super(url);}public void UpdatePageByLogin() throws InterruptedException {Thread.sleep(3000);driver.findElement(By.cssSelector("#title")).sendKeys("iajrfiojwqe");driver.findElement(By.cssSelector("#submit")).click();}
}
3.5.6 未登录情况下测试类
package tests;import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;import java.io.IOException;public class PageByNoLogin extends Utils {public static String listUrl = "http://123.60.62.52:9090/blog_list.html";public static String editUrl = "http://123.60.62.52:9090/blog_edit.html";public static String detailUrl = "http://123.60.62.52:9090/blog_detail.html";public PageByNoLogin() {super("");}/*** 异常登陆测试*//*** 列表页未登录测试*/public void ListByNoLogin() throws InterruptedException, IOException {driver.get(listUrl);Thread.sleep(3000);Alert alert = driver.switchTo().alert();alert.accept();}/*** 博客编辑页未登录测试*/public void EditByNoLogin() throws InterruptedException {driver.get(editUrl);driver.findElement(By.cssSelector("#title"));driver.findElement(By.cssSelector("#submit")).click();Thread.sleep(3000);Alert alert = driver.switchTo().alert();alert.accept();//driver.quit();}/*** 博客详情页未登录测试*/public void DetailByNoLogin() throws InterruptedException {driver.get(detailUrl);Thread.sleep(3000);Alert alert = driver.switchTo().alert();alert.accept();driver.quit();}
}
3.5.6 启动测试类
import tests.*;import java.io.IOException;public class RunTests {public static void main(String[] args) throws InterruptedException, IOException {LoginPage loginPage = new LoginPage();loginPage.loginPageRight();loginPage.loginSuc();ListPage listPage = new ListPage();listPage.ListPageByLogin();DetailPage detailPage = new DetailPage();detailPage.DetailPageByLogin();UpdatePage updatePage = new UpdatePage();updatePage.UpdatePageByLogin();EditPage editPage = new EditPage();editPage.EditPageByLogin();loginPage.loginFail();PageByNoLogin pageByNoLogin = new PageByNoLogin();pageByNoLogin.ListByNoLogin();pageByNoLogin.EditByNoLogin();pageByNoLogin.DetailByNoLogin();}
}
4 项目BUG
(一)bug描述:博客首页的文章和分类无实际作用,当发布新文章后文章的数量并不会增加。
(二)当用户名和密码都错误时,只会提示用户不存在。
5 遇到的问题及解决方法
(一)有弹窗时,添加屏幕截图,要先关闭弹窗后才能截图,否则会抛出异常
(二)当代码出现报错:no such element: Unable to locate element,这种情况可能是由于页面未加载完成,我们可以添加等待:driver.implicitly_wait(5)
(三) 登录时,提示浏览器受到自动化测试软件的控制,可添加下面语句,避免网站检测到浏览器正在被自动化工具(如 Selenium)控制
6 测试总结
此次测试主要对个人博客系统的主要功能进行了测试,并用Selenium编写了测试脚本进行了自动化测试。个人博客系统还需对首页的个人信息栏部分进行优化,如:文章的数量要与用户发布的数量同步起来,在弹窗提示上也需要更详细些,为用户提供有用的弹窗信息,这样才能给用户提供一个良好的体验。
相关文章:
个人博客系统测试报告
目录 1 项目背景 2 项目功能 3 项目测试 3.1 测试用例 3.2 登录页面测试 3.3 博客列表页面测试 3.4 博客详情页面测试 3.5 自动化测试 3.5.1 Utils类 3.5.2 登录测试页面类 3.5.3 博客列表页测试类 3.5.4 博客详情页测试类 3.5.5 博客修改页测试类 3.5.6 未登录…...
适配WIN7的最高版本Chrome谷歌浏览器109版本下载
本仓库提供了一个适用于Windows 操作系统的谷歌浏览器109版本的离线安装包。 点击下面链接下载 WIN7的最高版本Chrome谷歌浏览器109版本下载...
从规划到完善,原型标注图全流程设计
一、原型标注图:设计到开发的精准翻译器 1. 设计意图的精准传递 消除模糊性:将设计师的视觉、交互逻辑转化为可量化的数据(尺寸、颜色、动效参数),避免开发“凭感觉还原”。 统一理解标准:通过标注建立团…...
极狐GitLab 通用软件包存储库功能介绍
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 极狐GitLab 通用软件包存储库 (BASIC ALL) 在项目的软件包库中发布通用文件,如发布二进制文件。然后,…...
系统架构-嵌入式系统架构
原理与特征 嵌入式系统的典型架构可概括为两种模式,即层次化模式架构和递归模式架构 层次化模式架构,位于高层的抽象概念与低层的更加具体的概念之间存在着依赖关系,封闭型层次架构指的是,高层的对象只能调用同一层或下一层对象…...
hive两个表不同数据类型字段关联引发的数据倾斜
不同数据类型引发的Hive数据倾斜解决方案 #### 一、原因分析 当两个表的关联字段存在数据类型不一致时(如int vs string、bigint vs decimal),Hive会触发隐式类型转换引发以下问题: Key值的精度损失:若关联字…...
制作一款打飞机游戏45:简单攻击
粒子系统修复 首先,我们要加载cow(可能是某个项目或资源),然后直接处理粒子系统。你们看到在粒子系统中,我们仍然有X滚动。这现在已经没什么意义了,因为我们正在使用一个奇怪的新系统。所以我们实际上不再…...
《Vuejs设计与实现》第 5 章(非原始值响应式方案) 中
目录 5.4 合理触发响应 5.5 浅响应与深响应 5.6 只读和浅只读 5.4 合理触发响应 为了合理触发响应,我们需要处理一些问题。 首先,当值没有变化时,我们不应该触发响应: const obj = { foo: 1 } const p = new Proxy(obj, { /* ... */ })effect(() => {console.log(p…...
深入理解 Webpack 核心机制与编译流程
🤖 作者简介:水煮白菜王,一位前端劝退师 👻 👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧和知识归纳总结✍。 感谢支持💕💕&#…...
okhttp3.Interceptor简介-笔记
1. Interceptor 简介 okhttp3.Interceptor 是 OkHttp 提供的一个核心接口,用于拦截 HTTP 请求和响应,允许开发者在请求发送前和响应接收后插入自定义逻辑。它在构建灵活、可扩展的网络请求逻辑中扮演着重要角色。常见的用途包括: 添加请求头…...
交易流水表的分库分表设计
交易流水表的分库分表设计需要结合业务特点、数据增长趋势和查询模式,以下是常见的分库分表策略及实施建议: 一、分库分表核心目标 解决性能瓶颈:应对高并发写入和查询压力。数据均衡分布:避免单库/单表数据倾斜。简化运维&#…...
《AI大模型应知应会100篇》第59篇:Flowise:无代码搭建大模型应用
第59篇:Flowise:无代码搭建大模型应用 摘要:本文将详细探讨 Flowise 无代码平台的核心特性、使用方法和最佳实践,提供从安装到部署的全流程指南,帮助开发者和非技术用户快速构建复杂的大模型应用。文章结合实战案例与配…...
开发环境(Development Environment)
在软件开发与部署过程中,通常会划分 开发环境(Development)、测试环境(Testing)、生产环境(Production) 这三个核心环境,以确保代码在不同阶段的质量和稳定性。以下是它们的详细介绍…...
MySQL的sql_mode详解:从优雅草分发平台故障谈数据库模式配置-优雅草卓伊凡
MySQL的sql_mode详解:从优雅草分发平台故障谈数据库模式配置-优雅草卓伊凡 引言:优雅草分发平台的故障与解决 近日,优雅草分发平台(youyacaocn)在运行过程中遭遇了一次数据库访问故障。在排查过程中,技术…...
PyCharm 快捷键指南
PyCharm 快捷键指南 常用编辑快捷键 代码完成:Ctrl Space 提供基本的代码完成选项(类、方法、属性)导入类:Ctrl Alt Space 快速导入所需类语句完成:Ctrl Shift Enter 自动结束代码(如添加分号&#…...
【数据结构】map_set前传:二叉搜索树(C++)
目录 二叉搜索树K模型的模拟实现 二叉搜索树的结构: Insert()插入: InOrder()中序遍历: Find()查找: Erase()删除: 参考代码: 二叉搜索树K/V模型的模拟实现: K/V模型的简单应用举例&…...
ZYNQ处理器在发热后功耗增加的原因分析及解决方案
Zynq处理器(结合ARM Cortex-A系列CPU和FPGA可编程逻辑)在发热后功耗增大的现象,通常由以下原因导致。以下是系统性分析及解决方案: 1. 根本原因分析 现象物理机制漏电流(Leakage Current)增加温度升高导致…...
Vue学习百日计划-Deepseek版
阶段1:基础夯实(Day 1-30) 目标:掌握HTML/CSS/JavaScript基础,理解Vue核心概念和基础语法。 每日学习内容(2小时): HTML/CSS(Day 1-10) 学习HTML标签语义化…...
DeepSeek-R1-Distill-Qwen-1.5B代表什么含义?
DeepSeek‑R1‑Distill‑Qwen‑1.5B 完整释义与合规须知 一句话先行 这是 DeepSeek‑AI 把自家 R1 大模型 的知识,通过蒸馏压缩进一套 Qwen‑1.5B 架构 的轻量学生网络,并以宽松开源许可证发布的模型权重。 1 | 名字逐段拆解 片段意义备注DeepSee…...
内网服务器之间传输单个大文件最佳解决方案
内网服务器之间传输单个大文件,采用python的http.server模块,结合wget下载文件是最快的传输方案。 笔者在ubuntu与debian之间传输单个单文件进行文件,尝试了scp、sftp、rsync等方案,但传输速度都只有1-3MB/秒;采用pyt…...
Linux常用命令详解(上):目录与文件操作及拷贝移动命令
Linux系统以其强大的命令行工具著称,无论是日常文件管理还是自动化运维,都离不开基础命令的灵活运用。本文将通过功能说明、语法格式、常用选项和实例演示,系统讲解Linux中目录操作、文件操作及拷贝移动的核心命令。 一、目录操作命令 1. c…...
可灵 AI:开启 AI 视频创作新时代
在当今数字化浪潮中,人工智能(AI)技术正以前所未有的速度渗透到各个领域,尤其是在内容创作领域,AI 的应用正引发一场革命性的变革。可灵 AI 作为快手团队精心打造的一款前沿 AI 视频生成工具,宛如一颗璀璨的…...
动态域名解析(DDNS)实战指南,原理、配置与远程访问,附无公网ip方案
本文从实际场景出发,详解如何通过动态域名(DDNS)解决动态IP访问难题,覆盖家庭、企业及IoT场景,并提供动态域名解析、内网端口映射外网远程访问等方案。 一、动态域名(DDNS)是什么?它…...
基于STM32、HAL库的BMP388 气压传感器 驱动程序设计
一、简介: BMP388是Bosch Sensortec推出的一款高精度、低功耗的数字气压传感器,具有以下特点: 压力测量范围:300hPa至1250hPa 相对精度:0.08hPa(相当于0.5米) 温度测量范围:-40C至+85C 工作电压:1.65V至3.6V 低功耗:2μA @1Hz采样率 支持I2C和SPI接口(最高10MHz) …...
window 显示驱动开发-指定 DMA 缓冲区的段
显示微型端口驱动程序可以指定可从中分配 DMA 缓冲区的光圈段。 DMA 缓冲区也可以分配为连续锁定的系统内存。 当应用程序需要 DMA 缓冲区时,视频内存管理器会分配和销毁这些缓冲区。 因此,视频内存管理器需要一组可以分配 DMA 缓冲区的段。 请注意&…...
AnaTraf:深度解析网络性能分析(NPM)
目录 一、为什么网络性能分析比你想象的重要? 二、网络性能分析的核心构成 1. 数据采集层 2. 数据分析层 3. 可视化与告警层 三、网络性能分析中关注的关键指标 四、NPM部署策略:选对位置,才能看清全局 1. 边缘部署 2. 核心网络部署…...
安装Python和配置开发环境
用ChatGPT做软件测试 “工欲善其事,必先利其器。” 学习编程,不只是下载安装一个解释器,更是打开一个技术世界的大门。配置开发环境不仅关乎效率,更关乎思维方式、习惯培养与未来技术路线的选择。 一、为什么安装Python不仅仅是“…...
n8n 修改或者智能体用文档知识库创建pdf
以下是对 Nextcloud、OnlyOffice、Seafile、Etherpad、BookStack 和 Confluence 等本地部署文档协作工具的综合评测、对比分析和使用推荐,帮助您根据不同需求选择合适的解决方案。 🧰 工具功能对比 工具名称核心功能本地部署支持适用场景优势与劣势Next…...
Python | Dashboard制作 【待续】
运行环境:jupyter notebook (python 3.12.7)...
Linux 详解inode
目录 一、inode是什么? inode包含的主要信息(inode是一个结构体): 硬链接计数(有多少个文件名指向这个inode) inode的特点: inode编号 二、block区 定义与作用 特点…...
Milvus 2.4 使用详解:从零构建向量数据库并实现搜索功能(Python 实战)
文章目录 🌟 引言🧰 环境准备依赖安装 📁 整体代码结构概览🛠️ 核心函数详解1️⃣ 初始化 Milvus 客户端2️⃣ 创建集合 Schema3️⃣ 准备索引参数4️⃣ 删除已存在的集合(可选)5️⃣ 创建集合并建立索引6…...
NY115NY121美光科技芯片NY122NY130
NY115NY121美光科技芯片NY122NY130 美光科技:存储芯片领域的领航者 在全球半导体产业竞争日益激烈的背景下,美光科技(Micron)作为存储技术领域的领先企业,不仅展现了其强大的科技研发力量,更在战略布局上…...
【类拷贝文件的运用】
常用示例 当我们面临将文本文件分成最大大小块的时,我们可能会尝试编写如下代码: public class TestSplit {private static final long maxFileSizeBytes 10 * 1024 * 1024; // 默认10MBpublic void split(Path inputFile, Path outputDir) throws IOException {…...
python标准库--heapq - 堆队列算法(优先队列)在算法比赛的应用
目录 一、基本操作 1.构造堆 2.访问堆顶元素(返回堆顶元素) 3.删除堆顶元素(返回堆顶元素) 4.插入新元素,时间复杂度为 O (log n) 5. 插入并删除元素(高效操作) 6. 高级操作- 合并多个有…...
5.12第四次作业
实验要求:完成上图内容,要求五台路由器的环回地址均可以相互访问 AR1 AR2 AR3 AR4 AR5 AS 200 ospf配置 AR2 AR3 AR4 BGP配置 AR1(AS100) AR2(AS200) AR4 AR5(AS300) 结果...
一文读懂如何使用MCP创建服务器
如果你对MCP(模型上下文协议)一窍不通,在阅读本篇文章之前(在获得对MCP深度认识之前),你可以理解为学习MCP就是在学习一个python工具库mcp,类似于其它python工具库一样,如numpy、sys…...
telnetlib源码深入解析
telnetlib 是 Python 标准库中实现 Telnet 客户端协议的模块,其核心是 Telnet 类。以下从 协议实现、核心代码逻辑 和 关键设计思想 三个维度深入解析其源码。 一、Telnet 协议基础 Telnet 协议基于 明文传输,通过 IAC(Interpret As Command…...
PID与模糊PID系统设计——基于模糊PID的水下航行器运动控制研究Simulink仿真(包含设计报告)
1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2016Rb)软件。建议采用matlab2016 Rb及以上版本打开。(若需要其他版本可联系代为转换) 针对水下航行器控制系统参数变化和海洋环境干扰等影响,研究水下航行器运…...
GPU SIMT架构的极限压榨:PTX汇编指令级并行优化实践
点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 一、SIMT架构的调度哲学与寄存器平衡艺术 1.1 Warp Scheduler的调度策略解构 在NVIDIA GPU…...
spark的处理过程-转换算子和行动算子
(一)RDD的处理过程 【老师讲授,画图】 Spark使用Scala语言实现了RDD的API,程序开发者可以通过调用API对RDD进行操作处理。RDD的处理过程如图所示; RDD经过一系列的“转换”操作,每一次转换都会产生不同的RDD…...
设计杂谈-工厂模式
“工厂”模式在各种框架中非常常见,包括 MyBatis,它是一种创建对象的设计模式。使用工厂模式有很多好处,尤其是在复杂的框架中,它可以带来更好的灵活性、可维护性和可配置性。 让我们以 MyBatis 为例,来理解工厂模式及…...
职坐标IT培训:互联网行业核心技能精讲
在互联网行业高速迭代的今天,掌握全链路核心技能已成为职业发展的关键突破口。职坐标IT培训聚焦行业需求,系统拆解从需求分析到系统部署的完整能力模型,助力从业者构建多维竞争力。无论是产品岗的用户调研与原型设计,还是技术岗的…...
IBM BAW(原BPM升级版)使用教程第十二讲
续前篇! 一、用户界面:Process Portal和Workplace Process Portal 和 Workplace 都是 IBM Business Automation Workflow (BAW) 中提供的 Web 界面,供用户查看和处理流程任务、监控流程状态等,但它们之间有着不同的历史背景和功…...
2025 年福建省职业院校技能大赛网络建设与运维赛项Linux赛题解析
准备环境:系统安装及网络配置 [!TIP] 接下来将完全按照国赛评分标准进行,过程中需要掌握基础的Linux命令以及理解Linux系统,建议大家在做题前将Linux基础命令熟练运用 网络建设与运维赛项详细教程请联系主页一、X86架构计算机操作系统安装…...
Netty在Java网络编程中的应用:实现高性能的异步通信
Netty在Java网络编程中的应用:实现高性能的异步通信 在当今的分布式系统中,高效、稳定的网络通信是保障系统运行的关键。Java作为一门广泛使用的编程语言,提供了多种网络编程方式,但传统的Socket编程在面对高并发场景时往往显得力…...
[高阶数据结构]二叉树经典面试题
二叉树经典面试题:: 目录 二叉树经典面试题:: 1.根据二叉树创建字符串 2.二叉树的层序遍历 3.二叉树的层序遍历II 4.二叉树的最近公共祖先 5.二叉树与双向链表 6.从前序与中序序列构造二叉树 7.从中序与后序序列构造二叉…...
第一章 应急响应-webshell查杀
远程连接一下 我们先查找一下网站的目录,到网站页面,可以看到有很多php文件,这样我们可以大致确定黑客上传的应该是php木马 通过ls -a 查看一下隐藏文件 现在我们查看一下各个php文件的内容 可以看到shell.php是一句话木马,但没…...
残差网络(ResNet)
残差网络(Residual Network, ResNet)介绍 残差网络(ResNet)是由微软研究院的何恺明(Kai Ming He)等人于2015年提出的深度卷积神经网络架构,其核心思想是通过残差连接(Skip Connectio…...
全视通智慧病房无感巡视解决方案:科技赋能,重塑护理巡视新篇
护理巡视是保障患者安全与护理质量的关键环节。现有特级、一、二、三级护理虽有明确巡视要求,但从护士手工填写记录表,均存在诸多弊端。或因需人工操作易遗忘、无法准确界定巡视人员,或因设备携带不便、需额外充电、布网复杂等,导…...
【数据结构入门训练DAY-32】LETTERS
本文介绍了一个关于使用深度优先搜索(DFS)解决字母矩阵问题的训练内容。题目要求在一个RS的大写字母矩阵中,从左上角开始移动,可以上下左右四个方向移动,但不能重复经过相同的字母,目标是找出最多能经过的不…...