中控平台数据监控大屏

中控平台数据监控大屏

在这里插入图片描述
在这里插入图片描述

前言:什么是数据大屏?

数据大屏就像是一个"数字仪表盘",把复杂的数据用图表、动画等方式直观展示出来。想象一下汽车的仪表盘,能让你一眼看到速度、油量、转速等信息——数据大屏也是这个原理,只是展示的是业务数据。

第一部分:基础知识准备

需要了解的技术

  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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…