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

WEB领域是不是黄了还是没黄

进入2024年后,WEB领域大批老表失业,一片哀嚎,个个饿的鬼叫狼嚎,为啥呢,下面是我个人的见解和看法。

中国程序员在应用层的集中

  1. 市场需求:中国的互联网行业在过去几年中经历了爆炸性增长,尤其是在电子商务、社交网络、移动支付等领域。这些领域的快速发展催生了大量对应用层开发的需求,因此许多中国程序员专注于使用现成的框架和技术来快速构建应用程序。

  2. 企业需求:许多中国企业更注重短期收益和市场占有率,因此更加倾向于快速迭代产品和服务,而不是投入大量资源进行底层技术的研发。这导致了很多程序员的工作集中在业务逻辑实现上,即CRUD操作。

  3. 教育和培训:中国的高等教育和职业培训机构往往更侧重于教授实用技能,以便学生能够迅速就业。这种倾向可能导致更多人学习如何使用现有工具和框架,而不是深入研究底层原理。

国外程序员的优势

  1. 历史积累:许多基础技术和框架起源于国外,特别是美国和欧洲。这些国家和地区在计算机科学和软件工程领域有着悠久的历史,积累了大量的经验和知识。

  2. 开源文化:西方国家拥有浓厚的开源文化,许多优秀的开源项目都是由国外开发者发起并维护的。这种文化鼓励技术创新和共享,使得国外程序员更容易参与到核心技术的开发中。

  3. 国际化视野:英语作为国际通用语言,为国外程序员提供了更多的交流机会和获取最新信息的途径。他们可以更方便地参与国际会议、阅读英文文档和教程,从而保持在技术前沿。

  4. 资金支持:一些大型科技公司如Google、Microsoft、Oracle等,在技术研发上有巨大的投入。这些公司在推动技术进步的同时,也为程序员提供了良好的工作环境和发展平台。

    英语的优势

  5. 国际交流:英语是国际科技会议、论坛和开源社区的主要交流语言。掌握英语可以帮助程序员更好地参与这些活动,从而获取最新的技术和行业动态。

  6. 文档与资源:很多高质量的技术文档、教程和在线课程都是英文的。能够无障碍阅读这些资料有助于程序员更快地学习新技术。

  7. 全球就业机会:对于那些希望在全球范围内寻找工作机会的程序员来说,良好的英语能力可以打开更多大门。

国内程序员和国外程序员面对的环境问题

  1. 劳动力市场结构:在一些发达国家,如美国,IT行业的发展更为成熟,企业对于技术人才的需求稳定且持续增长。同时,这些国家的教育体系和职业培训机制往往能够较好地与市场需求对接,培养出符合行业需求的人才。

  2. 法律法规保护:西方国家通常有更完善的劳动法律体系来保护员工权益,比如解雇程序较为复杂,需要给出正当理由,并提供相应的补偿。这使得企业在裁员时会更加谨慎。

  3. 社会保障体系:很多西方国家拥有完善的社会保障网络,包括失业保险、再就业培训等服务,为失业人员提供了更多的缓冲和支持,帮助他们更快地重返工作岗位。

  4. 工会力量:在某些国家,工会的力量较强,可以代表员工与雇主谈判,确保员工获得更好的工作条件和待遇,同时也减少了无故解雇的情况。

  5. 企业文化差异:西方国家的企业文化可能更注重员工的工作生活平衡,较少出现长时间加班的现象,这样的环境有助于保持员工的工作热情和创造力,从而减少因过度劳累导致的职业倦怠或离职。

  6. 技能更新和终身学习:在一些发达国家,企业和政府都鼓励并支持员工进行持续的学习和个人发展,以便适应不断变化的技术环境。这种对个人成长的投资可以帮助程序员保持竞争力,降低失业风险。

  7. 国际化视野:由于英语作为国际通用语言的优势,西方国家的程序员更容易参与全球项目,接触到国际市场的机会也更多,这增加了他们的就业机会。

  8. 创新和技术领先地位:一些发达国家在技术创新方面处于领先地位,这意味着它们有更多的高薪岗位和高级职位,这些职位往往更能抵御经济波动的影响。

  9. 经济稳定性:虽然全球经济都有周期性的波动,但是一些发达国家的经济相对稳定,即使在经济不景气的时候,也能通过各种政策措施来缓解失业问题。

图片

图片

国内大批程序员高度集中在应用层居多,在应用层框架和语法使用者居多,加上环境的影响往往比较重视快,加班,而专研做底层的往往很少,比如一个JAVA开发,springboot ,idea intellij ,open jdk,oracle jdk都是老外在占据并且主导整个全球市场,面对全球用户,而国内的java表们往往是应用层多,还受环境污染,觉得JAVA牛逼=我牛逼的思想腐蚀,PHP垃圾=他也垃圾的影响,相反参与研发open jdk,idea,spring全家桶的JAVA程序员很少,在这种环境下经济波动一影响,往往饿饭,跟我一样捡垃圾过日子。

而国外程序员往往深耕某领域比较深入,也都是几十年的经验,就算只玩应用层框架,也都无的风声水起,比如php。

图片

图片

还获得了几千万支持。

图片

他们的土壤和环境要比国内好很多,在国内PHP早就啥也不是了,但国外人家就玩的一套一套的。

同时国外的商业软件环境也非常好,这些商业软件都需要数学,物理,化学,电力,通信,机械,电子,化工等等专业知识来实现的商业软件,下面看看吧,下以商业软件大部分都是来源于加拿大公司的商业软件,其中国内不少大型单位还是他们公司的客户购买他们的商业软件和服务。

电力实时仿真系统

图片

https://www.opal-rt.com/zh-hans/software-rt-lab/

数字仿真器

图片

图片

https://www.opal-rt.com/zh-hans/systems-hypersim/

图片

图片

这家公司的客户

图片

这家公司的产品

图片

领先的电力系统分析工具

图片

https://www.dsatools.com/

这家公司的客户:浙江大学,太原理工大学,中国易核电力工程有限公司

https://www.dsatools.com/news/

图片

图片

https://www.dsatools.com/partners/

电磁设备提供设计和建模软件

https://www.infologicdesign.co.uk/

图片

图片

Maple数学软件

图片

图片

图片

https://cn.maplesoft.com/products/Maple/features/

图片

图片

图片

图片

图片

图片

图片

图片

全球强大的电影特效软件产品

https://www.sidefx.com/tutorials/

图片

https://www.meetup.com/pro/houdini/

他们公司的招聘

图片

https://www.sidefx.com/careers/

土木、采矿和岩土工程2D 3D 软件

https://www.rocscience.com/software

图片

图片

图片

图片

防真软件

图片

图片

图片

https://www.simscale.com/

世界领先的接地,雷击和电磁干扰分析技术

https://www.sestech.com/zh/Home/About

图片

他们公司的客户

图片

图片

图片

图片

图片

图片

https://www.sestech.com/zh/Training/CertifiedUsersList

图片

QNX系统

https://blackberry.qnx.com/en/industries/industrial-control

图片

QNX的应用范围极广,包含了:控制保时捷跑车的音乐和媒体功能、福特汽车的SYNC 3车载系统、核电站和美国陆军无人驾驶Crusher坦克的控制系统,还有BlackBerry PlayBook和操作系统。[2]

图片

此系统的应用领域

图片

BlackBerry QNX® 是值得信赖的商用操作系统、虚拟机管理程序、开发工具、支持和服务供应商,所有产品均专为全球最关键的嵌入式系统而构建。®BlackBerry QNX 可帮助客户简化开发工作,更高效地推出安全可靠的系统。我们的技术受到超过 2.35 亿辆汽车的信赖,并部署在全球各行各业的嵌入式系统中,包括航空航天和国防、汽车、商用车辆、重型机械、工业控制、医疗、铁路和机器人。BlackBerry QNX 成立于 1980 年,总部位于加拿大渥太华,并于 2010 年被 BlackBerry 收购。

此系统的客户https://blackberry.qnx.com/en/partners/blackberry-qnx-partners

图片

此系统的应用开发

https://www.qnx.com/developers/docs/8.0/com.qnx.doc.neutrino.prog/topic/process_Sample_using_wait.html

图片

/*  * waitchild.c * * This is an example of a parent process that creates some child * processes and then waits for them to terminate. The waiting is * done using wait(). When a child process terminates, the * wait() function returns.*/
#include <spawn.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/wait.h>
main(int argc, char **argv){    char                *args[] = { "child", NULL };    int                 i, status;    pid_t               pid;    struct inheritance  inherit;
    // create 3 child processes    for (i = 0; i < 3; i++) {        inherit.flags = 0;        if ((pid = spawn("child", 0, NULL, &inherit, args, environ)) == -1)            perror("spawn() failed");        else            printf("spawned child, pid = %d\n", pid);    }
    while (1) {        if ((pid = wait(&status)) == -1) {            perror("wait() failed (no more child processes?)");            exit(EXIT_FAILURE);        }        printf("a child terminated, pid = %d\n", pid);                if (WIFEXITED(status)) {            printf("child terminated normally, exit status = %d\n",                WEXITSTATUS(status));        } else if (WIFSIGNALED(status)) {            printf("child terminated abnormally by signal = %X\n",                WTERMSIG(status));        } // else see documentation for wait() for more macros    }}
#include <stdio.h>#include <stdlib.h>#include <pthread.h>
void*  function( void*  arg ){   printf( "This is thread %d\n", pthread_self() );   return( 0 );}
int main( void ){   pthread_attr_t attr;
   pthread_attr_init( &attr );   pthread_attr_setdetachstate(      &attr, PTHREAD_CREATE_DETACHED );   pthread_create( NULL, &attr, &function, NULL );
   /* Allow threads to run for 60 seconds. */   sleep( 60 );   return EXIT_SUCCESS;}
#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <stdlib.h>
char buffer[] = { "A text record to be written" };
int main( void ){    int  fd;    int  size_written;
    /* open a file for output          */    /* replace existing file if it exists */    fd = creat( "myfile.dat", S_IRUSR | S_IWUSR );
    /* write the text              */    size_written = write( fd, buffer,              sizeof( buffer ) );
    /* test for error              */    if( size_written != sizeof( buffer ) ) {        perror( "Error writing myfile.dat" );        return EXIT_FAILURE;    }
    /* close the file              */    close( fd );
    return EXIT_SUCCESS;}
#include <string.h>#include <stdio.h>#include <sys/json.h>    typedef struct {    const char *path;    int type;    long long size;} info_t;
typedef struct {    int id;    info_t info;} file_t;
bool extract_file_info(const char *str, file_t *file_info){    json_decoder_t *dec = json_decoder_create();    json_decoder_parse_json_str(dec, str);        // Pre-initialise the structure so that omitted optional fields have default values    memset(file_info, 0, sizeof(*file_info));    file_info->info.type = 1;
    // Extract data from the decoder. One can choose to check each call for success if    // it's important to report precise errors. Alternatively, as is done here, one can     // ignore intermediate errors and just check the final status.    json_decoder_push_object(dec, NULL, false);    json_decoder_get_int(dec, "id", &file_info->id, false);        json_decoder_push_object(dec, "info", false);    json_decoder_get_string(dec, "path", &file_info->info.path, false);    // The 'type' is optional. If not present, the call will fail but will not affect    // the decoder's status. We've initialized the field to the value it should have    // if not present, so it doesn't have to be there.    json_decoder_get_int(dec, "type", &file_info->info.type, true);    // The 'size' is also optional.    json_decoder_get_int_ll(dec, "size", &file_info->info.size, true);
    json_decoder_error_t status = json_decoder_get_status(dec, true);
    // While one might usually use a decoder to decode multiple strings, we just free it    json_decoder_destroy(dec);
    // If everything above has succeeded, json_decoder_get_status() will return     // JSON_DECODER_OK    if ( status != JSON_DECODER_OK ) {        printf("Data extraction failed\n");        return false;    }
    return true;}

虚拟飞机,船舶等模拟器

https://flightsim.to/(这个网站好玩)

图片

飞机及模拟器项目软件

图片

其旗舰产品 VAPS 和 VAPS XT 生成的代码已部署到全球数百架飞机上,我们的嵌入式图形软件已在全球 30 多个主要飞机项目中获得认证。

https://www.presagis.com/en/product/ua-accelerator/

图片

图片

图片

图片

限于篇幅就写这么多了,其中大家应该也看了C/C++编程语言的威力了,比如一个JAVA配套的东西open jdk,oracle jdk,spring全家桶,idea intellij等下面的东西全是欧美程序员在占据并且深耕了多年,形成了极强的技术优势和国际市场,积累了底层C/C++/ASM的经验几十年,在以英语为国际通用语言的优势加持,更容易的触达国际市场,不少公司已经成立了几十年,客户遍布全球,编译器,解释器,IDE,操作系统,芯片,指令集,商业软件,工业科技,航天飞机等全是老外在折腾,在占据主导大份额市场,对于经济波动抵御能力强,毕竟用户是整个全球市场,而国内一堆程序员全挤在小小的应用层里扎堆,只面对国内自已的用户小市场挤来挤去,还搞不过人家,失业饿肚子,跟我一样饿肚子的程序员太多了。

真要真正的搞技术,就要明白应用层目前太挤了,需求跟不上人才供给,最好往下走,先去消化阅读分析github上的大型C/C++项目积累经验,才有可能有机会做上面列举的商业软件,也才有能力去参与老外的开源项目,也才有更多的可能和机会。

图片

图片

欢迎友善讨论和评论。

相关文章:

WEB领域是不是黄了还是没黄

进入2024年后&#xff0c;WEB领域大批老表失业&#xff0c;一片哀嚎&#xff0c;个个饿的鬼叫狼嚎&#xff0c;为啥呢&#xff0c;下面是我个人的见解和看法。 中国程序员在应用层的集中 市场需求&#xff1a;中国的互联网行业在过去几年中经历了爆炸性增长&#xff0c;尤其是…...

Android系统:系统架构

文章目录 分层设计分块设计总结 分层设计 自上而下分为&#xff1a;应用层、应用架构层、系统运行层、硬件抽象层、Linux内核层 应用层 封装一系列系统App 应用架构层(Framework) 封装一系列运行App需要的Java框架 提供App开发需要的API 系统运行层(Libraries) 封装一系…...

NCNN 源码(1)-模型加载-数据预处理-模型推理

参考 ncnn 第一个版本的代码。 0 整体流程 demo&#xff1a;squeezenet ncnn 自带的一个经典 demo&#xff1a;squeezenet 的代码: // 网络加载 ncnn::Net squeezenet; squeezenet.load_param("squeezenet_v1.1.param"); squeezenet.load_model("squeezenet_…...

重修设计模式-结构型-享元模式

重修设计模式-结构型-享元模式 复用不可变对象&#xff0c;节省内存 享元模式&#xff08;Flyweight Pattern&#xff09;核心思想是通过共享对象方式&#xff0c;达到节省内存和提高性能的目的。享元对象需是不可变对象&#xff0c;因为它会被多处代码共享使用&#xff0c;要避…...

JavaScript 运算符

JavaScript 中的运算符可以根据其功能和用途分为几类。以下是主要的运算符类型及其用法&#xff1a; 1. 算术运算符 用于执行基本的数学运算。 : 加法 let sum 5 3; // 8- : 减法 let difference 5 - 3; // 2* : 乘法 let product 5 * 3; // 15/ : 除法 let quotient 5…...

3.js - 运动曲线

这个球&#xff0c;绕着这个红色的线圈转 代码 import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControlslet scene,camera,renderer,controls nulllet moon,earth null// 根据&#xff0c;一系列的点&#xff0c;创建曲线 le…...

免费ppt模板哪里找?职场必备这些利器

一眨眼&#xff0c;9月份的尾声渐近&#xff0c;无论是学生还是职场人士&#xff0c;都开始准备着新一轮的演讲和报告。在这个忙碌的时期&#xff0c;一份精美的PPT模板能够大幅提升你的工作效率&#xff0c;让你的演示更加引人入胜。 不用担心高昂的版权费用&#xff0c;市场…...

wampserve 配置本地域名,出现错误

概述 今天更换了电脑&#xff0c;在本地安装和配置docker的时候&#xff0c;想用自定义域名访问NGINX容器&#xff0c;127.0.0.1和localhost都可以访问&#xff0c;但是自定义域名无法访问&#xff0c; 接着去捯饬已经使用的wampserver的集成环境&#xff0c;出现了同样的问题…...

MySQL慢查询优化指南

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 当遇到慢查询问题时&#xff0c;不仅影响服务效率&#xff0c;还可能成为系统瓶颈。作为一位软件工程师&#xff0c;掌握MySQL慢查询优化技巧至关重要。今天&#xff0c;我们就来一场“数据库加速之旅…...

怎么录制游戏视频?精选5款游戏录屏软件

对于热爱游戏的你来说&#xff0c;记录游戏中的精彩瞬间并分享给朋友或粉丝&#xff0c;无疑是一种享受。然而&#xff0c;在众多录屏软件中&#xff0c;如何选择最适合你的那一款&#xff1f;今天&#xff0c;我们就为大家精选了五款游戏录屏软件&#xff0c;需要的朋友快来选…...

论文阅读 - MDFEND: Multi-domain Fake News Detection

https://arxiv.org/pdf/2201.00987 目录 ABSTRACT INTRODUCTION 2 RELATED WORK 3 WEIBO21: A NEW DATASET FOR MFND 3.1 Data Collection 3.2 Domain Annotation 4 MDFEND: MULTI-DOMAIN FAKE NEWS DETECTION MODEL 4.1 Representation Extraction 4.2 Domain Gate 4.…...

LabVIEW软件出现Bug如何解决

在LabVIEW开发中&#xff0c;程序出现bug是不可避免的。无论是小型项目还是复杂系统&#xff0c;调试与修复bug都是开发过程中的重要环节。下文介绍如何有效解决LabVIEW软件中的bug&#xff0c;包括常见错误类型、调试工具、错误处理机制。 1. 常见Bug类型分析 在LabVIEW中&am…...

【数据结构-栈】力扣844. 比较含退格的字符串

给定 s 和 t 两个字符串&#xff0c;当它们分别被输入到空白的文本编辑器后&#xff0c;如果两者相等&#xff0c;返回 true 。# 代表退格字符。 注意&#xff1a;如果对空文本输入退格字符&#xff0c;文本继续为空。 示例 1&#xff1a; 输入&#xff1a;s “ab#c”, t “…...

DataFrame生成excel后为什么多了一行数字

问题描述 python查询数据生成excel文件&#xff0c;生成的excel多了第一行数字索引&#xff0c;1,2,3,4,5...... 代码&#xff1a; df pd.DataFrame(data)df.to_excel(filename, sheet_name用户信息表, indexFalse) 解决&#xff1a; 原理也很简单&#xff0c;就是设置个参…...

linux 内存屏障(barrier)分析

谈起内存屏障,大家感觉这个"玩意儿"很虚,不太实际,但是内核代码中又广泛地可以看到起身影。内存屏障,英文barrier,这个"玩意儿"它还不太好去定义它。barrier,中文翻译为栅栏&#xff0c;栅栏大家都见过,现实生活中就是防止他人或者动物非法闯入而用来进行隔…...

【人工智能】Transformers之Pipeline(十九):文生文(text2text-generation)

目录 一、引言 二、文生文&#xff08;text2text-generation&#xff09; 2.1 概述 2.2 Flan-T5: One Model for ALL Tasks 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数 ​​​​​​​ 2.3.3 pipeline返回参数 ​​​​​​​​​​​…...

如何使用ssm实现基于VUE的儿童教育网站的设计与实现+vue

TOC ssm676基于VUE的儿童教育网站的设计与实现vue 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全…...

MODBUS TCP 转 CANOpen

产品概述 SG-TCP-COE-210 网关可以实现将 CANOpen 接口设备连接到 MODBUS TCP 网络中。用户不需要了解具体的 CANOpen 和 Modbus TCP 协议即可实现将CANOpen 设备挂载到 MODBUS TCP 接口的 PLC 上&#xff0c;并和 CANOpen 设备进行数据交互。 产品特点 &#xf…...

vue2+elementUI实现handleSelectionChange批量删除-前后端

功能需求&#xff1a;实现选中一个或多个执行批量删除操作 在elementUI官网选择一个表格样式模板&#xff0c;Element - The worlds most popular Vue UI framework 这里采用的是 将代码复制到前端&#xff0c;这里是index.vue <template><el-button type"dang…...

LLMs之OCR:llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略

LLMs之OCR&#xff1a;llm_aided_ocr(基于LLM辅助的OCR项目)的简介、安装和使用方法、案例应用之详细攻略 目录 llm_aided_ocr的简介 1、特性 2、详细技术概览 PDF处理和OCR PDF到图像转换 OCR处理 文本处理流程 分块创建 错误校正与格式化 重复内容移除 标题和页码…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…...