中控平臺數據監控大屏

中控平臺數據監控大屏

在這里插入圖片描述
在這里插入圖片描述

前言:什么是數據大屏?

數據大屏就像是一個"數字儀表盤",把復雜的數據用圖表、動畫等方式直觀展示出來。想象一下汽車的儀表盤,能讓你一眼看到速度、油量、轉速等信息——數據大屏也是這個原理,只是展示的是業務數據。

第一部分:基礎知識準備

需要了解的技術

  1. HTML - 網頁的骨架
  2. CSS - 網頁的樣式(顏色、布局、動畫)
  3. JavaScript - 網頁的行為(交互、數據處理)
  4. Vue.js - 讓數據和界面自動同步的框架
  5. ECharts - 專門畫圖表的庫

第二部分:HTML結構詳解

1. 文檔聲明和基礎設置

<!DOCTYPE html>

作用:告訴瀏覽器這是一個HTML5文檔。就像文件擴展名告訴電腦這是什么類型的文件。

<html lang="zh-CN">

作用

  • <html> 是整個網頁的根元素,所有內容都要放在里面
  • lang="zh-CN" 告訴瀏覽器這是中文網頁,有助于翻譯插件識別、屏幕閱讀器正確發音
<meta charset="UTF-8">

作用:設置字符編碼為UTF-8,確保中文、emoji等各種字符都能正確顯示。如果沒有這行,中文可能會變成亂碼。

<meta name="viewport" content="width=device-width, initial-scale=1.0">

作用:讓網頁在手機上也能正常顯示

  • width=device-width - 網頁寬度等于設備寬度
  • initial-scale=1.0 - 初始縮放比例為1(不放大也不縮小)

2. 引入外部資源

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.3.4/vue.global.prod.min.js"></script>

作用:引入Vue.js框架

  • 為什么用CDN? CDN就像圖書館,我們不需要買書(下載文件),直接去圖書館借(從CDN加載)
  • prod.min.js是什么?
    • prod = production(生產版本),優化過的,運行更快
    • min = minified(壓縮版),刪除了空格和注釋,文件更小
<script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/5.4.3/echarts.min.js"></script>

作用:引入ECharts圖表庫,用來畫各種圖表


第三部分:CSS樣式逐行解析

1. 全局重置樣式

* {margin: 0;padding: 0;box-sizing: border-box;
}

逐行解釋

  • * - 選擇所有元素(通配符選擇器)
  • margin: 0 - 清除所有元素的外邊距(元素之間的空白)
  • padding: 0 - 清除所有元素的內邊距(元素內容和邊框之間的空白)
  • box-sizing: border-box - 改變盒模型計算方式
    • 默認情況:寬度 = 內容寬度(padding和border額外添加)
    • border-box:寬度 = 內容 + padding + border(更直觀)

為什么要這樣做? 瀏覽器會給元素默認樣式,不同瀏覽器默認值不同,重置后我們能精確控制樣式。

2. 頁面背景設計

body {font-family: 'Arial', sans-serif;background: linear-gradient(135deg, #0f0c29 0%, #302b63 50%, #24243e 100%);background-attachment: fixed;color: #fff;min-height: 100vh;
}

逐行解釋

  • font-family: 'Arial', sans-serif

    • 設置字體為Arial
    • 如果Arial不存在,使用任意無襯線字體(sans-serif)
    • 這是"字體降級"策略
  • background: linear-gradient(135deg, #0f0c29 0%, #302b63 50%, #24243e 100%)

    • linear-gradient - 創建線性漸變
    • 135deg - 漸變角度(135度,從左上到右下)
    • 三個顏色節點:
      • #0f0c29 0% - 深藍黑色,從0%位置開始
      • #302b63 50% - 紫色,在50%位置
      • #24243e 100% - 深灰紫色,在100%位置結束
  • background-attachment: fixed

    • 背景固定,滾動頁面時背景不動
    • 創造視差效果
  • color: #fff

    • 默認文字顏色為白色
  • min-height: 100vh

    • vh = viewport height(視口高度)
    • 100vh = 屏幕高度的100%
    • 確保頁面至少占滿整個屏幕

3. 毛玻璃效果卡片

.card {background: rgba(255, 255, 255, 0.05);border-radius: 15px;padding: 15px;backdrop-filter: blur(10px);border: 1px solid rgba(255, 255, 255, 0.1);position: relative;overflow: hidden;transition: all 0.3s ease;
}

逐行解釋

  • background: rgba(255, 255, 255, 0.05)

    • rgba = red, green, blue, alpha(透明度)
    • 255, 255, 255 = 白色
    • 0.05 = 5%透明度(幾乎透明)
  • border-radius: 15px

    • 圓角半徑15像素
    • 讓卡片看起來更柔和
  • padding: 15px

    • 內邊距15像素
    • 內容不會貼著邊框
  • backdrop-filter: blur(10px)

    • 背景模糊濾鏡
    • 創造"毛玻璃"效果
    • 10px是模糊程度
  • border: 1px solid rgba(255, 255, 255, 0.1)

    • 1像素寬的實線邊框
    • 10%透明度的白色
    • 增加卡片輪廓
  • position: relative

    • 相對定位
    • 為子元素的絕對定位提供參考
  • overflow: hidden

    • 超出部分隱藏
    • 防止內容溢出
  • transition: all 0.3s ease

    • 所有屬性變化都有動畫
    • 持續0.3秒
    • ease = 緩動函數(先快后慢)
      在這里插入圖片描述

4. 鼠標懸停效果

.card:hover {transform: translateY(-5px);box-shadow: 0 10px 30px rgba(0, 219, 222, 0.3);border-color: rgba(100, 255, 218, 0.3);
}

逐行解釋

  • :hover - 鼠標懸停時的狀態

  • transform: translateY(-5px)

    • 向上移動5像素
    • 負值 = 向上,正值 = 向下
    • 創造"浮起"效果
  • box-shadow: 0 10px 30px rgba(0, 219, 222, 0.3)

    • 陰影參數:水平偏移 垂直偏移 模糊半徑 顏色
    • 0 - 水平不偏移
    • 10px - 向下偏移10像素
    • 30px - 模糊半徑30像素
    • 青色半透明陰影

5. Grid布局系統

在這里插入圖片描述

.main-content {display: grid;grid-template-columns: repeat(4, 1fr);grid-template-areas:"stats stats map map""line line bar radar""realtime pie bar radar";
}

逐行解釋

  • display: grid - 使用網格布局

  • grid-template-columns: repeat(4, 1fr)

    • 創建4列
    • 1fr = 1個剩余空間單位
    • 4列平均分配寬度
  • grid-template-areas - 定義網格區域

    • 像畫圖一樣設計布局
    • 第一行:"stats"占2格,"map"占2格
    • 第二行:"line"占2格,"bar"占1格,"radar"占1格
    • 第三行:"realtime"占1格,"pie"占1格,"bar"延續,"radar"延續

視覺化理解

[  統計卡片  ][   地圖    ]
[  折線圖    ][ 柱 ][ 雷 ]
[ 實時 ][ 餅 ][ 狀 ][ 達 ]

在這里插入圖片描述
在這里插入圖片描述

6. 文字漸變效果

.header h1 {background: linear-gradient(90deg, #00dbde 0%, #fc00ff 100%);-webkit-background-clip: text;-webkit-text-fill-color: transparent;
}

逐行解釋

  1. 創建從青色到紫色的漸變背景
  2. -webkit-background-clip: text - 將背景裁剪到文字形狀
  3. -webkit-text-fill-color: transparent - 文字填充透明
  4. 結果:透過透明文字看到漸變背景,形成漸變文字效果

7. 響應式設計

@media (max-width: 768px) {.main-content {grid-template-columns: 1fr;grid-template-areas:"stats""map""line";}
}

解釋

  • @media - 媒體查詢,根據條件應用樣式
  • (max-width: 768px) - 當屏幕寬度小于768像素時
  • 改為單列布局,適應手機屏幕

第四部分:Vue.js 應用邏輯

1. Vue應用創建

const { createApp } = Vue;

解釋:從Vue對象中提取createApp函數(解構賦值)

createApp({data() {return {currentTime: '',realtimeData: [],charts: {},statsData: [...]}}
}).mount('#app');

逐步解釋

  1. createApp({...}) - 創建Vue應用實例
  2. data() - 定義組件的數據
    • 必須是函數,返回數據對象
    • Vue會讓這些數據變成"響應式"(數據變化,界面自動更新)
  3. .mount('#app') - 將Vue應用掛載到id為"app"的元素上

2. 數據結構詳解

statsData: [{ id: 1, icon: '用戶',           // 圖標文字label: '在線用戶',      // 標簽value: 12543,          // 原始數值trend: 5.2,            // 趨勢百分比displayValue: '1.3w',  // 顯示值(格式化后)trendText: '↑ 5.2%',   // 趨勢文字trendClass: 'trend-up' // CSS類名}
]

為什么要這樣設計數據?

  • 分離原始值(value)和顯示值(displayValue),便于計算和展示
  • trend用于計算,trendText用于顯示
  • trendClass控制顏色(上漲綠色,下跌紅色)

3. 生命周期鉤子

mounted() {this.initCharts();           // 初始化圖表this.startDataUpdate();       // 開始更新數據this.updateTime();           // 更新時間setInterval(this.updateTime, 1000);  // 每秒更新時間window.addEventListener('resize', this.handleResize);
}

逐行解釋

  • mounted() - Vue生命周期鉤子,組件掛載到頁面后執行
  • this.initCharts() - 調用初始化圖表的方法
  • setInterval(函數, 間隔) - 定時器,每隔指定毫秒執行一次
  • addEventListener - 監聽窗口大小變化事件

4. 時間更新函數

updateTime() {const now = new Date();  // 獲取當前時間this.currentTime = now.toLocaleString('zh-CN', {year: 'numeric',     // 顯示數字年份month: '2-digit',    // 2位數月份(01-12)day: '2-digit',      // 2位數日期hour: '2-digit',     // 2位數小時minute: '2-digit',   // 2位數分鐘second: '2-digit',   // 2位數秒鐘hour12: false        // 24小時制});
}

結果示例2024/12/25 14:30:45

5. 數字格式化函數

formatNumber(num) {// 確保num是數字類型if (typeof num !== 'number') {num = parseFloat(num) || 0;  // 轉換為數字,失敗則為0}// 大于1萬,顯示為 X.Xwif (num >= 10000) {return (num / 10000).toFixed(1) + 'w';} // 大于1千,顯示為 X.Xkelse if (num >= 1000) {return (num / 1000).toFixed(1) + 'k';}// 小于100,顯示為百分比else if (num < 100) {return num.toFixed(1) + '%';}// 其他情況,添加千分位return num.toLocaleString();
}

示例

  • 12543 → “1.3w”
  • 2500 → “2.5k”
  • 67.8 → “67.8%”
  • 999 → “999”

6. 防抖處理

handleResize() {clearTimeout(this.resizeTimer);  // 清除之前的定時器this.resizeTimer = setTimeout(() => {Object.values(this.charts).forEach(chart => {chart.resize();  // 調整圖表大小});}, 200);  // 延遲200毫秒執行
}

什么是防抖?
想象你在電梯里,每次有人進來,電梯都會等幾秒。如果這幾秒內又有人進來,重新計時。只有連續幾秒沒人進來,電梯才關門。

為什么需要防抖?
調整窗口大小時,resize事件會觸發很多次(每移動1像素就觸發)。如果每次都重繪圖表,會很卡。防抖確保只在停止調整后才重繪。


第五部分:ECharts 圖表配置詳解

1. 區域監控圖表(最復雜的部分)

initAreaChart() {// 1. 獲取DOM元素并初始化圖表const areaChart = echarts.init(document.getElementById('areaChart'));// 2. 保存圖表實例,方便后續操作this.charts.area = areaChart;// 3. 定義區域數據this.areas = [{ name: '北區A棟',     // 區域名稱value: 156,         // 設備總數status: 'normal',   // 狀態:normal/warning/criticalonline: 145         // 在線設備數},// ... 更多區域];
}
自定義渲染器(核心邏輯)
series: [{type: 'custom',  // 使用自定義類型renderItem: function(params, api) {// 計算每個格子的大小const cellWidth = api.getWidth() / 3;   // 寬度除以3(3列)const cellHeight = api.getHeight() / 3; // 高度除以3(3行)// 計算當前格子的位置const x = api.value(0) * cellWidth;     // 列索引 × 格子寬度const y = (2 - api.value(1)) * cellHeight; // 行索引需要反轉// 返回圖形組return {type: 'group',children: [{type: 'rect',  // 矩形shape: {x: x + 5,  // 留5像素邊距y: y + 5,width: cellWidth - 10,height: cellHeight - 10},style: {fill: api.style().fill,  // 填充顏色stroke: 'rgba(255, 255, 255, 0.2)', // 邊框lineWidth: 1}},{type: 'text',  // 文字style: {text: api.value(3),  // 顯示區域名稱x: x + cellWidth / 2,  // 水平居中y: y + cellHeight / 2, // 垂直居中textAlign: 'center',textVerticalAlign: 'middle'}}]};}
}]

工作原理

  1. ECharts會對每個數據點調用renderItem
  2. 我們計算該數據點應該在的位置
  3. 返回要繪制的圖形(矩形+文字)
  4. ECharts負責實際繪制

2. 折線圖配置

series: [{name: '入站流量',type: 'line',smooth: true,    // 平滑曲線symbol: 'none',  // 不顯示數據點areaStyle: {     // 區域填充color: new echarts.graphic.LinearGradient(0, 0, 0, 1,  // 漸變方向:從上到下[{ offset: 0, color: 'rgba(0, 219, 222, 0.3)' },{ offset: 1, color: 'rgba(0, 219, 222, 0.05)' }])},lineStyle: {color: '#00dbde',width: 2},data: hours.map(() => Math.random() * 1000 + 500)}
]

關鍵配置解釋

  • smooth: true - 曲線平滑處理,不是折線
  • symbol: 'none' - 不顯示數據點標記,讓圖表更簡潔
  • areaStyle - 線下方區域填充漸變色
  • data: hours.map(...) - 為每個小時生成隨機數據

3. 數據更新機制

startDataUpdate() {setInterval(() => {// 1. 更新統計卡片數據this.statsData.forEach(stat => {// 生成-5到5之間的隨機變化const change = (Math.random() - 0.5) * 10;// 更新數值(確保不小于0)stat.value = Math.max(0, stat.value + change);// 更新趨勢stat.trend = parseFloat(((Math.random() - 0.5) * 10).toFixed(1));// 格式化顯示值stat.displayValue = this.formatNumber(stat.value);// 更新趨勢顯示if (stat.trend > 0) {stat.trendText = '↑ ' + Math.abs(stat.trend).toFixed(1) + '%';stat.trendClass = 'trend-up';  // 綠色樣式} else {stat.trendText = '↓ ' + Math.abs(stat.trend).toFixed(1) + '%';stat.trendClass = 'trend-down'; // 紅色樣式}});// 2. 添加新的告警信息const alerts = [{ label: 'CPU高負載警告', value: '節點A - 85%' },// ... 更多告警類型];// 隨機選擇一個告警const randomAlert = alerts[Math.floor(Math.random() * alerts.length)];// 添加時間戳randomAlert.value += ' [' + new Date().toLocaleTimeString() + ']';// 添加到列表開頭this.realtimeData.unshift(randomAlert);// 保持列表長度不超過8條if (this.realtimeData.length > 8) {this.realtimeData.pop();  // 移除最后一條}// 3. 更新所有圖表this.updateChartsData();}, 3000);  // 每3秒執行一次
}

第六部分:動畫效果實現

1. CSS動畫關鍵幀

@keyframes pulse {0% {box-shadow: 0 0 0 0 rgba(100, 255, 218, 0.4);}70% {box-shadow: 0 0 0 10px rgba(100, 255, 218, 0);}100% {box-shadow: 0 0 0 0 rgba(100, 255, 218, 0);}
}

動畫過程

  • 0%:無陰影
  • 70%:10像素半透明陰影(擴散效果)
  • 100%:陰影消失

應用動畫

.pulse {animation: pulse 2s infinite;
}
  • pulse - 動畫名稱
  • 2s - 持續2秒
  • infinite - 無限循環

2. 數據項進入動畫

@keyframes slideIn {from {opacity: 0;                 /* 完全透明 */transform: translateX(-20px); /* 左側20像素位置 */}to {opacity: 1;                 /* 完全不透明 */transform: translateX(0);    /* 原始位置 */}
}.data-item {animation: slideIn 0.5s ease;
}

效果:新數據從左側滑入并淡入


第七部分:實戰技巧總結

1. 開發順序建議

初學者應該按這個順序開發

  1. 先寫HTML結構
  2. 添加基礎CSS樣式
  3. 引入Vue,確保數據能顯示
  4. 逐個添加圖表
  5. 添加動畫效果
  6. 最后做響應式適配

2. 調試技巧

// 在關鍵位置添加console.log
console.log('當前數據:', this.statsData);
console.log('圖表實例:', this.charts);// 使用Chrome開發者工具
// F12打開 -> Console查看日志
// F12打開 -> Elements查看元素樣式

3. 常見問題解決

問題1:圖表不顯示

// 確保DOM元素存在
const element = document.getElementById('lineChart');
if (!element) {console.error('找不到圖表容器');return;
}

問題2:圖表大小不對

// 窗口改變時調整大小
window.addEventListener('resize', () => {chart.resize();
});

問題3:中文亂碼

<!-- 確保設置了UTF-8 -->
<meta charset="UTF-8">

4. 性能優化要點

  1. 減少DOM操作
// 不好的做法
for (let i = 0; i < 100; i++) {document.body.innerHTML += '<div>' + i + '</div>';
}// 好的做法
let html = '';
for (let i = 0; i < 100; i++) {html += '<div>' + i + '</div>';
}
document.body.innerHTML = html;
  1. 使用防抖和節流
// 防抖:最后一次觸發后延遲執行
function debounce(func, wait) {let timeout;return function() {clearTimeout(timeout);timeout = setTimeout(func, wait);};
}
  1. 合理的更新頻率
// 不要太頻繁
setInterval(update, 100);   // 太快,每0.1秒
setInterval(update, 3000);  // 合適,每3秒

第八部分:擴展學習路徑

初級階段(當前代碼)

  1. 理解HTML結構
  2. 掌握CSS布局
  3. 學會Vue基礎
  4. 使用ECharts基礎圖表

中級提升

  1. 數據對接

    // 從后端獲取真實數據
    fetch('/api/stats').then(response => response.json()).then(data => {this.statsData = data;});
    
  2. 添加交互

    // 點擊圖表鉆取詳情
    chart.on('click', (params) => {console.log('點擊了:', params.name);// 顯示詳細信息
    });
    
  3. WebSocket實時數據

    const ws = new WebSocket('ws://localhost:8080');
    ws.onmessage = (event) => {const data = JSON.parse(event.data);this.updateData(data);
    };
    

高級優化

  1. 組件化開發

    // 將每個圖表封裝為組件
    Vue.component('line-chart', {template: '<div></div>',props: ['data'],// ...
    });
    
  2. 狀態管理(Vuex)

  3. 構建工具(Webpack/Vite)

  4. TypeScript類型支持


總結

這個數據大屏項目展示了前端開發的多個重要概念:

  1. 結構層(HTML):語義化標簽,合理的文檔結構
  2. 表現層(CSS):響應式布局、動畫效果、視覺設計
  3. 行為層(JavaScript):數據處理、圖表渲染、用戶交互
  4. 框架應用(Vue):數據驅動、組件化思維
  5. 可視化(ECharts):數據到圖形的轉換

通過學習這個項目,初學者可以:

  • 理解現代前端開發的基本架構
  • 掌握數據可視化的實現方法
  • 學會響應式設計的實踐
  • 了解性能優化的基本技巧

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

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

相關文章

【Vue2手錄13】路由Vue Router

一、Vue Router 基礎概念與核心原理 1.1 路由本質與核心要素 本質定義&#xff1a;路由是URL路徑與頁面組件的對應關系&#xff0c;通過路徑變化控制視圖切換&#xff0c;實現單頁應用&#xff08;SPA&#xff09;的無刷新頁面切換。核心三要素&#xff1a; router-link&#x…

【Git】零基礎入門:配置與初始操作實戰指南

目錄 1.前言 插播一條消息~ 2.正文 2.1概念 2.2安裝與配置 2.3基礎操作 2.3.1創建本地倉庫 2.3.2配置Git 2.3.3認識工作區&#xff0c;暫存區&#xff0c;版本庫 2.3.4版本回退 2.3.5撤銷修改 2.3.6刪除文件 3.小結 1.前言 在 Java 開發場景中&#xff0c;團隊協…

CAD多面體密堆積_圓柱體試件3D插件

插件介紹 CAD多面體密堆積_圓柱體試件3D插件可在AutoCAD內基于重力堆積算法在圓柱體容器內進行多面體的密堆積三維建模。插件采取堆積可視化交互界面&#xff0c;可觀察多面體顆粒的堆積動態&#xff0c;并可采用鼠標進行多面體位置的局部微調。插件可設置重力堆積模擬時長參數…

機器學習-模型調參、超參數優化

模型調參 手工超參數微調 以一個好的baseline開始&#xff0c;即&#xff1a;在一些高質量的工具包中的默認設置&#xff0c;論文中的值調一個值&#xff0c;重新訓練這個模型來觀察變化重復很多次獲得對以下的insight&#xff1a; 1、哪個超參數重要 2、模型對超參數的敏感度是…

STM32 單片機開發 - I2C 總線

一、IIC(I2C) 線的作用UART總線 PC端(CPU) <----------> 開發板(STM32U575RIT6)IIC總線 主控芯片(STM32U575RIT6) <---------> 傳感器驅動芯片(SHT20/SI7006空氣溫濕度傳感器)二、I2C 總線的概念圖 1 I2C 總線示意圖圖 2 多主機多從機模式示意圖I2C 總…

Redis 數據結構源碼剖析(SDS、Dict、Skiplist、Quicklist、Ziplist)

Redis 數據結構源碼剖析&#xff08;SDS、Dict、Skiplist、Quicklist、Ziplist&#xff09;1. 前言 Redis 的高性能與豐富數據結構密切相關。 核心數據結構包括&#xff1a; SDS&#xff08;Simple Dynamic String&#xff09;&#xff1a;字符串底層實現。Dict&#xff08;哈希…

無人機圖傳系統的功能解析和技術實現原理

無人機圖傳系統要將機載攝像頭捕捉到的畫面以盡可能低的時延、盡可能高的清晰度、穩定可靠地送達地面操作員或指揮中心&#xff0c;進而驅動現場行動。為此&#xff0c;核心功能可以從四個維度來解構&#xff1a;實時性、畫質與穩定性、覆蓋與冗余、以及安全協同。實時性要求在…

微服務網關的bug

從你提供的Eureka控制臺信息來看&#xff0c;SPRINGCLOUD-PRODUCT已成功注冊到Eureka&#xff0c;且狀態為UP&#xff08;實例地址localhost:springcloud-product:8082&#xff09;&#xff0c;排除了“服務未注冊”“實例離線”的基礎問題。但仍報“負載均衡無可用服務”&…

LeetCode:2.字母異位詞分組

目錄 1.字母異位詞分組 1.字母異位詞分組 對于這道題來說&#xff0c;關鍵的地方在于字母異位詞他們排序后的字符串完全相等&#xff0c;所以我們可以通過哈希表來建設一個字符串和其排序相同的字符串數組的映射關系 class Solution { public:vector<vector<string>…

SwiftData3 一劍封喉:WWDC25 的“數據劍譜”精講,讓 Core Data 老俠原地退休

文章目錄每日一句正能量一、開場白&#xff1a;老兵的隱痛二、SwiftData3 新劍譜總覽三、亮劍&#xff1a;30 行代碼搭一個「跨端秒級同步」的收藏夾1. 鑄劍&#xff1a;聲明模型2. 開鋒&#xff1a;初始化容器3. 出招&#xff1a;SwiftUI7 直接綁四、進階劍氣&#xff1a;Char…

微服務-nacos服務中心

單體與微服務 單體架構&#xff1a;項目所有功能都在一個 war 包 /jar 包里&#xff0c;像商城的訂單、庫存、會員、支付等服務&#xff0c;都打包在一起&#xff0c;部署在 Tomcat 服務器&#xff0c;數據存在 MySQL。 優點&#xff1a;開發簡單&#xff0c;易于理解和維護&am…

嵌入式硬件——IMX6ULL 裸機LED點亮實驗

一. 實驗準備 基于正點原子 IMX6ULL-Mini 開發板&#xff0c;實現 LED 周期性閃爍功能&#xff0c;需完成環境搭建與硬件原理確認兩大核心準備工作。 1.1 開發環境搭建 需在Windows和Ubuntu中安裝工具&#xff0c;確保文件傳輸、交叉編譯、代碼編輯功能正常。1.1.1 跨系統文件傳…

深度學習之PyTorch基本使用(一)

一、PyTorch簡介與安裝1.核心概念PyTorch 是一款 Python 深度學習框架&#xff0c;其核心是張量&#xff08;Tensor&#xff09; —— 元素為同一種數據類型的多維矩陣&#xff0c;以 “類” 的形式封裝&#xff0c;內置了張量運算、處理等方法&#xff0c;是深度學習中數據存儲…

SQLAlchemy -> Base.metadata.create_all(engine )詳解

目錄 一、核心作用 二、是否每次運行項目都會執行&#xff1f; 1. ??典型場景??&#xff08;推薦&#xff09; 2. ??需要避免的情況?? 三、最佳實踐建議 1. ??生產環境?? 2. ??開發/測試環境?? 四、常見問題解答 Q1: 如果表結構改了&#xff0c;creat…

C++異步任務處理與消息可靠性保障指南:從基礎到實戰

在當今多核處理器普及的時代&#xff0c;程序性能和響應能力的提升成為開發者面臨的核心課題。無論是高頻交易系統的毫秒級響應需求、實時游戲引擎的流暢交互體驗&#xff0c;還是網絡服務器的高并發處理能力&#xff0c;異步編程都已成為突破性能瓶頸的關鍵技術[1]。作為高性能…

LazyForEach性能優化:解決長列表卡頓問題

本文將深入解析HarmonyOS中LazyForEach的工作原理、性能優勢、實戰優化技巧及常見問題解決方案&#xff0c;幫助你構建流暢的長列表體驗。 1. LazyForEach 核心優勢與原理 LazyForEach 是鴻蒙ArkUI框架中為高性能列表渲染設計的核心組件&#xff0c;其核心設計思想基于動態加載…

Spring Boot 全棧優化:服務器、數據、緩存、日志的場景應用!

Spring Boot以其“開箱即用”聞名&#xff0c;但默認配置往往在高并發場景下成為瓶頸&#xff1a;Tomcat線程堵塞、數據庫連接耗盡、緩存命中率低下、日志洪水般淹沒磁盤。想象一個電商微服務&#xff0c;峰值流量下響應遲鈍&#xff0c;用戶流失——這不是宿命&#xff0c;而是…

Leetcode sql 50 ~5

select product_idfrom Productswhere low_fats Y and recyclable Y;SQL 規定&#xff1a;null 的比較必須用 is null 或 is not null&#xff0c;不能用普通的等號&#xff08;&#xff09;。# Write your MySQL query statement below select name from Customer where ref…

C#高并發與并行理解處理

目錄 1.什么是IO密集型任務/CPU密集型任務 2.高并發概念和技術實現 2.并行&#xff08;Parallelist&#xff09;概念和技術實現 4.核心區別對比 1.什么是IO密集型任務/CPU密集型任務 1.IO密集型任務&#xff1a; 定義&#xff1a;任務核心邏輯不依賴CPU計算&#xff0c;而是…

正點原子STM32F407 U盤升級程序(IAP)OTA Bootloader APP USB升級+FATFS+USB Host

正點原子STM32F407 U盤升級程序&#xff08;IAP&#xff09;OTA Bootloader APP USB升級FATFSUSB HostChapter0 解決STM32 Bootloader跳轉APP失敗問題問題背景問題描述問題解決原APP跳轉的函數為&#xff1a;修改APP程序main入口處Chapter1 MDK如何生成*.bin格式的文件Chapter2…