關于個人博客系統的測試報告

  • 1)項目背景
  • 2)項目功能介紹
    • 登陸
    • 寫博客/編輯已存在博客
    • 刪除博客
    • 注銷
  • 2)基于項目功能設計相關測試用例
  • 3)基于測試用例編寫自動化測試
    • 準備工作
    • 登陸界面相關
    • 博客首頁相關
    • 博客詳情頁相關
    • 編輯博客相關
    • 刪除博客相關
    • 注銷相關
  • 4)基于個人博客系統的性能測試
    • 準備工作
    • 性能測試報告

項目背景

隨著自媒體行業快速發展,個人創作者對博客發布平臺的需求日益多元化,越來越多的用戶需要用到博客來記錄學習的過程,以及把個人的心得寫成技術博客分享出來供大家學習和參考,又或者把博客當成自己學習中的日記,總之博客對于現在的互聯網用戶來說,博客是一個于學習、參考、記錄方面不可或缺的平臺,本項目簡單來說就是博客平臺的精簡版。
1.本項目個人博客系統采用前后端分離的方法來實現,同時使用了數據庫來存儲相關的數據,同時將其部署到云服務器上。前端主要有四個頁面構成:登錄頁、博客首頁、博客詳情頁以及博客編輯頁,以上模擬實現了最精簡的個人博客系統。
2.該個人博客系統主要實現個人用戶簡單的博客記錄,時間、標題、內容以及發布者等都可以進行詳細地查看。

項目功能介紹

該個人博客系統主要實現了以下幾個功能:登錄、寫博客/編輯已存在博客、刪除博客、注銷等功能

登陸

在這里插入圖片描述

寫博客/編輯已存在博客

在這里插入圖片描述

刪除博客

在這里插入圖片描述

注銷

在這里插入圖片描述

基于項目功能設計相關測試用例
博客系統測試用例思維導圖

基于測試用例編寫自動化測試

該項目由Selenium庫進行測試web自動化測試,使用語言為Python。

準備工作

Selenium是廣泛使用的模擬瀏覽器運行的庫,它是一個用于Web應用程序測試的工具。 Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣,并且支持大多數現代 Web 瀏覽器。
先安裝好Python以及IDE(Pycharm),打開Pycharm軟件,在終端中使用pip命令安裝瀏覽器驅動管理,命令為pip insatll webdriver-manager ,安裝好之后繼續安裝Selenium庫,命令為pip insatll selenium==4.0.0
創建并初始化瀏覽器驅動,因為在運行每個自動化測試用例之前都需要進行創建瀏覽器驅動,運行所有的測試方法結束之后需要釋放瀏覽器驅動,所以創建一個類來初始化瀏覽器驅動和釋放瀏覽器驅動,這個類用單例模式,只提供一個對象供其他測試方法使用,另外寫一個截圖方法來實時查看測試中出現的情況

import sys
import os.path
from datetime import datetimefrom selenium import webdriver
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManager# 創建一個瀏覽器對象
class Driver:driver = ""def __init__(self):options = Options()self.driver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()),options=options)self.driver.implicitly_wait(7)def GetScreenShot(self):# 創建屏幕截圖# 截圖的路徑:../images/2025-07-11/2025-07-11-140735.pngdirname = datetime.now().strftime("%Y-%m-%d")# 如果不存在當天的截圖存放路徑文件就創建if not os.path.exists("../images/"+dirname):os.mkdir("../images/"+dirname)# 截圖的名稱:2025-07-11-140735.pngfilename = sys._getframe().f_back.f_code.co_name+"-"+datetime.now().strftime("%Y-%m-%d-%H%M%S"+".png")self.driver.save_screenshot("../images/"+dirname+"/"+filename)#單例模式創建一個驅動對象供所有測試使用
BlogDriver = Driver()

登陸界面相關

import time
from selenium.webdriver.common.by import By
from Common.Utils import BlogDriver#博客登陸測試
class BlogLogin:driver = ""url = ""def __init__(self):self.driver = BlogDriver.driverself.url = "http://8.137.19.140:9090/blog_login.html"self.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()time.sleep(3)#登陸后頁面能找到昵稱就是成功登陸,否則登陸失敗self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()# #返回登陸頁面# self.driver.back()# time.sleep(5)# self.driver.quit()# 異常登陸的測試案例def LoginFailTest(self):# 輸入正確的賬號和錯誤的密碼#連續多次send_keys會出現關鍵詞拼接的現象,而不是直接替換,如果想重新在輸入框中輸入內容,需要先清空該輸入框self.driver.find_element(By.CSS_SELECTOR,"#username").clear()self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("lisi")#輸入錯誤的密碼self.driver.find_element(By.CSS_SELECTOR,"#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#出現警告彈窗 賬號或密碼錯誤time.sleep(1)alert = self.driver.switch_to.alertalert_text = alert.text        #保存彈窗文本信息以此來判斷是否登陸成功alert.accept()# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()#檢查是否符合預期assert alert_text == "密碼錯誤"# 返回登陸頁面,再測試下一種情況# 輸入錯誤的賬號和正確的密碼self.driver.find_element(By.CSS_SELECTOR,"#username").clear()self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("wangwu")#輸入正確的密碼self.driver.find_element(By.CSS_SELECTOR,"#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#出現警告彈窗 賬號或密碼錯誤time.sleep(1)alert = self.driver.switch_to.alertalert_text = alert.text       # 保存彈窗文本信息以此來判斷是否登陸成功alert.accept()# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()# 檢查是否符合預期assert alert_text == "用戶不存在"# 輸入錯誤的賬號和錯誤的密碼self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("wangwu")# 輸入錯誤的密碼self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 出現警告彈窗 賬號或密碼錯誤time.sleep(1)alert = self.driver.switch_to.alertalert_text = alert.text      #保存彈窗文本信息以此來判斷是否登陸成功alert.accept()# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()# 檢查是否符合預期assert alert_text == "用戶不存在"# 賬號為空,密碼隨便寫# 賬號隨便寫,密碼為空# 兩種情況都是一樣的,合并為一個測試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, "#password").send_keys("123")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 出現警告彈窗 賬號或密碼為空time.sleep(1)alert = self.driver.switch_to.alertalert_text = alert.text      #保存彈窗文本信息以此來判斷是否登陸成功alert.accept()# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()# 檢查是否符合預期assert alert_text == "賬號或密碼不能為空"# 賬號和密碼都為空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, "#submit").click()# 出現警告彈窗 賬號或密碼為空time.sleep(1)alert = self.driver.switch_to.alertalert_text = alert.text      #保存彈窗文本信息以此來判斷是否登陸成功alert.accept()# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()# 檢查是否符合預期assert alert_text == "賬號或密碼不能為空"# self.driver.quit()# login = BlogLogin()
# login.LoginFailTest()
# login.LoginSucTest()

博客首頁相關

import time
from selenium.webdriver.common.by import By
from Common.Utils import BlogDriver# 博客列表測試
class BlogList:driver = ""url = ""def __init__(self):self.driver=BlogDriver.driverself.url = "http://8.137.19.140:9090/blog_list.html"self.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")#檢查github地址是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > a")#檢查文章是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > div:nth-child(4) > span:nth-child(1)")#檢查分類是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.left > div > div:nth-child(4) > span:nth-child(2)")# 測試博客列表#檢查博客標題是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(3) > div.title")#檢查博客發布時間是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(3) > div.date")#檢查博客內容是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(3) > div.desc")#檢查"查看全文"按鈕是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(3) > a")# 測試菜單欄#檢查主頁按鈕是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(4)")#檢查寫博客按鈕是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(5)")#檢查注銷按鈕是否存在self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(6)")# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()# BlogDriver.driver.quit()# 測試首頁---未登陸狀態下# 未登錄狀態下打開博客首頁會跳轉到登陸界面# 根據網頁來判斷def ListTestByUnlogin(self):self.driver.back()# 訪問博客首頁urlself.driver.get(self.url)time.sleep(2)# 獲取當前url,看看是否跳轉到了登錄頁cur_url = self.driver.current_urlprint(cur_url)# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()# 檢查是否未登錄assert cur_url == "http://8.137.19.140:9090/blog_list.html"# time.sleep(3)# self.driver.quit()# BlogList=BlogList()
# BlogList.ListTestByLogin()
# BlogList.ListTestByUnlogin()

博客詳情頁相關

import time
from selenium.webdriver.common.by import By
from Common.Utils import BlogDriver# 博客詳情頁測試
class BlogDetail:driver = ""url = ""def __init__(self):self.driver=BlogDriver.driverself.url = "http://8.137.19.140:9090/blog_detail.html?blogId=116661"self.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,"#detail > p")# 檢查編輯博客按鈕是否存在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 DetailTestByUnLogin(self):# 訪問博客詳情頁urlself.driver.get(self.url)time.sleep(2)# 獲取當前url,看看是否跳轉到了登錄頁cur_url = self.driver.current_urlprint(cur_url)# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()# 檢查是否未登錄assert cur_url == "http://8.137.19.140:9090/blog_detail.html?blogId=116646"# BlogDetail = BlogDetail()
# BlogDetail.DetailTestByLogin()
# BlogDetail.DetailTestByUnLogin()

編輯博客相關

import time
from selenium.webdriver.common.by import By
from Common.Utils import BlogDriver# 博客編輯頁測試
class BlogEdit:driver = ""url = ""def __init__(self):self.driver=BlogDriver.driverself.url = "http://8.137.19.140:9090/blog_edit.html"self.driver.get(self.url)#博客編輯頁測試 --- 登陸狀態下正常發布博客def NormalEditTestByLogin(self):# self.driver.find_element(By.CSS_SELECTOR, "body > div.nav > a:nth-child(5)").click()# 檢查博客標題欄,并填寫標題self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("這是一個測試")# 檢查博客輸入內容區域# 找到編輯區域,輸入博客內容(編輯區域不可操作)# 菜單欄元素無法定位# 博客系統的編輯內容區域默認就不為空,可以暫時不做處理# 直接點擊發布按鈕發布博客self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 檢查已發布博客是否存在博客首頁blog_title= self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(4) > div.title").textprint(blog_title)assert blog_title == "這是一個測試"# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()#博客編輯頁測試 --- 登陸狀態下異常發布博客def NotNormalEditTestByLogin(self):# 博客標題和內容都不輸入,直接點擊發布按鈕發布博客self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 出現警告彈窗無法提交,頁面依然是博客編輯頁面time.sleep(2)alert = self.driver.switch_to.alertalert.accept()# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()# 獲取當前頁面url,判斷是否還在博客編輯頁面cur_url = self.driver.current_urlassert cur_url == self.url#博客編輯頁測試 --- 未登陸狀態下正常發布博客# 點擊提交按鈕會直接跳轉到登陸頁面def NormalEditTestByUnLogin(self):# 檢查博客標題欄,并填寫標題self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("這是一個測試2")# 檢查博客輸入內容區域# 找到編輯區域,輸入博客內容(編輯區域不可操作)# 菜單欄元素無法定位# 博客系統的編輯內容區域默認就不為空,可以暫時不做處理# 直接點擊發布按鈕發布博客self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(2)# 獲取當前頁面url,判斷是否會直接跳轉到博客登陸頁面# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()cur_url = self.driver.current_urlprint(cur_url)assert cur_url == "http://8.137.19.140:9090/blog_login.html"#博客編輯頁測試 --- 未登陸狀態下異常發布博客# 點擊提交按鈕也是會直接跳轉到登陸頁面def NotNormalEditTestByUnLogin(self):# 博客標題和內容都不輸入,直接點擊發布按鈕發布博客self.driver.find_element(By.CSS_SELECTOR, "#submit").click()time.sleep(2)# 獲取當前頁面url,判斷是否會直接跳轉到博客登陸頁面# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()cur_url = self.driver.current_urlprint(cur_url)assert cur_url == "http://8.137.19.140:9090/blog_login.html"# BlogEdit = BlogEdit()
# BlogEdit.NormalEditTestByLogin()
# BlogEdit.NotNormalEditTestByLogin()

刪除博客相關

import time
from selenium.webdriver.common.by import By
from Common.Utils import BlogDriver# 刪除博客測試
class BlogDel:driver = ""url = ""def __init__(self):self.driver=BlogDriver.driverself.url = "http://8.137.19.140:9090/blog_detail.html?blogId=116665"self.driver.get(self.url)# 刪除博客測試 --- 登陸狀態下def BlogDelByLogin(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)")# 找到刪除按鈕 點擊刪除后,出現警告彈窗,確認刪除后,返回博客列表self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(2)").click()alert = self.driver.switch_to.alert# 取消刪除,頁面依然是博客編輯頁面alert.dismiss()# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()# 獲取當前頁面urlcur_url1 = self.driver.current_urlassert cur_url1 == self.url# 確認刪除,頁面跳轉為博客列表頁self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.operating > button:nth-child(2)").click()alert = self.driver.switch_to.alertalert.accept()# 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()# 獲取當前頁面urlcur_url2 = self.driver.current_urlassert cur_url2 == self.urlprint("123")# 刪除博客測試 --- 未登陸狀態下# 直接跳轉到登陸界面def BlogDelByUnLogin(self):time.sleep(2)# 獲取當前頁面urlcur_url = self.driver.current_urlprint(cur_url)# 檢查是否跳轉到登陸頁面assert cur_url == "http://8.137.19.140:9090/blog_login.html"# BlogDel = BlogDel()
# BlogDel.BlogDelByLogin()

注銷相關

import timefrom selenium.webdriver.common.by import Byfrom Common.Utils import BlogDriver# 注銷按鈕測試
class ExitBlog:driver = ""url = ""def __init__(self):self.driver=BlogDriver.driverself.url = "http://8.137.19.140:9090/blog_list.html"self.driver.get(self.url)# 對注銷按鈕進行測試 --- 登陸狀態下def ExitBlogTest(self):# 找到注銷按鈕并點擊self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(6)").click()time.sleep(2)# # 添加屏幕截圖來實時查看當時的場景BlogDriver.GetScreenShot()# 獲取當前頁面urlcur_url = self.driver.current_urlprint(cur_url)# 判斷是否跳轉到登陸頁面assert cur_url == "http://8.137.19.140:9090/blog_login.html"# ExitBlog = ExitBlog()
# ExitBlog.ExitBlogTest()

另外創建一個文件專門用來執行腳本、以及瀏覽器驅動的退出

from Common.Utils import BlogDriver
from Tests.BlogDel import BlogDel
from Tests.BlogDetail import BlogDetail
from Tests.BlogEdit import BlogEdit
from Tests.BlogList import BlogList
from Tests.BlogLogin import BlogLogin
from Tests.ExitBlog import ExitBlogif __name__ == "__main__":BlogLogin().LoginFailTest()# BlogLogin().LoginSucTest()# 登陸成功狀態下,進行博客首頁的測試# BlogList().ListTestByLogin()# 未登陸狀態下,進行博客首頁的測試# BlogList().ListTestByUnlogin()# 登陸成功狀態下,進行博客詳情頁的測試# BlogDetail().DetailTestByLogin()# 未登陸狀態下,進行博客詳情頁的測試# BlogDetail().DetailTestByUnLogin()# 登陸成功狀態下,進行博客編輯頁正常發布的測試# BlogEdit().NormalEditTestByLogin()# 登陸成功狀態下,進行博客編輯頁異常發布的測試# BlogEdit().NotNormalEditTestByLogin()# 未登陸狀態下,進行博客編輯頁正常發布的測試# BlogEdit().NormalEditTestByUnLogin()# 未登陸狀態下,進行博客編輯頁異常發布的測試# BlogEdit().NotNormalEditTestByUnLogin()# 登陸成功狀態下,進行博客刪除頁面的測試包含(取消刪除和確認刪除)# BlogDel().BlogDelByLogin()# 未登陸狀態下,進行博客刪除頁面測試會直接跳轉到登陸頁面# BlogDel().BlogDelByUnLogin()# 登陸成功狀態下,測試點擊注銷按鈕后是否會跳轉到登陸頁面# ExitBlog().ExitBlogTest()# 最后程序統一退出BlogDriver.driver.quit()

基于個人博客系統的性能測試

性能測試的目的是確保軟件系統在實際運行中具備良好的響應速度、穩定性、可擴展性和資源利用率,從而滿足業務需求和用戶期望,支撐系統的長期穩定運行。

準備工作
安裝好Java以及jmeter工具,jmeter需要下載插件功能,下載網址為https://jmeter-plugins.org/install/Install/,下載好之后,進入jmeter安裝Custom Thread Groups和Page DataExtractor插件。
在這里插入圖片描述

性能測試報告
JMeter測試報告是?個全??詳細的?檔,它提供了關于測試執?結果的詳細信息,幫助??全?評 估系統的性能并進?性能優化。
?成性能測試報告命令:在終端執行命令 Jmeter -n -t 腳本?件 -l ?志?件 -e -o ?錄
-n : ?圖形化運?
-t : 被運?的腳本
-l : 將運?信息寫??志?件,后綴為 jtl 的?志?件
-e : ?成測試報告
-o : 指定報告輸出?錄

本項目性能測試報告如下:
博客系統性能測試報告
性能分析主要幾個方面:
1)響應時間:如果相應時間超過了要求,代表性能到達了瓶頸
2)錯誤率:檢查高并發場景下,系統是否能夠正常處理業務
3)吞吐量:吞吐量越?,性能越好;吞吐量相對穩定或者變低,可能系統達到了性能瓶頸

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91787.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91787.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91787.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot 與微服務詳細總結

一、Spring Boot 核心概述 Spring Boot 是簡化 Spring 應用開發的框架,作為 Spring 技術棧的整合方案和 J2EE 開發的一站式解決方案,其核心優勢體現在: 快速創建獨立運行的 Spring 項目,輕松集成主流框架內置 Servlet 容器&…

輕松上手:從零開始啟動第一個 Solana 測試節點

嗨,各位技術愛好者們! 大家是否對 Solana 的“光速”交易處理能力感到好奇?或者你是一名開發者,正準備在 Solana 上構建下一個殺手級 dApp?無論大家是出于學習目的還是實際開發需求,親手運行一個 Solana 節…

Gerrit workflow

提交代碼 每次提交代碼前,先執行 git pull --rebase ,確保已經合并天上代碼,解決沖突 git add git commit -m git push origin HEAD:refs/for/{BRANCH_NAME} 可考慮設置 alias 方式,參考下文 CR-2 情況處理(verify-1情況一樣處理…

量化交易如何查詢CFD指數實時行情

CFD即所謂的差價合約,是投資者在不擁有實際資產的情況下,交易金融市場的一種方式。最近筆者研究這一塊比較多,但查遍整個中文互聯網卻很少找到關于CFD實時行情的查詢教程。因此有了這篇文章。以下我將通過一個簡單的Python代碼示例&#xff0…

sql練習二

首先,建表。創建學生表和score表接著導入創建好基礎信息就可以開始做了。3、分別查詢student表和score表的所有記錄4、查詢student表的第2條到第5條記錄5、從student表中查詢計算機系和英語系的學生的信息6、從student表中查詢年齡小于22歲的學生信息7、從student表…

windows11下基于docker單機部署ceph集群

windows下基于docker單機部署ceph集群 創建ceph專用網絡 docker network create --driver bridge --subnet 172.20.0.0/16 ceph-network查看是否創建成功(查看創建狀態) docker network inspect ceph-network拉取鏡像:(鏡像源自行選擇) docke…

使用DataGrip連接安裝在Linux上的Redis

目錄 一、前言 二、開放防火墻端口 三、使用DataGrip連接安裝在Linux上的Redis 一、前言 在學習黑馬Redis從入門到實戰的視頻,完成了Redis在linux上的安裝配置之后,我們可以使用圖形化界面方便操作使用redis數據庫。在24年JavaWebAI學習時連接MySQL數…

MySQL的union、union all導致排序失效

今天練習SQL,使用union all 連接各個查詢導致我的各個查詢排序失效,最后發現使用union all后會忽略各個模塊的order by,只有最外層的order by才會生效原SQL如下:( selectexam_id tid,count(distinct uid) uv, count(uid) pv frome…

LVS 集群技術實踐:NAT 與 DR 模式的配置與對比

1 實驗環境規劃 實驗目標是搭建一個負載均衡集群,通過 LVS 調度器將流量分發到兩臺真實服務器(RS1 和 RS2)。2.網絡配置3 實驗步驟關閉防火墻和 SELinux安裝 HTTP 服務(在 RS21和 RS2 上):sudo systemctl s…

YOLOv8中添加SENet注意力機制

注意力機制(Attention Mechanism)是深度學習中的一種方法,在圖像處理領域,尤其是在卷積神經網絡(CNN)和視覺Transformer等架構中。圖像數據具有局部相關性,注意力機制可以幫助模型聚焦于圖像中更重要的區域,從而提升處理效果。 SENet(Squeeze-and-Excitation Network)…

SpringBoot五分鐘快速入門指南

使用 Spring Boot 構建應用 本指南提供了關于Spring Boot如何幫助您加速應用開發的一些示例。隨著您閱讀更多 Spring 入門指南,您將看到 Spring Boot 的更多用例。本指南旨在讓您快速了解 Spring Boot。如果您想創建自己的基于 Spring Boot 的項目,請訪問 Spring Initializr…

docker,防火墻關閉后,未重啟docker,導致端口映射失敗

首先,看這篇文章前,建議先把網上其他的文章說的方法嘗試一遍!!! 1. 現象 docker啟動某一個容器,然后映射端口時顯示失敗2. 解決 把網上的方法嘗試一遍之后,最后發現是防火墻的問題!&…

事務處理與AOP(web后端筆記第四期)

p.s.這是萌新自己自學總結的筆記,如果想學習得更透徹的話還是請去看大佬的講解 目錄事務spring事物管理事物屬性--回滾事物屬性--傳播行為(propagation)AOP一些核心概念通知類型通知的執行順序切入點表達式executionannotation連接點事務 事物是一組操作的集合&…

第36周———— RNN實現阿爾茨海默病診斷

目錄 前言 1.檢查GPU 2.查看數據 3.劃分數據集 4.創建模型與編譯訓練 ????5.編譯及訓練模型 6.結果可視化 7.模型預測 8.總結: 前言 🍨 本文為🔗365天深度學習訓練營中的學習記錄博客 🍖 原作者:K同學啊 1.檢查G…

equals和hashcode方法重寫

在 Java 中,當你需要基于對象的內容而非引用地址來判斷兩個對象是否相等時,就需要重寫equals和hashCode方法。以下是具體場景和實現原則:一、為什么需要同時重寫這兩個方法?equals方法:默認比較對象的內存地址&#xf…

Excel批量生成SQL語句 Excel批量生成SQL腳本 Excel拼接sql

Excel批量生成SQL語句 Excel批量生成SQL腳本 Excel拼接sql一、情境描述在Excel中有標準的格式化數據,如何快速導入到數據庫中呢?有些工具支持Excel導入的,則可以快速導入數據---例如Navicat;如果不支持呢,如果將Excel表…

金和OA C6 DelTemp.aspx 存在XML實體注入漏洞(CVE-2025-7523)

免責聲明 本文檔所述漏洞詳情及復現方法僅限用于合法授權的安全研究和學術教育用途。任何個人或組織不得利用本文內容從事未經許可的滲透測試、網絡攻擊或其他違法行為。 前言:我們建立了一個更多,更全的知識庫。每日追蹤最新的安全漏洞,追中25HW情報。 更多詳情: http…

Android性能優化之啟動優化

一、啟動性能瓶頸深度分析 1. 冷啟動階段耗時分布階段耗時占比關鍵阻塞點進程創建15%fork進程 加載ZygoteApplication初始化40%ContentProvider/庫初始化Activity創建30%布局inflate 視圖渲染首幀繪制15%VSync信號等待 GPU渲染2. 高頻性能問題 初始化風暴:多個庫…

中國優秀開源軟件及企業調研報告

中國優秀開源軟件及企業調研報告 引言 當前中國開源生態呈現蓬勃發展態勢,技術創新領域尤為活躍,其中人工智能大模型成為開源動作的核心聚焦方向。2025年上半年,國內AI領域開源生態迎來密集爆發,頭部科技企業相繼推出重要開源舉…

C++語法 匿名對象 與 命名對象 的詳細區分

目錄一、匿名對象的本質定義二、匿名對象的調用邏輯:即生即用的設計三、與命名對象的核心差異四、匿名對象的典型應用場景五、匿名對象的潛在風險與規避六、總結:匿名對象的價值定位在 C 類與對象的知識體系中,匿名對象是一種容易被咱們忽略&…