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

API安全

目录

API安全:从威胁到防护的全面解析

引言

一、API安全的定义与重要性

1.1 API安全的核心目标

1.2 API安全的挑战

二、API的常见安全威胁

2.1 身份验证攻击

2.2 中间人攻击(MITM)

2.3 注入攻击

2.4 安全配置错误

2.5 拒绝服务(DoS)攻击

2.6 对象级授权(BOLA)攻击

三、API安全最佳实践

3.1 身份验证与授权

示例:JWT生成与验证(Java)

3.2 传输加密

示例:阿里云安全组规则设置(Java)

3.3 输入验证与输出清理

示例:Node.js输入验证

3.4 访问控制与审计

示例:ASP.NET Core Identity配置

3.5 速率限制与防爬虫

示例:Python速率限制

四、API安全案例分析

4.1 Optus数据泄露事件

4.2 xAI API密钥泄露事件

五、API安全的技术实现

5.1 加密与解密

示例:Node.js数据加密

5.2 Web应用防火墙(WAF)

示例:Cloudflare WAF规则

5.3 入侵检测与防御(IDS/IPS)

示例:Snort规则检测SQL注入

六、API安全的未来趋势

6.1 零信任架构(Zero Trust)

6.2 AI驱动的API安全

6.3 自动化安全测试

七、结论

API安全:从威胁到防护的全面解析

引言

在数字化时代,应用程序编程接口(API)已成为连接系统、服务和数据的核心桥梁。无论是电商平台的支付接口、社交网络的用户认证,还是物联网设备的数据采集,API无处不在。然而,随着API的普及,其安全风险也日益凸显。据IBM报告,2022年澳大利亚电信公司Optus因API漏洞导致近1000万用户数据泄露,而xAI公司因员工失误泄露API密钥引发供应链安全危机。这些事件表明,API安全已成为企业数字化转型中不可忽视的课题。

本文将从API安全的定义、常见威胁、最佳实践、案例分析和代码实现等方面进行深入探讨,帮助开发者和安全从业者构建更健壮的API防护体系。

一、API安全的定义与重要性

1.1 API安全的核心目标

API安全的核心目标是确保API接口及其数据交换过程的安全性,具体包括:

  • 身份验证:确保请求方的身份合法。
  • 授权:控制用户对API资源的访问权限。
  • 数据完整性:防止数据在传输或存储过程中被篡改。
  • 机密性:保护敏感数据不被未授权访问。
  • 可用性:防止拒绝服务(DoS)攻击导致服务中断。

1.2 API安全的挑战

API的开放性和互联性使其面临独特的安全挑战:

  • 攻击面广:API通常暴露在互联网上,成为黑客的首选目标。
  • 动态交互:API请求和响应的格式复杂,容易引入漏洞。
  • 第三方依赖:企业常依赖第三方API,需确保其安全性。

二、API的常见安全威胁

2.1 身份验证攻击

攻击者通过猜测或窃取API密钥、OAuth令牌等方式绕过身份验证。例如,xAI员工在GitHub上泄露的API密钥,可直接访问其内部模型数据,导致供应链安全风险。

2.2 中间人攻击(MITM)

攻击者拦截API请求或响应,窃取或篡改数据。例如,未加密的HTTP协议可能暴露用户凭证或支付信息。

2.3 注入攻击

攻击者通过构造恶意输入(如SQL注入、XSS)操控API逻辑。例如,未过滤的用户输入可能导致数据库泄露。

2.4 安全配置错误

默认配置或宽松的跨域资源共享(CORS)策略可能导致敏感信息泄露。例如,Optus的API因配置不当暴露了用户护照和驾驶执照信息。

2.5 拒绝服务(DoS)攻击

攻击者通过发送大量请求导致服务器崩溃。例如,2022年某电商平台因API未限流,遭遇DDoS攻击,服务中断数小时。

2.6 对象级授权(BOLA)攻击

攻击者操纵API端点的对象标识符,获取未授权数据。例如,通过修改URL参数访问其他用户的敏感信息。

三、API安全最佳实践

3.1 身份验证与授权

  • OAuth 2.0:使用OAuth 2.0协议管理令牌生命周期,定期刷新Access Token。
  • JWT(JSON Web Token):通过签名和加密保护令牌,防止篡改。
  • API密钥:限制密钥的访问范围,并定期轮换。
示例:JWT生成与验证(Java)
// 使用Spring Security生成JWT
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;public class JwtUtil {private static final String SECRET_KEY = "your_very_secret_key";public String generateToken(String username) {return Jwts.builder().setSubject(username).setIssuedAt(new Date()).setExpiration(new Date(System.currentTimeMillis() + 86400000)) // 24小时过期.signWith(SignatureAlgorithm.HS512, SECRET_KEY).compact();}public boolean validateToken(String token) {try {Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);return true;} catch (Exception e) {return false;}}
}

3.2 传输加密

  • TLS/SSL:强制使用HTTPS协议加密数据传输。
  • 数据加密:对敏感数据(如密码、信用卡号)进行端到端加密。
示例:阿里云安全组规则设置(Java)
// 使用阿里云API设置安全组规则
public void aliyun() throws Exception {com.aliyun.ecs20140526.Client client = createClient();com.aliyun.ecs20140526.models.AuthorizeSecurityGroupRequest.AuthorizeSecurityGroupRequestPermissions permissions0 =new com.aliyun.ecs20140526.models.AuthorizeSecurityGroupRequest.AuthorizeSecurityGroupRequestPermissions().setPolicy("drop") // 拒绝访问策略.setSourceCidrIp("192.168.2.15") // 需要控制的IP地址.setPortRange("1/65535") // 所有端口.setDescription("可疑IP").setIpProtocol("TCP");com.aliyun.ecs20140526.models.AuthorizeSecurityGroupRequest authorizeSecurityGroupRequest =new com.aliyun.ecs20140526.models.AuthorizeSecurityGroupRequest().setRegionId("cn-chengdu").setSecurityGroupId("sg-2vc******rvblbj").setPermissions(java.util.Arrays.asList(permissions0));com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();AuthorizeSecurityGroupResponse response = client.authorizeSecurityGroupWithOptions(authorizeSecurityGroupRequest, runtime);System.out.println("返回结果:" + response.getBody());
}

3.3 输入验证与输出清理

  • 输入验证:确保输入数据符合预期格式(如正则表达式)。
  • 输出清理:转义特殊字符,防止XSS攻击。
示例:Node.js输入验证
// 使用Express.js验证用户输入
const express = require('express');
const app = express();
const { body, validationResult } = require('express-validator');app.post('/login', [body('username').isLength({ min: 3 }),body('password').isLength({ min: 6 })
], (req, res) => {const errors = validationResult(req);if (!errors.isEmpty()) {return res.status(400).json({ errors: errors.array() });}// 处理登录逻辑
});

3.4 访问控制与审计

  • 基于角色的访问控制(RBAC):根据用户角色分配权限。
  • API审计日志:记录所有API请求,便于溯源和分析。
示例:ASP.NET Core Identity配置
// 配置基于角色的访问控制
public void ConfigureServices(IServiceCollection services) {services.AddIdentity<ApplicationUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();services.AddAuthorization(options => {options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));});
}

3.5 速率限制与防爬虫

  • 速率限制:限制单位时间内的请求次数。
  • IP封禁:识别异常IP并加入黑名单。
示例:Python速率限制
# 使用Redis实现速率限制
import redis
import timedef request_limit_check(user_id, limit_per_minute):r = redis.Redis(host='localhost', port=6379, db=0)key = f"rate_limit:{user_id}"current_count = r.get(key)if current_count and int(current_count) >= limit_per_minute:return Falser.incr(key)r.expire(key, 60)  # 限制时间窗口为60秒return True

四、API安全案例分析

4.1 Optus数据泄露事件

背景:2022年,澳大利亚电信公司Optus因API配置错误,导致1000万用户数据泄露,包括姓名、电话、护照信息等。
原因:API的CORS策略过于宽松,未对请求源进行严格限制。
解决方案

  • 修复CORS配置,限制允许的域名。
  • 强化身份验证机制,使用OAuth 2.0替代API密钥。
  • 实施实时监控,检测异常访问模式。

4.2 xAI API密钥泄露事件

背景:xAI员工在GitHub上误提交API密钥,导致攻击者可访问其内部模型数据。
原因:缺乏代码审查流程和API密钥管理规范。
解决方案

  • 使用GitGuardian等工具扫描敏感信息。
  • 强制API密钥轮换,限制密钥的访问范围。
  • 对员工进行信息安全培训,制定代码提交规范。

五、API安全的技术实现

5.1 加密与解密

  • 对称加密:使用AES加密敏感数据。
  • 非对称加密:使用RSA保护API密钥。
示例:Node.js数据加密
const crypto = require('crypto');// 加密函数
function encrypt(text) {const cipher = crypto.createCipher('aes-256-cbc', 'SecretPassphrase');let encrypted = cipher.update(text, 'utf8', 'hex');encrypted += cipher.final('hex');return encrypted;
}// 解密函数
function decrypt(encryptedText) {const decipher = crypto.createDecipher('aes-256-cbc', 'SecretPassphrase');let decrypted = decipher.update(encryptedText, 'hex', 'utf8');decrypted += decipher.final('utf8');return decrypted;
}

5.2 Web应用防火墙(WAF)

WAF通过规则过滤恶意请求,例如检测SQL注入或XSS攻击。

示例:Cloudflare WAF规则
# Cloudflare WAF规则示例
rules:- action: blockexpression: "cf.client.geo.country eq 'CN' and http.request.uri contains '/admin'"description: "阻止中国IP访问管理后台"

5.3 入侵检测与防御(IDS/IPS)

IDS/IPS实时监控API流量,识别攻击模式并采取防御措施。

示例:Snort规则检测SQL注入
# Snort规则示例
alert tcp any any -> any 80 (msg:"SQL Injection Attempt"; content:"SELECT * FROM"; sid:100001;)

六、API安全的未来趋势

6.1 零信任架构(Zero Trust)

零信任架构要求所有请求必须经过严格验证,无论来源是否可信。例如,谷歌BeyondCorp模型通过动态身份验证和最小权限原则提升API安全性。

6.2 AI驱动的API安全

AI可用于实时检测异常行为,例如通过机器学习识别DDoS攻击模式或预测API漏洞。

6.3 自动化安全测试

自动化工具(如Postman、OWASP ZAP)可快速扫描API漏洞,减少人工审计成本。

七、结论

API安全是数字化时代的基石,但其复杂性要求开发者和安全团队采取多层次的防护策略。从身份验证到加密传输,从输入验证到访问控制,每一环节都需精心设计。通过学习Optus和xAI等案例,我们深知疏忽可能带来灾难性后果。而通过代码示例和最佳实践,我们可以看到,技术手段与制度规范的结合是构建安全API的关键。

相关文章:

API安全

目录 API安全&#xff1a;从威胁到防护的全面解析 引言 一、API安全的定义与重要性 1.1 API安全的核心目标 1.2 API安全的挑战 二、API的常见安全威胁 2.1 身份验证攻击 2.2 中间人攻击&#xff08;MITM&#xff09; 2.3 注入攻击 2.4 安全配置错误 2.5 拒绝服务&…...

UDP和TCP协议

目录 1. UDP协议 1.1. UDP的特性 1.2. UDP的包头 1.3. UDP的三大使用场景和实际例子 1.4. TCP和UDP的区别 2. TCP协议 2.1. TCP包头格式 2.2. TCP包头和UDP包头对比 2.3. TCP协议的特点 2.4. TCP的三次握手&#xff08;连接维护问题&#xff09; 2.5. TCP的四次挥手…...

关于Go语言的开发环境的搭建

1.Go开发环境的搭建 其实对于GO语言的这个开发环境的搭建的过程&#xff0c;类似于java的开发环境搭建&#xff0c;我们都是需要去安装这个开发工具包的&#xff0c;也就是俗称的这个SDK&#xff0c;他是对于我们的程序进行编译的&#xff0c;不然我们写的这个代码也是跑不起来…...

【Bootstrap V4系列】学习入门教程之 组件-导航(Navs)

【Bootstrap V4系列】学习入门教程之 组件-导航&#xff08;Navs&#xff09; 导航&#xff08;Navs&#xff09;一、Base nav二、Available styles 可用样式2.1 Horizontal alignment 水平对齐2.2 Vertical 垂直的2.3 Tabs 表格样式2.4 Pills 胶囊样式2.5 Fill and justify 填…...

基于单片机的视力保护仪设计与实现

标题:基于单片机的视力保护仪设计与实现 内容:1.摘要 随着电子设备的普及&#xff0c;人们的视力健康面临着严峻挑战。为了有效预防近视等视力问题&#xff0c;本文旨在设计并实现一款基于单片机的视力保护仪。通过采用红外传感器、光敏传感器等元件&#xff0c;实时监测使用者…...

如何避免和恢复因终端关闭导致的 LoRA 微调中断

环境&#xff1a; Ubuntu20.04 Llama factory Qwen2.5-7B-Instruct llama.cpp H20 95G 问题描述&#xff1a; 使用命令 CUDA_VISIBLE_DEVICES1 FORCE_TORCHRUN1 llamafactory-cli train examples/train_lora/qwen2_5-7b_lora_sft.yaml 进行 LoRA 微调时&#xff0c;如果…...

RT-linux 系统详解

RT-Linux&#xff08;Real-Time Linux&#xff09;是一种基于Linux内核的实时操作系统&#xff08;RTOS&#xff09;&#xff0c;旨在为Linux添加硬实时&#xff08;Hard Real-Time&#xff09;能力&#xff0c;使其适用于对时间确定性要求极高的嵌入式系统和工业控制场景。以下…...

开源网络地图可视化第六章学习指南

源代码地址&#xff1a;开源网络地图可视化-配套代码.zip - 蓝奏云 配套书籍&#xff1a;开源网络地图可视化——基于Leaflet的在线地图开发 (杨乃) (Z-Library)(1).pdf - 蓝奏云 3 第六章Leaflet地图动画 3.1 图标动画 3.1.1 沿线运动 沿线运动的动画使用了Leaflet.Geode…...

网页常见水印实现方式

文章目录 1 明水印技术实现1.1 DOM覆盖方案1.2 Canvas动态渲染1.3 CSS伪元素方案2 暗水印技术解析2.1 空域LSB算法2.2 频域傅里叶变换3 防篡改机制设计3.1 MutationObserver防护3.2 Canvas指纹追踪4 前后端实现对比5 攻防博弈深度分析5.1 常见破解手段5.2 进阶防御策略6 选型近…...

# 08_Elastic Stack 从入门到实践(八)---1

08_Elastic Stack 从入门到实践(八)—1 一、Logstash入门之简介以及部署安装 1、Elastic Stack 技术栈示意图 2、Logstash 简介 Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。(存储库当然是Ela…...

携程酒店 phantom-token token1004 分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 部分python代码 搞APP搞的心态有点崩…...

物理:从人体组成角度能否说明基本粒子的差异性以及组织结构的可预设性?

人类的个体差异源于粒子组合的复杂性、环境与随机性的相互作用,而非基本粒子本身的差异性。以下分层次解析: 一、基本粒子的同质性与组合多样性 1. 基本粒子的同一性 标准模型确认:同种类基本粒子(如电子、上夸克)具有完全相同的质量、电荷等属性,不存在个体差异。泡利不…...

前端面试每日三题 - Day 33

这是我为准备前端/全栈开发工程师面试整理的第33天每日三题练习&#xff1a; ✅ 题目1&#xff1a;Deno核心特性深度解析 革命性特性详解 // 安全权限控制&#xff08;运行时显式授权&#xff09; deno run --allow-netapi.example.com server.ts // 内置TypeScript支持 …...

JavaScript编译原理

在编程语言的世界中&#xff0c;编译器&#xff08;如 GCC、TypeScript&#xff09;和转译器&#xff08;如 Babel&#xff09;扮演着至关重要的角色&#xff0c;它们负责将人类可读的代码转换为机器或其他语言可执行的指令。这一过程通常分为四个关键阶段&#xff1a; 1. 词法…...

Nature图形复现—两种快速绘制热图的方法

相信大家在科研过程中&#xff0c;会遇到热图&#xff0c;有时候会觉得热图理解起来比较困难&#xff0c;或者觉得绘制热图也比较困难。本期教程我们来深入了解热图、绘制热图。 热图是一种通过颜色深浅或色阶变化来直观展示数据分布、密度或数值大小的可视化工具。它在多个领域…...

MySQL数据库——视图

目录 一、视图是什么&#xff1f; 二、特点 三、创建视图 四.查询视图 五.更新视图 六.视图的作用 总结 一、视图是什么&#xff1f; 视图是从一个或多个表中导出的虚拟表&#xff0c;它本身不存储数据&#xff0c;而是基于 SQL 查询的结果集。 二、特点 1.虚拟性&#xff1…...

标贝科技:大模型领域数据标注的重要性与标注类型分享

当前&#xff0c;大模型作为人工智能领域的前沿技术&#xff0c;其强大的泛化能力和复杂任务处理能力&#xff0c;依赖于海量数据的训练。而数据标注&#xff0c;作为连接原始数据与大模型训练的关键桥梁&#xff0c;在这一过程中发挥着举足轻重的作用。​ 大模型的训练依赖海…...

MYSQL备份恢复知识:第一章:备份操作举例

1. 备份工具 MySQL数据库的备份方式有两大类&#xff1a;一是物理备份&#xff0c;它对数据文件和日志进行整体备份&#xff1b;二是逻辑备份&#xff0c;通过DUMP工具将数据导出。具体的方法有以下几种&#xff1a; • 物理备份&#xff0c;MEB工具&#xff0c;是商用版本推荐…...

VS Code怎么设置python SDK路径

一、通过命令面板快速切换&#xff08;推荐方法&#xff09; 打开命令面板 • 快捷键&#xff1a;CtrlShiftP&#xff08;Windows/Linux&#xff09;或 CmdShiftP&#xff08;macOS&#xff09; • 输入命令&#xff1a;Python: Select Interpreter&#xff0c;回车后显示所有检…...

[经验总结]删除gitlab仓库分支报错:错误:无法推送一些引用到“http:”

问题描述 删除gitlab远程仓库报错。 [wingasowingaso release]$ git push gitlab --delete release remote: GitLab: You can only delete protected branches using the web interface. To http://x.x.x.x/gitlab/test.git! [remote rejected] release (pre-receive hoo…...

虹科干货 | CAN XL安全实践:深度防御下的密钥协商优化

摘要 随着汽车以太网的兴起和车载通信系统数量的增加&#xff0c;网络整合成为控制复杂性和成本的关键。当前架构呈现明确分层&#xff1a;以太网&#xff08;100/1000Mbit/s&#xff09;支撑信息娱乐、ADAS等高带宽应用&#xff0c;而CAN/CAN FD&#xff08;0.5-5Mbit/s&#…...

Linux干货(一)

前言 从B站黑马程序员Linux课程摘选的学习干货&#xff0c;新手友好&#xff01;若有侵权&#xff0c;会第一时间处理。 1.Linux目录结构 1.Linux操作系统的目录结构 Windows系统可以拥有多个盘符&#xff0c;如C盘、D盘、E盘 Linux没有盘符这个概念&#xff0c;只有一个根…...

Scala和Go差异

Scala和Go&#xff08;又称Golang&#xff09;是两种现代编程语言&#xff0c;各自具有独特的特性和设计哲学。 尽管它们都可以用于构建高性能、可扩展的应用程序&#xff0c;但在许多方面存在显著差异。 Scala和Go的详细比较&#xff0c;涵盖它们的异同点&#xff1a; 1. 语…...

PNG图片转icon图标Python脚本(简易版) - 随笔

摘要 在网站开发或应用程序设计中&#xff0c;常需将高品质PNG图像转换为ICO格式图标。本文提供一份高效Python解决方案&#xff0c;利用Pillow库实现透明背景完美保留的格式转换。 源码示例 from PIL import Imagedef convert_png_to_ico(png_path, ico_path, size):"…...

C语言中的宏

1.防止头文件重复包含 1.#pragma once #pragma once 是一个编译器指令&#xff0c;用于防止头文件被重复包含。它的核心作用是通过简单语法替代传统的头文件保护宏&#xff08;#ifndef/#define/#endif&#xff09;&#xff0c;提升代码简洁性和可维护性。 作用详解 防止重复…...

飞拍技术介绍

运动控制探针功能详细介绍 运动控制探针功能详细介绍(CODESYS+SV63N伺服)_伺服探针功能-CSDN博客文章浏览阅读683次。文章浏览阅读1.2k次。本文详细介绍了如何使用汇川AM400PLC通过EtherCAT总线与禾川X3E伺服进行通信。包括XML硬件描述文件的下载与安装,EtherCAT总线的启用…...

Qt进阶开发:QTcpSocket的详解

文章目录 一、QTcpSocket 简介二、常用方法的介绍和使用三、常用的信号函数一、QTcpSocket 简介 QTcpSocket 是 Qt 网络模块中用于实现基于 TCP 协议的客户端通信的类。它提供了一个面向流的接口,允许程序通过套接字连接到远程主机,发送和接收数据。 所属模块:QtNetwork用于…...

React中的状态管理Dva总结

在 React 开发中&#xff0c;随着应用的复杂度增加&#xff0c;如何高效地管理应用状态成为了一个非常重要的问题。为了解决这一问题&#xff0c;很多开发者选择了 Redux&#xff0c;然而 Redux 的学习曲线较陡&#xff0c;且需要配置较多的样板代码。为此&#xff0c;Ant Desi…...

PyTorch中的nn.Embedding应用详解

PyTorch 文章目录 PyTorch前言一、nn.Embedding的基本原理二、nn.Embedding的实际应用简单的例子自然语言处理任务 前言 在深度学习中&#xff0c;词嵌入&#xff08;Word Embedding&#xff09;是一种常见的技术&#xff0c;用于将离散的词汇或符号映射到连续的向量空间。这种…...

Python Django基于模板的药品名称识别系统【附源码、文档说明】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

深度学习---获取模型中间层输出的意义

一、什么是 Hook&#xff08;钩子函数&#xff09;&#xff1f; 在 PyTorch 中&#xff0c;Hook 是一种机制&#xff0c;允许我们在模型的前向传播或反向传播过程中&#xff0c;插入自定义的函数&#xff0c;用来观察或修改中间数据。 最常用的 hook 是 forward hook&#xf…...

【软件测试】第一章·软件测试概述

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;软件测试与软件项目管理_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录…...

格雷希尔G10和G15系列自动化快速密封连接器,适用于哪些管件的密封,以及它们相关的特性有哪些?

格雷希尔G10和G15系列快速密封连接器&#xff0c;用于自动化和半自动化过程中的外部或内部密封&#xff0c;通过使用气压驱动来挤压内部的密封圈&#xff0c;创造一个适用于各种管件的无泄漏密封连接&#xff0c;连接器内部的弹性密封圈可以提供其他产品不能提供的卓越密封性能…...

从零实现一个高并发内存池 - 1

C 高性能内存池解析 在 C 开发中&#xff0c;内存管理一直是影响程序性能的关键因素之一。传统的内存分配方式如 malloc 和 free 在高并发场景下往往存在性能瓶颈。为了解决这一问题&#xff0c;很多优秀的内存池方案应运而生&#xff0c;其中 Google 的 tcmalloc&#xff08;T…...

在 STM32 上使用 register 关键字

在 STM32 上使用 register 关键字时&#xff0c;有一些特别需要注意的事项。虽然 register 是 C 语言中的一个标准关键字&#xff0c;它用于提示编译器将变量尽可能存放在寄存器中&#xff0c;以加速访问&#xff0c;但在 STM32 这样的嵌入式平台上&#xff0c;还是需要考虑几个…...

【入门】纸盒的最大体积是多少?

描述 在一张尺寸为 n * n 厘米的正方形硬纸板的四个角上&#xff0c;分别裁剪掉一个 m * m 厘米的小正方形&#xff0c;就可以做成一个无盖纸盒&#xff0c;请问这个无盖纸盒的最大体积是多少&#xff1f; 立方体的体积 v 底面积 * 高&#xff09; 比如&#xff1a; n 5 &am…...

漏桶算法的实际应用案例:数据库批量写入流量控制

场景描述 假设有一个物联网平台&#xff0c;需要实时接收成千上万台设备上报的数据&#xff08;如温度、湿度等&#xff09;&#xff0c;并将数据存入数据库。设备可能在某些时刻集中发送数据&#xff08;例如定时批量上报&#xff09;&#xff0c;直接写入数据库可能导致以下问…...

c++函数参数列表后面的const的作用(常量成员函数)

c函数参数列表后面的const的作用 class Person { public://普通构造函数Person():age(0){}//常量成员函数void read_age() const {age100; //错误&#xff01;常量成员函数不允许修改成员变量&#xff08;除非成员变量用mutable修饰&#xff09;std::cout << "age:…...

Java的While循环写的出票简单程序

import java.util.Scanner;public class Hello {public static void main(String[] args) {Scanner in new Scanner(System.in);int balance 0;while(true){System.out.print("请投币: ");int amount in.nextInt();balance balance amount;if(balance >10 )…...

时间序列基础【学习记录】

文章目录 1. 时间序列中的标签2. 时间序列中的窗口分割器2.1.概述2.2.窗口分割器demo 3. 时间序列的数据加载器3.1.概述3.2.时间序列的dataset3.3.Tensor类型3.4.测试完整流程demo 1. 时间序列中的标签 在目标检测领域的数据集中的图像会有一个标签**(标记一个物体是猫还是狗或…...

Andorid之TabLayout+ViewPager

文章目录 前言一、效果图二、使用步骤1.主xml布局2.activity代码3.MyTaskFragment代码4.MyTaskFragment的xml布局5.Adapter代码6.item布局 总结 前言 TabLayoutViewPager功能需求已经是常见功能了&#xff0c;我就不多解释了&#xff0c;需要的自取。 一、效果图 二、使用步骤…...

光谱相机的光电信号转换

光谱相机的光电信号转换是将分光后的光学信息转化为可处理的数字信号的核心环节&#xff0c;具体分为以下关键步骤&#xff1a; 一、分光后光信号接收与光电转换 ‌分光元件作用‌ 光栅/棱镜/滤光片等分光元件将入射光分解为不同波长单色光&#xff0c;投射至探测器阵列表面…...

MySQL历史版本下载及安装配置教程

1、访问官网下载mysql https://dev.mysql.com/downloads/mysql/ 2、找到历史版本 我这里的版本是最新的mysql8.0.42 下载完成之后,将压缩包进行解压 3、环境变量 在系统变量中找到Path,点击进入编辑&#xff0c;然后依次点击确定退出即可 注意&#xff01;&#xff01;&am…...

【ArcGIS】根据shp范围生成系列等距点:范围外等距点+渔网点(Python全代码)

【ArcGIS】根据shp范围生成系列等距点 目标1&#xff1a;生成边界外一定范围、并且等间距分布的点&#x1f4c1; 所需数据&#xff1a;操作步骤-ArcGIS代码处理-Python 目标2&#xff1a;生成等距渔网点&#x1f4c1; 所需数据&#xff1a;代码处理-Python 参考 目标1&#xff…...

基于FPGA的视频接口之千兆网口(六GigE纯逻辑)

协议简介 相信大家只有对于GigE有所了解的读者,才能找到这篇文章,所谓的GigE协议包含两个方面分别是视频协议(GVSP)和控制协议(GVCP)。 在本文我们重点讲的是基于FPGA纯逻辑实现阉割版的GigE协议,也就是说在很多视频传输过中,只用到了视频流传输,并没有控制方面的要求…...

android 权限配置

在AOSP 14的ROM定制中&#xff0c;<exceptions>和<privapp-permissions>是用于管理特权应用权限的两种不同机制&#xff0c;主要区别在于作用范围、配置方式和权限授予逻辑。以下是具体分析&#xff1a; 1. <privapp-permissions> 标签 作用&#xff1a; 用…...

广告推荐算法入门 day1 --项目选型

文章目录 0 前言1 广告推荐的基本流程2 场景和baseline初步框定2.1召回场景2.2排场景2.3精排场景 3 一个入门小例子感受--淘宝用户购物行为数据可视化分析3.1 数据集介绍3.2 数据分析目标1.时间维度2.产品维度3.行为维度4.用户维度 4 基础项目选型4.1场景 推荐资料后记 0 前言 …...

【Qt】之音视频编程2:QtAV的使用篇

QtAV 基本播放控制功能实现&#xff08;C & QML&#xff09; QtAV 提供了完整的播放控制 API&#xff0c;支持 播放、暂停、停止、快进快退、截屏 等功能。以下是具体实现方法&#xff1a; 1. C 控制方式 基本播放控制 #include <QtAV> #include <QtAV/AVPlaye…...

技术视角下的TikTok店铺运营:从0到1的5个关键点

在当今数字化时代&#xff0c;TikTok Shop作为新兴的电商平台&#xff0c;为众多商家带来了新的机遇。从技术运营的角度来看&#xff0c;以下5个关键点是每个TikTok店铺运营者都需要注意的&#xff1a; 1、规则先行&#xff0c;技术助力合规开店 地区选择&#xff1a;技术分析显…...

机器学习 --- 特征工程(一)

机器学习 — 特征工程&#xff08;一&#xff09; 文章目录 机器学习 --- 特征工程&#xff08;一&#xff09;一&#xff0c;特征工程概念二&#xff0c;特征工程API三&#xff0c;DictVectorizer 字典列表特征提取四&#xff0c;CountVectorizer 文本特征提取4.1 API4.2 英文…...