当前位置: 首页 > news >正文

echarts生成3D立体地图react组件

地图+散点图效果:

react项目中安装echarts、echarts-gl依赖:

npm install echarts echarts-gl

文件目录结构:

 地图组件map目录下文件代码,点击散点图圆点触发事件handleCityClick:

index.jsx:

import { useRef, useEffect, useState, useCallback } from "react";
import * as echarts from "echarts";
import 'echarts-gl';
import customSettings from "@config/customSettings";
import styles from "./style.less";const { PROVINCE_NAME, MAP_NAME, MAP_JSON } = customSettings;const ProvinceMap = ({option,onCityClick,width = "100%",height = "100%",
}) => {const [selectedCity, setSelectedCity] = useState('');const chartRef = useRef(null);const mapInstanceRef = useRef(null); // 使用ref保存实例const handleCityClick = useCallback((name) => {console.log('点击参数:', name);if (name === selectedCity) {setSelectedCity(PROVINCE_NAME);onCityClick(PROVINCE_NAME);} else {setSelectedCity(name);onCityClick(name);}}, [selectedCity, onCityClick, PROVINCE_NAME]);useEffect(() => {if (!chartRef.current) return;// 初始化图表mapInstanceRef.current = echarts.init(chartRef.current);echarts.registerMap(MAP_NAME, MAP_JSON);// 设置选项mapInstanceRef.current.setOption(option);// 添加点击事件 - 3D地图需要特殊处理const handleClick = (params) => {console.log('完整点击参数:', params);// 3D地图点击参数可能的结构const cityName = params.name ||(params.data && params.data.name) ||(params.seriesName === 'map' && params.name);if (cityName) {handleCityClick(cityName);}};mapInstanceRef.current.on('click', handleClick);// 响应式调整const resizeObserver = new ResizeObserver(() => {mapInstanceRef.current?.resize();});resizeObserver.observe(chartRef.current.parentElement);// 清理函数return () => {mapInstanceRef.current?.off('click', handleClick);mapInstanceRef.current?.dispose();resizeObserver.disconnect();};}, [option, MAP_NAME, MAP_JSON, handleCityClick]);// 单独监听selectedCity变化时不重新渲染整个地图useEffect(() => {if (!mapInstanceRef.current) return;// 更新选中状态而不重新初始化mapInstanceRef.current.setOption({series: [{selectedMode: 'single',select: {itemStyle: {color: '#FF4500' // 选中颜色}}}]}, true);}, [selectedCity]);return (<divref={chartRef}className={styles.mapClass}style={{ width, height }}/>);
};export default ProvinceMap;

如果想要点击地图区域触发点击事件可以将series的内容替换成下面的代码:

series: [{type: 'map3D',map: customSettings.MAP_NAME,regionHeight: 3, // 区域高度itemStyle: {color: '#1E90FF',borderWidth: 1},emphasis: {itemStyle: {color: '#FFA500'}}}]

mapOption.js:

import customSettings from '@config/customSettings';const backgroundColor = '#FFFFFF';
const borderColor = '#cbd1dc';export const MAP_OPTION = {tooltip: {show: false,backgroundColor,borderColor, // 修改边框颜色triggerOn: "mousemove", // 鼠标移动时触发axisPointer: {type: "none",},position: (point, params, dom, rect, size) => {// 解决tooltip在最右侧时部分被遮挡let obj = {};if (point[0] > size.viewSize[0] / 2) {// 鼠标位置位于echarts容器的一半位置右侧时,提示框显示在左侧obj["left"] = point[0] - size.contentSize[0] - 20;} else {obj["right"] = size.viewSize[0] - size.contentSize[0] * 2;}if (point[1] > size.viewSize[1] / 2) {// 鼠标位置位于echarts容器的一半位置下侧时,提示框显示在上侧obj["top"] = point[1] - size.contentSize[1] - 20;} else {obj["bottom"] = size.viewSize[1] - size.contentSize[1] * 1;}return obj;},backgroundColor: "rgba(255,255,255,0.90)", // 提示标签背景颜色textStyle: { color: "#fff" }, // 提示标签字体颜色},visualMap: {show: false, // 是否显示 visualMap-continuous 组件。如果设置为 false,不会显示,但是数据映射的功能还存在type: "continuous", // 类型为连续型视觉映射calculable: false, // 是否显示拖拽用的手柄(手柄能拖拽调整选中范围)inRange: {// 定义在选中范围中的视觉元素color: ["#ffd289", "#ff9c45"],},},// 地理坐标系组件geo3D: {map: customSettings.MAP_NAME, // 地图名称,要和echarts注册的地图名称一致// 添加交互roam: false, // 设置为false,禁用地图的漫游功能// 添加立体效果boxHeight: 10, // 地图的高度,默认为0,即不显示立体效果regionHeight: 3, // 地图上每个区域的立体高度,默认为0,即不显示立体效果itemStyle: { // 地图区域的样式设置color: '#1E90FF20',opacity: 0.8,borderWidth: 0.5,borderColor: '#00FFFF'},emphasis: { // 鼠标悬停在地图区域上的样式设置itemStyle: {color: 'rgba(0, 153, 255, 0.3)'},label: { // 鼠标悬停在地图区域上显示的标签样式设置show: true,textStyle: {color: '#fff',fontSize: 12,backgroundColor: 'rgba(0, 0, 0, 0.7)',borderRadius: 3,padding: [4, 8]}}},light: { // 光照设置,用于增强立体效果main: { // 主光源设置intensity: 1.2, // 光源强度,默认为1.2shadow: true, // 是否显示阴影,默认为trueshadowQuality: 'high', // 阴影质量,默认为'high'alpha: 30, // 固定俯仰角度(上下)beta: 40 // 固定方位角度(左右)},ambient: { // 环境光设置intensity: 0.3 // 环境光强度,默认为0.3}},viewControl: { // 视角控制设置,用于调整地图的旋转和缩放等操作distance: 120, // 视角距离地图的距离,默认为120alpha: 40, // 固定俯仰角度(上下)beta: 0,  // 固定方位角度(左右)autoRotate: false, // 设置为falserotateSensitivity: 0, // 禁用旋转zoomSensitivity: 0, // 0:禁用缩放}},series: [{type: 'scatter3D',coordinateSystem: 'geo3D',symbolSize: 12,encode: {tooltip: 2 // 第三个值(value[2])显示在tooltip中},itemStyle: {color: '#FF4500',opacity: 0.8},emphasis: {itemStyle: {color: '#00FFFF',borderWidth: 2,borderColor: '#FFF'},label: {show: true,formatter: '{b}',color: '#FFF',backgroundColor: 'rgba(0,0,0,0.7)',padding: [4, 8]}},data: [// 格式: { name: '地市', value: [经度, 纬度, 值] }{ name: '郑州', value: [113.62, 34.75, 90] },      // 省会{ name: '洛阳', value: [112.45, 34.62, 80] },      // 古都{ name: '南阳', value: [112.53, 33.01, 75] },      // 豫西南{ name: '新乡', value: [113.88, 35.30, 70] },      // 豫北{ name: '商丘', value: [115.65, 34.45, 65] },      // 豫东{ name: '安阳', value: [114.38, 36.10, 60] },      // 豫北{ name: '开封', value: [114.31, 34.80, 55] },      // 古都{ name: '焦作', value: [113.24, 35.22, 50] },      // 豫西北{ name: '平顶山', value: [113.19, 33.77, 45] },    // 豫中{ name: '信阳', value: [114.07, 32.13, 40] },      // 豫南{ name: '周口', value: [114.65, 33.62, 35] },      // 豫东南{ name: '驻马店', value: [114.02, 32.98, 30] },    // 豫南{ name: '许昌', value: [113.81, 34.02, 25] },      // 豫中{ name: '漯河', value: [114.02, 33.58, 20] },      // 豫中{ name: '三门峡', value: [111.20, 34.78, 15] },    // 豫西{ name: '鹤壁', value: [114.30, 35.75, 10] },      // 豫北{ name: '濮阳', value: [115.03, 35.77, 8] },       // 豫东北{ name: '济源', value: [112.60, 35.08, 5] }        // 省直辖]}]
};

style.less:

.mapClass {:global {.custom-tooltip-box {width: 306px;overflow: auto;color: #868686; // li文字颜色font-size: 13px;line-height: 22px;font-weight: 400;.title-text {font-family: PingFangSC-Semibold;font-size: 15px;color: #262626;text-align: center;font-weight: 600;padding-bottom: 3px;border-bottom: 1px dashed #d9d9d9;}ul {margin-top: 7px;padding-left: 5px;padding-right: 10px;li {list-style: none;line-height: 1.5;position: relative;.value-box {position: absolute;display: inline-block;right: 0;.num {color: #262626;font-family: PingFangSC-Semibold;font-size: 13px;font-weight: 600;}}}}}}
}

引用地图组件的父组件index.jsx:

import React, { useState, useEffect } from 'react';
import { Progress, Table, Select, Drawer, Radio, DatePicker, Button, message, } from 'antd';
import { SettingOutlined } from '@ant-design/icons';
import styles from './style.less';
import ProvinceMap from './map/index';
import { MAP_OPTION } from './map/mapOption';
import { } from './service';
import customSettings from '@config/customSettings';const { PROVINCE_NAME, CAPITAL_AREA_NAME } = customSettings;export default function index() {const [mapIndexsObj, setMapIndexsObj] = useState([]); // 省地市指标值const [mapOption, setMapOption] = useState({}); // 地图optionconst [areaName, setAreaName] = useState(CAPITAL_AREA_NAME); // 地市名称// 获取地图optionuseEffect(() => {let option = { ...MAP_OPTION };// 鼠标移到图里面的浮动提示框option.tooltip.formatter = (params) => {const { name } = params;let shortName = '';if (PROVINCE_NAME.includes('内蒙')) {shortName = name.slice(0, name.length - 1);} else {shortName = name;}let tooltipHtml = `<div class="custom-tooltip-box"><div class="title-text">${shortName}</div><ul>`;// 使用 map 函数遍历数据并构建 HTML 字符串tooltipHtml += mapIndexsObj[shortName]?.map((item, index) => `<li><span>${item.label}</span><div class="value-box"><span class="num">${(item.value != undefined && item.value != null) ? item.value : '--'}</span><span class="unit" style="display: ${(item.value != undefined && item.value != null) ? 'inline' : 'none'}">${item.unit}</span></div></li>`).join('') || ''; // .join('')去除map返回结果中的逗号tooltipHtml += `</ul></div>`return tooltipHtml;};setMapOption(option);}, [mapIndexsObj]);// 点击地图获取地市名称const handleCityClick = (cityName) => {setAreaName(cityName);};return (<div className={styles.container}><ProvinceMap option={mapOption} onCityClick={handleCityClick} /></div>)
}

配置项文件customSettings:

// 用于设置地图、查询条件中“地市”下拉菜单的初始值
import henanMap from "@/assets/map/henan.json";export default {PROVINCE_ID: 37, // 与接口返回的类型保持一致PROVINCE_NAME: '河南省',CAPITAL_AREA_ID: 371, // 与接口返回的类型保持一致CAPITAL_AREA_NAME: '郑州市',MAP_JSON: henanMap,MAP_NAME: 'henan',
};

相关文章:

echarts生成3D立体地图react组件

地图散点图效果&#xff1a; react项目中安装echarts、echarts-gl依赖&#xff1a; npm install echarts echarts-gl 文件目录结构&#xff1a; 地图组件map目录下文件代码&#xff0c;点击散点图圆点触发事件handleCityClick&#xff1a; index.jsx&#xff1a; import { …...

Node.js 中处理 Excel 文件的最佳实践

在现代应用开发中&#xff0c;Excel 文件仍然是数据交换和存储的重要格式之一。在 Node.js 环境中&#xff0c;处理 Excel 文件的需求日益增加。本文将介绍如何在 Node.js 中高效地处理 Excel 文件&#xff0c;涵盖工具选择、基本操作和最佳实践。 1. 选择合适的库 在 Node.js…...

解决Ubuntu系统鼠标不流畅的问题

电脑是联想的台式组装机&#xff0c;安装ubuntu系统&#xff08;不管是16、18、20、22&#xff09;后&#xff0c;鼠标都不流畅。最近几天想解决这个问题&#xff0c;于是怀疑到了显卡驱动上。怀疑之前一直用的是集成显卡&#xff0c;而不是独立显卡&#xff0c;毕竟2060的显卡…...

【Linux】虚拟机设置静态IP

主播我今天下午学了几节微服务课&#xff0c;上课的时候&#xff0c;直接把手机拿走了去上课&#xff08;电脑连的我手机的热点&#xff09;&#xff0c;虚拟机没关&#xff0c;晚上主播我回来继续学&#xff0c;电脑连上热点之后&#xff0c;发现虚拟机连接不上了&#xff0c;…...

Web API:AbortController

Web API&#xff1a;AbortController 主要用途基本工作原理基本用法示例高级用例1. 实现请求超时2. 取消多个请求3. 与其他异步 API 一起使用 浏览器支持总结 主要用途 AbortController 是一个 Web API&#xff0c;主要用于取消一个或多个 Web 请求&#xff08;如 fetch 请求&…...

服务器配置虚拟IP

服务器配置虚拟IP的核心步骤取决于具体场景&#xff0c;主要包括本地单机多IP配置和高可用集群下的虚拟IP管理两种模式。‌ 一、本地虚拟IP配置&#xff08;单服务器多IP&#xff09; ‌基于Linux系统‌&#xff1a; ‌确认网络接口‌&#xff1a;使用 ip addr 或 ifconfig 查…...

《AI大模型应知应会100篇》第5篇:大模型发展简史:从BERT到ChatGPT的演进

第5篇&#xff1a;大模型发展简史&#xff1a;从BERT到ChatGPT的演进 摘要 近年来&#xff0c;人工智能领域最引人注目的进步之一是大模型&#xff08;Large Language Models, LLMs&#xff09;的发展。这些模型不仅推动了自然语言处理&#xff08;NLP&#xff09;技术的飞跃&…...

小球反弹(蓝桥杯C语言)

有一长方形&#xff0c;长为 343720343720 单位长度&#xff0c;宽为 233333233333 单位长度。在其内部左上角顶点有一小球 (无视其体积)&#xff0c;其初速度如图所示且保持运动速率不变&#xff0c;分解到长宽两个方向上的速率之比为 dx:dy15:17dx:dy15:17。小球碰到长方形的…...

Java面试39-Zookeeper中的Watch机制的原理

Zookeeper是一个分布式协调组件&#xff0c;为分布式架构下的多个应用组件提供了顺序访问控制能力。它的数据存储采用了类似于文件系统的树形结构&#xff0c;以节点的方式来管理存储在Zookeeper上的数据。 Zookeeper提供了一个Watch机制&#xff0c;可以让客户端感知到Zooke…...

3️⃣ Coze工作流基础教学(2025年全新版本)

目录 一、什么是工作流 二、为什么用工作流 三、工作流使用场景 四、怎么学习工作流 五、工作流功能概述 六、制作工作流基础流程 6.1 创建工作流 6.2 配置工作流 6.3 调试工作流 6.4 发布工作流 6.5 使用工作流 6.6 复制工作流 6.7 删除工作流 6.8 设置工作流异…...

备战蓝桥杯——走迷宫问题(BFS解决)

这是一个经典的BFS算法 1. BFS算法保证最短路径 核心机制&#xff1a;广度优先搜索按层遍历所有可能的路径&#xff0c;首次到达终点的路径长度即为最短步数。这是BFS的核心优势。队列的作用&#xff1a;通过队列按先进先出的顺序处理节点&#xff0c;确保每一步探索的都是当…...

usbip学习记录

USB/IP: USB device sharing over IP make menuconfig配置&#xff1a; Device Drivers -> Staging drivers -> USB/IP support Device Drivers -> Staging drivers -> USB/IP support -> Host driver 如果还有作为客户端的需要&#xff0c;继续做以下配置&a…...

mlir-tblgen 的应用渐进式示例

示例01 -gen-dialect-decls toy_dia.1.toy include "mlir/IR/OpBase.td" //include "mlir/IR/FunctionInterfaces.td" //include "mlir/IR/SymbolInterfaces.td" //include "mlir/Interfaces/SideEffectInterfaces.td"def Toy_Diale…...

AI大模型与未来社会结构的重构:从工具到共生体

一、引言&#xff1a;从蒸汽机到ChatGPT&#xff0c;文明的每一次跃迁都始于“工具的自我进化” 历史长河中&#xff0c;每一次技术革命&#xff0c;都伴随着人类社会组织、认知方式乃至价值体系的巨变。从18世纪的蒸汽机到20世纪的信息技术&#xff0c;再到21世纪的人工智能&…...

2015年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2015年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激励学生学习数学的积极性,提高学…...

免费Deepseek-v3接口实现Browser-Use Web UI:浏览器自动化本地模拟抓取数据实录

源码 https://github.com/browser-use/web-ui 我们按照官方教程&#xff0c;修订几个环节&#xff0c;更快地部署 步骤 1&#xff1a;克隆存储库 git clone https://github.com/browser-use/web-ui.git cd web-ui Step 2: Set Up Python Environment 第 2 步&#xff1a;设置…...

Bash判断命令是否存在

在 Bash 脚本里&#xff0c;你可以通过多种方法判断某个命令是否存在。下面为你详细介绍几种常见的判断方式。 1. 使用command -v command -v命令能够返回指定命令的可执行文件路径&#xff0c;如果该命令不存在则不会有输出。借助这一特性&#xff0c;我们可以结合条件判断语…...

双指针(滑动窗口)

用于在数组或字符串的进行快速排序 匹配 排序或移动操作。 双指针不是真的指针&#xff0c;只是用两个变量来表示下标(在后面都用指针来表示) 双指针往往和单调性 排序 联系在一起&#xff0c;暴力往往是O(n方)双指针利用单调性可以优化到o(n) 有对撞指针 快慢指针 美丽区间…...

在PPT中同时自动播放多个视频的方法

在PPT中同时自动播放多个视频的方法 文章目录 在PPT中同时自动播放多个视频的方法1 准备视频2 设置动画为“出现”3 设置所有视频为“自动播放”4 最终效果与其他设置 在PPT制作的过程中&#xff0c;我们经常遇到需要同时自动播放多个视频的情况。本文将详细介绍实现这种效果的…...

使用 Vue 快速集成 FullCalendar 日历组件教程

FullCalendar 是一款功能强大的 JavaScript 日历组件&#xff0c;支持 React/Vue 等主流框架&#xff0c;提供丰富的日历视图和交互功能。本文将手把手教你在 Vue 项目中快速集成&#xff0c;并演示核心功能实现。 &#x1f4e6; 主要特性亮点 ✅ 月/周/日多视图切换 ✅…...

xv6-labs-2024 lab2

lab-2 0. 前置 课程记录 操作系统的隔离性&#xff0c;举例说明就是&#xff0c;当我们的shell&#xff0c;或者qq挂掉了&#xff0c;我们不希望因为他&#xff0c;去影响其他的进程&#xff0c;所以在不同的应用程序之间&#xff0c;需要有隔离性&#xff0c;并且&#xff0…...

redis导入成功,缺不显示数据

SpringBootTest class SecurityApplicationTests {AutowiredStringRedisTemplate template; //添加这句代码&#xff0c;自动装载&#xff0c;即可解决文章三处代码报错Testvoid contextLoads() {String compact Jwts.builder().signWith(Jwts.SIG.HS512.key().build()).subj…...

Flink对比Spark streaming、Storm

对比Spark streaming、Storm 产品 模型 语义 容错机制 状态管理 延时 吞吐量 Storm native at-least-once ack 无 low low Spark streaming micro-batch exactly-once RDD checkpoint 有 medium high Flink native exactly-once checkpoint 有 low …...

力扣316去除重复字母-单调栈

题目来源: 给你一个字符串 s &#xff0c;请你去除字符串中重复的字母&#xff0c;使得每个字母只出现一次。需保证 返回结果的字典序最小&#xff08;要求不能打乱其他字符的相对位置&#xff09;。 示例 1&#xff1a; 输入&#xff1a;s "bcabc" 输出&#xff…...

第421场周赛:数组的最大因子得分、

Q1、数组的最大因子得分 1、题目描述 给你一个整数数组 nums。 因子得分 定义为数组所有元素的最小公倍数&#xff08;LCM&#xff09;与最大公约数&#xff08;GCD&#xff09;的 乘积。 在 最多 移除一个元素的情况下&#xff0c;返回 nums 的 最大因子得分。 注意&…...

COMSOL 与人工智能融合的多物理场应用:28个案例的思路、方法与工具概述

应用案例概述 基于 COMSOL 与人工智能&#xff08;AI&#xff09;结合的应用案例涵盖了 28 个多领域场景&#xff0c;包括工程&#xff08;如热传导优化、结构力学预测&#xff09;、能源&#xff08;如电池热管理、燃料电池性能&#xff09;、生物医学&#xff08;如药物传递…...

【算法】插入排序

算法系列五&#xff1a;插入排序 一、直接插入排序 1.原理 2.实现 3.性质 3.1时间复杂度 3.2空间复杂度 3.3稳定性 二、希尔排序 1.原理 1.1优化方向 1.2优化原理 2.设计 2.1比较无序时 2.2比较有序时 3.实现 4.性质 4.1时间复杂度 4.2空间复杂度 4.3稳定性…...

企业展示型网站模板HTML5网站模板下载指南

在当今数字化浪潮中&#xff0c;企业网站已成为企业展示形象、推广产品和服务的重要窗口。一个设计精美、功能完善的企业展示型网站&#xff0c;不仅能提升企业的品牌形象&#xff0c;还能吸引潜在客户&#xff0c;促进业务增长。而HTML5网站模板&#xff0c;凭借其跨平台兼容性…...

C盘清理——快速处理

C盘清理 | 快速处理 软件&#xff1a;小番茄C盘清理 https://ccleancdn.xkbrowser.com/cleanmaster/FanQieClean_13054_st.exe 前言&#xff1a;为什么需要专业的C盘清理工具&#xff1f; 作为一位长期与Windows系统打交道的技术博主&#xff0c;我深知C盘空间不足带来的痛苦…...

什么是模型驱动开发MDD?有哪些应用场景?

模型驱动开发&#xff08;Model-Driven Development&#xff0c;MDD&#xff09;是一种以模型为核心的软件开发方法&#xff0c;其核心思想是通过创建高层次的抽象模型来描述系统的结构和行为&#xff0c;而非直接编写代码。这些模型经过自动化工具的转换或生成&#xff0c;最终…...

uniapp小程序生成海报/图片并保存分享

调研结果&#xff1a; 方法一&#xff1a;canvasuni.canvasToTempFilePath耗时太长&#xff0c;现在卡在canvas的绘制有问题&#xff0c;canvas绘制的部分东西不生效但是找不到原因 方法二&#xff1a;使用wxml-to-canvas其实也差不多是用canvas手动绘制&#xff0c;可能会卡在…...

从IoT到AIoT:智能边界的拓展与AI未来趋势预测

文章目录 引言&#xff1a;从连接万物到感知万物1. AIoT的本质&#xff1a;将智能嵌入万物2. AIoT的推动力量与挑战2.1 推动力量2.2 关键挑战 3. 五大AIoT未来趋势预测趋势一&#xff1a;边缘智能将成为主流架构趋势二&#xff1a;AI模型将向自适应与多任务演进趋势三&#xff…...

2012年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2012年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激励学生学习数学的积极性,提高学…...

2140 星期计算

2140 星期计算 ⭐️难度&#xff1a;中等 &#x1f31f;考点&#xff1a;2022、思维、省赛 &#x1f4d6; &#x1f4da; 1️⃣法一&#xff1a; 同余定理&#xff0c; import java.util.Scanner;public class Main2 {public static void main(String[] args) {Scanner sc …...

NVIDIA Jetson 环境安装指导 PyTorch | Conda | cudnn | docker

本文适用于Jetson Nano、TX1/TX2、Xavier 和 Orin系列的设备&#xff0c;供大家参考。 1、PyTorch不同版本安装 这里适用于Jetson Nano、TX1/TX2、Xavier 和 Orin &#xff0c;需要JetPack 4.2以上。 下载地址&#xff1a;PyTorch for Jetson - Jetson & Embedded System…...

理解 Rust 中的 String 分配机制

在 Rust 中&#xff0c;哪怕是一行再普通不过的代码&#xff0c;也可能暗藏玄机。这次我们就来剖析这样一句看似简单的代码&#xff1a; let s "hello world".to_string();这行代码触发了 只读数据段&#xff08;.rodata&#xff09;、堆&#xff08;heap&#xff0…...

园区网拓扑练习

1.拓扑图要求 1.按照图示的VLAN及IP地址需求&#xff0c;完成相关配需 2、要求SW1为VLAN 2/3的主根及主网关&#xff0c;SW2为vlan 20/30的主根及主网关&#xff0c;SW1和SW2互为备份 3.上层通过静态路由协议完成数据通信过程 4.AR1为企业出口路由器 5.要求全网可达 2.需求分…...

CentralCache

目录 一、Span和Spanlist 二、CentralCache 一、Span和Spanlist CentralCache其实也是哈希桶结构&#xff0c;只不过他是一个个的Span&#xff08;Span是管理一定数量的页的结构&#xff09;&#xff0c;而且Span会管理一个freelist&#xff0c;用来挂起一个个的小内存块给Th…...

STM32 基础1

什么是GPIO的上拉和下拉电阻 下拉电阻&#xff1a;把一个不确定的信号通过电阳连接到地&#xff0c;其实就是初始化为低电平。 上拉电阻&#xff1a;把一个不确定的信号通过电连接到高电平&#xff0c;其实就是初始化为高电平。 本质&#xff1a;上拉地注入电流&#xff0c;下…...

Python爬虫第5节-urllib的异常处理、链接解析及 Robots 协议分析

目录 一、处理异常 1.1 URLError 1.2 HTTPError 二、解析链接 2.1 urlparse() 2.2 urlunparse() 2.3 urlsplit() 2.4 urlunsplit() 2.5 urljoin() 2.6 urlencode() 2.7 parse_qs() 2.8 parse_qsl() 2.9 quote() 2.10 unquote() 三、分析网站Robots协议 3.1 R…...

STM32——DAC转换

DAC简介 DAC&#xff0c;全称&#xff1a;Digital-to-Analog Converter&#xff0c;扑指数字/模拟转换器 ADC和DAC是模拟电路与数字电路之间的桥梁 DAC的特性参数 1.分辨率&#xff1a; 表示模拟电压的最小增量&#xff0c;常用二进制位数表示&#xff0c;比如&#xff1a…...

因果推断【Causal Inference】(一)

文章目录 1. 什么是因果推断&#xff1f;2. 为什么要提出因果推断&#xff1f;Motivation&#xff1a;辛普森悖论Scenario 1Scenario 2 3. 【Note】相关性≠因果3.1 混淆(Confounding)——共同原因3.2 样本选择偏差(Selection Bias)——共同结果 4. 潜在结果(Potential Outcome…...

人工智能通识速览(Part5. 大语言模型)

五、大语言模型 1.NLP 自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;是人工智能领域的一个重要分支&#xff0c;专注于研究 计算机如何理解、生成和处理人类语言。它的目标是让机器能够像人类一样“读懂”文本或语音&#xff0c;并执 行翻译、问答、摘…...

优化 Django 数据库查询

优化 Django 数据库查询 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 优化 Django 数据库查询**理解 N+1 查询问题****`select_related`:外键的急加载**示例何时使用 `select_re…...

MCP AI:下一代智能微服务控制平台 (.NET Core)

平台概述 MCP AI (Microservice Control Platform AI) 是基于.NET Core构建的下一代智能微服务控制平台&#xff0c;旨在为企业级微服务架构提供智能化、自动化的管理和控制能力。 核心特性 智能服务编排 AI驱动的动态服务路由 自适应负载均衡算法 预测性扩展与收缩 统一…...

计算机网络基础:系列教程汇总

计算机网络基础:系列教程汇总 一、前言二、计算机网络基础概要三、计算机网络基础3.1 计算机网络基础:揭开网络世界的神秘面纱3.2 计算机网络基础:剖析网络的构成要素3.3 计算机网络基础:认识网络拓扑结构3.4 计算机网络基础:解析网络协议3.5 计算机网络基础:了解网络类型…...

互联网三高-高性能之JVM调优

1 运行时数据区 JVM运行时数据区是Java虚拟机管理的内存核心模块&#xff0c;主要分为线程共享和线程私有两部分。 &#xff08;1&#xff09;线程私有 ① 程序计数器&#xff1a;存储当前线程执行字节码指令的地址&#xff0c;用于分支、循环、异常处理等流程控制‌ ② 虚拟机…...

学习比较JVM篇(六):解读GC日志

一、前言 在之前的文章中&#xff0c;我们对JVM的结构、垃圾回收算法、垃圾回收器做了一些列的讲解&#xff0c;同时也使用了JVM自带的命令行工具进行了实际操作。今天我们继续讲解JVM。 我们学习JVM的目的是为了了解JVM&#xff0c;然后优化对应的参数。那么如何了解JVM运行…...

说说你对python的理解,有什么特性?

Python是一种高级、解释型、通用的编程语言&#xff0c;由Guido van Rossum于1991年首次发布。经过30多年的发展&#xff0c;Python已成为最受欢迎的编程语言之一&#xff0c;在Web开发、数据分析、人工智能、自动化运维等多个领域都有广泛应用。 Python的核心特性 1. 简洁优…...

【C语言】编译和链接

一、编译环境和运行环境 在ANSI C的任何一种实现中&#xff0c;存在着两个不同的环境&#xff1a; 1、翻译环境&#xff1a;在翻译环境中&#xff0c;其会通过编译和链接两个大的步骤&#xff0c;其中编译又分为了预处理&#xff08;这 个我们后面还会详细讲解&#x…...