【測試報告】論壇系統

一、項目背景

1.1 測試目標及測試任務

測試目標旨在保障功能無漏洞、流程順暢,實現多端顯示交互一致,達成高并發場景下響應時間<2 秒等性能指標,抵御 SQL 注入等安全攻擊,提升 UI 易用性與提示友好度;

背景任務源于系統功能的復雜性(需驗證用戶注冊登錄、帖子發布評論等核心功能邏輯及多角色權限控制)性能穩定性壓力(高并發下響應速度與資源利用率優化)。

1.2 項目技術棧

后端:Spring Boot/Spring MVC/WebSocket

數據庫:MySQL

前端:原生HTML/CSS

1.3 測試時間

2025.06 - 2025.06

1.4?項目簡介

基于Spring前后端分離的論壇系統,實現了注冊、登錄、顯示帖子、編輯帖子、刪除帖子、回復帖子、點贊帖子,修改個人信息等功能,并將其部署到云服務器上。

1.5. 測試環境

類別?配置/版本
硬件HP? EliteBook 845
自動化測試瀏覽器Google Chrome 137.0.7151.119
自動化測試工具Selenium 4.21.0
手動測試瀏覽器??Microsoft Edge 137.0.3296.83
操作系統?Windows 11 家庭中文版
開發工具?IntelliJ IDEA 2022.1.4
性能測試工具jmeter 5.5

二、測試分類

2.1 測試描述

2.1.1 功能測試(Functional Testing)

驗證系統功能是否符合需求規格,覆蓋核心業務邏輯:

用戶模塊:注冊 / 登錄(驗證碼、密碼強度)、賬號激活 / 注銷、個人信息修改、頭像上傳等。

內容模塊:帖子發布(文字 / 圖片 / 視頻)、評論 / 回復、點贊 / 收藏、帖子編輯 / 刪除、精華帖 / 置頂管理。

板塊模塊:板塊創建 / 刪除、分類管理、版主權限分配、帖子移動 / 歸檔。

2.1.2兼容性測試(Compatibility Testing)

確保系統在不同環境下正常運行:

瀏覽器兼容:Chrome、Firefox、Edge、Safari 的頁面渲染、JS 交互一致性。

設備兼容:iOS(iPhone/iPad)、Android(不同品牌機型)的移動端適配,屏幕尺寸 / 分辨率適配。

操作系統:Windows、macOS、Linux 的服務端兼容性(若涉及客戶端)。

版本兼容:舊版本瀏覽器 / 系統的降級支持(如有必要)。

2.1.3性能測試(Performance Testing)

評估系統在壓力下的穩定性與效率:

負載測試:模擬逐步增加用戶并發量(如 100/500/1000 人同時在線),監測響應時間、吞吐量、錯誤率。

壓力測試:超預期負載下(如 2000 并發),測試系統崩潰臨界點,優化數據庫連接池、緩存機制。

穩定性測試:持續高負載運行 24 小時以上,驗證內存泄漏、資源釋放是否正常。

大數據測試:模擬百萬級帖子 / 評論數據,測試查詢、分頁、統計功能的性能衰減情況。

2.1.4 安全性測試(Security Testing)

識別并修復潛在安全風險:

身份驗證:測試密碼強度、找回機制(防止暴力破解)、Session 過期時間、Token 安全(JWT 等)。

數據安全:敏感信息加密(用戶密碼、手機號)、傳輸層加密(HTTPS)、數據庫權限隔離。

漏洞掃描:檢測 SQL 注入

權限越界:驗證用戶是否能通過 URL 篡改訪問未授權頁面(如直接訪問管理員后臺)。

內容安全:敏感詞過濾(政治 / 色情詞匯)、圖片 / 視頻違規內容識別(需結合 AI 審核)。

2.1.5 界面測試(Usability Testing)

優化用戶體驗與操作便捷性:

界面測試:布局合理性(如按鈕位置、信息層級)、視覺一致性(配色 / 字體)、移動端手勢適配(滑動 / 縮放)。

交互測試:操作流程是否符合用戶習慣(如發帖需先選擇板塊)、錯誤提示清晰度(如 “網絡連接失敗”)。

無障礙測試:屏幕閱讀器支持(如適配 VoiceOver)、鍵盤導航可用性(Tab 鍵切換焦點)。

用戶反饋:通過真實用戶調研,收集對功能入口、操作復雜度的改進建議。

2.1.6 易用性測試(Usability Testing)

界面直觀性:用戶能否快速識別核心功能(如發帖、搜索)。

操作便捷性:完成常見任務(如注冊、評論)的步驟是否簡潔。

容錯性:用戶誤操作時是否有補救措施(如撤銷刪除)。

信息可讀性:文字排版、圖標含義是否易于理解。

2.2 功能測試

2.2.1測試用例設計
注冊

登錄

論壇主頁面

論壇發帖頁面

?帖子詳情頁面

?2.3手動測試

?注冊

注冊失敗

注冊成功直接跳轉登錄

?登錄

登錄失敗

?登錄成功后進入論壇主頁面

論壇主頁面

切換窗口

搜索框輸入

切換夜間模式

?查看站內私信

論壇發帖頁面

編輯帖子?

發帖成功

帖子詳情頁面?

查看帖子

查看回復

回復帖子評論

?點贊帖子

給用戶發私信

2.4 自動化測試
注冊

頁面注冊成功

  //檢查注冊頁面加載成功public void SignUpRight()throws InterruptedException, IOException {//通過查看頁面元素是否存在來檢查加載成功與否driver.findElement(By.cssSelector("body > div > div > div.text-center.text-muted.mt-3"));//注冊輸入框driver.findElement(By.cssSelector("#submit"));}
//檢查注冊功能--成功注冊public void SignUpSuc() {driver.findElement(By.cssSelector("#username")).sendKeys("forward333210");driver.findElement(By.cssSelector("#nickname")).sendKeys("roy");driver.findElement(By.cssSelector("#password")).sendKeys("kml123456");driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("kml123456");driver.findElement(By.xpath("//*[@id=\"policy\"]")).click();driver.findElement(By.cssSelector("#submit")).click();//檢查點擊注冊之后是否注冊成功driver.findElement(By.cssSelector("#submit"));//頁面標題來檢查是否注冊成功String expect = driver.getTitle();assert expect.equals("比特論壇 - 用戶登錄");driver.quit();}

頁面注冊失敗

//檢查注冊失敗public void SignUpFail() throws InterruptedException {//通過clear保證輸入框沒有文本// driver.findElement(By.cssSelector("username")).clear();// driver.findElement(By.cssSelector("#nickname")).clear();//  driver.findElement(By.cssSelector("#password")).clear();//刷新文本driver.navigate().refresh();driver.findElement(By.cssSelector("#username")).sendKeys("forward333210");driver.findElement(By.cssSelector("#nickname")).sendKeys("roy");driver.findElement(By.cssSelector("#password")).sendKeys("kml123456");//  driver.findElement(By.cssSelector("#passwordRepeat")).sendKeys("kml123456");driver.findElement(By.xpath("//*[@id=\"policy\"]")).click();driver.findElement(By.cssSelector("#submit")).click();Thread.sleep(1000);//通過再次確實密碼驗證注冊失敗driver.findElement(By.cssSelector("#signUpForm > div > div:nth-child(5) > div > div"));driver.quit();}

登錄

登錄成功

  public void SignInRight() throws InterruptedException {//通過查看頁面元素是否存在來檢查加載成功與否driver.findElement(By.cssSelector("body > div > div > div > div:nth-child(1) > div > div.card.card-md > div > h2"));//登錄輸入框driver.findElement(By.cssSelector("#submit"));}//檢查登錄功能--成功登錄public void SignInSuc() throws InterruptedException {driver.findElement(By.cssSelector("#username")).sendKeys("forward");driver.findElement(By.cssSelector("#password")).sendKeys("kml123456");driver.findElement(By.cssSelector("#submit")).click();//檢查點擊登錄之后是否登錄成功driver.findElement(By.cssSelector("#article_list_board_title"));//頁面標題來檢查是否登錄成功String expect = driver.getTitle();assert expect.equals("比特論壇");Thread.sleep(3000);driver.quit();}

登錄失敗

 public void SignInFail() throws InterruptedException, IOException {//賬號為空driver.navigate().refresh();driver.findElement(By.cssSelector("#username")).sendKeys("");driver.findElement(By.cssSelector("#password")).sendKeys("kml123456");//顯示密碼driver.findElement(By.cssSelector("#password_a > svg")).click();driver.findElement(By.cssSelector("#submit")).click();//通過再次確實賬號為空驗證登錄失敗driver.findElement(By.cssSelector("#signInForm > div.mb-3 > div"));//密碼為空driver.navigate().refresh();driver.findElement(By.cssSelector("#username")).sendKeys("forward");driver.findElement(By.cssSelector("#password")).sendKeys("");driver.findElement(By.cssSelector("#submit")).click();//通過再次確實密碼為空驗證登錄失敗driver.findElement(By.cssSelector("#signInForm > div.mb-2 > div > div"));//賬號密碼都為空driver.navigate().refresh();driver.findElement(By.cssSelector("#username")).sendKeys("");driver.findElement(By.cssSelector("#password")).sendKeys("");driver.findElement(By.cssSelector("#submit")).click();Thread.sleep(3000);driver.findElement(By.cssSelector("#signInForm > div.mb-3 > div"));driver.findElement(By.cssSelector("#signInForm > div.mb-2 > div > div"));driver.quit();}
}

?論壇主頁面

頁面正常加載

 //檢查論壇主頁面加載成功 需要先登錄public void IndexPage()throws InterruptedException, IOException {driver.findElement(By.cssSelector("#username")).sendKeys("forward");driver.findElement(By.cssSelector("#password")).sendKeys("kml123456");driver.findElement(By.cssSelector("#submit")).click();//通過查看頁面元素是否存在來檢查論壇主頁面加載成功driver.findElement(By.cssSelector("#nav_board_index > a"));//頁面標題來檢查是否論壇主頁面加載成功String expect = driver.getTitle();assert expect.equals("比特論壇");Utils.getScreenShot(getClass().getName());}

屏幕截圖?

搜索功能正常使用

public void SearchBox() throws InterruptedException, IOException {driver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.d-none.d-md-flex.me-3 > div > form > div > input")).sendKeys("12");Thread.sleep(1000);String SS=driver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.d-none.d-md-flex.me-3 > div > form > div > input")).getAttribute("value");assert SS.equals("12");getScreenShot(getClass().getName());driver.quit();}

?屏幕截圖

?切換夜間/日間模式

 //切換白天模式public void NightMode() throws IOException, InterruptedException {driver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > a.nav-link.px-0.hide-theme-dark > svg")).click();Thread.sleep(3000);// getScreenShot(getClass().getName());driver.quit();}

切換窗口

 //切換到其他窗口public void Switchwindow() throws InterruptedException, IOException {{driver.findElement(By.cssSelector("#topBoardList > li:nth-child(2) > a > span.nav-link-title")).click();driver.findElement(By.cssSelector("#article_list_board_title"));}}}

查看站內信息

  //查看站內消息public void PersonMessage() throws InterruptedException, IOException {{driver.findElement(By.cssSelector("body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div:nth-child(2) > div > a")).click();driver.findElement(By.cssSelector(" #index_div_message_list > div")).click();}}

?查看帖子

public void PublishPost() throws InterruptedException, IOException {driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")).click();//getScreenShot(getClass().getName());}

?點贊帖子

public void Thumbsup() throws InterruptedException, IOException {Thread.sleep(2000);driver.findElement(By.cssSelector("#artical-items-body > div:nth-child(10) > div > div.col > div.text-truncate > a > strong")).click();driver.findElement(By.cssSelector("#details_btn_like_count")).click();Thread.sleep(2000);String a =driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div")).getText();System.out.println("打印的內容是:"+a);assert a.equals("×\n" +"成功\n" +"點贊成功");getScreenShot(getClass().getName());}

?屏幕截圖

?

論壇發帖頁面?
package tests;import common.Utils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;import java.io.IOException;public class EditPage extends Utils {public static String url ="http://127.0.0.1:58080/index.html";public EditPage() {super(url);}public void EditPage() throws InterruptedException, IOException {driver.findElement(By.cssSelector("#username")).sendKeys("forward");driver.findElement(By.cssSelector("#password")).sendKeys("kml123456");driver.findElement(By.cssSelector("#submit")).click();Thread.sleep(3000);driver.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();// Utils.getScreenShot(getClass().getName());//通過查看頁面元素是否存在來檢查發帖頁面加載成功driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2"));//頁面文本信息來檢查發帖頁面加載成功// String  except= driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")).getText();//System.out.println("打印的內容是:"+except);//assert except.equals("發新貼");// Utils.getScreenShot(getClass().getName());}//發帖成功public void EditSuc () throws InterruptedException {driver.findElement(By.cssSelector("#article_post_title")).click();driver.findElement(By.cssSelector("#article_post_title")).sendKeys("變量");WebElement ele = driver.findElement(By.cssSelector("#edit-article > div.CodeMirror.cm-s-default.CodeMirror-wrap.CodeMirror-empty > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre"));Actions actions = new Actions(driver);actions.click(ele).perform();Thread.sleep(3000);actions.moveToElement(ele).sendKeys("變量的定義").perform();Thread.sleep(3000);WebElement ele2 = driver.findElement(By.cssSelector("#article_post_submit"));actions.click(ele2).perform();}
//發帖失敗public void EditFail() throws IOException, InterruptedException {/*  driver.findElement(By.cssSelector("#article_post_title")).click();//頁面標題為空WebElement ele = driver.findElement(By.cssSelector("#article_post_submit"));Actions actions = new Actions(driver);actions.click(ele).perform();driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div"));Utils.getScreenShot(getClass().getName());*///內容為空driver.findElement(By.cssSelector("#article_post_title")).click();Thread.sleep(3000);driver.findElement(By.cssSelector("#article_post_title")).sendKeys("變量");Actions actions = new Actions(driver);Thread.sleep(3000);WebElement ele3 = driver.findElement(By.cssSelector("#article_post_submit"));actions.click(ele3).perform();Utils.getScreenShot(getClass().getName());}}

發帖成功

發帖失敗

標題為空?

內容為空

帖子詳情頁面
package tests;import common.Utils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;import java.io.IOException;public class EditPage extends Utils {public static String url ="http://127.0.0.1:58080/index.html";public EditPage() {super(url);}public void EditPage() throws InterruptedException, IOException {driver.findElement(By.cssSelector("#username")).sendKeys("forward");driver.findElement(By.cssSelector("#password")).sendKeys("kml123456");driver.findElement(By.cssSelector("#submit")).click();Thread.sleep(3000);driver.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();// Utils.getScreenShot(getClass().getName());//通過查看頁面元素是否存在來檢查發帖頁面加載成功driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2"));//頁面文本信息來檢查發帖頁面加載成功// String  except= driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2")).getText();//System.out.println("打印的內容是:"+except);//assert except.equals("發新貼");// Utils.getScreenShot(getClass().getName());}//發帖成功public void EditSuc () throws InterruptedException {driver.findElement(By.cssSelector("#article_post_title")).click();driver.findElement(By.cssSelector("#article_post_title")).sendKeys("變量");WebElement ele = driver.findElement(By.cssSelector("#edit-article > div.CodeMirror.cm-s-default.CodeMirror-wrap.CodeMirror-empty > div.CodeMirror-scroll > div.CodeMirror-sizer > div > div > div > div.CodeMirror-code > div > pre"));Actions actions = new Actions(driver);actions.click(ele).perform();Thread.sleep(3000);actions.moveToElement(ele).sendKeys("變量的定義").perform();Thread.sleep(3000);WebElement ele2 = driver.findElement(By.cssSelector("#article_post_submit"));actions.click(ele2).perform();}
//發帖失敗public void EditFail() throws IOException, InterruptedException {/*  driver.findElement(By.cssSelector("#article_post_title")).click();//頁面標題為空WebElement ele = driver.findElement(By.cssSelector("#article_post_submit"));Actions actions = new Actions(driver);actions.click(ele).perform();driver.findElement(By.cssSelector("body > div.jq-toast-wrap.bottom-right > div"));Utils.getScreenShot(getClass().getName());*///內容為空driver.findElement(By.cssSelector("#article_post_title")).click();Thread.sleep(3000);driver.findElement(By.cssSelector("#article_post_title")).sendKeys("變量");Actions actions = new Actions(driver);Thread.sleep(3000);WebElement ele3 = driver.findElement(By.cssSelector("#article_post_submit"));actions.click(ele3).perform();Utils.getScreenShot(getClass().getName());}}

修改標題

?回復帖子

package tests;import common.Utils;
import org.openqa.selenium.By;import java.io.IOException;public class PersonPage extends Utils {public static String url = "http://127.0.0.1:58080/index.html";public PersonPage() {super(url);}//個人中心頁面加載成功public void PersonPage() throws InterruptedException, IOException {driver.findElement(By.cssSelector("#username")).sendKeys("forward");driver.findElement(By.cssSelector("#password")).sendKeys("roy123456");//修改密碼后需要再次修改driver.findElement(By.cssSelector("#submit")).click();Thread.sleep(2000);driver.findElement(By.cssSelector("#index_nav_avatar")).click();driver.findElement(By.cssSelector(" #index_user_settings")).click();Thread.sleep(3000);//通過查看頁面元素是否存在driver.findElement(By.cssSelector("#bit-forum-content > div.page-header.d-print-none > div > div > div > h2"));}//修改昵稱public void namePage() throws InterruptedException, IOException {driver.findElement(By.cssSelector("#setting_input_nickname")).clear();Thread.sleep(2000);driver.findElement(By.cssSelector("#setting_input_nickname")).sendKeys("roylan");Thread.sleep(2000);driver.findElement(By.cssSelector("#setting_submit_nickname")).click();}//修改郵件public void EailPage() throws InterruptedException, IOException {driver.findElement(By.cssSelector("#setting_input_email")).clear();Thread.sleep(2000);driver.findElement(By.cssSelector("#setting_input_email")).sendKeys("3259215@qq.com");Thread.sleep(2000);driver.findElement(By.cssSelector("#setting_submit_email")).click();}//修改電話public void phoneNumPage() throws InterruptedException, IOException {driver.findElement(By.cssSelector("#setting_input_phoneNum")).clear();Thread.sleep(2000);driver.findElement(By.cssSelector("#setting_input_phoneNum")).sendKeys("123259215");Thread.sleep(2000);driver.findElement(By.cssSelector("#setting_submit_phoneNum")).click();}//修改密碼public void PassWordPage() throws InterruptedException, IOException {driver.findElement(By.cssSelector("#settings_input_oldPassword")).sendKeys("kml123456");Thread.sleep(2000);driver.findElement(By.cssSelector("#settings_input_newPassword")).sendKeys("roy123456");Thread.sleep(2000);driver.findElement(By.cssSelector("#settings_input_passwordRepeat")).sendKeys("roy123456");Thread.sleep(2000);driver.findElement(By.cssSelector("#settings_submit_password")).click();}//修改個人簡介public void RemarkPage() throws InterruptedException, IOException {driver.findElement(By.cssSelector("#settings_textarea_remark")).clear();Thread.sleep(2000);driver.findElement(By.cssSelector("#settings_textarea_remark")).sendKeys("喜歡學習測試課程");Thread.sleep(2000);driver.findElement(By.cssSelector("#settings_submit_remark")).click();}}

?修改昵稱

修改郵箱

修改電話

?修改個人簡介

2.5性能測試
線程組設計

生成聚合報告

?梯度壓力測試

響應時間?

TPS?

活躍線程數?

測試報告

報告整體分析

測試用例:9
高頻接口覆蓋率:98%
軟件:Apache JMeter 5.5
通過率:100%
測試時間:2025.6.22


結果分析:系統全程無異常

吞吐量 622.9/sec,支持高并發;

平均響應時間 26.87ms;,用戶注冊接口在00:00:58出現峰值(168ms);

TPS峰值 73,高負載下穩定


性能瓶頸

用戶注冊接口響應時間波動較大,需優先優化

2.6接口測試

http://127.0.0.1:58080/swagger-ui/index.html

三.測試結論與建議

3.1需求覆蓋性

核心功能已基本實現,但部分需求細節(如密碼復雜度校驗、分頁查詢)未完全覆蓋。

接口覆蓋率與功能覆蓋率分別達到 100% 和 95%,滿足核心場景需求。

測試通過率:

接口測試、功能測試、自動化測試、性能測試通過率均為 100%,未發現功能性缺陷。

性能表現:

高并發下系統穩定性良好,TPS 表現優異,但用戶注冊接口存在潛在性能瓶頸(響應時間波動)。

主要缺陷:

安全性:用戶注冊缺乏密碼復雜度校驗與驗證碼功能。

用戶體驗:帖子搜索未支持精準查詢,批量操作交互未優化;帖子不支持預覽;無法上傳修改頭像

3.2 通過項

功能實現:

用戶注冊/登錄、發布帖子、點贊回復、私信等功能均符合預期。

接口質量:

接口全部通過測試,邏輯正確且數據交互穩定。

自動化與性能基準:

自動化測試用例執行結果與預期一致,性能測試 TPS 滿足高負載場景需求。

3.3 風險項

安全風險:

高優先級:密碼未強制復雜度規則(如長度、特殊字符),易導致弱密碼漏洞。

中優先級:注冊流程無驗證碼,存在暴力破解或自動化注冊風險。

性能風險:

登錄接口響應時間波動可能影響高并發場景用戶體驗。

用戶體驗風險:

帖子搜索未精確,數據量大時頁面加載緩慢。

不支持預覽,易誤刪數據。

3.4 上線建議


優化項:

帖子管理模塊批量操作增加二次確認彈窗,防止誤操作。

性能調優:

對用戶注冊接口進行性能分析(如 SQL 查詢優化、緩存機制)。

上線評估:

核心功能穩定且通過全量測試,主功能測試通過,風險可控,建議按計劃上線

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

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

相關文章

30天pytorch從入門到熟練(day1)

一、總體工作思路 本項目采用“從零構建”的策略,系統性地開展了深度學習模型的開發與優化工作。其目標在于通過全流程自研方式,深入理解模型構建、訓練優化、推理部署的關鍵技術環節。整體路徑分為以下核心階段: 模型初步構建:以…

Subway Surfers Blast × 亞矩陣云手機:手游矩陣運營的終極變現方案

引爆全球:Subway Surfers Blast的流量紅利?? 隨著Sybo Games最新力作《Subway Surfers Blast》全球上線,這款休閑消除游戲迅速席卷各大應用商店榜單。對于手游推廣者而言,如何高效獲取這波流量紅利???亞矩陣云手機專業手游推…

mysql join的原理及過程

連接過程 每獲得一條驅動表記錄,就立即到被驅動表尋找匹配的記錄。 對于兩表連接來說,驅動表只會被訪問一遍,但被驅動表卻要被訪問好多遍;具體訪問幾遍取決于對驅動表執行單表查詢后的結果集中有多少條記錄。 ? 對于內連接來說&#xff0…

Hologres的EXPLAIN和EXPLAIN ANALYZE簡介

文章目錄 一、執行計劃1、概念簡介2、使用方式①、EXPLAIN②、EXPLAIN ANALYZE 二、算子解讀1、SCAN2、Index Scan和 Index Seek3、Filter4、Decode5、Redistribution6、Join7、Broadcast8、Shard prune和Shards selected9、ExecuteExternalSQL10、Aggregate11、Sort12、Limit1…

49-Oracle init.ora-PFILE-SPFILE-啟動參數轉換實操

一早出現EMCC掛了,之后發現EMCC依賴的instance 掛了,重啟startup后發現spfile無法啟動。還是和小伙伴把基礎問題搞清。spfile是動態文件、動態文件、動態文件,linux下vi看起來部分亂碼部分是可編輯的,vi即使可以編輯也需要轉換成p…

spring碎片

包的掃描過程 判斷當前是否是文件夾獲取文件夾里面的所有內容判斷文件夾是否為空,為空的話直接返回如果文件夾不為空,則遍歷文件夾里面的所有內容 遍歷得到每個file對象,繼續進行判斷,如果還是文件,則進一步進行遞歸遍歷得到的file對象不是文件夾,是文件得到包路徑類名稱-字符…

如何形成項目經驗在多個項目間的高效復用?

要實現項目經驗的跨項目高效復用,核心在于建立系統化總結機制、標準化知識表達、平臺化共享工具。其中,標準化知識表達尤為關鍵,它通過統一模板和分類體系,確保不同項目的經驗可以被快速理解、輕松匹配到新場景,從而提…

目標檢測之YOLOV11談談OBB

引言:從軸對齊到定向邊界框的范式轉變 在計算機視覺領域,目標檢測算法長期受限于軸對齊邊界框(AABB)的固有缺陷——當面對航拍圖像中的艦船、遙感影像中的建筑物或工業質檢中的傾斜零件時,傳統邊界框會包含大量背景噪…

Vue2之生命周期

文章目錄 Vue生命周期Vue生命周期鉤子生命周期鉤子小案例在created中獲取數據在mounted中獲取焦點 Vue生命周期 思考:什么時候可以發送初始化渲染請求?(越早越好)什么時候可以開始操作dom?(至少dom得渲染出…

Web 架構之多租戶(SaaS)系統設計要點

文章目錄 一、多租戶系統概述定義應用場景 二、設計要點1. 數據隔離獨立數據庫共享數據庫,獨立 Schema共享數據庫,共享 Schema數據訪問控制 2. 資源分配計算資源存儲資源 3. 租戶管理租戶注冊與注銷租戶信息管理 4. 安全與合規身份驗證與授權數據加密 三…

【Clickhouse系列】索引

目錄 1. 主鍵索引 (Primary Key Index) - 核心是稀疏索引 2. 跳數索引 (Data Skipping Indexes) - 二級索引 3. 關鍵總結與最佳實踐: ClickHouse的索引設計哲學與其他傳統OLTP數據庫(如MySQL)有顯著不同,它更側重于高效掃描大數…

445場周賽

第一題:檢查元素頻次是否為質數 給你一個整數數組 nums。 如果數組中任一元素的 頻次 是 質數,返回 true;否則,返回 false。 元素 x 的 頻次 是它在數組中出現的次數。 質數是一個大于 1 的自然數,并且只有兩個因數…

【SQL語法匯總】

讀音:MySQL —— 賣舌口 MySQL 實際上是DBMS軟件系統, 并非數據庫。通過系統管理維護數據庫,DBMS相當于用戶和數據庫之間的橋梁。 MySQL是一種關系型數據庫, 類似excel,用行和列的關系組織數據數據。 操作關系型數據庫的DBMS系統大多數用SQL來管理數據。 SQL是編程語言…

C++法則10:引用本身是一個“別名”(alias),一旦綁定到一個對象后,就不能再重新綁定到其他對象。

C法則10:引用本身是一個“別名”(alias),一旦綁定到一個對象后,就不能再重新綁定到其他對象。 在C中,引用(reference)是一個已存在對象的別名。一旦引用被初始化綁定到一個對象&…

PHP 生成當月日期

一:按日期順序排列的數組,而不是按周分組的二維數組 /*日期生成 *day: 日期數字 *date: 完整的日期字符串 (YYYY-MM-DD) *is_current_month: 是否屬于當前月份 *is_prev_month: 是否是上個月的日期 *is_next_month: 是否是下個月的日期 *is_today: 是否是…

vue3+elementPlus實現無縫滾動表格封裝

vue3+elementPlus+css+js 模擬liMarquee插件,實現無限滾動效果 功能:1、表格數據大于一定數量之后,開始向上滾動 2、當鼠標移入的時候,動畫停止,鼠標移出,繼續動畫 3、滾動動畫的速度可以自定義 4、表格的高度固定 5、向上滾動時,無限滾動,不存在卡頓 <template>…

AI賦能企業內訓:2025智能化教育培訓系統源碼開發全解析

從線下集中授課到線上碎片化學習&#xff0c;從被動灌輸到主動交互&#xff0c;越來越多企業開始關注“企業內訓系統”的智能化升級。而這一切的背后&#xff0c;離不開AI技術的深度賦能。 筆者認為&#xff0c;2025年將是企業內訓系統“從信息化走向智能化”的關鍵拐點。本篇…

旅游安全急救實訓室:構建旅游行業安全人才培養新范式

在文旅產業蓬勃發展與安全應急需求日益凸顯的背景下&#xff0c;旅游安全急救能力已成為從業者的核心素養之一。當前&#xff0c;旅游市場突發狀況頻發&#xff0c;如景區意外事故、游客突發疾病等&#xff0c;對從業人員的急救技能提出了更高要求——既要掌握基礎急救操作&…

網絡編程及原理(六):三次握手、四次揮手

目錄 一 . TCP 的核心機制&#xff1a;連接管理 二 . 三次握手&#xff1a;建立連接 &#xff08;1&#xff09; 三次握手的意義 &#xff08;1.1&#xff09;初步驗證通信鏈路是否流暢 &#xff08;1.2&#xff09;確認通信雙方各自的發送、接受能力是否正常 &…

【LLaMA 3實戰】2、LLaMA 3對話能力全解析:從架構革新到多智能體實戰指南

引言:LLaMA 3對話能力的革命性突破 當Meta發布LLaMA 3時,其對話能力的躍升重新定義了開源大模型的邊界。這款擁有128K上下文窗口的開源模型,不僅在MT-Bench評測中超越GPT-3.5,更通過分組查詢注意力(GQA)等架構創新,實現了推理速度30%的提升。 本文將從底層架構到應用實戰…