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

Java 大视界 -- Java 大数据在智能安防视频监控中的异常事件快速响应与处理机制(273)

       💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也期待你毫无保留地分享独特见解,愿我们于此携手成长,共赴新程!💖

在这里插入图片描述

本博客的精华专栏:
【大数据新视界】 【Java 大视界】 【智创 AI 新视界】
社区:【青云交技术变现副业福利商务圈】和【架构师社区】的精华频道:
【福利社群】 【今日看点】 【今日精品佳作】 【每日成长记录】


Java 大视界 -- Java 大数据在智能安防视频监控中的异常事件快速响应与处理机制(273)

  • 引言:
  • 正文:
      • 一、智能安防视频监控的分布式数据处理架构
        • 1.1 多源异构数据采集与传输体系
        • 1.2 边缘计算与云端协同处理架构
      • 二、Java 实现异常事件检测的核心算法与工程实践
        • 2.1 基于 YOLOv8 的实时目标检测与跟踪
        • 2.2 基于 LSTM 的异常行为时序预测
      • 三、智能安防系统的实战案例与技术突破
        • 3.1 北京大兴国际机场智能安防项目
        • 3.2 上海地铁智慧运维平台
      • 四、系统优化与前沿技术探索
        • 4.1 高并发场景性能调优策略
        • 4.2 联邦学习与隐私保护实践
  • 结束语:
  • 上一篇文章推荐:
  • 下一篇文章预告:
  • 🗳️参与投票和联系我:

引言:

嘿,亲爱的 Java 和 大数据爱好者们,大家好!在深圳平安国际金融中心的安防指挥室,1600 路 4K 摄像头的实时画面正通过 Java 构建的智能安防系统高速流转。当系统捕捉到某楼层消防通道出现 “物品堵塞” 异常时,从视频帧解析、AI 模型识别到联动物业响应,全流程仅耗时 1.2 秒 —— 这是 Java 技术在智能安防领域创造的 “黄金响应速度”。根据《2024 全球智能安防产业发展报告》,全球安防视频数据量正以年均 52% 的速度增长,传统人工巡检模式下异常事件平均响应时间长达 18 分钟,而基于 Java 的大数据分析系统可将响应效率提升 900 倍 。从城市轨道交通的拥挤预警,到工业园区的设备故障预判,Java 凭借卓越的高并发处理能力与 AI 生态整合优势,正在重新定义智能安防的技术标准。

在这里插入图片描述

正文:

在智慧城市建设加速推进的背景下,安防视频监控面临 “数据爆炸式增长、场景复杂化、响应即时化” 的三重挑战。传统依赖人工轮巡与简单规则匹配的安防模式,已无法满足海量视频数据的实时分析需求。Java 与大数据技术的深度融合,为异常事件的 “精准感知 — 智能研判 — 分级处置” 提供了全链路技术方案。本文将结合 “北京大兴国际机场智能安防系统”“上海地铁智慧运维平台” 等国家级标杆案例,从底层架构设计到核心算法实现,全面解析 Java 如何赋能安防监控的智能化变革。

一、智能安防视频监控的分布式数据处理架构

1.1 多源异构数据采集与传输体系

智能安防系统需构建覆盖全域的感知网络,实现多维度数据实时采集:

数据类型采集终端传输协议技术实现单日数据量
高清视频流4K/8K 网络摄像机、无人机RTSP/RTMP/H.265Java Netty 异步通信框架3.2PB
环境传感数据红外对射、温湿度传感器MQTT/CoAPSpring Cloud IoT 集成80GB
GIS 地理信息电子地图、定位系统REST APIGeotools+Java 集成30GB
历史日志数据数据库、文件存储系统JDBC/SFTPApache Flume 数据采集1.5TB
1.2 边缘计算与云端协同处理架构

采用 “边缘前置处理 + 云端深度分析” 的分层架构,实现数据的高效流转:

在这里插入图片描述

  • 边缘侧优化:基于 Java OpenCV 实现每秒 25 帧的实时抽帧,通过 JNI 调用 Intel® OpenVINO™加速库,单节点可同时处理 120 路 1080P 视频流
  • 云端处理:Spark 3.3 集群(4000 节点)支持 PB 级数据秒级处理,采用 Dynamic Resource Allocation 动态分配资源,任务调度延迟 < 50ms

二、Java 实现异常事件检测的核心算法与工程实践

2.1 基于 YOLOv8 的实时目标检测与跟踪

利用 DeepJavaLibrary 集成 YOLOv8 模型,实现高精度多目标实时检测:

import org.deeplearning4j.nn.modelimport.StandardModelSerializer;  
import org.nd4j.linalg.api.ndarray.INDArray;  
import org.opencv.core.*;  
import org.opencv.imgproc.Imgproc;  
import org.opencv.videoio.VideoCapture;  public class YoloV8ObjectDetector {  private static final String MODEL_PATH = "hdfs://models/yolov8s.onnx";  private static final float CONFIDENCE_THRESHOLD = 0.7f;  private static final float NMS_THRESHOLD = 0.5f;  public static void main(String[] args) {  // 加载预训练模型  ComputationGraph model = StandardModelSerializer.loadComputationGraph(MODEL_PATH);  VideoCapture cap = new VideoCapture("rtsp://camera_ip:554/live");  Mat frame = new Mat();  while (cap.read(frame)) {  // 图像预处理:缩放至640x640,归一化  Mat processedFrame = preprocess(frame);  INDArray input = convertToTensor(processedFrame);  // 模型推理  INDArray[] outputs = model.output(false, input);  List<Detection> detections = postProcess(outputs[0], frame.width(), frame.height());  // 绘制检测框与标签  for (Detection det : detections) {  if (det.confidence > CONFIDENCE_THRESHOLD) {  Rect box = det.boundingBox;  Imgproc.rectangle(frame, box, new Scalar(0, 255, 0), 2);  String label = String.format("%s: %.2f", det.className, det.confidence);  Imgproc.putText(frame, label, new Point(box.x, box.y - 5), FONT_HERSHEY_SIMPLEX, 0.5, new Scalar(0, 255, 0), 2);  }  }  // 显示结果  Imgproc.imshow("YOLOv8 Detection", frame);  if (waitKey(1) == 'q') break;  }  }  // 图像预处理方法(含尺寸调整、归一化)  private static Mat preprocess(Mat frame) {  Mat resized = new Mat();  Imgproc.resize(frame, resized, new Size(640, 640));  resized.convertTo(resized, CvType.CV_32F, 1.0/255.0);  return resized;  }  // 将OpenCV Mat转换为模型输入张量  private static INDArray convertToTensor(Mat frame) {  // 通道转换、维度扩展等操作  return inputTensor;  }  // 后处理:解析输出张量,执行NMS非极大值抑制  private static List<Detection> postProcess(INDArray output, int width, int height) {  // 解析检测结果,过滤低置信度框  // 执行NMS算法去除重叠框  return detectionList;  }  
}  class Detection {  Rect boundingBox;  float confidence;  String className;  
}  
2.2 基于 LSTM 的异常行为时序预测

通过 Spark Streaming 与 LSTM 模型结合,实现异常行为的提前预警:

import org.apache.spark.streaming.api.java.JavaDStream;  
import org.apache.spark.streaming.api.java.JavaStreamingContext;  
import org.tensorflow.Graph;  
import org.tensorflow.Session;  
import org.tensorflow.Tensor;  public class AbnormalBehaviorPredictor {  private static final String LSTM_MODEL_PATH = "hdfs://models/lstm_abnormal_model.pb";  private static final int SEQUENCE_LENGTH = 10; // 时序窗口长度  public static void main(String[] args) {  JavaStreamingContext jssc = new JavaStreamingContext(spark.sparkContext(), Durations.seconds(5));  JavaDStream<String> eventStream = jssc.socketTextStream("localhost", 9999);  eventStream.mapToDStream(rdd -> {  // 将数据流转换为时序序列  JavaList<Float[]> sequences = rdd.mapToPair(line -> {  String[] parts = line.split(",");  return new Tuple2<>(parts[0], new float[]{Float.parseFloat(parts[1]), Float.parseFloat(parts[2])}); // 假设数据为x,y坐标  }).groupByKey().mapValues(iter -> {  List<Float[]> list = new ArrayList<>();  Iterators.asStream(iter).limit(SEQUENCE_LENGTH).forEach(list::add);  return list.toArray(new Float[0][]);  }).values().collect();  return JavaSparkContext.fromSparkContext(rdd.context()).parallelize(sequences);  }).foreachRDD(rdd -> {  rdd.foreach(sequence -> {  float[][] inputData = new float[1][SEQUENCE_LENGTH * 2]; // 假设每个时间步含2个特征  int index = 0;  for (Float[] step : sequence) {  inputData[0][index++] = step[0];  inputData[0][index++] = step[1];  }  try (Graph graph = new Graph()) {  Files.copy(Paths.get(LSTM_MODEL_PATH), graph::importGraphDef);  try (Session session = new Session(graph)) {  try (Tensor<Float> inputTensor = Tensor.create(inputData)) {  Tensor<Float> output = session.runner()  .feed("input_layer", inputTensor)  .fetch("output_layer")  .run().get(0);  float anomalyScore = output.data().getFloat(0);  if (anomalyScore > 0.8) {  // 触发异常报警  alertManager.sendAlert("Abnormal Behavior Predicted");  }  }  }  } catch (IOException e) {  // 日志记录与异常处理  logger.error("Model inference failed", e);  }  });  });  jssc.start();  jssc.awaitTermination();  }  
}  

三、智能安防系统的实战案例与技术突破

3.1 北京大兴国际机场智能安防项目

大兴机场部署的 Java 安防系统实现对 70 万㎡区域的全域实时监控:

  • 技术架构:

    • 边缘层:1200 台边缘服务器运行 Java OpenCV 程序,完成视频实时抽帧与目标初筛
    • 云端:Spark 3.3 集群(5000 节点)处理 3000 路 4K 视频流,异常检测延迟 < 120ms
    • 应用层:Spring Cloud 微服务联动 800 + 安防设备,实现自动化响应
  • 核心成效:

    指标传统方案Java 方案数据来源
    周界入侵检测率89%99.6%民航局安全评估报告
    异常响应时间12 分钟1.5 秒大兴机场技术白皮书
    存储成本年均 4500 万年均 1400 万机场年度财务报告
3.2 上海地铁智慧运维平台

上海地铁基于 Java 构建的系统覆盖 460 个站点、28000 个摄像头:

  • 创新实践:
    • 跨镜追踪:采用 Java 实现 DeepSORT 算法,跨摄像头目标追踪准确率达 94.2%
    • 实时预警:Flink 流计算结合 LSTM 模型,对 “乘客摔倒”“物品遗留” 等行为预警准确率 97.3%
    • 智能巡检:Java 机器人调度系统自动执行设备巡检任务,故障发现效率提升 85%
  • 典型案例:在某次 “站台人员长时间徘徊” 事件中,系统 0.8 秒内识别异常,联动安保人员 40 秒内抵达现场,较人工响应提速 92%

在这里插入图片描述

四、系统优化与前沿技术探索

4.1 高并发场景性能调优策略

针对海量视频流处理,采用多级优化方案:

  • 缓存优化:Caffeine 本地缓存 + Redis Cluster 分布式缓存,热点视频数据命中率达 99.2%
  • 异步处理:Guava ListeningExecutorService 实现异步任务调度,配合 Java 虚拟线程(Project Loom),系统吞吐量提升 4 倍
  • 硬件加速:通过 JNA 调用 NVIDIA CUDA 库,结合 TensorRT 推理优化,AI 模型处理速度提升 600%
4.2 联邦学习与隐私保护实践

构建 Java 驱动的联邦学习框架,实现跨区域数据协同分析:

在这里插入图片描述

结束语:

亲爱的 Java 和 大数据爱好者们,当城市的每个角落都布满智能摄像头,当每秒数万帧画面在 Java 系统中高速流转,智能安防早已超越 “监控” 的范畴,成为守护城市安全的数字卫士。每一次异常事件的精准识别,每一次应急响应的毫秒必争,背后都是无数行 Java 代码的精密协作与技术创新。作为深耕智能安防领域十余年的技术从业者,我们始终坚信:技术的终极价值,在于用代码守护万家灯火,以创新筑牢安全防线

亲爱的 Java 和 大数据爱好者,在智能安防项目中,你认为多源数据融合(如视频 + 传感器)的最大技术难点是什么?欢迎大家在评论区或【青云交社区 – Java 大视界频道】分享你的见解!

为了让后续内容更贴合大家的需求,诚邀各位参与投票,下一篇文章,你希望深入了解 Java 在安防领域的哪个方向?快来投出你的宝贵一票 。


上一篇文章推荐:

  1. Java 大视界 – Java 大数据在智能政务舆情监测与引导中的情感分析与话题挖掘技术(272)(最新)

下一篇文章预告:

  1. Java 大视界 – Java 大数据在智能教育学习社区用户互动分析与社区活跃度提升中的应用(274)(更新中)

🗳️参与投票和联系我:

返回文章

相关文章:

Java 大视界 -- Java 大数据在智能安防视频监控中的异常事件快速响应与处理机制(273)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

【数据库】安全性

数据库安全性控制的常用方法&#xff1a;用户标识和鉴定、存取控制、视图、审计、数据加密。 1.用户标识与鉴别 用户标识与鉴别(Identification & Authentication)是系统提供的最外层安全保护措施。 2.存取控制 2.1自主存取控制(简称DAC) (1)同一用户对于不同的数据对…...

【图像处理入门】4. 图像增强技术——对比度与亮度的魔法调节

摘要 图像增强是改善图像视觉效果的核心技术。本文将详解两种基础增强方法&#xff1a;通过直方图均衡化拉伸对比度&#xff0c;以及利用伽马校正调整非线性亮度。结合OpenCV代码实战&#xff0c;学会处理灰度图与彩色图的不同增强策略&#xff0c;理解为何彩色图像需在YUV空间…...

D2-基于本地Ollama模型的多轮问答系统

本程序是一个基于 Gradio 和 Ollama API 构建的支持多轮对话的写作助手。相较于上一版本&#xff0c;本版本新增了对话历史记录、Token 计数、参数调节和清空对话功能&#xff0c;显著提升了用户体验和交互灵活性。 程序通过抽象基类 LLMAgent 实现模块化设计&#xff0c;当前…...

HALCON 深度学习训练 3D 图像的几种方式优缺点

HALCON 深度学习训练 3D 图像的几种方式优缺点 ** 在计算机视觉和工业检测等领域&#xff0c;3D 图像数据的处理和分析变得越来越重要&#xff0c;HALCON 作为一款强大的机器视觉软件&#xff0c;提供了多种深度学习训练 3D 图像的方式。每种方式都有其独特的设计思路和应用场…...

123网盘SDK-npm包已发布

前言 大家好&#xff01;今天想和大家分享一个我最近开源的项目&#xff1a;123 网盘 SDK。这个项目已经在 GitHub 开源&#xff0c;最近已经发布到 NPM&#xff0c;可以通过 npm i ked3/pan123-sdk 直接安装使用。 项目背景&#xff1a;为什么要开发这个 SDK&#xff1f; 在…...

强制卸载openssl-libs导致系统异常的修复方法

openssl升级比较麻烦&#xff0c;因为很多软件都会依赖它&#xff0c;一旦强制卸载(尤其是openssl-libs.rpm)&#xff0c;就可能导致很多命令不可用&#xff0c;即使想用rpm命令重新安装都不行。 所以&#xff0c;除非万不得已&#xff0c;否则不要轻易去卸载openssl-libs。而且…...

乐播视频v4.0.0纯净版体验:高清流畅的视听盛宴

先放软件下载链接:夸克网盘下载 探索乐播视频v4.0.0纯净版&#xff1a;畅享精彩视听之旅 乐播视频v4.0.0纯净版为广大用户带来了优质的视频观看体验&#xff0c;是一款值得关注的视频类软件。 这款软件的资源丰富度令人惊喜&#xff0c;涵盖了电影、电视剧、综艺、动漫等多种…...

Linux 命令全讲解:从基础操作到高级运维的实战指南

Linux 命令全讲解&#xff1a;从基础操作到高级运维的实战指南 前言 Linux 作为开源操作系统的代表&#xff0c;凭借其稳定性、灵活性和强大的定制能力&#xff0c;广泛应用于服务器、云计算、嵌入式设备等领域。对于开发者、运维工程师甚至普通用户而言&#xff0c;熟练掌握…...

FreeRTOS的简单介绍

一、FreeRTOS介绍 FreeRTOS并不是实时操作系统&#xff0c;因为它是分时复用的 利用CubeMX快速移植 二、快速移植流程 1. 在 SYS 选项里&#xff0c;将 Debug 设为 Serial Wire &#xff0c;并且将 Timebase Source 设为 TIM2 &#xff08;其它定时器也行&#xff09;。为何…...

DeepSeek模型安全部署与对抗防御全攻略

引言 随着DeepSeek模型在企业关键业务中的深入应用,模型安全已成为不可忽视的重要议题。本文将从实际攻防对抗经验出发,系统剖析DeepSeek模型面临的安全威胁,提供覆盖输入过滤、输出净化、权限控制等环节的立体防御方案,并分享红蓝对抗中的最佳实践,助力企业构建安全可靠…...

Docker容器使用手册

Docker是一种轻量级、可移植、自给自足的软件运行环境&#xff0c;用于打包和运行应用程序。它允许开发者将应用及其所有依赖打包成一个镜像&#xff08;Image&#xff09;&#xff0c;然后基于这个镜像创建出容器&#xff08;Container&#xff09;来运行。与虚拟机相比不需要…...

深入解析C++引用:从别名机制到函数特性实践

1.C引用 1.1引用的概念和定义 引用不是新定义⼀个变量&#xff0c;而是给已存在变量取了⼀个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同⼀块内存空间。比如四大名著中林冲&#xff0c;他有一个外号叫豹子头&#xff0c;类比到C里就…...

Fuse.js:打造极致模糊搜索体验

Fuse.js 完全学习指南&#xff1a;JavaScript模糊搜索库 &#x1f3af; 什么是 Fuse.js&#xff1f; Fuse.js 是一个轻量、强大且无依赖的JavaScript模糊搜索库。它提供了简单而强大的模糊搜索功能&#xff0c;可以在任何 JavaScript 环境中使用&#xff0c;包括浏览器和 Nod…...

MyBatis分页插件(以PageHelper为例)与MySQL分页语法的关系

MyBatis分页插件&#xff08;以PageHelper为例&#xff09;与MySQL分页语法关系总结 MyBatis的分页插件&#xff08;如PageHelper&#xff09;底层实现依赖于数据库的分页语法。对于MySQL数据库来说&#xff0c;其分页逻辑最终会转化为LIMIT语句&#xff0c;下面展开详细说明&…...

CentOS 7.9 安装 宝塔面板

在 CentOS 7.9 上安装 宝塔面板&#xff08;BT Panel&#xff09; 的完整步骤如下&#xff1a; 1. 准备工作 系统要求&#xff1a; CentOS 7.x&#xff08;推荐 7.9&#xff09;内存 ≥ 1GB&#xff08;建议 2GB&#xff09;硬盘 ≥ 20GBroot 权限&#xff08;需使用 root 用户…...

使用Redis作为缓存优化ElasticSearch读写性能

在现代数据密集型应用中&#xff0c;ElasticSearch凭借其强大的全文搜索能力成为许多系统的首选搜索引擎。然而&#xff0c;随着数据量和查询量的增长&#xff0c;ElasticSearch的读写性能可能会成为瓶颈。本文将详细介绍如何使用Redis作为缓存层来显著提升ElasticSearch的读写…...

项目交付后缺乏回顾和改进,如何持续优化

项目交付后缺乏回顾和改进可通过建立定期回顾机制、实施反馈闭环流程、开展持续学习和培训、运用数据驱动分析、培养持续改进文化来持续优化。 其中&#xff0c;实施反馈闭环流程尤其重要&#xff0c;它能够确保反馈信息得到有效传递、处理与追踪&#xff0c;形成良好的改进生态…...

从0开始学习R语言--Day15--非参数检验

非参数检验 如果在进行T检验去比较两组数据差异时&#xff0c;假如数据里存在异常值&#xff0c;会把数据之间的差异拉的很大&#xff0c;影响正常的判断。那么这个时候&#xff0c;我们可以尝试用非参数检验的方式来比较数据。 假设我们有A&#xff0c;B两筐苹果&#xff0c…...

Linux或者Windows下PHP版本查看方法总结

确定当前服务器或本地环境中 PHP 的版本,可以通过以下几种方法进行操作: 1. 通过命令行检查 这是最直接且常用的方法,适用于本地开发环境或有 SSH 访问权限的服务器。 方法一:php -v 命令 php -v输出示例:PHP 8.1.12 (cli) (built: Oct 12 2023 12:34:56) (NTS) Copyri…...

EC2 实例详解:AWS 的云服务器怎么玩?☁️

弹性计算、灵活计费、全球可用&#xff0c;AWS EC2 全攻略 在 AWS 生态中&#xff0c;有两个核心服务是非常关键的&#xff0c;一个是 S3&#xff08;对象存储&#xff09;&#xff0c;另一个就是我们今天的主角 —— Amazon EC2&#xff08;Elastic Compute Cloud&#xff09…...

第三发 DSP 点击控制系统

背景 ​ 在第三方 DSP 上投放广告&#xff0c;需要根据 DP Link 的点击次数进行控制。比如当 DP Link 达到 5000 后&#xff0c;后续的点击将不能带来收益&#xff0c;但是后续的广告却要付出成本。因此需要建立一个 DP Link 池&#xff0c;当 DP Link 到达限制后&#xff0c;…...

saveOrUpdate 有个缺点,不会把值赋值为null,解决办法

针对 MyBatis-Plus 的 saveOrUpdate 方法无法将字段更新为 null 的问题&#xff0c;这是因为 MyBatis-Plus 默认会忽略 null 值字段。以下是几种解决方案&#xff1a; 方案 1&#xff1a;使用 update(entity, wrapper) 手动指定更新条件 原理&#xff1a;通过 UpdateWrapper …...

Java面试:企业协同SaaS中的技术挑战与解决方案

Java面试&#xff1a;企业协同SaaS中的技术挑战与解决方案 面试场景 在一家知名互联网大厂&#xff0c;面试官老王正在对一位应聘企业协同SaaS开发职位的程序员谢飞机进行技术面试。 第一轮提问&#xff1a;基础技术 老王&#xff1a;谢飞机&#xff0c;你好。首先&#xf…...

【笔记】在 MSYS2 MINGW64 环境中降级 NumPy 2.2.6 到 2.2.4

&#x1f4dd; 在 MSYS2 MINGW64 环境中降级 NumPy 到 2.2.4 ✅ 目标说明 在 MSYS2 的 MINGW64 工具链环境中&#xff0c;将 NumPy 从 2.2.6 成功降级到 2.2.4。 &#x1f9f0; 环境信息 项目内容操作系统Windows 11MSYS2 终端类型MINGW64&#xff08;默认终端&#xff09;Py…...

前端限流如何实现,如何防止服务器过载

前端限流是一种控制请求频率的技术&#xff0c;旨在防止过多的请求在同一时间段内发送到服务器&#xff0c;避免造成服务器过载或触发反爬虫机制。实现前端限流的方法有很多&#xff0c;下面介绍几种常见的策略和技术&#xff1a; 1. 时间窗口算法 时间窗口算法是最简单的限流…...

基于大模型的慢性硬脑膜下血肿预测与诊疗系统技术方案

目录 一、术前阶段二、并发症风险预测三、手术方案制定四、麻醉方案生成五、术后护理与康复六、系统集成方案七、实验验证与统计分析八、健康教育与随访一、术前阶段 1. 数据预处理与特征提取 伪代码: # 输入:患者多模态影像数据(CT/MRI)、病史、生理指标 def preproce…...

vue入门环境搭建及demo运行

提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 vue简介&#xff1a;第一步&#xff1a;安装node.jsnode简介第二步&#xff1a;安装vue.js第三步&#xff1a;安装vue-cli工具第四步 &#xff1a;安装webpack第五步…...

git checkout C1解释

git checkout C1 的意思是&#xff1a; 让 Git 切换到某个提交&#xff08;commit&#xff09;ID 为 C1 的状态。 &#x1f50d; 更具体地说&#xff1a; C1 通常是一个 commit 的哈希值&#xff08;可以是前几位&#xff0c;比如 6a3f9d2&#xff09; git checkout C1 会让你…...

原始数据去哪找?分享15个免费官方网站

目录 一、找数据的免费官方网站 &#xff08;一&#xff09;国家级数据宝库&#xff1a;权威且全面 1.中国国家统计局 2.香港政府数据中心 3.OECD数据库 &#xff08;二&#xff09;企业情报中心&#xff1a;洞察商业本质 4.巨潮资讯 5.EDGAR数据库 6.天眼查/企查查&a…...