三方接口设计注意事项

news2025/6/4 11:43:33

前言

随着业务系统间集成需求的增加,三方接口设计已成为现代软件架构中的关键环节。一个设计良好的三方接口不仅能够提供稳定可靠的服务,还能确保数据安全、提升系统性能并支持业务的持续发展。

一、设计原则

1. 统一接口原则

三方接口设计应遵循统一的接口原则,确保接口的一致性和可预测性。RESTful架构风格是目前广泛采用的接口设计范式,它强调以下几点:

RESTful设计风格

  • 使用HTTP标准方法(GET、POST、PUT、DELETE等)对资源进行操作
  • 资源使用URI唯一标识,URI应基于名词而非动词
  • 使用HTTP状态码表示操作结果
  • 无状态通信,每个请求包含所有必要信息
  • 使用JSON或XML等标准数据交换格式

微软Azure架构中心指出:“RESTful Web API应符合平台独立性和松散耦合原则,这意味着客户端可以调用Web API,而不考虑内部实现,且客户端和Web服务可以独立发展。”

接口一致性

  • 保持命名风格一致(如驼峰命名、下划线命名)
  • 保持参数传递方式一致(URL参数、请求体等)
  • 保持错误返回格式一致
  • 保持接口响应结构一致

平台独立性

  • 不依赖特定客户端实现
  • 使用标准协议和数据格式
  • 提供明确的接口文档
  • 避免使用特定平台的专有技术

2. 接口设计规范

良好的接口设计规范能够提高接口的可用性和可维护性,降低使用者的学习成本。

URI设计

  • 使用名词表示资源,避免使用动词
    // 推荐
    GET /users/123
    
    // 不推荐
    GET /getUser/123
    
  • 使用复数名词命名集合URI
    // 推荐
    GET /orders
    
    // 不推荐
    GET /order
    
  • 保持URI层次结构清晰
    GET /users/123/orders/456  // 获取用户123的订单456
    
  • 避免在URI中暴露实现细节(如数据库表名)
  • 使用连字符(-)提高URI可读性,避免使用下划线(_)

阮一峰在《RESTful API设计指南》中强调:“在RESTful架构中,每个网址代表一种资源,所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。”

请求方法使用

  • GET:获取资源,不应有副作用
  • POST:创建新资源
  • PUT:更新资源(提供完整资源)
  • PATCH:部分更新资源
  • DELETE:删除资源
  • HEAD:获取资源元数据
  • OPTIONS:获取资源支持的操作

状态码使用

  • 2xx:成功(200 OK、201 Created、204 No Content)
  • 3xx:重定向(301 Moved Permanently、302 Found)
  • 4xx:客户端错误(400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found)
  • 5xx:服务器错误(500 Internal Server Error、503 Service Unavailable)

参数设计

  • 明确区分必选参数和可选参数
  • 为参数提供合理的默认值
  • 使用描述性参数名称
  • 对参数进行类型和范围验证
  • 支持过滤、排序和分页参数
    GET /users?limit=10&offset=20&sort=name&order=asc
    

3. 简洁性原则

接口设计应遵循简洁性原则,避免不必要的复杂性。

功能聚焦

  • 每个接口功能单一,避免过度设计
  • 避免一个接口承担多个业务功能
  • 将复杂操作拆分为多个简单接口

避免过度暴露

  • 只暴露必要的业务功能
  • 隐藏内部实现细节
  • 避免暴露敏感信息

避免冗余设计

  • 避免创建功能重复的接口
  • 避免在不同接口中重复相同的业务逻辑
  • 避免过度的数据传输

4. 松耦合原则

松耦合是设计可维护和可扩展接口的关键原则。

接口与实现分离

  • 接口定义与具体实现分离
  • 客户端不依赖服务端实现细节
  • 服务端可以独立更新实现而不影响客户端

避免紧耦合依赖

  • 避免接口之间的强依赖关系
  • 避免接口与特定业务逻辑的紧耦合
  • 避免接口与特定数据库结构的紧耦合

使用超媒体链接

  • 在响应中包含相关资源的链接
  • 使用HATEOAS原则指导客户端后续操作
  • 减少客户端对API结构的硬编码依赖

示例HATEOAS响应:

{
  "id": 123,
  "name": "示例产品",
  "price": 99.99,
  "_links": {
    "self": { "href": "/products/123" },
    "reviews": { "href": "/products/123/reviews" },
    "related": { "href": "/products/123/related" }
  }
}

5. 可读性原则

接口设计应注重可读性,使接口易于理解和使用。

命名规范

  • 使用清晰、描述性的资源名称
  • 使用行业通用术语
  • 保持命名风格一致性
  • 避免使用缩写和技术术语(除非是行业标准)

文档完备

  • 提供详细的API文档
  • 包含示例请求和响应
  • 说明参数类型、格式和约束
  • 提供错误码和错误处理指南

直观易用

  • 接口设计符合直觉
  • 遵循最小惊讶原则
  • 保持与行业惯例一致

二、安全机制

安全是三方接口设计中最重要的考虑因素之一。一个安全的接口应该能够保护数据的机密性、完整性和可用性。

1. 身份认证与授权

API密钥认证

  • 为每个调用方分配唯一的API密钥对(AK/SK)
    • AK(Access Key):用于标识用户身份,可公开
    • SK(Secret Key):用于签名和加密,必须保密
  • 根据不同权限需求分配不同的密钥对
  • 定期轮换密钥,降低泄露风险

腾讯云开发者社区文章指出:“通过使用Access Key Id / Secret Access Key加密的方法来验证某个请求的发送者身份。其中AK用于标示用户,SK是用户用于加密认证字符串和验证认证字符串的密钥,SK必须保密。”

Token认证

  • 基于OAuth 2.0等标准协议实现
  • 使用短期访问令牌(Access Token)进行认证
  • 支持令牌刷新机制(Refresh Token)
  • 设置合理的令牌有效期
  • 支持令牌撤销机制

权限控制

  • 实现细粒度的权限划分(读、写、删除等)
  • 基于角色的访问控制(RBAC)
  • 支持资源级别的权限控制
  • 最小权限原则,只授予必要的权限
  • 权限变更审计和记录

2. 数据安全

传输安全

  • 强制使用HTTPS/TLS加密传输
  • 使用最新的TLS版本,禁用不安全的加密套件
  • 实现证书固定(Certificate Pinning)防止中间人攻击
  • 敏感数据传输时进行额外加密

数据加密

  • 敏感数据存储时使用强加密算法
  • 使用安全的密钥管理系统
  • 实现端到端加密机制
  • 避免在日志中记录敏感信息

数据脱敏

  • 对敏感个人信息进行脱敏处理
  • 实现不同级别的数据脱敏策略
  • 在响应中隐藏敏感字段
  • 遵循数据最小化原则

3. 防攻击措施

防重放攻击

  • 请求中包含时间戳(timeStamp)
    • 验证请求时间与服务器时间的差值
    • 设置合理的时间窗口(如5分钟)
  • 使用唯一随机数(nonce)
    • 每个请求使用不同的随机数
    • 服务端记录并验证随机数不重复
  • 结合时间戳和随机数进行防重放验证

腾讯云开发者社区的文章解释:“通过在接口签名请求参数加上时间戳timeStamp + 随机数nonce可以防止’重放攻击’。服务端要求客户端发过来的时间戳必须是最近60秒内的,这样即使请求被截取了,也只能在60s内进行重放攻击。而随机数nonce确保在短时间内连续生成两个相同nonce的情况几乎为0,服务端可以检查一分钟内请求的随机数,如果有两个相同的,基本可以判定为重放攻击。”

请求签名

  • 使用HMAC等算法对请求参数进行签名
  • 签名计算包含所有关键参数
  • 服务端重新计算签名并与请求签名比对
  • 签名验证失败时拒绝请求

签名流程示例:

  1. 收集所有请求参数(不包括签名本身)
  2. 按参数名称字典序排序
  3. 拼接成key1=value1&key2=value2的形式
  4. 使用SK和适当的算法(如HMAC-SHA256)计算签名
  5. 将签名添加到请求中

防注入攻击

  • 对所有输入参数进行严格验证和过滤
  • 使用参数化查询,避免直接拼接SQL
  • 实现输入长度限制和格式验证
  • 过滤特殊字符和危险内容

限流与防爆破

  • 实现IP级别的访问限制
  • 基于用户的API调用频率限制
  • 实现渐进式延迟或指数退避算法
  • 对异常访问行为进行监控和阻断

4. 安全审计与监控

访问日志

  • 记录所有API调用的详细信息
  • 包含调用方、时间、IP、操作类型等信息
  • 实现安全日志的集中存储和备份
  • 确保日志不可篡改

异常监控

  • 实时监控异常访问模式
  • 检测并报警可疑的访问行为
  • 监控认证失败和权限违规
  • 建立安全事件响应机制

安全审计

  • 定期进行安全审计和评估
  • 审查权限分配和使用情况
  • 检查密钥和证书的有效性
  • 评估安全策略的有效性

5. 合规性考虑

数据保护法规

  • 遵循GDPR、CCPA等数据保护法规
  • 实现用户数据访问和删除机制
  • 获取必要的数据处理同意
  • 实现数据泄露通知机制

行业标准

  • 遵循行业特定的安全标准(如PCI DSS)
  • 实施相关安全控制措施
  • 定期进行合规性评估
  • 保持安全措施的更新

三、性能优化

性能是衡量三方接口质量的重要指标。优化接口性能不仅能提升用户体验,还能降低系统资源消耗。

1. 缓存策略

客户端缓存

  • 使用HTTP缓存机制(Cache-Control、ETag、Last-Modified)
  • 为不常变化的资源设置合理的缓存时间
  • 使用条件请求(If-Modified-Since、If-None-Match)减少传输
  • 明确指定不应缓存的敏感数据

HTTP缓存头示例:

Cache-Control: max-age=3600, public
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
Last-Modified: Wed, 21 Oct 2025 07:28:00 GMT

服务端缓存

  • 实现多级缓存策略(内存缓存、分布式缓存)
  • 缓存热点数据和计算结果
  • 使用缓存预热减少冷启动问题
  • 实现合理的缓存失效策略
  • 避免缓存雪崩和缓存穿透问题

CDN加速

  • 使用CDN分发静态资源
  • 配置合理的CDN缓存策略
  • 实现CDN内容刷新机制
  • 考虑使用边缘计算优化API响应

2. 限流与降级

限流机制

  • 实现基于用户的请求限制(Rate Limiting)
  • 使用令牌桶或漏桶算法控制请求速率
  • 在HTTP响应头中提供限流信息(X-RateLimit-*)
  • 针对不同接口设置不同的限流阈值
  • 实现分布式限流机制

限流响应头示例:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1589458200

服务降级

  • 设计优雅的服务降级策略
  • 在高负载情况下返回简化响应
  • 优先保障核心功能可用性
  • 实现熔断机制,避免级联故障
  • 提供明确的降级状态提示

负载均衡

  • 实现多实例部署和负载分散
  • 使用智能负载均衡算法(如最小连接数)
  • 支持基于地理位置的流量分发
  • 实现健康检查和故障转移

3. 数据传输优化

数据压缩

  • 启用HTTP压缩(gzip、Brotli)
  • 支持请求和响应的压缩
  • 为大型响应自动启用压缩
  • 在客户端支持解压缩能力

压缩请求头示例:

Accept-Encoding: gzip, deflate, br
Content-Encoding: gzip

数据精简

  • 实现字段过滤,只返回必要数据
  • 支持稀疏字段集(Sparse Fieldsets)
  • 避免过度获取(Over-fetching)
  • 避免数据冗余和重复

字段过滤示例:

GET /users/123?fields=id,name,email

批量操作

  • 支持批量请求和响应
  • 实现批量创建、更新和删除操作
  • 提供批量操作的原子性保证
  • 支持部分成功的结果返回

批量操作示例:

POST /users/batch
{
  "users": [
    { "name": "用户1", "email": "user1@example.com" },
    { "name": "用户2", "email": "user2@example.com" }
  ]
}

4. 异步处理

异步API设计

  • 对耗时操作实现异步处理
  • 返回任务ID和状态查询接口
  • 实现Webhook回调机制
  • 提供任务进度查询能力

异步处理流程示例:

  1. 客户端发起耗时操作请求
  2. 服务端返回任务ID和状态URL
    {
      "task_id": "abc123",
      "status_url": "/tasks/abc123",
      "estimated_time": 120
    }
    
  3. 客户端定期查询任务状态或等待回调通知
  4. 任务完成后,客户端获取结果

消息队列

  • 使用消息队列解耦请求和处理
  • 实现任务的可靠投递和处理
  • 支持任务优先级和延迟执行
  • 提供消息持久化和重试机制

长轮询与WebSocket

  • 对实时性要求高的场景使用WebSocket
  • 实现长轮询作为WebSocket的降级方案
  • 优化连接管理和心跳机制
  • 实现消息的有序传递

5. 代码与数据库优化

代码效率

  • 优化算法和数据结构
  • 避免不必要的计算和处理
  • 使用异步I/O和非阻塞操作
  • 实现代码级别的缓存

数据库优化

  • 优化数据库查询和索引
  • 实现数据库连接池
  • 使用读写分离减轻主库负担
  • 实现数据分片和分区策略
  • 避免N+1查询问题

资源管理

  • 合理配置线程池和连接池
  • 实现请求超时控制
  • 优化内存使用和垃圾回收
  • 监控并优化系统资源使用

四、可扩展性设计

可扩展性是确保接口能够适应业务增长和变化的关键因素。良好的可扩展性设计能够降低未来的维护成本。

1. 版本控制

版本策略

  • 在URI中包含版本号(如/api/v1/resources)
  • 或通过HTTP头指定版本(如Accept-Version: v1)
  • 使用语义化版本号(Semantic Versioning)
  • 明确定义主版本、次版本和补丁版本的变更范围
  • 避免频繁发布主版本更新

阮一峰在《RESTful API设计指南》中建议:“应该将API的版本号放入URL。另一种做法是,将版本号放在HTTP头信息中,但不如放入URL方便和直观。”

向后兼容

  • 新版本保持对旧版本的兼容性
  • 添加新字段而不删除或修改现有字段
  • 扩展而非修改现有功能
  • 为即将废弃的功能提供过渡期
  • 使用默认值处理缺失参数

版本共存

  • 支持多个API版本并行运行
  • 为每个版本提供独立文档
  • 明确版本支持周期和废弃计划
  • 引导用户迁移到新版本

2. 扩展机制

扩展字段

  • 在数据模型中预留扩展字段(如extensions对象)
  • 使用命名空间避免扩展字段冲突
  • 定义扩展字段的格式和验证规则
  • 确保核心功能不依赖扩展字段

扩展字段示例:

{
  "id": 123,
  "name": "产品名称",
  "extensions": {
    "custom_field1": "值1",
    "partner_xyz": {
      "special_data": "特殊数据"
    }
  }
}

自定义头部

  • 支持自定义HTTP头部传递元数据
  • 使用标准前缀(如X-Custom-)标识自定义头部
  • 文档化所有支持的自定义头部
  • 确保自定义头部不影响核心功能

查询参数扩展

  • 支持灵活的查询参数组合
  • 实现字段过滤和投影机制
  • 支持复杂的排序和过滤条件
  • 提供元数据参数(如include_count=true)

3. 模块化设计

资源分组

  • 按业务领域划分API资源
  • 实现资源之间的清晰边界
  • 避免资源间的紧耦合依赖
  • 支持独立部署和扩展

微服务架构

  • 将API拆分为独立的微服务
  • 每个微服务负责特定业务领域
  • 服务间通过标准接口通信
  • 支持服务的独立扩展和部署

API网关

  • 使用API网关统一管理接口
  • 实现路由、认证、限流等横切关注点
  • 支持API组合和聚合
  • 提供API使用分析和监控

4. 动态发现与配置

服务发现

  • 实现服务注册与发现机制
  • 支持动态服务地址解析
  • 提供服务健康检查
  • 实现智能路由和负载均衡

动态配置

  • 支持API行为的动态配置
  • 实现特性开关(Feature Flags)
  • 支持按环境或用户群体的配置差异
  • 提供配置变更的实时生效机制

自适应行为

  • 根据客户端能力调整响应
  • 支持内容协商(Content Negotiation)
  • 实现渐进增强和优雅降级
  • 根据负载情况动态调整服务行为

5. 国际化与本地化

多语言支持

  • 支持语言偏好设置(Accept-Language头)
  • 返回本地化的错误消息和提示
  • 处理不同语言的字符编码
  • 支持右到左(RTL)语言

地区适配

  • 支持地区特定的数据格式(日期、货币等)
  • 处理时区差异
  • 适应不同地区的法规要求
  • 提供地区特定的业务规则

五、错误处理与文档

完善的错误处理机制和详细的文档是提高接口可用性和降低使用门槛的关键。

1. 错误处理机制

错误码设计

  • 建立统一的错误码体系
  • 区分系统级错误和业务级错误
  • 使用层次化的错误码结构
  • 确保错误码的唯一性和可追溯性
  • 为每个错误码提供明确的解释

错误响应格式

  • 使用一致的错误响应结构
  • 包含错误码、错误消息和详细说明
  • 提供问题定位信息(如请求ID)
  • 可选提供错误修复建议

标准错误响应示例:

{
  "error": {
    "code": "AUTH_001",
    "message": "认证失败",
    "details": "提供的API密钥无效或已过期",
    "request_id": "f7a1e5b3-8c42-4a01-8a9d-3d6e7f8a9b0c"
  }
}

HTTP状态码使用

  • 正确使用HTTP状态码表示错误类型
  • 4xx状态码表示客户端错误
  • 5xx状态码表示服务器错误
  • 避免全部使用200状态码而在响应体中包含错误信息

阮一峰在《RESTful API设计指南》中指出:“如果状态码是4xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可。”

2. 异常处理策略

优雅降级

  • 设计服务降级策略
  • 在部分功能不可用时保持核心功能可用
  • 提供明确的降级状态提示
  • 实现自动恢复机制

重试机制

  • 为不稳定操作提供重试策略
  • 实现指数退避算法
  • 设置最大重试次数和超时时间
  • 避免对非幂等操作进行重试

日志记录

  • 记录详细的错误日志
  • 包含错误上下文和请求信息
  • 实现分级日志(ERROR、WARN、INFO等)
  • 确保敏感信息不会记录到日志中
  • 实现集中式日志收集和分析

3. 接口文档规范

文档内容要素

  • 接口概述和使用场景
  • 请求URL和方法
  • 请求参数详细说明(名称、类型、是否必须、默认值、约束条件)
  • 响应结构和字段说明
  • 错误码列表和处理建议
  • 示例请求和响应
  • 安全和认证要求
  • 限流和性能说明

文档格式与工具

  • 使用OpenAPI/Swagger等标准规范
  • 提供在线交互式文档
  • 支持文档版本控制
  • 提供多种格式(HTML、PDF、Markdown等)
  • 使用自动化工具保持文档与代码的一致性

文档更新与维护

  • 建立文档更新流程
  • 记录文档变更历史
  • 标注废弃和即将变更的功能
  • 提供文档反馈渠道
  • 定期审查和更新文档

4. 示例与SDK

代码示例

  • 提供各种常用语言的调用示例
  • 覆盖常见使用场景和操作
  • 包含错误处理和最佳实践
  • 确保示例代码可直接运行
  • 定期更新示例代码

SDK开发

  • 为主流编程语言提供官方SDK
  • 实现认证、请求签名等通用功能
  • 提供类型安全的API调用接口
  • 包含完整的错误处理机制
  • 支持异步操作和并发请求

沙箱环境

  • 提供测试和开发环境
  • 支持模拟各种场景和错误情况
  • 不影响生产数据
  • 提供测试账号和测试数据
  • 支持请求和响应的调试功能

5. 变更管理

变更通知

  • 提前公告API变更计划
  • 明确变更影响范围和迁移方案
  • 提供足够的过渡期
  • 使用多种渠道通知(邮件、控制台、文档等)

废弃流程

  • 明确功能废弃策略和时间线
  • 在响应中标记废弃字段或功能
  • 提供替代方案和迁移指南
  • 监控废弃功能的使用情况

向后兼容

  • 尽量保持向后兼容性
  • 新增而不是修改或删除字段
  • 支持旧版本参数和格式
  • 提供兼容层处理版本差异

六、实践案例与总结

1. 行业最佳实践

大型平台API设计案例

  • GitHub API:版本控制和HATEOAS实现
  • Stripe API:一致性和文档完备性
  • Twilio API:错误处理和SDK支持
  • Salesforce API:多版本共存和向后兼容

行业标准与规范

  • OpenAPI规范(前身为Swagger)
  • JSON API规范
  • OAuth 2.0和OpenID Connect
  • GraphQL规范(适用于复杂数据查询)

2. 常见陷阱与解决方案

设计陷阱

  • 过度设计:尝试在单个接口中实现过多功能
    • 解决方案:遵循单一职责原则,拆分复杂接口
  • 不一致性:不同接口使用不同的命名和格式约定
    • 解决方案:建立统一的API设计规范并严格执行
  • 紧耦合:接口与特定实现或技术栈紧密绑定
    • 解决方案:抽象业务逻辑,隐藏实现细节

安全陷阱

  • 认证不足:仅依赖单一认证机制
    • 解决方案:实现多层次认证和授权机制
  • 过度信任:未对输入进行充分验证
    • 解决方案:实施严格的输入验证和过滤
  • 敏感信息泄露:在响应或日志中包含敏感数据
    • 解决方案:实施数据脱敏和访问控制

性能陷阱

  • 过度获取:返回客户端不需要的大量数据
    • 解决方案:实现字段过滤和分页机制
  • 缓存不足:频繁请求相同的数据
    • 解决方案:实施多层次缓存策略
  • 同步阻塞:使用同步处理处理耗时操作
    • 解决方案:实现异步处理和任务队列

3. 设计核对清单

设计阶段核对

  • 接口是否遵循RESTful原则?
  • 资源命名是否清晰且一致?
  • 是否使用了正确的HTTP方法和状态码?
  • 是否考虑了版本控制和向后兼容?
  • 是否提供了足够的扩展机制?

安全核对

  • 是否实施了强认证和授权机制?
  • 是否使用HTTPS加密传输?
  • 是否实施了防重放和防注入措施?
  • 是否有完善的日志记录和审计机制?
  • 是否符合相关的数据保护法规?

性能核对

  • 是否实施了适当的缓存策略?
  • 是否有限流和降级机制?
  • 是否优化了数据传输(压缩、精简)?
  • 是否为耗时操作提供异步处理?
  • 是否考虑了高并发和大数据量场景?

文档核对

  • 是否提供了完整的API文档?
  • 是否包含了详细的参数和响应说明?
  • 是否提供了错误码列表和处理指南?
  • 是否包含了示例请求和响应?
  • 是否有SDK和代码示例?

七、总结

  设计优秀的三方接口需要综合考虑多个方面,包括设计原则、安全机制、性能优化、可扩展性以及错误处理与文档。通过遵循本文提出的最佳实践和注意事项,开发者可以设计出更加优雅、安全、高效且易于使用的三方接口。

  在实际应用中,应根据具体业务需求和技术环境,灵活调整和应用这些原则。同时,随着技术的发展和业务的变化,应定期审视和优化接口设计,确保其持续满足需求并保持竞争力。

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

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

相关文章

从0开始学vue:Element Plus详解

一、核心架构解析二、技术实现指南三、高级特性实现四、性能优化方案五、生态扩展方案六、调试与测试七、版本演进路线 Element Plus 是专为 Vue 3 设计的桌面端 UI 组件库,基于 Vue 3 的 Composition API 重构,在保持与 Element UI 兼容性的同时&#x…

互联网向左,区块链向右

2008年,中本聪首次提出了比特币的设想,这打开了去中心化的大门。 比特币白皮书清晰的描述了去中心化支付的解决方案,并分别从以下几个方面阐述了他的理念: 一、由转账双方点对点的通讯,而不通过中心化的第三方&#xf…

Python6.1打卡(day33)

DAY 33 MLP神经网络的训练 知识点回顾: 1.PyTorch和cuda的安装 2.查看显卡信息的命令行命令(cmd中使用) 3.cuda的检查 4.简单神经网络的流程 1.数据预处理(归一化、转换成张量) 2.模型的定义 …

论文阅读笔记——Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset

I3D 论文 UCF-101(13000多个视频)和 HMDB-51(7000多个视频)数据集过小,提出了 Kinetics 数据集,并且在其之上预训练之后能够迁移到其他小的数据集。 2DLSTM:使用2D CNN的好处是可以直接从 Ima…

vscode编辑器怎么使用提高开发uVision 项目的效率,如何编译Keil MDK项目?

用vscode编译uVision 项目只需要安装一个Keil Assistant插件,即可用vscode开发“keil 项目”。极大提高开发速度! 1.安装Keil Assistant插件 安装插件成功之后,应该会让安装一个东西,点击安装即可 2.配置安装包路径 3.打开 uVi…

AR测量工具:精准测量,多功能集成

在日常生活中,我们常常会遇到需要测量物体长度、距离或角度的情况。无论是装修房屋、制作家具,还是进行户外活动,一个精准的测量工具都能大大提高我们的工作效率。AR测量工具就是这样一款集多种功能于一体的实用测量软件,它利用增…

【Go-补充】Sync包

并发编程-Sync包 sync.WaitGroup 在代码中生硬的使用time.Sleep肯定是不合适的,Go语言中可以使用sync.WaitGroup来实现并发任务的同步。 sync.WaitGroup有以下几个方法: 方法名功能(wg * WaitGroup) Add(delta int)计数器delta(wg *WaitGroup) Done()…

设备驱动与文件系统:01 I/O与显示器

操作系统设备驱动学习之旅——以显示器驱动为例 从这一节开始,我要学习操作系统的第四个部分,就是i o设备的驱动。今天要讲的是第26讲,内容围绕i o设备中的显示器展开,探究显示器是如何被驱动的,也就是操作系统怎样让…

智慧充电桩数字化管理平台:环境监测与动态数据可视化技术有哪些作用?

随着新能源汽车的普及,智慧充电桩作为基础设施的重要组成部分,正逐步向数字化、智能化方向发展。环境监测与动态数据可视化技术的应用,为充电桩的高效管理和运维提供了全新解决方案。通过实时采集环境参数与运行数据,并结合可视化…

家政小程序开发,开启便捷生活新篇章

在快节奏的现代生活中,家务琐事常常让人分身乏术,如何高效解决家政服务需求成了众多家庭的难题。家政小程序开发,正是为解决这一痛点而生,它将为您带来前所未有的便捷生活体验。 想象一下,您只需打开手机上的家政小程…

李臻20242817_安全文件传输系统项目报告_第14周

安全文件传输系统项目报告(第 14 周) 1. 代码链接 Gitee 仓库地址:https://gitee.com/li-zhen1215/homework/tree/master/Secure-file 代码结构说明: SecureFileTransfer/ ├── client/ # 客户端主目…

20250531MATLAB三维绘图

MATLAB三维绘图 三维曲线:plot3功能介绍代码实现过程plot3实现效果 三维曲面空间曲面作图命令:meshmeshgrid语法示例应用meshgrid实操训练 peakspeaks 的基本用法peaks数学表达式实操训练自定义网格大小使用自定义网格 meshMATLAB代码对齐快捷键Ctrli墨西…

深入理解C#异步编程:原理、实践与最佳方案

在现代软件开发中,应用程序的性能和响应能力至关重要。特别是在处理I/O密集型操作(如网络请求、文件读写、数据库查询)时,传统的同步编程方式会导致线程阻塞,降低程序的吞吐量。C# 的异步编程模型(async/aw…

基于千帆大模型的AI体检报告解读系统实战:使用OSS与PDFBox实现PDF内容识别

目录 说明 前言 需求 流程说明 表结构说明 整体流程 百度智能云 注册和实名认证 创建应用 费用说明 大模型API说明 集成大模型 设计Prompt 上传体检报告 读取PDF内容 功能实现 智能评测 抽取大模型工具 功能实现 总结 说明 AI体检报告解读、病例小结或者…

Spring,SpringMVC,SpringBoot

1.Spring最核心包括aop和ioc概念 AOP 能够将将哪些于业务无关的,并且大量重复的业务逻辑进行封装起来,便于减少重复代码,降低模块之间的耦合度,给未来的系统更好的可用性和可维护性。 Spring中AOP是采用动态代理,JDK代…

数据分析学习笔记——A/B测试

目录 前言 A/B测试中的统计学方法 假设检验 Levenes Test莱文测试 t 检验(两组均值差异) 实战案例 数据来源及参考资料 代码详解 导入数据 计算ROI Request检验 GMV检验 ROI检验 结语 前言 什么是A/B测试?说白了就是中学生物实…

基于RK3568/RK3588/全志H3/飞腾芯片/音视频通话程序/语音对讲/视频对讲/实时性好/极低延迟

一、前言说明 近期收到几个需求都是做音视频通话,很多人会选择用webrtc的方案,这个当然是个不错的方案,但是依赖的东西太多,而且相关组件代码量很大,开发难度大。所以最终选择自己属性的方案,那就是推流拉…

解决 Win11 睡眠后黑屏无法唤醒的问题

目录 一、问题描述二、解决方法1. 禁用快速启动2. 设置 Management Engine Interface3. 允许混合睡眠其他命令 4. 修复系统文件5. 更新 Windows 或驱动程序6. 其他1)更改电源选项2)刷新 Hiberfil.sys 文件3)重置电源计划4)运行系统…

[ElasticSearch] RestAPI

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

Linux中的shell脚本

什么是shell脚本 shell脚本是文本的一种shell脚本是可以运行的文本shell脚本的内容是由逻辑和数据组成shell脚本是解释型语言 用file命令可以查看文件是否是一个脚本文件 file filename 脚本书写规范 注释 单行注释 使用#号来进行单行注释 多行注释 使用 : " 注释内容…