React Next项目中导入Echart世界航线图 并配置中文

news2025/3/14 11:24:55

公司业务要求做世界航线图,跑了三个ai未果,主要是引入world.json失败,echart包中并不携带该文件,源码的world.json文件页面404找不到。需要自己寻找。这是整个问题卡壳的关键点,特此贴出资源网址。

目录

一、安装

二、下载world.json

三、创建地图组件WorldMap.js

四、引入地图组件到页面上

五、配置中文 

六、中文转换函数


一、安装

npm install echarts

二、下载world.json

world.json在最下面,点开直接粘贴到自己项目中引入

Index of /examples/data/asset/geo

三、创建地图组件WorldMap.js

import React, { useRef, useEffect } from "react";
import * as echarts from "echarts";

const geoCoordMap = {
    "New York": [-74.0060, 40.7128],
    "London": [-0.1278, 51.5074],
    "Tokyo": [139.6917, 35.6895],
    "Beijing": [116.4074, 39.9092],
};

const SHData = [
    [{ name: "Beijing", value: 105 }, { name: "New York", value: 105 }],
    [{ name: "Beijing", value: 105 }, { name: "London", value: 105 }],
    [{ name: "Beijing", value: 105 }, { name: "Tokyo", value: 105 }],
];

const convertData = (data) => {
    const res = [];
    for (let i = 0; i < data.length; i++) {
        const dataItem = data[i];
        const fromCoord = geoCoordMap[dataItem[0].name];
        const toCoord = geoCoordMap[dataItem[1].name];
        if (fromCoord && toCoord) {
            res.push({
                fromName: dataItem[0].name,
                toName: dataItem[1].name,
                coords: [fromCoord, toCoord],
            });
        }
    }
    return res;
};

const WorldMap = () => {
    const chartRef = useRef(null);

    useEffect(() => {
        // 动态加载世界地图数据
        fetch("/world.json") // 确保文件路径正确,这里假设 world.json 放在 public 文件夹下
            .then((res) => res.json())
            .then((mapData) => {
                echarts.registerMap("world", mapData); // 注册地图数据

                const myChart = echarts.init(chartRef.current);

                const seriesData = [
                    {
                        type: "lines",
                        zlevel: 1,
                        effect: {
                            show: true,
                            period: 6,
                            trailLength: 0.7,
                            color: "#fff",
                            symbolSize: 3,
                        },
                        lineStyle: {
                            color: "#46bee9",
                            width: 0,
                            curveness: 0.2,
                        },
                        data: convertData(SHData),
                    },
                    {
                        type: "lines",
                        zlevel: 2,
                        symbol: ["none", "arrow"],
                        symbolSize: 10,
                        effect: {
                            show: true,
                            period: 6,
                            trailLength: 0,
                            symbol: "path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z",
                            symbolSize: 15,
                        },
                        lineStyle: {
                            color: "#46bee9",
                            width: 1,
                            opacity: 0.6,
                            curveness: 0.2,
                        },
                        data: convertData(SHData),
                    },
                    {
                        type: "effectScatter",
                        coordinateSystem: "geo",
                        zlevel: 2,
                        rippleEffect: {
                            brushType: "stroke",
                        },
                        label: {
                            show: true,
                            position: "right",
                            formatter: "{b}",
                        },
                        symbolSize: (val) => val[2] / 8,
                        itemStyle: {
                            color: "#46bee9",
                        },
                        data: SHData.map((dataItem) => ({
                            name: dataItem[1].name,
                            value: geoCoordMap[dataItem[1].name].concat([dataItem[1].value]),
                        })),
                    },
                ];

                myChart.setOption({
                    geo: {
                        map: "world",
                        roam: true,
                        itemStyle: {
                            areaColor: "#404a59",
                            borderColor: "#61727a",
                        },
                        emphasis: {
                            itemStyle: {
                                areaColor: "#7acfd6",
                            },
                        },
                    },
                    series: seriesData,
                });
            })
            .catch((error) => {
                console.error("Failed to load world map data:", error);
            });
    }, []);

    return <div ref={chartRef} style={{ width: "100%", height: "600px" }} />;
};

export default WorldMap;

四、引入地图组件到页面上

import React from "react";
import styles from "../styles/AfterSalesPage.module.css";
import WorldMap from "../components/WorldMap"; // 确保使用默认导入

const AfterSales = () => {
	return (
		<div className={styles.newsContainer}>
			<WorldMap />
		</div>
	);
};

export default AfterSales;

成果展示:

五、配置中文 

中文映射文件mapZHName.js

export let mapZHName = {
    'Afghanistan': '阿富汗',
    'Angola': '安哥拉',
    'Albania': '阿尔巴尼亚',
    'United Arab Emirates': '阿联酋',
    'Argentina': '阿根廷',
    'Armenia': '亚美尼亚',
    'Australia': '澳大利亚',
    'Austria': '奥地利',
    'Azerbaijan': '阿塞拜疆',
    'Burundi': '布隆迪',
    'Belgium': '比利时',
    'Benin': '贝宁',
    'Burkina Faso': '布基纳法索',
    'Bangladesh': '孟加拉',
    'Bulgaria': '保加利亚',
    'Belarus': '白俄罗斯',
    'Belize': '伯利兹',
    'Bermuda': '百慕大',
    'Bolivia': '玻利维亚',
    'Brazil': '巴西',
    'Brunei': '文莱',
    'Bhutan': '不丹',
    'Botswana': '博茨瓦纳',
    'Canada': '加拿大',
    'Switzerland': '瑞士',
    'Chile': '智利',
    'China': '中国',
    'Cameroon': '喀麦隆',
    'Colombia': '哥伦比亚',
    'Costa Rica': '哥斯达黎加',
    'Cuba': '古巴',
    'Cyprus': '塞浦路斯',
    'Germany': '德国',
    'Djibouti': '吉布提',
    'Denmark': '丹麦',
    'Algeria': '阿尔及利亚',
    'Ecuador': '厄瓜多尔',
    'Egypt': '埃及',
    'Eritrea': '厄立特里亚',
    'Spain': '西班牙',
    'Estonia': '爱沙尼亚',
    'Ethiopia': '埃塞俄比亚',
    'Finland': '芬兰',
    'Fiji': '斐济',
    'France': '法国',
    'Gabon': '加蓬',
    'United Kingdom': '英国',
    'Georgia': '格鲁吉亚',
    'Ghana': '加纳',
    'Guinea': '几内亚',
    'Gambia': '冈比亚',
    'Greece': '希腊',
    'Greenland': '格陵兰',
    'Guatemala': '危地马拉',
    'Guyana': '圭亚那',
    'Honduras': '洪都拉斯',
    'Croatia': '克罗地亚',
    'Haiti': '海地',
    'Hungary': '匈牙利',
    'Indonesia': '印度尼西亚',
    'India': '印度',
    'Ireland': '爱尔兰',
    'Iran': '伊朗',
    'Iraq': '伊拉克',
    'Iceland': '冰岛',
    'Israel': '以色列',
    'Italy': '意大利',
    'Jamaica': '牙买加',
    'Jordan': '约旦',
    'Japan': '日本',
    'Kazakhstan': '哈萨克斯坦',
    'Kenya': '肯尼亚',
    'Kyrgyzstan': '吉尔吉斯斯坦',
    'Cambodia': '柬埔寨',
    'Korea': '韩国',
    'Kuwait': '科威特',
    'Lebanon': '黎巴嫩',
    'Liberia': '利比里亚',
    'Libya': '利比亚',
    'Sri Lanka': '斯里兰卡',
    'Lesotho': '莱索托',
    'Lithuania': '立陶宛',
    'Luxembourg': '卢森堡',
    'Latvia': '拉脱维亚',
    'Morocco': '摩洛哥',
    'Moldova': '摩尔多瓦',
    'Madagascar': '马达加斯加',
    'Mexico': '墨西哥',
    'Macedonia': '马其顿',
    'Mali': '马里',
    'Myanmar': '缅甸',
    'Montenegro': '黑山',
    'Mongolia': '蒙古',
    'Mozambique': '莫桑比克',
    'Mauritania': '毛里塔尼亚',
    'Malawi': '马拉维',
    'Malaysia': '马来西亚',
    'Namibia': '纳米比亚',
    'New Caledonia': '新喀里多尼亚',
    'Niger': '尼日尔',
    'Nigeria': '尼日利亚',
    'Nicaragua': '尼加拉瓜',
    'Netherlands': '荷兰',
    'Norway': '挪威',
    'Nepal': '尼泊尔',
    'New Zealand': '新西兰',
    'Oman': '阿曼',
    'Pakistan': '巴基斯坦',
    'Panama': '巴拿马',
    'Peru': '秘鲁',
    'Philippines': '菲律宾',
    'Papua New Guinea': '巴布亚新几内亚',
    'Poland': '波兰',
    'Puerto Rico': '波多黎各',
    'Portugal': '葡萄牙',
    'Paraguay': '巴拉圭',
    'Qatar': '卡塔尔',
    'Romania': '罗马尼亚',
    'Russia': '俄罗斯',
    'Rwanda': '卢旺达',
    'Saudi Arabia': '沙特阿拉伯',
    'Sudan': '苏丹',
    'Senegal': '塞内加尔',
    'Sierra Leone': '塞拉利昂',
    'El Salvador': '萨尔瓦多',
    'Somalia': '索马里',
    'Suriname': '苏里南',
    'Slovakia': '斯洛伐克',
    'Slovenia': '斯洛文尼亚',
    'Sweden': '瑞典',
    'Swaziland': '斯威士兰',
    'Syria': '叙利亚',
    'Chad': '乍得',
    'Togo': '多哥',
    'Thailand': '泰国',
    'Tajikistan': '塔吉克斯坦',
    'Turkmenistan': '土库曼斯坦',
    'Trinidad and Tobago': '特立尼达和多巴哥',
    'Tunisia': '突尼斯',
    'Turkey': '土耳其',
    'Uganda': '乌干达',
    'Ukraine': '乌克兰',
    'Uruguay': '乌拉圭',
    'United States': '美国',
    'Uzbekistan': '乌兹别克斯坦',
    'Venezuela': '委内瑞拉',
    'Vietnam': '越南',
    'Vanuatu': '瓦努阿图',
    'Yemen': '也门',
    'South Africa': '南非',
    'Zambia': '赞比亚',
    'Zimbabwe': '津巴布韦',
    'Liechtenstein':'列支敦士登',
    'Serbia':'塞尔维亚',
    "Aland": "奥兰群岛",
    "Andorra": "安道尔",
    "American Samoa": "美属萨摩亚",
    "Antigua and Barb.": "安提瓜和巴布达",
    "Bahrain": "巴林",
    "Bahamas": "巴哈马",
    "Bosnia and Herz.": "波斯尼亚和黑塞哥维那",
    "Barbados": "巴巴多斯",
    "Central African Rep.": "中非",
    "Dem. Rep. Congo": "刚果民主共和国",
    "Congo": "刚果",
    "Comoros": "科摩罗",
    "Cape Verde": "佛得角",
    "Curaçao": "库拉索",
    "Cayman Is.": "开曼群岛",
    "Czech Rep.": "捷克",
    "Dominica": "多米尼克",
    "Falkland Is.": "福克兰群岛",
    "Faeroe Is.": "法罗群岛",
    "Micronesia": "密克罗尼西亚联邦",
    "Guinea-Bissau": "几内亚比绍",
    "Eq. Guinea": "赤道几内亚",
    "Grenada": "格林纳达",
    "Guam": "关岛",
    "Isle of Man": "马恩岛",
    "Br. Indian Ocean Ter.": "英属印度洋领地",
    "Jersey": "泽西岛",
    "Kiribati": "基里巴斯",
    "Lao PDR": "老挝",
    "Saint Lucia": "圣卢西亚",
    "Malta": "马耳他",
    "N. Mariana Is.": "北马里亚纳群岛",
    "Montserrat": "蒙特塞拉特岛",
    "Mauritius": "毛里求斯",
    "Niue": "纽埃岛",
    "Palau": "帕劳",
    "Dem. Rep. Korea":"韩国",
    "Palestine": "巴勒斯坦",
    "Fr. Polynesia": "法属波利尼西亚",
    "S. Sudan": "南苏丹",
    "Singapore": "新加坡",
    "Saint Helena":"圣赫勒拿",
    "Solomon Is.": "所罗门群岛",
    "St. Pierre and Miquelon": "圣皮埃尔和密克隆群岛",
    "São Tomé and Principe": "圣多美和普林西比",
    "Seychelles": "塞舌尔",
    "Turks and Caicos Is.": "特克斯和凯科斯群岛",
    "Timor-Leste": "东帝汶",
    "Tonga": "汤加",
    "Tanzania": "坦桑尼亚",
    "St. Vin. and Gren.": "圣文森特和格林纳丁斯",
    "U.S. Virgin Is.": "美属维尔京群岛",
    "Samoa": "萨摩亚",
    "W. Sahara":"西撒哈拉",
    "Fr. S. Antarctic Lands":"马提尼克岛",
    "Côte d'Ivoire":"科特迪瓦",
    "N. Cyprus":"东塞浦路斯",
    "Dominican Rep.": "多米尼加",
    "Heard I. and McDonald Is.":"赫德岛和麦克唐纳群岛",
    "Siachen Glacier":"锡亚琴冰川",
    "S. Geo. and S. Sandw. Is.":"南乔治亚岛与南桑威奇群岛"
  };
  

六、中文转换函数

在WorldMap.js这个地图组件中,引入mapZHName.js,并添加转化函数,和航线地名的映射表。

完整代码如下:

import React, { useRef, useEffect } from 'react';
import * as echarts from 'echarts';
import { mapZHName } from '../public/mapZHName'; // 确保正确导入映射文件

const geoCoordMap = {
  中国: [104.195397, 35.86166],
  纽约: [-74.006, 40.7128],
  伦敦: [-0.1278, 51.5074],
  东京: [139.6917, 35.6895],
};

//配置航线
const SHData = [
  [
    { name: '中国', value: 105 },
    { name: '中国', value: 105 },
  ],
  [
    { name: '中国', value: 105 },
    { name: '伦敦', value: 105 },
  ],
  [
    { name: '中国', value: 105 },
    { name: '东京', value: 105 },
  ],
];

// 将 SHData 中的城市名称和对应的值转换为 ECharts 地图所需的连线数据格式
const convertData = (data) => {
  const res = [];
  for (let i = 0; i < data.length; i++) {
    const dataItem = data[i];
    const fromCoord = geoCoordMap[dataItem[0].name];
    const toCoord = geoCoordMap[dataItem[1].name];
    if (fromCoord && toCoord) {
      res.push({
        fromName: dataItem[0].name,
        toName: dataItem[1].name,
        coords: [fromCoord, toCoord],
      });
    }
  }
  return res;
};

const WorldMap = () => {
  const chartRef = useRef(null);

  // 中文转换函数定义在组件内部
  const formatWorldMapToZH = (data) => {
    if (data.features) {
      data.features = data.features.map((item) => {
        if (mapZHName[item.properties.name]) {
          item.properties.name = mapZHName[item.properties.name];
        }
        return item;
      });
    }
    return data;
  };

  useEffect(() => {
    // 动态加载世界地图数据
    fetch('/world.json') // 确保文件路径正确,这里假设 world.json 放在 public 文件夹下
      .then((res) => res.json())
      .then((mapData) => {
        // 调用转换函数将地图数据中的英文地名转换为中文
        const formattedMapData = formatWorldMapToZH(mapData);

        echarts.registerMap('world', formattedMapData); // 注册地图数据

        const myChart = echarts.init(chartRef.current);

        const seriesData = [
          {
            type: 'lines',
            zlevel: 1,
            effect: {
              show: true,
              period: 6,
              trailLength: 0.7,
              color: '#fff',
              symbolSize: 3,
            },
            lineStyle: {
              color: '#46bee9',
              width: 0,
              curveness: 0.2,
            },
            data: convertData(SHData),
          },
          {
            type: 'lines',
            zlevel: 2,
            symbol: ['none', 'arrow'],
            symbolSize: 10,
            effect: {
              show: true,
              period: 6,
              trailLength: 0,
              symbol:
                'path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z',
              symbolSize: 15,
            },
            lineStyle: {
              color: '#46bee9',
              width: 1,
              opacity: 0.6,
              curveness: 0.2,
            },
            data: convertData(SHData),
          },
          {
            type: 'effectScatter',
            coordinateSystem: 'geo',
            zlevel: 2,
            rippleEffect: {
              brushType: 'stroke',
            },
            label: {
              show: true,
              position: 'right',
              formatter: '{b}',
            },
            symbolSize: (val) => val[2] / 8,
            itemStyle: {
              color: '#46bee9',
            },
            data: SHData.map((dataItem) => ({
              name: dataItem[1].name,
              value: geoCoordMap[dataItem[1].name].concat([dataItem[1].value]),
            })),
          },
        ];

        myChart.setOption({
          geo: {
            map: 'world',
            nameMap: {
              China: '中国',
              'New York': '纽约',
              London: '伦敦',
              Tokyo: '东京',
            },
            roam: true,
            itemStyle: {
              areaColor: '#404a59',
              borderColor: '#61727a',
            },
            emphasis: {
              itemStyle: {
                areaColor: '#7acfd6',
              },
            },
          },
          series: seriesData,
        });
      })
      .catch((err) => {
        console.error('Failed to load world map data:', err);
      });
  }, []);

  return <div ref={chartRef} style={{ width: '100%', height: '600px' }} />;
};

export default WorldMap;

成果展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2314832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT与网页显示数据公式的方法

一.网页中显示数学公式通常有三种主要方法 1.图片方式 原理&#xff1a;将公式转换为图片&#xff08;如 PNG、SVG&#xff09;&#xff0c;通过 <img> 标签嵌入网页。 实现步骤&#xff1a; 使用工具&#xff08;如 LaTeX dvipng、在线生成工具&#xff09;将公式渲…

深入解析APP订阅页的运作机制(订阅页如何运作)

在当今数字经济的背景下&#xff0c;订阅模式已成为许多企业获取稳定收入的重要方式。无论是软件、视频流媒体还是电子商务&#xff0c;订阅服务都能为用户提供持续的价值体验。然而&#xff0c;如何有效地设计和运作一个订阅页&#xff0c;是决定用户是否愿意订阅的关键因素。…

Golang倒腾一款简配的具有请求排队功能的并发受限服务器

golang官方指南[1]给了一些代码片段&#xff0c;层层递进演示了信道的能力: 1>. 信号量2>. 限流能力 var sem make(chan int, MaxOutstanding) func Serve(queue chan *Request) {for req : range queue {req: reqsem <- 1 go func() { // 只会开启MaxOutstandin…

【运维】服务器系统从centos7重装为ubuntu22.04

目录 一、硬盘准备二、系统安装三、安装基本系统组件四、挂载机械硬盘五、问题解决 一、硬盘准备 【注意&#xff1a;这一步会把硬盘的数据清空&#xff0c;所以需要找一个空的U盘或者把U盘数据备份】 ubuntu22.04下载 需要先安装 bittorrent 下载完之后会打开一个网页 然后…

创新技术引领软件供应链安全,助力数字中国建设

编者按 随着数字化转型的加速&#xff0c;针对软件供应链的攻击事件呈快速增长态势&#xff0c;目前已成为网络空间安全的焦点。如何将安全嵌入到软件开发到运营的全流程&#xff0c;实现防护技术的自动化、一体化、智能化&#xff0c;成为技术领域追逐的热点。 悬镜安全作为…

【设计模式】建造者模式——工厂模式

三、建造者模式——工厂模式 3.1 工厂模式 创建一个类对象的传统方式是使用关键字new, 因为用new 创建的类对象是一个堆对象&#xff0c;可以实现多态。工厂模式通过把创建对象的代码包装起来&#xff0c;实现创建对象的代码与具体 的业务逻辑代码相隔离的目的(将对象的创建和…

蓝桥备赛(18)- 红黑树和 set 与 map(上)

对于二叉搜索树 &#xff0c; 平衡二叉树 &#xff0c; 以及红黑树 &#xff0c; 目前只需要了解背后的原理 &#xff0c; 不做代码实现的要求 &#xff0c; 重要的就是了解各种操作的时间复杂度即可 &#xff0c; 为set 与 map 做铺垫 一、二叉搜索树 1.1 基本概念 相较与于堆…

obeaver 连接oracle 库 模式乱码

下载orai18n-12.1.0.2.0.jar 库--添加文件--把提前下载好的jar 随便放在一个文件夹下--添加文件选中&#xff0c;然后点击找到类&#xff0c; 选择类&#xff0c;确定即可正常 下载地址&#xff1a;https://download.csdn.net/download/weixin_42845364/88368302

ChatGPT 使用教程:深度探索AI常用功能技巧

文章目录 前言一、ChatGPT介绍1.1 人工智能与自然语言处理的发展1.2 ChatGPT 的诞生与意义 二、ChatGPT 基础入门2.1 注册与登录2.2 对话界面介绍2.3 基本提问方式 三、常用功能详解3.1 文本生成3.2 问题回答3.3 语言翻译3.4 代码生成与调试 四、高级使用技巧4.1 指令优化4.2 多…

[HUBUCTF 2022 新生赛]messy_traffic

下载附件 看到文件类型直接用wireshark打开&#xff0c;对MySQL协议进行追踪流&#xff0c;并没有什么发现&#xff0c;后面对NO.437发现有用信息&#xff0c;http追踪流 发现**system(‘cat passwd.txt’);**这里是在打开查看passwd.txt&#xff0c;密码是"SignUpForHUBU…

铁人三项(第五赛区)_2018_rop题解

先启动靶机连接看看。 直接ls&#xff0c;就给我输出句话&#xff0c;看来不能直接拿flag。 那走下流程。 查下位数和其他信息&#xff1a; 可以看到是32位的包&#xff0c;开了NX&#xff0c;但没开其他保护。 用ida32打开looklook。 主函数就是个这&#xff0c;看到了弹出的…

Compose 实践与探索六 —— 动画的流程控制与 Transition

1、Block 参数&#xff1a;监听每一帧 animateTo() 与 animateDecay() 中都有一个函数类型的 block 参数&#xff1a; suspend fun animateDecay(initialVelocity: T,animationSpec: DecayAnimationSpec<T>,block: (Animatable<T, V>.() -> Unit)? null): An…

虚拟机Contos7为啥不能被本机电脑访问?

1.查看防火墙是否开启 systemctl status firewalld.service 2.如果防火墙关闭就可以直接被访问 3.如果防火墙打开了我们需要开放端口(下面为防火墙一系列指令) # 关闭防火墙 systemctl stop firewalld.service# 打开防火墙 systemctl start firewalld.service# 关闭开启自启…

idea超级AI插件,让 AI 为 Java 工程师

引言​ 用户可在界面中直接通过输入自然语言的形式描述接口的需求&#xff0c;系统通过输入的需求自动分析关键的功能点有哪些&#xff0c;并对不确定方案的需求提供多种选择&#xff0c;以及对需求上下文进行补充&#xff0c;用户修改确定需求后&#xff0c;系统会根据需求设…

µCOS-III从入门到精通 第十四章(软件定时器)

参考教程&#xff1a;【正点原子】手把手教你学UCOS-III实时操作系统_哔哩哔哩_bilibili 一、软件定时器简介 1、定时器的概念与种类 &#xff08;1&#xff09;定时器的概念&#xff1a;从指定的时刻开始&#xff0c;经过一个指定时间&#xff0c;然后触发一个超时事件&…

MySQL数据库复杂的增删改查操作

在前面的文章中&#xff0c;我们主要学习了数据库的基础知识以及基本的增删改查的操作。接下去将以一个比较实际的公司数据库为例子&#xff0c;进行讲解一些较为复杂且现时需求的例子。 基础知识&#xff1a; 一文清晰梳理Mysql 数据库基础知识_字段变动如何梳理清楚-CSDN博…

KCD 北京站丨Volcano 邀您畅聊云原生智能调度技术与应用

AI与云原生技术正以前所未有的速度改变着我们的世界&#xff0c;而云原生技术则如同一座坚实的桥梁&#xff0c;连接着传统IT与现代化的数字世界。当AI与云原生相遇&#xff0c;它们相互赋能&#xff0c;相互促进&#xff0c;为开发者们打开了一个全新的技术宇宙。 3 月 15 日&…

BLEU评估指标

一、介绍 用于评估模型生成的句子和实际句子差异的指标&#xff0c;取值在[0,1]&#xff0c;匹配度高就距离1近&#xff0c;反之距离0近。这个指标计算代价小&#xff0c;容易理解&#xff0c;与语言无关&#xff0c;与人类评价结果高度相关。 BLEU主要基于n-gram匹配&#x…

高效自动化测试:打造Python+Requests+Pytest+Allure+YAML的接口测试框架

一、背景 在快节奏的开发周期中&#xff0c;如何确保接口质量&#xff1f;自动化测试是关键。通过构建标准化、可复用的测试框架&#xff0c;能显著提升测试效率与准确性&#xff0c;为项目质量保驾护航[1][7]。 二、目标 ✅ 核心目标&#xff1a; ● 实现快速、高效的接口测试…

BSides Vancouver: 2018 (Workshop)

BSides Vancouver: 2018 (Workshop) 来自 <https://www.vulnhub.com/entry/bsides-vancouver-2018-workshop,231/> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23…