系统性能的提升方向

  1. 服务器并发处理能力:通过优化内存管理策略、选择合适的连接模式(长连接或短连接)、改进 I/O 模型(如 epollIOCP)、以及采用高效的服务器并发策略(如多线程、事件驱动等),可以有效提升服务器的并发响应能力。

  2. 数据库性能优化:包括合理设计索引、使用连接池减少连接开销、借助临时表提升中间数据处理效率、根据需求进行反范式化设计,以及引入各类 NoSQL 技术(如 RedisMongoDB)以缓解关系型数据库在高并发读写场景下的性能瓶颈。

  3. 分布式计算能力提升:通过引入消息队列等中间件实现异步解耦,以及采用 MapReduceSpark 等并行计算模型,能够在大数据处理与复杂计算场景下显著提升系统的吞吐量与可伸缩性。

  4. 系统扩展性设计:通过复制与读写分离提升数据库读写性能,采用垂直分区(按功能拆分)和水平分区(按数据范围拆分)对系统进行拆解,并进行业务模块的合理划分,从而实现系统的高可扩展性与模块独立部署。

  5. 代码级优化与重构:使用无状态设计简化多线程编程,利用资源池(如线程池、连接池)提升资源复用率,同时采用合理的数据结构与实体建模,提高程序执行效率与可维护性。

  6. 缓存系统设计:在分布式环境下,通过页面缓存、内容静态化、反向代理缓存等机制,可大幅降低动态内容的生成开销,是提升系统性能的关键手段之一。

在上述各类性能优化手段中,缓存机制通常是性价比最高、最优先考虑的方案,可在不修改核心业务逻辑的前提下,迅速降低系统负载并提升响应速度。


服务器并发处理策略

✅ 1. 连接模式选择:长连接 vs 短连接

模式特点适用场景
长连接一次连接,多次请求高频交互,如 IMWebSocket、微服务调用
短连接每次请求后即关闭连接请求频率低、简单事务型操作,如 HTTP API、图片访问

🔎 选择建议

  • 请求频繁、会话状态相关:用长连接可减少握手开销
  • 事务性请求、客户端数量极多(如 CDN 边缘):短连接可节省服务器资源

✅ 2. I/O 模型选择:阻塞、非阻塞、I/O 多路复用、异步 I/O

模型描述适用场景
阻塞 I/O简单直观,效率低小型系统、原型阶段
非阻塞 I/O不阻塞系统调用,需轮询简单异步场景
I/O 多路复用(select、epoll)1个线程监听多个连接高并发网络服务,如 HTTP 网关、代理
异步 I/O(如 IOCP、Linux AIO)操作系统通知事件完成超高性能、对响应延迟要求极高的系统,如交易系统

🔎 选择建议

  • Linux + 高并发:epoll 是主流选择(如 nginx
  • Windows 高并发:IOCP
  • IOPS 场景(如文件服务器):可研究 AIO

✅ 3. 并发策略选择:多进程、多线程、事件驱动、线程池

策略描述适用场景
多进程稳定、隔离性好,但开销大Web服务器(如 nginx master-worker 模型)
多线程资源利用率高,但线程切换开销大多核 CPU、大量并发连接
事件驱动(Reactor)低资源占用,高性能网络服务器,RPC 框架(如 libeventMuduo
线程池控制线程数,避免频繁创建销毁IO密集型服务、业务层线程池

🔎 选择建议

  • 网络服务器:事件驱动 + IO 多路复用 + 线程池 是常见组合(如 Muduonginx
  • CPU 密集:使用多线程并做任务切分
  • 多核 CPU + 并发多任务:Reactor + 多线程处理

🧠 实战建议:如何选型?

场景推荐选型
API 网关长连接 + epoll + 多线程或线程池
聊天服务器长连接 + epoll/Reactor + 线程池
文件传输服务长连接 + 异步 IO(或多线程)
高并发 Web 服务短连接 + epoll + 事件驱动(nginx 模型)
内部微服务长连接(HTTP/2RPC)+ 多线程

📌 总结选择思路

  1. 并发连接多,IO等待多IO 多路复用(epoll)+ 事件驱动
  2. 计算密集型任务多 → 多线程 + CPU 亲和绑定
  3. 连接数量巨大,响应轻量 → 长连接 + 异步 IO
  4. 任务独立、需隔离 → 多进程模型(如 Redisnginx

数据库性能优化

✅ 1. 索引设计

技术说明适用场景
B+ 树索引(普通索引、联合索引)提高查询效率,适用于范围查询、排序等大量 SELECT 查询,尤其 WHERE 子句带条件的表
哈希索引(如 Memory 表引擎)精确匹配极快等值查询场景,非范围查找
全文索引(MySQL InnoDB)用于模糊匹配、搜索引擎日志搜索、文章检索等文本内容匹配场景
覆盖索引查询字段只使用索引,无需访问表索引列即查询列,提升查询速度

🔎 选择建议

  • 查询慢?→ 查看慢查询日志 + 建立合适的索引(注意选择性)
  • 索引太多?→ 检查冗余索引,避免过多影响写性能

✅ 2. 连接池

技术说明适用场景
连接池(如 C3P0、HikariCP)复用数据库连接,避免频繁建立销毁连接所有高并发场景,尤其是 Web 服务、大量短连接请求系统
线程池 + 连接池协同配合线程调度,均衡资源业务层中间件(如 C++ 后端服务)

🔎 选择建议

  • 不用连接池会导致大量创建/销毁连接,吞吐量下降严重
  • C++ 可用 libpqxx(PostgreSQL)、MySQL Connector/C++、自己封装连接池(如基于 smart pointer + blocking queue

✅ 3. 临时表

技术说明适用场景
内存临时表小数据量中间处理(如排序/聚合)报表统计、分页排序
磁盘临时表内存不足时自动切换大量 join、子查询场景

🔎 选择建议

  • 有复杂 SQL 查询(如多级聚合)?→ 考虑手动使用临时表优化可控性
  • MySQL 中避免触发磁盘临时表:限制排序字段长度 + 增加排序用索引

✅ 4. 反范式化

技术说明适用场景
冗余字段少量重复存储,避免频繁 join查询频繁、性能敏感
表合并结构变复杂,性能变高用户展示型数据表,非核心写逻辑表

🔎 选择建议

  • 如果 join 表太多导致慢查询 → 适当反范式化
  • 读多写少(如商品展示页)→ 适合冗余存储

✅ 5. 引入 NoSQL 技术

技术说明适用场景
Redis高速键值缓存,支持事务/过期策略缓存、排行榜、消息队列、会话管理
MongoDB文档型存储,结构灵活JSON 类数据存储、大量变字段的业务(如日志)
Elasticsearch搜索引擎型数据库全文检索、日志分析、排序查询
Cassandra、HBase分布式可扩展大表存储海量写入、IoT 场景等

🔎 选择建议

  • 缓存读优化 → 用 Redis(热点数据)
  • 大字段/结构变化多的数据 → MongoDB
  • 搜索功能复杂 → Elasticsearch
  • 千万级行写入/大规模分布式写入 → Cassandra/HBase

🧠 如何综合选择优化策略?

问题优化方向
查询慢检查慢查询 + 建立合适索引 + 考虑反范式化
并发访问高连接池 + NoSQL 缓存(Redis
SQL 复杂拆解逻辑,使用临时表优化查询链路
数据写入高频引入 NoSQL 存储(RedisCassandra)或批处理机制
表结构复杂、字段经常变使用 MongoDB 等文档型数据库

🎯 总结

不同的优化策略适用于不同场景,选择的核心是明确性能瓶颈。优化顺序推荐如下:

  1. 先看是否是 查询性能问题(索引 + SQL 优化)
  2. 再看是否是 连接/并发瓶颈(连接池 + 分布式)
  3. 然后关注 数据建模与缓存(反范式化 + Redis)
  4. 最后根据业务量判断是否需要 引入 NoSQL 或数据拆分

分布式计算能力提升

✅ 一、消息队列(MQ)用于异步解耦

🌐 技术作用:

  • 实现服务之间的异步调用(解耦发送方和接收方)
  • 削峰填谷,提高系统吞吐量
  • 支持事务、失败重试、延迟处理等机制

🚦适用场景:

场景使用 MQ 的价值
用户下单、发短信、发邮件等异步执行,不阻塞主流程
秒杀、抢购高并发场景异步削峰,写入队列慢慢消费
多系统数据同步系统间广播变更消息
解耦微服务依赖发布-订阅模型,提高模块独立性

🔧 常见 MQ 技术选型:

MQ 产品优势劣势
Kafka高吞吐、分布式、顺序写延迟略高,事务弱
RabbitMQ成熟、功能强、事务支持好吞吐较低,运维复杂
RocketMQ(阿里开源)高性能、事务支持、分布式好文档略少,学习曲线中等
Redis Stream快速上手、轻量不适合超大吞吐、长队列持久化

✅ 如何选择:

需求类型推荐方案
高吞吐 + 实时日志处理Kafka
系统解耦 + 顺序 + 事务RocketMQRabbitMQ
小型服务 + 快速上线Redis Stream
事件驱动微服务KafkaRabbitMQ(如 Saga 模式)

✅ 二、MapReduce / Spark 等并行计算框架

🌐 目的:

  • 解决单机计算瓶颈(CPU、内存)
  • 分布式并行处理大规模数据GB~PB 级)
  • 高可扩展性、容错能力强

🚦适用场景:

场景适合并行计算的模型
大数据离线处理日志聚合、用户行为分析
多机并行运算海量图片处理、模型训练
数据仓库构建ETL、数据清洗、转换
实时数据分析实时 BI 指标、流式计算

🔧 MapReduce vs Spark 比较表:

特性MapReduceSpark
编程模型MapReduce 流程固定更灵活,有 RDDDataFrame
内存利用基于磁盘,慢基于内存计算,快很多
实时计算不支持Spark Streaming 支持
容错机制高,适合批处理高,也支持流计算
使用语言Java 为主支持 ScalaPythonJavaC++
学习成本中等中等偏高(但生态更好)

✅ 如何选择:

应用需求建议使用
离线批量处理、可靠性强Hadoop MapReduce(如大规模日志清洗)
实时处理、机器学习、复杂管道任务Spark(性能更好,支持 SQLMLlibGraphX
轻量流式分析(Kafka + 轻量处理)Spark Streaming / Flink
不想部署集群,轻量任务多线程 + 分布式任务调度(如 Celery、任务队列)即可

✅ 三、整合:如何搭建高性能分布式计算架构

🧱 推荐组合模型(企业常见):

            [客户端请求]↓[Web API 网关]↓┌────────────────────┐│    MQ 消息队列     │(如 Kafka / RocketMQ)└────────────────────┘↓         ↓[服务A:数据入库]   [服务B:Spark 分析任务]↓[HDFS / Hive / Redis]

🔑 优势

  • 解耦服务:不影响主流程,避免阻塞
  • 灵活计算:数据到 Spark 处理,支持定时任务或实时流
  • 统一调度:可以用 Airflow / DolphinScheduler 统一管理任务依赖

📌 总结选择建议

问题推荐方案
服务调用解耦、削峰填谷消息队列(Kafka / RabbitMQ
大规模离线处理Hadoop MapReduce
快速实时处理,灵活调度Spark / Spark Streaming
轻量级 C++ 分布式ZeroMQ + 多线程 + 分布式调度脚本
微服务架构 + 数据同步Kafka + Spark/Flink 处理链

如果你在用 C++ 开发,可以结合:

  • KafkaC++ 客户端(如 librdkafka)
  • Spark/MapReduce 联动通过 REST API 或中间文件通信(例如 C++ 写中间结果 → HDFS
  • 或采用 RPC 框架(如 brpc)连接消息队列和分布式计算节点

系统扩展性设计

✅ 一、复制与读写分离(Replication & Read/Write Splitting)

🧩 技术解释:

  • 主从复制:数据库主节点写入数据,从节点复制主数据做只读查询。
  • 读写分离:将写请求发送至主库,读请求发送至多个从库,实现并发读取负载均衡。

🔍 适用场景:

条件是否推荐
读操作远大于写操作(如 80% 是查询)✅ 极推荐
数据一致性要求不是强一致(可 eventual✅ 适用
写请求也很多❌ 不适用(需搭配分库策略)

⚠️ 注意事项:

  • 会有 主从延迟(不适合秒级一致的写后读场景)
  • 多数配合中间件(如 MyCatShardingSphere)或应用层实现路由

✅ 二、垂直分区(Vertical Partitioning)

🧩 技术解释:

  • 按照功能/模块/业务边界对系统进行拆解,形成多个独立服务(微服务思维)
    • 例:用户服务、订单服务、支付服务、搜索服务……

🧩 数据层:将一个表的字段按用途拆分成多个表

  • 用户表按频繁字段 & 低频字段分表

🔍 适用场景:

条件是否推荐
系统功能复杂,业务边界清晰✅ 推荐
不同业务模块开发部署频繁✅ 推荐
表字段数量过多(上百列)✅ 推荐进行字段级拆分
强依赖业务聚合 & 跨模块事务多❌ 拆分后处理复杂(可使用分布式事务中间件)

⚠️ 注意事项:

  • 模块间依赖需通过 API/消息通信
  • 依赖统一配置中心和服务注册(微服务架构)

✅ 三、水平分区(Horizontal Partitioning,也称分库分表)

🧩 技术解释:

  • 按照数据内容范围或哈希值将同一个表的数据分散到多个表/数据库中
    • 例:user_0001, user_0002, …,或者将用户ID哈希后落到不同表
  • 常见的分片方式:
    • 范围分片(Range):按时间或ID段划分
    • 哈希分片(Hash):按ID哈希后取模

🔍 适用场景:

条件是否推荐
单表数据量过大(>千万级)✅ 强烈推荐
写请求并发高,主库压力大✅ 推荐
查询需要跨库 Join、多表事务❌ 避免(拆分代价大)

⚠️ 注意事项:

  • 涉及 跨库事务困难
  • 涉及分片路由逻辑,需引入 Sharding 中间件(如 ShardingSphereCobar
  • 复杂查询、分页、排序需额外处理(例如汇总后再统一排序)

✅ 四、业务模块划分(功能解耦)

🧩 技术解释:

  • 按照业务领域进行模块划分(DDD思想)
  • 每个模块对应独立的部署单元,可独立扩展、独立部署

🌐 微服务是最典型的模块划分架构:

服务名称功能职责
UserService负责用户注册、认证
OrderService负责下单、支付流程
ProductService商品上架、库存管理

🔍 适用场景:

条件是否推荐
团队开发协作、持续交付要求高✅ 推荐
不同业务增长速度不同✅ 推荐(分布式扩展)
系统规模小,功能简单❌ 不适合(引入复杂性过高)

✅ 选择指南:如何判断哪种扩展方式优先使用?

问题推荐技术
数据库读压力大✅ 主从复制 + 读写分离
单表数据过大(千万以上)✅ 水平分表(按用户ID、时间等)
系统模块越来越多✅ 垂直分区(功能拆分) + 微服务
跨团队协作 + 独立部署✅ 微服务 + 独立数据库/缓存
查询、聚合依赖多个服务❌ 拆分前需评估成本(事务复杂)

🎯 实战架构建议(以 C++ 后端为例)

                     +-----------------+|     API 网关     |+--------+--------+|┌──────────┴──────────┐|                     |+-------▼------+      +--------▼--------+|用户服务(C++) |      |  订单服务(C++) |+-------+------+      +--------+--------+|                     |+-----------▼----+        +-------▼---------+| user_db_master |        | order_db_master || user_db_slave  |        | order_db_slave  |+----------------+        +------------------+
  • 读写分离:主库写,从库读
  • 服务垂直拆分:按功能拆解,解耦模块
  • 模块扩展性好:可独立扩展每个模块,用户服务扛不住压力 → 单独扩容

✅ 总结

技术优势适用
主从复制 + 读写分离提高读性能,结构简单查询为主的系统
垂直分区解耦模块,易扩展功能多、团队开发协作多的系统
水平分区提高写性能,突破单表瓶颈单表太大、写并发高
模块划分(微服务)易维护、独立部署中大型系统,迭代快

代码级优化与重构的选择

✅ 1. 无状态设计:简化多线程编程的基础

🎯 设计原则:

  • 不保存请求上下文和状态信息,避免线程共享变量
  • 每次请求是独立的,天然并发安全(无锁或极少加锁)

✅ 使用时机:

条件是否适合使用无状态设计
服务是幂等的,无强状态依赖✅ 非常适合
多线程处理请求,不共享全局状态✅ 推荐
请求过程中需维持用户上下文❌ 不适合(需借助 Token / Session

🧠 C++中示例:

void handleRequest(const Request& req) {Response res = process(req);  // 无状态,无全局变量sendResponse(res);
}

⚠️ 注意:

  • 无状态 ≠ 不使用状态,而是状态不共享或通过参数/上下文传递

✅ 2. 资源池:提升资源复用率的关键

🧩 常见资源池:

类型作用
线程池复用线程,避免频繁创建/销毁
连接池(数据库、Redis)缓存连接,减少 TCP 连接开销
对象池减少频繁分配大对象(如图像缓冲区、临时数据结构)

✅ 选择建议:

场景建议资源池
有大量短生命周期线程任务(如请求处理)✅ 线程池
数据库访问频繁,连接代价高✅ 数据库连接池
Redis/QPS 高频、连接初始化慢Redis 连接池
大量对象频繁创建(如内存块、JSON结构)✅ 对象池 / arena allocator

C++ 示例(线程池):

ThreadPool pool(8);  // 固定 8 线程pool.enqueue([]() {doHeavyTask();  // 线程复用执行
});

✅ 3. 合理选择数据结构:代码优化最“性价比高”的手段

🎯 核心理念:选用适合场景的数据结构,避免暴力遍历 &不必要的内存浪费

📌 常见优化对比:

场景推荐数据结构原因
高频插入 + 查询unordered_map哈希结构 O(1) 查询
排序、大量查找std::map / set红黑树结构 O(logN)
实时日志缓存、队列deque / ring buffer高效首尾操作
图结构搜索adjacency list + BFS/DFS更快更省空间
大对象重复构建string_view / 指针引用减少拷贝

C++ 示例(替代 std::map):

std::unordered_map<int, string> fastLookup;  // 替代 std::map

✅ 4. 实体建模:程序可维护性与可演化性的核心

🧩 什么是实体建模?

  • 将业务模型抽象为清晰的类、结构体、接口
  • 遵循 SOLID 原则(单一职责、开闭原则等)
  • 有良好的接口设计、数据封装、抽象层次清晰

✅ 建模是否合理看以下几点:

问题是否建模良好
业务代码解耦、类职责单一✅ 是
修改一个功能不用改很多模块✅ 是
类型扩展容易,依赖抽象而非实现✅ 是
所有逻辑堆在一个大类中❌ 重构必要
模型随业务混乱扩张❌ 设计缺陷

C++ 建模建议:

  • 使用 class / struct 区分数据 vs 行为
  • 使用虚函数 / 接口实现面向接口编程
  • 借助模板、策略模式实现高效复用

🧭 如何选择代码级优化策略?

优化目标推荐策略
提高并发安全性,减少锁✅ 无状态设计
减少资源开销(连接/线程)✅ 资源池
提升逻辑性能(执行速度)✅ 高效数据结构
提高代码可维护性、解耦✅ 合理建模 & 模块化
QPS 高、请求多、服务负载重✅ 多线程 + 线程池 + 无状态设计
长连接资源多,初始化代价大✅ 连接池 + 对象池

🎯 总结

技术点优势适用场景
无状态设计并发安全、易扩展高并发请求、微服务、REST API
线程池/连接池控制资源复用QPS 系统,IO密集型服务
高效数据结构提升执行效率大数据、高性能处理
建模重构易维护、可扩展中长期开发、团队协作、领域演化

缓存系统设计

✅ 1. 常见缓存机制概览

缓存类型工作位置典型用途示例技术
页面缓存客户端或CDN整个页面内容缓存CDNNginxVarnish
内容静态化服务端生成静态HTML频繁访问的动态页面静态 HTML + Nginx
反向代理缓存应用前端(边缘)缓存接口响应/资源NginxVarnish
应用内缓存后端服务中缓存对象/数据结果本地MapGuava(Java)
分布式缓存独立缓存服务多节点共享热点数据RedisMemcached

✅ 2. 各类缓存机制详解与选择建议

① 页面缓存(Page Cache)

缓存粒度: 整个 HTML 页面
典型实现: CDNNginx、浏览器本地缓存

  • ✅ 优点:
    • 命中后无需访问后端,速度极快
    • 适合完全静态或少变动的内容
  • ❌ 缺点:
    • 个性化内容不适合缓存
    • 无法精细控制缓存更新(例如登录态变化)

✅ 适用场景:

  • 新闻门户、展示型官网、商品详情页
  • 用户登录前的静态内容

② 内容静态化(Static Rendering)

缓存粒度: HTML片段或页面
实现方式: 后端动态内容预先渲染并存为静态HTML,或用 SSR 方式生成

  • ✅ 优点:
    • 避免每次都走数据库或模板引擎
    • CDN/Nginx 配合使用效果更佳
  • ❌ 缺点:
    • 内容更新依赖定时任务或触发机制
    • 对需要实时更新的内容不适合

✅ 适用场景:

  • 博客、新闻详情页、活动页
  • 一小时以内可容忍数据延迟的页面

③ 反向代理缓存(Reverse Proxy Cache)

缓存粒度: URI 请求或 API 返回数据
实现方式: Nginx / Varnish 等缓存请求结果

  • ✅ 优点:
    • 不需要改动业务代码
    • 支持过期策略、缓存 key 规则配置灵活
  • ❌ 缺点:
    • 逻辑复杂的接口缓存命中率低
    • 动态接口缓存控制需依赖 header/参数设计

✅ 适用场景:

  • 搜索页、列表页、排行榜接口
  • 查询参数固定、结果可缓存的 API

④ 应用内缓存(本地缓存)

缓存粒度: 单服务进程内缓存热点数据
实现方式: C++ 中用 mapLRU 缓存等结构

  • ✅ 优点:
    • 访问速度最快(内存命中)
    • 减轻数据库和分布式缓存压力
  • ❌ 缺点:
    • 无法跨进程共享,服务重启即失效
    • 不适合动态变更频繁的数据

✅ 适用场景:

  • 热门配置参数、本地字典映射、计数器
  • 每个服务都需要高频访问的一致性小数据集

⑤ 分布式缓存(如 Redis、Memcached)

缓存粒度: 跨服务共享的对象、结构、数据结果
典型用途: 用户信息、Session、热点数据、排行榜、购物车数据等

  • ✅ 优点:
    • 高并发支撑能力强
    • 提供丰富的数据结构(Redis
  • ❌ 缺点:
    • 网络访问有延迟(比本地慢)
    • 需维护一致性与缓存雪崩、穿透等问题

✅ 适用场景:

  • 任何需要多实例共享缓存的场景
  • 高并发热点查询
  • 电商系统中的价格、库存缓存

✅ 3. 缓存选择对比表(速查)

需求/特征推荐缓存方式
静态页面,无需频繁更新✅ 页面缓存 / 静态化
API 查询频率高,参数固定✅ 反向代理缓存
结构化数据频繁访问,读多写少Redis 缓存(带过期)
超高频小数据、快速命中✅ 应用内缓存(Map / LRU
个性化内容缓存✅ 本地缓存 + Redis 分组合
大量跨服务访问的共享数据✅ 分布式缓存

✅ 4. 实战建议:如何设计分布式缓存架构(C++ 后端)

        [Browser]|+------+------+|    CDN/Edge | ← 页面缓存+------+------+|[Nginx] ← 反向代理缓存|[C++ Backend]/        \
[本地LRU缓存]   [Redis缓存]\        /[MySQL/PostgreSQL]

✅ 5. 综合推荐选择策略

目标推荐策略
降低接口 QPS,减轻数据库压力Redis 缓存接口结果
快速返回页面,极低延迟✅ 静态页面 + 页面缓存
无需代码改动,直接加缓存Nginx/Varnish 反向代理缓存
服务间共享热门数据RedisMemcached
热门数据每个服务反复用✅ 本地缓存 + 定时刷新(LRU

✅ 6. Bonus:缓存淘汰与一致性策略

  • 淘汰策略:LRU, LFU, TTLRedis 支持)
  • 缓存更新策略:
    • 被动更新(超时失效)
    • 主动更新(数据修改时同步更新缓存)
  • 缓存穿透:空值也缓存、布隆过滤器
  • 缓存雪崩:过期时间随机化、降级兜底

如果你使用的是 C++,你可能会用:

功能C++ 实现方案
本地缓存std::unordered_map + LRU策略
Redis 访问hiredis / redis-plus-plus
CDN 静态资源托管Nginx + HTML 静态渲染
Proxy 缓存控制Nginx + cache-control 头设置

🎯 总结

静态页面优先 CDN,接口结果优先 Redis,热点对象优先本地缓存,统一缓存路由通过中间层控制。

参考

系统架构设计

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

httpclient实现http连接池

HTTP连接池是一种优化网络通信性能的技术&#xff0c;通过复用已建立的TCP连接减少重复握手开销&#xff0c;提升资源利用率。以下是关键要点&#xff1a; 核心原理与优势 ‌连接复用机制‌ 维护活跃连接队列&#xff0c;避免每次请求重复TCP三次握手/SSL协商&#xff0c;降低…

广义焦点丢失:学习用于密集目标检测的合格和分布式边界盒之GFL论文阅读

摘要 一阶段检测器通常将目标检测形式化为密集的分类与定位(即边界框回归)问题。分类部分通常使用 Focal Loss 进行优化,而边界框位置则在狄拉克δ分布下进行学习。最近,一阶段检测器的发展趋势是引入独立的预测分支来估计定位质量,所预测的质量可以辅助分类,从而提升检…

Real-World Deep Local Motion Deblurring论文阅读

Real-World Deep Local Motion Deblurring 1. 研究目标与实际问题意义1.1 研究目标1.2 实际问题1.3 产业意义2. 创新方法:LBAG模型与关键技术2.1 整体架构设计2.2 关键技术细节2.2.1 真实模糊掩码生成(LBFMG)2.2.2 门控块(Gate Block)2.2.3 模糊感知补丁裁剪(BAPC)2.3 损…

【Docker基础】Docker镜像管理:docker commit详解

目录 引言 1 docker commit命令概述 1.1 什么是docker commit 1.2 使用场景 1.3 优缺点分析 2 docker commit命令详解 2.1 基本语法 2.2 常用参数选项 2.3 实际命令示例 2.4 提交流程 2.5 步骤描述 3 docker commit与Dockerfile构建对比 3.1 构建流程对比 3.2 对…

可调式稳压二极管

1.与普通稳压二极管的比较&#xff1a; 项目普通稳压二极管可调式稳压二极管&#xff08;如 TL431&#xff09;输出电压固定&#xff08;如5.1V、3.3V&#xff09;可调&#xff08;2.5V ~ 36V&#xff0c;取决于外部分压&#xff09;精度低&#xff08;5%~10%&#xff09;高&a…

Kafka使用Elasticsearch Service Sink Connector直接传输topic数据到Elasticsearch

链接&#xff1a;Elasticsearch Service Sink Connector for Confluent Platform | Confluent Documentation 链接&#xff1a;Apache Kafka 一、搭建测试环境 下载Elasticsearch Service Sink Connector https://file.zjwlyy.cn/confluentinc-kafka-connect-elasticsearch…

讯方“教学有方”平台获华为昇腾应用开发技术认证!

教学有方 华为昇腾应用开发技术认证 权威认证 彰显实力 近日&#xff0c;讯方技术自研的教育行业大模型平台——“教学有方”&#xff0c;成功获得华为昇腾应用开发技术认证。这一认证不仅是对 “教学有方” 平台技术实力的高度认可&#xff0c;更标志着讯方在智慧教育领域的…

保护你的Electron应用:深度解析asar文件与Virbox Protector的安全策略

在现代软件开发中&#xff0c;Electron框架因其跨平台特性而备受开发者青睐。然而&#xff0c;随着Electron应用的普及&#xff0c;如何保护应用中的核心资源文件——asar文件&#xff0c;成为了开发者必须面对的问题。今天&#xff0c;我们将深入探讨asar文件的特性&#xff0…

端口安全配置示例

组网需求 如图所示&#xff0c;用户PC1、PC2、PC3通过接入设备连接公司网络。为了提高用户接入的安全性&#xff0c;将接入设备Router的接口使能端口安全功能&#xff0c;并且设置接口学习MAC地址数的上限为接入用户数&#xff0c;这样其他外来人员使用自己带来的PC无法访问公…

零基础RT-thread第四节:电容按键

电容按键 其实只需要理解&#xff0c;手指按上去后充电时间变长&#xff0c;我们可以利用定时器输入捕获功能计算充电时间&#xff0c;超过无触摸时的充电时间一定的阈值就认为是有手指触摸。 基本原理就是这样&#xff0c;我们开始写代码&#xff1a; 其实&#xff0c;看过了…

SQL基础操作:从增删改查开始

好的&#xff01;SQL&#xff08;Structured Query Language&#xff09;是用于管理关系型数据库的标准语言。让我们从最基础的增删改查&#xff08;CRUD&#xff09;​​ 操作开始学习&#xff0c;我会用简单易懂的方式讲解每个操作。 &#x1f6e0; 准备工作&#xff08;建表…

vim 编辑模式/命令模式/视图模式常用命令

以下是一份 Vim 命令大全&#xff0c;涵盖 编辑模式&#xff08;Insert Mode&#xff09;、命令模式&#xff08;Normal Mode&#xff09; 和 视图模式&#xff08;Visual Mode&#xff09; 的常用操作&#xff0c;适合初学者和进阶用户使用。 &#x1f9fe; Vim 模式简介 Vim…

每天看一个Fortran文件(10)

今天来看下MCV模式调用物理过程的相关代码。我想改进有关于海气边界层方面的内容&#xff0c;因此我寻找相关的代码&#xff0c;发现在physics目录下有一个sfc_ocean.f的文件。 可以看见这个文件是在好多好多年前更新的了&#xff0c;里面内容不多&#xff0c;总共146行。是计算…

python打卡day37

疏锦行 知识点回顾&#xff1a; 1. 过拟合的判断&#xff1a;测试集和训练集同步打印指标 2. 模型的保存和加载 a. 仅保存权重 b. 保存权重和模型 c. 保存全部信息checkpoint&#xff0c;还包含训练状态 3. 早停策略 作业&#xff1a;对信贷数据集训练后保存权重&#xf…

【Spark征服之路-2.9-Spark-Core编程(五)】

RDD行动算子&#xff1a; 行动算子就是会触发action的算子&#xff0c;触发action的含义就是真正的计算数据。 1. reduce ➢ 函数签名 def reduce(f: (T, T) > T): T ➢ 函数说明 聚集 RDD 中的所有元素&#xff0c;先聚合分区内数据&#xff0c;再聚合分区间数据 val…

【入门】【练17.3 】比大小

| 时间限制&#xff1a;C/C 1000MS&#xff0c;其他语言 2000MS 内存限制&#xff1a;C/C 64MB&#xff0c;其他语言 128MB 难度&#xff1a;中等 分数&#xff1a;100 OI排行榜得分&#xff1a;12(0.1分数2难度) 出题人&#xff1a;root | 描述 试编一个程序&#xff0c;输入…

CppCon 2017 学习:Free Your Functions!

“Free Your Functions!” 这句话在C设计中有很深的含义&#xff0c;意思是&#xff1a; “Free Your Functions!” 的理解 “解放你的函数”&#xff0c;鼓励程序员&#xff1a; 不要把所有的函数都绑在类的成员函数里&#xff0c;优先考虑写成自由函数&#xff08;non-mem…

日常运维问题汇总-19

60. OVF3维护成本中心与订货原因之间的对应关系时&#xff0c;报错提示&#xff0c;SYST: 不期望的日期 00/00/0000。消息号 FGV004&#xff0c;如下图所示&#xff1a; OVF3往右边拉动&#xff0c;有一个需要填入的字段“有效期自”&#xff0c;此字段值必须在成本中心定义的有…

2025SCA工具推荐︱基于多模态SCA的新一代开源供应链风险审查与治理平台

近年来&#xff0c;随着开源软件在企业数字化转型中的广泛应用&#xff0c;开源供应链攻击事件频发&#xff0c;企业普遍面临三大突出难题&#xff1a;一是不清楚自身引入了哪些开源组件&#xff0c;二是不掌握组件中潜在的安全漏洞和合规风险&#xff0c;三是缺乏自动化、全流…

CppCon 2017 学习:Migrating a C++03 library to C++11 case study

这段内容是在介绍 Wt&#xff08;发音类似 “witty”&#xff09; —— 一个用于 C 的 Web UI 框架。总结如下&#xff1a; 什么是 Wt&#xff1f; Wt 是一个 用 C 编写的 widget&#xff08;控件&#xff09;驱动的 Web 框架。类似于桌面 GUI 框架&#xff08;比如 Qt&#…