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

初始https附带c/c++源码使用curl库调用

使用C++与CURL开发HTTPS客户端的深度指南

目录

  1. 准备工作
  2. 基础HTTPS请求实现
  3. 核心功能扩展
  4. 进阶配置与优化
  5. 安全注意事项
  6. 调试与问题排查
  7. 跨平台适配要点

一、准备工作

1.1 cURL库简介

cURL(Client URL Request Library)是一个支持多种网络协议的开源库:

  • 支持协议:HTTP/HTTPS, FTP/FTPS, SCP, SFTP等
  • 多语言绑定:C/C++, Python, PHP等
  • 最新版本:8.x(截至2024年7月)
  • 关键特性:
    • SSL/TLS支持(OpenSSL/WolfSSL等后端)
    • Cookie处理
    • 文件传输恢复
    • HTTP/2支持

1.2 开发环境搭建

最方便的多平台编译做法是使用qt进行cmake编译可以参考这篇文章的libevent的编译链接: libevent编译

Windows环境
# vcpkg安装
vcpkg install curl[ssl] curl[openssl]# MSYS2安装
pacman -S mingw-w64-x86_64-curl
Linux环境
# Ubuntu/Debian
sudo apt-get install libcurl4-openssl-dev# CentOS/RHEL
sudo yum install libcurl-devel openssl-devel
macOS环境
brew install curl-openssl
export PATH="/usr/local/opt/curl-openssl/bin:$PATH"

二、基础HTTPS请求实现

2.1 最小化示例代码

#include <iostream>
#include <curl/curl.h>// 响应数据回调函数
size_t WriteCallback(char* ptr, size_t size, size_t nmemb, void* userdata) {std::string* response = static_cast<std::string*>(userdata);response->append(ptr, size * nmemb);return size * nmemb;
}int main() {CURL* curl = curl_easy_init();if (!curl) {std::cerr << "Failed to initialize cURL" << std::endl;return EXIT_FAILURE;}std::string response_data;// HTTPS目标地址(测试用)const char* url = "https://httpbin.org/get";// cURL配置链式调用示例CURLcode res = CURLE_OK;res |= curl_easy_setopt(curl, CURLOPT_URL, url);res |= curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);res |= curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_data);// SSL安全配置基线res |= curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);   // 验证对端证书有效性 res |= curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L);   // CN匹配严格模式#ifdef _WIN32 res |= curl_easy_setopt(curl, CURLOPT_CAINFO,"C:\\Windows\\System32\\curl-ca-bundle.crt");
#endifif (res != CURLE_OK) {std::cerr << "Configuration failed: " << curl_easy_strerror(res) << std::endl;curl_easy_cleanup(curl);return EXIT_FAILURE;}res = curl_easy_perform(curl);if (res != CURLE_OK) {std::cerr << "Request failed: " << curl_easy_strerror(res) << std::endl;long http_code = 0;curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code);std::cerr << "HTTP Status: " << http_code << std::endl;const char* ip_addr = nullptr;if (curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP,&ip_addr) == CURLE_OK) {std::cout << "Connected to: " << ip_addr << std::endl;}const char* ssl_version = nullptr; if (curl_easy_getinfo(curl,CURLINFO_SSL_PROTOCOL,&ssl_version) == CURLE_OK) {std::cout << "SSL Protocol: "<< ssl_version << std::endl; }return EXIT_FAILURE; }// Response分析演示    long http_code = 0;curl_easy_getinfo(curl,CURLINFO_RESPONSE_CODE,&http_code);double total_time = 0;                    
if (CURLE_OK == curl_easy_getinfo(curl,CURLLINFO_TOTAL_TIME_T,&total_time)){printf("Total time: %.3fms\n", total_time);                        }std::cout<< "\nResponse ["<< http_code<<"]:\n"<< response_data.substr(0,512)<<std::endl;// Cleanup流程        
curl_easy_cleanup(curl);       
return EXIT_SUCCESS;}

这个基础示例包含了:

  1. cRUL句柄初始化与管理
  2. SSL/TLS验证基本配置
  3. HTTP响应处理机制
  4. DNS解析信息获取
  5. SSL协商信息追踪
  6. Performance指标统计


##三、核心功能扩展

###3.1 POST请求与参数提交

// JSON格式POST演示  
struct UploadData {  
const char* data;  
size_t length;  
};  size_t ReadCallback(char *buffer,size_t size,size_t nitems,void *userdata){
struct UploadData *upload =
static_cast<UploadData*>(userdata);                     size_t copy_size =
std:min(size * nitems,
upload->length);memcpy(buffer,
upload->data,copy_size);upload->data += copy_size;upload->length -= copy_size;return copy_size;}//...主逻辑中添加...const char *json_data =
"{\"key\":\"value\",\"num\":123}";  struct UploadData upload;  
upload.data = json_data;upload.length =
strlen(json_data);res |=curl_easy_setopt(curl,CURLLOST_POSTFIELDSIZE_LARGE,static_cast<long>(strlen(json_data))); res|=curleasysetopt(curll,CURLLOSTPOST,1L);//启用POST模式  res|=curleasysetopt(curll,CURLLOAD_DATA,&upload);res|=curleasysetopt(curll,CURLLOADFUNCTION,ReadCallback);//自定义头信息添加 struct curllistheaders=nullptr;headers=curll_slistappend(headers,"Content-Type:application/json");headers=curll_slistappend(headers,"X-CustomHeader:MyValue");res|=curleasysetopt(curll,CURRLOHTTPHEADER,headers);

在这里插入图片描述
注意要点:

  • POST数据大于512字节时推荐使用回调方式
  • chunked传输编码需要特别处理
  • Content-Type需准确匹配载荷格式
  • HTTPS默认使用TLSv1.2+协议

###3.2 Cookie管理

持久化Cookie存储示例:


#include <fstream> class CookieJar { public:static int LoadCookies(CookieJar*, const string& path){/*...*/} static int SaveCookies(CookieJar*, const string& path){/*...*/}};//主逻辑中:const string cookie_file="/tmp/cookies.txt";curleasysetopt(curll,CURRLOCOOKIEFILE,cookie_file.c_str()); //读取Cookie    curleasysetopt(curll,CURRLOCOOKIEJAR,cookie_file.c_str()); //保存Cookie   

建议:

  • cookie文件权限设置为600模式
  • NS_COOKIE策略遵循RFC6265标准

一、HTTPS诞生的历史背景

1. 早期互联网的安全困局(1990年代)

  • HTTP明文传输:最初的HTTP协议未考虑加密需求

    GET /login HTTP/1.1
    Host: example.com
    Cookie: sessionid=1234; password=mysecret
    

    所有请求/响应在网络上裸奔传输

  • 典型安全事件

    • 1994年:著名黑客Kevin Mitnick通过嗅探FTP流量入侵多台政府服务器
    • eBay早期用户数据大规模泄露事件

2. SSL协议的诞生(1994年)

  • 核心推动者:Netscape公司为解决电子商务安全问题
  • 版本演进
    1. SSL 1.0 (未发布)
    2. SSL 2.0 (1995) → PCI标准禁止使用于支付系统
    3. SSL 3.0 (1996) → POODLE漏洞终结其使命

3. TLS标准化进程(1999至今)

版本IETF标准号重大改进
TLS 1.0RFC2246SSL3.0兼容模式
TLS 1.2RFC5246AEAD加密算法支持
TLS 1.3RFC8446Zero-RTT,完全禁用传统加密算法
  • 里程碑事件:2014年Google宣布优先索引HTTPS页面

二、现代HTTPS的核心价值与用途

A) 核心安全目标

graph TD
A[机密性] --> AES/GCM算法加密信道  
B[完整性] --> HMAC-SHA256校验防篡改  
C[身份认证] --> X.509证书链验证服务端身份  
D[抗重放攻击] --> Sequence Number机制

B) 实际应用场景

1. Web服务保护
  • 金融交易安全
# Django示例 -强制开启HSTS中间件 
SECURE_HSTS_SECONDS =31536000  
SECURE_SSL_REDIRECT =True 
  • 医疗隐私保护: HIPAA法规明确要求医疗数据传输必须加密
2. API安全防护
// Spring Boot配置强制证书验证 
@Bean  
public SecurityFilterChain filterChain(HttpSecurity http){http.requestMatchers().antMatchers("/api/**").and().requiresChannel().anyRequest().requiresSecure();
}
3. IoT设备通信

ESP32 HTTPS固件示例:

WiFiClientSecure client;
client.setCACert(aws_root_ca); //加载AWS根证书  
client.connect("iot.us-west-2.amazonaws.com",443);String payload ="{'temp':25}";
client.println("POST /things/mydevice/data HTTP/1.1");
client.println("Content-Length:"+payload.length());
client.println(payload);
4. DNS安全进化 (DoH/DoT)
# Windows配置DoT解析 
Add-DnsClientDohServerAddress -ServerAddress '9.9.9.9' -DohTemplate 'https://dns11.example.com/dns-query'

C) HTTPS带来的革命性影响

(1) Web信任体系重构

“HTTP页面地址栏不再显示安全锁标志” —— Chrome Security Team,2018

浏览器策略变化时间线:

2014: HTTPS开始获得SEO权重加成  
2017: Chrome标记HTTP登录页面为不安全  
2020: Safari阻止混合内容加载  
2023: Firefox默认启用严格隐私模式(SB)

(2) PKI生态成熟

全球CA市场格局:

Let's Encrypt (免费DV证书) →46%市场份额   
DigiCert/Symantec (企业级OV/EV) →34%   
其他区域CA →20%

D) HTTPS与未来网络发展

新兴技术领域HTTPS的关键角色
WebAssembly(Wasm)Wasm模块必须通过https加载执行
Web蓝牙APIhttps域名是调用硬件API的前提条件
PWA(渐进式Web应用)Service Worker必须部署在https环境

开发者须知

虽然现代CDN与云服务极大简化了证书部署流程(如Cloudflare一键SSL),但底层实现仍需关注:

# Nginx最佳实践配置示例 
ssl_protocols TLSv1.3 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:secp521r1; # X25519算法比传统NIST曲线快40%
add_header Strict-Transport-Security "max-age=63072000" always;

「没有绝对安全的系统」——即使部署了https仍需配合WAF(Web应用防火墙)、入侵检测等多层防御

相关文章:

初始https附带c/c++源码使用curl库调用

使用C与CURL开发HTTPS客户端的深度指南 目录 准备工作基础HTTPS请求实现核心功能扩展进阶配置与优化安全注意事项调试与问题排查跨平台适配要点 一、准备工作 1.1 cURL库简介 cURL&#xff08;Client URL Request Library&#xff09;是一个支持多种网络协议的开源库&…...

NI Multisim官网下载: 电路设计自动化EDA仿真软件

NI Multisim是一款由美国国家仪器公司&#xff08;National Instruments&#xff0c;简称 NI&#xff09;推出的电路设计与仿真软件&#xff0c;广泛应用于工程教育、电子电路开发和科研领域。它结合了图形化的电路绘图界面与强大的 SPICE 仿真引擎&#xff0c;让用户可以在虚拟…...

通过阿里云Milvus与通义千问VL大模型,快速实现多模态搜索

本文主要演示了如何使用阿里云向量检索服务Milvus版与通义千问VL大模型&#xff0c;提取图片特征&#xff0c;并使用多模态Embedding模型&#xff0c;快速实现多模态搜索。 基于灵积&#xff08;Dashscope&#xff09;模型服务上的通义千问 API以及Embedding API来接入图片、文…...

React 与 Vue:两大前端框架的深度对比

在前端开发领域&#xff0c;React 和 Vue 无疑是当下最受欢迎的两大框架。它们各自拥有独特的优势和特点&#xff0c;吸引了大量开发者。无论是初学者还是经验丰富的工程师&#xff0c;选择 React 还是 Vue 都是一个常见的问题。本文将从多个角度对 React 和 Vue 进行对比&…...

OpenFeign和Gateway

OpenFeign和Gateway 一.OpenFeign介绍二.快速上手1.引入依赖2.开启openfeign的功能3.编写客户端4.修改远程调用代码5.测试 三.OpenFeign参数传递1.传递单个参数2.多个参数、传递对象和传递JSON字符串3.最佳方式写代码继承的方式抽取的方式 四.部署OpenFeign五.统一服务入口-Gat…...

openwrt作旁路由时的几个常见问题 openwrt作为旁路由配置zerotier 图文讲解

1 先看openwrt时间&#xff0c;一定要保证时间和浏览器和服务器是一致的&#xff0c;不然无法更新 2 openwrt设置旁路由前先测试下&#xff0c;路由器能否ping通主路由&#xff0c;是否能够连接外网&#xff0c;好多旁路由设置完了&#xff0c;发现还不能远程好多就是旁路由本…...

ai如何赋能艺术教育

在数字化浪潮席卷全球的今天,人工智能(AI)作为第四次工业革命的核心驱动力,正以前所未有的速度重塑教育生态。艺术教育领域作为培养创造力、批判性思维与跨文化理解力的关键阵地,正经历着AI技术带来的深刻变革。本文将从技术赋能、教育范式革新、全球化协作三个维度,探讨…...

NocoBase 本周更新汇总:联动规则条件左侧支持变量

原文链接&#xff1a;https://www.nocobase.com/cn/blog/weekly-updates-20250424。 汇总一周产品更新日志&#xff0c;最新发布可以前往我们的博客查看。 NocoBase 目前更新包括的版本更新包括三个分支&#xff1a;main &#xff0c;next和 develop。 main &#xff1a;截止…...

协作开发攻略:Git全面使用指南 — 第二部分 高级技巧与最佳实践

协作开发攻略&#xff1a;Git全面使用指南 — 第二部分 高级技巧与最佳实践 Git 是一种分布式版本控制系统&#xff0c;用于跟踪文件和目录的变更。它能帮助开发者有效管理代码版本&#xff0c;支持多人协作开发&#xff0c;方便代码合并与冲突解决&#xff0c;广泛应用于软件开…...

sass 变量

基本使用 如果分配给变量的值后面添加了 !default 标志 &#xff0c;这意味着该变量如果已经赋值&#xff0c;那么它不会被重新赋值&#xff0c;但是&#xff0c;如果它尚未赋值&#xff0c;那么它会被赋予新的给定值。 如果在此之前变量已经赋值&#xff0c;那就不使用默认值…...

多级缓存架构深度解析:从设计原理到生产实践

多级缓存架构深度解析&#xff1a;从设计原理到生产实践 一、多级缓存架构核心定位与设计原则 1. 架构分层与角色定位 多级缓存通过分层存储、流量削峰、数据分级实现性能与成本的平衡&#xff0c;典型三层架构如下&#xff1a; 层级代表组件存储介质数据特征命中目标成本级…...

(51单片机)LCD展示动画(延时函数)(LLCD1602教程)

前言&#xff1a; 前面我们说过&#xff0c;之前LCD1602模块有点难&#xff0c;但是现在&#xff0c;我们通过几遍博客的学习&#xff0c;今天来讲一下LCD1602的原理 演示视频&#xff1a; LCD1602流动 源代码&#xff1a; main.c #include <STC89C5xRC.H> #include &q…...

12N60-ASEMI无人机专用功率器件12N60

编辑&#xff1a;LL 12N60-ASEMI无人机专用功率器件12N60 型号&#xff1a;12N60 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 最大漏源电流&#xff1a;12A 漏源击穿电压&#xff1a;600V 批号&#xff1a;最新 RDS&#xff08;ON&#xff09;Max&#xff1a;0.68…...

[Redis] Redis最佳实践

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…...

arm64适配系列文章-第九章-arm64环境上sentinel的部署

ARM64适配系列文章 第一章 arm64环境上kubesphere和k8s的部署 第二章 arm64环境上nfs-subdir-external-provisioner的部署 第三章 arm64环境上mariadb的部署 第四章 arm64环境上nacos的部署 第五章 arm64环境上redis的部署 第六章 arm64环境上rabbitmq-management的部署 第七章…...

3dmax模型怎么处理3dtiles,制作制作B3DM格式文件

1咱们先打3dmax&#xff0c;或su或者其他软件建模型 2记住面一定一定要少&#xff0c;面一定不能多&#xff0c;也不要是VR材质&#xff0c;可以用插件一键处理 3导出fbx 4使用cesium把fbx转换 5这里可以坐标&#xff0c;因为要对地图位置 6转换出来了&#xff0c;3dtiles格式…...

雪花算法生成int64,在前端js的精度问题

1.问题背景 后端对视频生成唯一性id&#xff0c;在发送评论阶段&#xff0c;由于后端接收的json数据格式&#xff0c;设置videoId为int64。前端于是使用js的Number函数&#xff0c;进行字符串转换为数字&#xff0c;由于不清楚js的精度范围&#xff0c;产生了携带的videoId变化…...

软件测试报告包括哪些内容?可出专业软件测试方案的测评机构推荐

随着信息技术的快速发展&#xff0c;软件质量已经成为决定企业竞争力的重要因素之一。软件测试作为保障软件质量的关键环节&#xff0c;其成果汇总形成的“软件测试报告”在项目生命周期中扮演着重要角色。 软件测试报告就是用来反映测试工作全貌的报告。从测试准备、过程、结…...

dockercompose文件仓库

mysql version: 3 # 使用docker-compose的版本&#xff0c;根据需要可以调整# 创建数据目录 # mkdir -p /home/docker/mysql/mysql_data # mkdir -p /home/docker/mysql/mysql_logs # 给予适当的权限&#xff08;确保MySQL容器可以读写这些目录&#xff09; # chmod 777 /ho…...

Docker 的基本概念和优势以及在应用程序开发中的实际应用

Docker 是一种开源的容器化平台,可以让开发者将应用程序及其所有依赖项打包成一个独立的容器,从而实现应用程序的快速部署和运行。下面是 Docker 的基本概念和优势: 基本概念: 容器:一个轻量级、独立的运行环境,包含应用程序及其所有依赖项。镜像:一个只读的模板,用于创…...

JavaWeb:HtmlCss

快速入门 <html><head><title>HTML快速入门</title><head><body><h1>Hello HTML</h1><img src"1.png"></img></body> </html>开发工具vscode 常见便签&样式&#xff08;新闻&#xff0…...

linux centOS7.9 No package docker-ce available

docker pull apache/apisix:3.2.2-centos Error response from daemon: missing signature key 处理方式如下&#xff1a; 问题&#xff1a;在纯净机里安装docker时报错No package docker-ce available。 解决办法&#xff1a; 1、更新yum&#xff0c;使用yum -y upgrade&#…...

机器学习(8)——主成分分析

文章目录 1. 主成分分析介绍2. 核心思想3. 数学基础4. 算法步骤4.1. 数据标准化&#xff1a;4.2. 计算协方差矩阵&#xff1a;4.3. 特征分解&#xff1a;4.4. 选择主成分&#xff1a;4.5 降维&#xff1a; 5. 关键参数6. 优缺点7. 改进变种8. 应用场景9. Python示例10. 数学推导…...

使用深度 Q 学习解决Lunar lander问题

使用深度 Q 学习解决Lunar lander问题 0. 前言1. 使用深度 Q 网络解决 Atari 游戏2. 定义环境3. 解决 Lunar lander 问题相关链接 0. 前言 深度 Q 学习模型只需观察状态作为输入就能够解决经典 Atari 游戏&#xff0c;这是一个重大突破&#xff0c;从那时起&#xff0c;深度强…...

centos7使用yum快速安装最新版本Jenkins-2.462.3

Jenkins支持多种安装方式&#xff1a;yum安装、war包安装、Docker安装等。 官方下载地址&#xff1a;https://www.jenkins.io/zh/download 本次实验使用yum方式安装Jenkins LTS长期支持版&#xff0c;版本为 2.462.3。 一、Jenkins基础环境的安装与配置 1.1&#xff1a;基本…...

Bean的生命周期

1.实例化Bean&#xff08;通过BeanDefinition反射调用无参构造创建对象&#xff0c;如果没有无参构造&#xff0c;需要指定唯一构造方法&#xff09; 2.给Bean的属性set()赋值 3.检查Bean是否实现了Aware相关接口&#xff0c;实现的话则执行方法 Aware接口&#xff1a;空接口&…...

【缓存与数据库结合方案】伪从技术 vs 直接同步/MQ方案的深度对比

伪从技术 vs 直接同步/MQ方案的深度对比 直接同步修改或通过MQ消息队列也能实现类似同步功能&#xff0c;但伪从技术&#xff08;通过消费binlog实现数据同步&#xff09;在某些场景下具有独特优势。下面我将从多个维度进行详细对比分析&#xff1a; 一、核心差异对比表 方案…...

【前端】【业务场景】【面试】在前端开发中,如何实现文件的上传与下载功能,并且处理可能出现的错误情况?

前端文件上传与下载攻略 本文目标&#xff1a;帮你快速掌握文件上传 & 下载的核心实现方式&#xff0c;并在常见出错场景下保持“优雅不崩溃”。 一、文件上传 1. 基础结构 <input type"file" id"fileInput" /> <button id"uploadBtn&…...

【axios取消请求】如何在token过期后取消未响应的请求

功能背景&#xff1a; 我们在实际项目中通常会遇到登录过期后会跳登录页的情况&#xff0c;回跳过程会根据接口请求的状态码判断是否登陆状态过期&#xff0c;并给出用户提示&#xff0c;如果此时存在多个请求接口同时调用&#xff0c;就会同时报出多个登录过期的提示&#xf…...

【高频考点精讲】JavaScript中的组合模式:从树形结构到组件嵌套实战

📚 目录 📦 什么是组合模式?🌲 基础版:用组合模式构建一个简单的树形结构💡 举个更真实的场景:菜单组件🧠 为什么组合模式在前端特别重要?🔨 实战案例:组件嵌套组合 + 权限控制🧩 组合模式的延伸用法:搭建 UI DSL 引擎🧪 面试题时间(欢迎评论区作答)组…...

《仙剑奇侠传二》游戏秘籍

无限冥纸&#xff1a;在丰都城&#xff0c;点击特定的小猫&#xff0c;它会给你五张冥纸&#xff0c;再次点击还会再给五张&#xff0c;可循环获取。无限使用虎煞技能&#xff1a;学会 “虎啸风声” 技能后&#xff0c;将虎煞之力值设置为 16&#xff0c;在战斗中持续使用该技能…...

AWS 中国区 CloudFront SSL 证书到期更换实战指南

适用场景: AWS 中国区(宁夏区域 cn-northwest-1 或北京区域 cn-north-1)CloudFront 分配的 SSL 证书到期后无缝替换,域名主体为 domain.cn。 背景与痛点 当 CloudFront 使用的 SSL 证书即将到期时,需手动替换新证书以避免服务中断。由于 AWS 中国区 不支持 ACM 证书,必须…...

【2025A卷】华为OD机试九日集训第3期 - 按算法分类,由易到难,提升编程能力和解题技巧,从而提高机试通过率(Python/JS/C/C++)

目录 一、适合人群二、本期训练时间三、如何参加四、数据结构与算法大纲五、华为OD九日集训第3期第1天、逻辑分析第2天、逻辑分析第3天、双指针第4天、双指针第5天、数据结构map第6天、栈第7天、二叉树第8天、贪心算法第9天、二分查找 六、集训总结国内直接使用最新o3、o4-mini…...

MacOS上如何运行内网穿透详细教程

本文以市面常见、好用的内网穿透为例&#xff0c;一款为开源内网穿透工具Frp;另一款为国产新锐软件ZeroNews。 一、Frp&#xff08;开源工作、使用自由&#xff09; 1. 下载 FRP 访问 FRP 的 GitHub 发布页&#xff1a; https://github.com/fatedier/frp/releases 选择适合 …...

第55讲:农业人工智能的跨学科融合与社会影响——构建更加可持续、包容的农业社会

目录 一、农业人工智能的多维融合:科技与社会的桥梁 1. 技术与社会:解决现代农业中的不平等 2. AI与伦理:塑造道德规范与社会责任 3. AI与政策:推动农业政策的科学决策与智能执行 二、AI与农业未来社会的构建:更绿色、更智能、更包容 1. 推动农业可持续发展:绿色农…...

JVM性能优化之老年代参数设置

一、引言 咱们书接上回&#xff0c;上篇文章主要讲解了年轻代参数设置&#xff0c;如果对这一部分还不清楚的建议先去看一下&#xff08;年轻代参数设置&#xff09;&#xff0c;本文主要为大家介绍老年代参数的设置&#xff0c;掌握好jvm参数的设置是一个高级开发人人员必备的…...

在 Ubuntu 环境为 Elasticsearch 引入 `icu_tokenizer

1. 为什么需要 ICU 分析插件 Elasticsearch 默认的 standard tokenizer 遵循 UAX #29 规则&#xff0c;但在 CJK&#xff08;中、日、韩&#xff09;等亚洲语言上仅能按字符切分&#xff0c;无法识别词边界&#xff1b;对包含重音符号、大小写或多脚本混排的文本也缺乏统一归一…...

JMeter 安装及使用 [软件测试工具]

目录 JMeter 1. JMeter 安装 1.1 点击官网下载: JMeter官网下载 1.2 下载后解压即可 1.3 打开 JMeter 1.3.1 方式一: 点击对应程序打开 1.3.2 方式二: 命令行启动 1.4 关闭 JMeter 2. JMeter 基础配置 2.1 修改字体为简体中文 2.2 添加拓展插件 2.2.1 下载其他监听器…...

Unity 资源合理性检测

一&#xff1a;表格过度配置&#xff0c;表格资源是否在工程中存在&#xff0c;并输出不存在的资源 import pandas as pd import glob import osassets [] count 0# 遍历configs文件夹下所有xlsx文件 for file_path in glob.glob(configs/*.xlsx):count 1try:sheets pd.re…...

vue-study(1)

黑马智数项目 黑马智数是一个数字化园区管理项目&#xff0c;该项目后台可以在线管理园区内的楼宇、企业、车辆和一体杆等资源&#xff0c;可视化大屏通过园区3D模型实时展示园区概况。通过该项目能学到如何用qiankun搭建微前端架构、用Echarts进行数据可视化、以及前沿的3D模…...

XS5032:高性能3DNR+HDR ISP-TX 2K芯片

爱芯元智 XS5032&#xff1a;高性能3DNRHDR ISP-TX 2K芯片 视频输入 支持MIPI接口&#xff0c;4lane&#xff0c;Max.1.5Gbps/lane 支持Sensor并口&#xff08;DVP&#xff09; 视频分辨率 支持多种同轴高清制式和标清制式&#xff0c;包括&#xff1a; 960H25/30fps&…...

[原创](现代Delphi 12指南):[macOS 64bit App开发]:如何使用NSString类型字符串?

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…...

TDengine 流计算引擎设计

流计算架构 TDengine 流计算的架构如下图所示。当用户输入用于创建流的 SQL 后&#xff0c;首先&#xff0c;该 SQL 将在客户端进行解析&#xff0c;并生成流计算执行所需的逻辑执行计划及其相关属性信息。其次&#xff0c;客户端将这些信息发送至 mnode。mnode 利用来自数据源…...

扩展中国剩余定理

中国剩余定理 中国剩余定理 考虑一组模线性同余方程&#xff1a; { x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) . . . x ≡ a k ( m o d m k ) \begin{cases} x\equiv a_1\pmod{m1} \\ x\equiv a_2\pmod{m2}\\ .\\ .\\ .\\ x\equiv a_k\pmod{mk}\\ \end{cases} ⎩ ⎨ ⎧…...

git检查提交分支和package.json的version版本是否一致

这里写自定义目录标题 一、核心实现步骤‌1.安装必要依赖‌2.初始化 Husky‌3.创建校验脚本‌4.配置 lint-staged‌5.更新 Husky 钩子‌ 三、工作流程说明‌四、注意事项‌ 以下是基于 Git Hooks 的完整解决方案&#xff0c;通过 husky 和自定义脚本实现分支名与版本号一致性校…...

Git 详细使用说明文档(适合小白)

Git 详细使用说明文档&#xff08;适合小白&#xff09; 1. 什么是 Git&#xff1f; Git 是一个版本控制系统&#xff0c;帮助你管理和跟踪代码的变更。无论是个人项目还是团队协作&#xff0c;Git 都能帮助你记录代码的历史版本&#xff0c;方便回溯和协作。 2. 安装 Git …...

【嵌入式系统设计师(软考中级)】第二章:嵌入式系统硬件基础知识(2)

文章目录 3.嵌入式系统的存储体系3.1 存储系统的层次结构3.2 内存管理单元&#xff08;MMU&#xff09;3.3 RAM和ROM的种类3.3.1 RAM类型对比3.3.2 ROM类型对比 3.4 高速缓存&#xff08;Cache&#xff09;3.5 其他存储设备3.5.1 新型存储技术3.5.2 外存接口技术 3.嵌入式系统的…...

rk3588 驱动开发(三)第五章 新字符设备驱动实验

register_chrdev 和 unregister_chrdev 这两个函数是老版本驱动使用的函数&#xff0c;现在新的字符设备驱动已经不再使用这两个函数&#xff0c;而是使用 Linux 内核推荐的新字符设备驱动 API 函数。本节我们就来学习一下如何编写新字符设备驱动&#xff0c;并且在驱动模块加载…...

文件上传--WAF绕过干货

本文主要内容 绕过WAF上传文件 -- 安全狗 -- 宝塔 Burp抓包解析 #上传参数名解析&#xff1a;明确哪些东西能修改? Content-Disposition&#xff1a;—般可更改 name&#xff1a;表单参数值&#xff0c;不能更改 filename&#xff1a;文件名&#xff…...

BERT BERT

BERT ***** 2020年3月11日更新&#xff1a;更小的BERT模型 ***** 这是在《深阅读的学生学得更好&#xff1a;预训练紧凑模型的重要性》&#xff08;arXiv:1908.08962&#xff09;中提到的24种较小规模的英文未分词BERT模型的发布。 我们已经证明&#xff0c;标准的BERT架构和…...