【项目场景】请求数据时测试环境比生产环境多花了1秒是怎么回事?

威哥,第一次给你发消息就是求教一个问题呢,近期我在优化系统查询的时候,在测试环境优化达标,但是发布到生产后,发现从客户端发起请求到接收响应,多花了1秒(测试环境的库数据量和生产一致)。测试环境的库在内网,服务器的库是阿里云的RDS杭州节点。我们的服务器机房在成都,使用系统群体也绝大部分在成都区域。 经过在服务器上的抓包,一个mysql的request和response,相差了500毫秒,一个列表查询来回就是1秒左右。 脚本在RDS上运行也只是需要100ms以下。故怀疑这中间的几百毫秒都浪费在了网络传输的开销上,我通过普罗米修斯看到,我们机房的带宽也并没有拉大。 我的建议是把数据库迁移到内网来或者成都区域的RDS上。
请教威哥,还有更好的办法吗?在不迁移数据库的情况下(数据库较大)。
感谢威哥花宝贵的时间查看这条消息,威哥空了帮忙看看呢。

V 哥推荐:2024 最适合入门的 JAVA 课程

这是一位粉丝(谢同学)给V哥的留言,感谢长时间对 V 哥的关注,给你几点优化建议去试试,看能否解决:

在不迁移数据库的情况下,你可以考虑以下几种优化策略:

1. 数据库连接优化

  • 连接池设置:确保你使用了合适的数据库连接池(如 HikariCP 或 DBCP),并调整其配置(例如连接池大小、连接超时、最大空闲连接等)。如果连接池配置不当,可能导致频繁的连接建立和释放,进而增加延迟。
  • 持久连接:对于频繁访问数据库的服务,可以尝试增加数据库连接的持久性,减少每次请求时的建立连接的时间。

数据库连接优化对于提高系统的性能和减少延迟至关重要。针对所提到的场景(测试和生产环境的延迟差异,数据库在阿里云RDS杭州节点,服务器在成都),V 哥想从几个方面给出详细的优化策略和具体操作步骤,在不迁移数据库的情况下实现更好的连接优化。

1. 数据库连接池优化

使用数据库连接池可以有效减少连接的创建和销毁开销,特别是在高并发的情况下,数据库连接池能够复用连接,减少每次请求时的连接建立时间。常用的数据库连接池有 HikariCPDBCPC3P0,其中 HikariCP 是性能最优的连接池之一。

步骤:
  1. 选择合适的连接池

    • 推荐使用 HikariCP,因为它性能高效且配置简单。
    • 如果你使用的是Spring框架,可以通过 Spring Boot 内置的 HikariCP 连接池来简化配置。
  2. 配置数据库连接池
    这里以 Spring Boot 和 HikariCP 为例,具体配置步骤如下:

    • application.propertiesapplication.yml 配置文件中配置 HikariCP
   # 数据源配置spring.datasource.url=jdbc:mysql://your-database-url:3306/weige_db?useUnicode=true&characterEncoding=utf-8&useSSL=falsespring.datasource.username=weigespring.datasource.password=wg123123# HikariCP 配置spring.datasource.hikari.maximum-pool-size=20  # 设置连接池最大连接数spring.datasource.hikari.minimum-idle=5        # 设置连接池最小空闲连接数spring.datasource.hikari.idle-timeout=30000   # 设置连接最大空闲时间(单位:毫秒)spring.datasource.hikari.max-lifetime=60000   # 设置连接最大生命周期(单位:毫秒)spring.datasource.hikari.connection-timeout=30000  # 设置连接超时时间(单位:毫秒)spring.datasource.hikari.validation-timeout=3000  # 设置连接验证超时时间(单位:毫秒)spring.datasource.hikari.leak-detection-threshold=15000  # 设置泄漏检测时间(单位:毫秒)
  • 注释说明:
    • maximum-pool-size: 控制连接池的最大连接数。
    • minimum-idle: 控制连接池中最小的空闲连接数。
    • connection-timeout: 连接池中获取连接时的最大等待时间。
    • validation-timeout: 连接验证超时的时间。
  1. 动态调整连接池参数

    • 根据实际负载动态调整连接池的参数,避免连接池过大或过小导致性能瓶颈或资源浪费。
    • 使用监控工具(如 Prometheus阿里云 CloudMonitor)来实时监控数据库连接池的状态,并根据实时情况调整连接池的参数。
  2. 优化连接池的创建和销毁过程

    • 避免频繁创建和销毁数据库连接,连接池应尽量保持一定的活跃连接数。频繁的连接和销毁会增加数据库的压力。
    • 设置合理的连接池大小,既能满足高并发需求,又不会浪费资源。

2. 数据库连接配置优化

确保数据库连接的配置是最佳的,以减少连接时的延迟和错误。

步骤:
  1. 连接使用内网而非公网
    • 如果你的应用服务器和数据库都在阿里云上,应该尽可能使用阿里云内网连接,而非公网连接。
    • 内网连接的延迟远低于公网连接,且更加稳定。
    • 配置连接 URL 使用内网 IP 地址:
     spring.datasource.url=jdbc:mysql://<internal-ip>:3306/weige_db?useUnicode=true&characterEncoding=utf-8&useSSL=false
  • 这样,应用和数据库之间的连接不需要通过公网,减少了网络传输的延迟。
  1. 数据库连接池的连接验证
    • 在高负载下,数据库可能会在连接空闲一段时间后关闭,因此需要启用连接验证,以确保每次获取连接时,连接是可用的。
    • 在 HikariCP 中可以通过配置 connection-test-query 来定期验证连接:
     spring.datasource.hikari.connection-test-query=SELECT 1
  1. 启用连接重试机制

    • 在出现连接丢失或网络不稳定时,可以启用连接重试机制,确保在一定时间内自动重试连接。
  2. 使用长连接(如果有需要)

    • 如果你的应用场景是需要频繁访问数据库的应用,可以考虑使用数据库连接的长连接,减少每次请求时的连接建立和销毁开销。

3. 数据库查询优化

虽然你提到测试环境和生产环境的数据量一致,但仍然需要确保数据库查询本身的效率。优化数据库查询可以减少数据库访问时间,从而缩短整体响应时间。

步骤:
  1. 使用数据库索引
    • 确保查询所涉及的字段已经加上了索引,特别是那些经常作为查询条件的字段。
    • 使用 EXPLAIN 来查看查询的执行计划,确保没有使用全表扫描(Full Table Scan)。
   EXPLAIN SELECT * FROM mytable WHERE my_column = 'value';
  1. 避免N+1查询问题

    • 如果你的查询涉及到多表连接或多次查询同一数据,应该尽量避免N+1查询问题。可以通过适当的 SQL 联接(JOIN)或批量查询来避免。
  2. 查询分页优化

    • 对于分页查询,确保使用 LIMITOFFSET 优化分页查询性能,避免查询过多数据。
    • 大数据量的分页查询建议使用基于 ID 或时间的范围查询(而非 OFFSET)。
  3. 使用查询缓存

    • 如果某些查询非常频繁且结果不经常变化,可以使用 RedisMemcached 来缓存查询结果,避免每次都访问数据库。
   // 示例:使用 Redis 缓存查询结果String cacheKey = "user:" + userId;User user = redisTemplate.opsForValue().get(cacheKey);if (user == null) {user = userService.getUserById(userId);redisTemplate.opsForValue().set(cacheKey, user);}return user;

4. 数据库连接池与查询优化结合

  • 在使用连接池的同时,保证每次获取连接后的查询是高效的,避免在每次查询时都建立新的连接或浪费时间在不必要的查询上。
  • 定期分析数据库的慢查询日志,识别性能瓶颈并进行针对性的优化。

以上小结一下

  • 选择并配置合适的数据库连接池(如 HikariCP)。
  • 优化数据库连接的配置,确保使用内网连接,并启用连接验证。
  • 优化数据库查询,确保查询执行计划高效,避免 N+1 查询,使用缓存减少频繁查询。
  • 动态调整连接池参数,并监控数据库连接池的运行状态。

通过这些优化策略,你能够显著减少请求和响应之间的延迟,提高系统的响应速度和稳定性。

2. 网络优化

  • 加速网络连接:你提到普罗米修斯监控了带宽使用情况,可以检查一下是否存在网络瓶颈。例如,是否存在网络跳数较多、延迟较高的路由问题,或者是阿里云和你们机房之间的链路本身不够稳定。
  • CDN加速:虽然CDN通常用于静态资源加速,但一些服务也支持数据库请求的优化(如通过加速特定类型的HTTP请求等)。可以考虑使用阿里云的Cloud Link(云链路加速)来优化跨地域的连接。
  • TCP优化:在数据库和应用服务器之间的连接中,使用TCP协议时可以调整TCP窗口大小、重传策略等,来减少网络延迟。

网络优化策略的具体实现操作步骤

网络优化是提升应用性能、降低延迟的重要手段。针对你提到的跨地域访问延迟问题(测试环境和生产环境的数据库在不同的区域),网络优化策略可以帮助减少网络传输的瓶颈和延迟。

1. 优化网络架构和通信路径

跨地域访问时,网络架构和通信路径会影响延迟,因此需要确保通信路径尽可能简洁和快速。

步骤:
  1. 使用内网通信

    • 确保数据库和应用服务器之间使用 内网通信,而不是通过公网进行连接。尤其在阿里云环境中,内网通信的延迟要比公网通信低得多。
    • 通过阿里云提供的 VPC(Virtual Private Cloud)可以在内网中创建虚拟网络,从而确保数据库和应用之间的通信完全通过内网而不经过公网。

    操作步骤

    • 登录阿里云控制台,进入 VPC 管理控制台
    • 创建 VPC(虚拟专有网络),并为应用服务器和数据库服务器分配内网 IP。
    • 配置 VPC 的路由规则,确保应用和数据库实例在同一内网中,避免跨地域访问。
    • 使用数据库内网地址而非公网地址进行连接。
   # 示例:使用内网 IP 地址连接数据库spring.datasource.url=jdbc:mysql://<我的IP>:3306/weige_db?useUnicode=true&characterEncoding=utf-8&useSSL=false
  1. 优化区域选择

    • 如果你的应用服务器和数据库分别位于阿里云不同的区域(例如应用服务器在成都,数据库在杭州),可能会有较高的网络延迟。为了减少这种跨区域的延迟,可以考虑将数据库和应用服务器部署在同一区域,或者使用阿里云的跨区域加速服务。
    • 阿里云的跨区域加速(例如 CloudLink)可以优化区域间的网络通信,降低网络延迟。

    操作步骤

    • 评估不同区域之间的延迟。你可以通过阿里云提供的 PingTraceroute 工具来测试网络延迟。
    • 在选择数据库或应用服务器部署时,优先考虑将它们部署在同一数据中心或同一地区。
    • 使用阿里云 CloudLink 或类似的跨区域加速服务。
  2. 网络路由优化

    • 网络延迟不仅仅与物理距离有关,还和路由路径有关。通过使用 专线(Direct Connect)和 VPC Peering,可以优化数据流的路由,避免经过不必要的中转节点,减少延迟。

    操作步骤

    • 配置 Direct Connect:阿里云提供专线连接服务,可以通过专线优化你的数据传输路径,避免普通的互联网传输路径带来的延迟。
    • 配置 VPC Peering:如果你的应用和数据库分别位于不同的 VPC,可以通过 VPC Peering 连接不同的 VPC,减少跨 VPC 的路由延迟。

2. 调整网络协议和TCP参数

网络传输性能不仅取决于物理连接,还取决于传输协议的效率。特别是使用 TCP/IP 协议时,适当的参数调优可以显著提升网络性能。

步骤:
  1. 优化 TCP/IP 配置
  • TCP 窗口大小:在高带宽高延迟的网络环境下,TCP 窗口大小对网络传输效率影响较大。可以通过调整操作系统的 TCP 窗口大小来提高网络吞吐量。

  • TCP 重传与超时设置:降低 TCP 连接重传的超时时间,有助于减少网络不稳定时的传输延迟。

    操作步骤

    修改操作系统的 TCP 参数:

    • Linux:编辑 /etc/sysctl.conf 文件,设置以下参数:(Windows 使用 netsh 命令来调整 TCP 缓冲区大小。)
net.core.rmem_max = 16777216      # 设置接收缓冲区的最大值
net.core.wmem_max = 16777216      # 设置发送缓冲区的最大值
net.ipv4.tcp_rmem = 4096 87380 16777216  # 设置TCP接收缓冲区的最小、默认和最大值
net.ipv4.tcp_wmem = 4096 16384 16777216  # 设置TCP发送缓冲区的最小、默认和最大值
  1. 启用 TCP 快速打开(TCP Fast Open)

    • TCP 快速打开允许在三次握手期间开始发送数据,减少了连接建立的时间。特别适合低延迟、高吞吐量的网络应用。

    操作步骤

    • 在 Linux 系统中启用 TCP 快速打开:
     echo 3 > /proc/sys/net/ipv4/tcp_fastopen
  1. 使用 Keep-Alive 机制

    • TCP Keep-Alive 可以保持连接的活跃,避免频繁的连接建立和销毁。在高延迟或跨地域的环境中,使用 Keep-Alive 可以减少连接建立的延迟。

    操作步骤

    • 在应用程序中启用 TCP Keep-Alive 机制,确保在长时间没有数据传输时,连接依然保持活跃。
    • Java 中可以通过设置连接池来开启 TCP Keep-Alive:
     spring.datasource.hikari.connection-test-query=SELECT 1spring.datasource.hikari.connection-timeout=30000spring.datasource.hikari.keepalive-time=300000  # 设置连接空闲保持时间

3. 使用内容分发网络 (CDN) 优化

尽管 CDN 主要用于加速静态资源的加载,但一些高级 CDN 服务还可以对网络请求进行优化,特别是跨地域访问时。

步骤:
  1. 配置 CDN 加速跨地域请求

    • 使用 阿里云 CDNCloudflare CDN,可以加速跨地域请求的响应速度。即使是非静态资源,也可以通过 CDN 提供加速服务。

    操作步骤

    • 在阿里云控制台创建并配置 CDN 加速服务,将需要加速的 HTTP 请求(例如 API 请求)通过 CDN 转发。
    • 配置缓存策略,确保常用的数据能够被 CDN 缓存,避免每次都需要从源服务器获取。
  2. 优化 CDN 缓存规则

    • 对于动态请求,可以配置缓存较短时间,或者配置为缓存频繁请求的数据。例如,API 请求返回的数据可以设置缓存策略,以避免重复请求。

4. 增加带宽和网络监控

带宽不足会成为网络延迟的瓶颈,因此监控带宽使用情况并合理增加带宽,能够有效提升网络性能。

步骤:
  1. 监控带宽使用

    • 使用 阿里云的 CloudMonitorPrometheus 监控带宽的使用情况。通过监控可以清晰看到网络流量的瓶颈。
  2. 增加带宽

    • 根据监控结果,如果带宽已经达到上限,可以考虑增加带宽。阿里云提供了灵活的带宽扩展选项,可以根据需求动态调整带宽。

以上小结一下

通过优化网络架构、调整网络协议、使用 CDN 加速以及增加带宽,可以有效地减少网络延迟,提升系统响应速度:

  1. 优化网络架构,使用内网连接和跨区域加速服务。
  2. 调整 TCP 参数,启用 TCP 快速打开和 Keep-Alive 机制。
  3. 配置 CDN 加速和缓存策略,优化跨地域请求。
  4. 监控带宽使用,确保带宽充足。

3. 数据库查询优化

  • 查询性能分析:即使测试环境的数据库查询表现良好,但在生产环境中,由于数据量或查询频繁,查询的执行计划可能有所不同。你可以使用MySQL的EXPLAIN来查看查询的执行计划,并确保没有全表扫描等低效操作。根据执行计划,你可以增加索引,或优化SQL语句。
  • 查询缓存:确保你的查询有适当的缓存策略,使用Redis等缓存服务来存储频繁查询的数据,减少直接访问数据库的次数。你可以对常用的列表查询进行缓存,定时更新缓存,避免每次都需要从数据库读取。

4. 异步化处理

  • 异步查询:如果是列表查询等非实时要求非常高的请求,可以考虑将请求改为异步处理,客户端可以在后台继续处理其他操作,查询结果可以在后台完成并通过消息队列推送给客户端。这样不会阻塞客户端的主线程,也能提高用户体验。
  • 消息队列:如果你的查询是批量查询或者是依赖多个数据库查询的结果,可以通过消息队列(如Kafka、RabbitMQ)异步处理,从而减少直接的同步等待时间。

5. 数据库内网通信

  • RDS内网连接:尽量保证应用服务器与数据库之间使用阿里云内网通信而非公网通信。如果你的应用和数据库都在阿里云上,使用内网连接而不是公网连接会减少网络延迟,降低跨地域访问的延迟。

5. 数据库内网通信策略的具体实现操作步骤

在云环境中,尤其是使用阿里云 RDS 等云数据库服务时,尽量保证应用服务器与数据库之间使用内网通信,而非公网通信,可以显著减少网络延迟并提高通信效率。以下是关于如何配置和优化数据库内网通信的具体操作步骤。


1. 确保应用服务器和数据库在同一内网

首先要确保你的应用服务器和数据库都部署在同一个阿里云 VPC(虚拟私有云)内,这样才能确保内网通信而不是公网通信。

步骤:
  1. 检查应用服务器和数据库是否在同一 VPC 中

    • 登录到 阿里云控制台,选择 ECSRDS 服务,查看应用服务器和数据库实例所在的 VPC。
    • 确保它们处于相同的 VPC 或者已经建立了 VPC 之间的互通。
  2. 创建 VPC 并将资源部署到 VPC 中

    • 如果还没有 VPC,可以在 阿里云控制台 中创建一个新的 VPC,并确保将应用服务器和数据库都部署到该 VPC 中。
  3. 确认数据库实例是否启用了内网访问

    • 阿里云 RDS 控制台 中,确认数据库实例启用了内网访问。大多数 RDS 实例默认提供内网和公网的双重访问方式。

    操作步骤

    • 打开 RDS 控制台 → 选择目标数据库实例 → 配置访问方式为 内网

2. 使用 VPC 内网 IP 地址连接数据库

一旦确保应用服务器和数据库都在同一 VPC 内,可以使用内网 IP 地址来连接数据库,从而减少公网通信带来的延迟和带宽开销。

步骤:
  1. 获取数据库实例的内网 IP 地址

    • 登录到 阿里云 RDS 控制台,选择你的数据库实例。
    • 找到 内网连接信息,记录下数据库的内网 IP 地址和端口号。
  2. 在应用服务器中配置数据库连接

    • 修改应用中的数据库连接配置,确保连接使用数据库的内网 IP 地址而非公网 IP 地址。例如:
     spring.datasource.url=jdbc:mysql://<RDS内网IP>:3306/your_database_namespring.datasource.username=your_db_usernamespring.datasource.password=your_db_password
  • 确保应用服务器的网络可以访问 RDS 的内网 IP 地址。如果应用服务器和数据库实例在不同的子网内,确保它们之间的网络路由没有问题。

3. 使用专有网络(VPC)中的私有链接

为了增强安全性和减少跨区域访问的延迟,阿里云支持通过 专有网络(VPC)私有链接 将 RDS 实例暴露给同一个 VPC 中的其他服务,确保数据通信在专有网络内完成。

步骤:
  1. 创建专有网络链接

    • 登录到 阿里云控制台 → 选择 VPC → 选择 私有链接
    • 创建新的私有连接,将 RDS 实例作为服务提供者,其他 ECS 实例可以通过私有链接访问该 RDS 实例。
  2. 配置专有网络访问

    • 在应用服务器中,使用私有链接提供的 DNS 域名或者内网 IP 地址连接到 RDS 实例。
    • 确保数据库实例的安全组规则允许内网访问,并且在连接字符串中使用私有 DNS 进行访问。

4. 配置安全组和网络 ACL

确保内网通信不受安全组或网络 ACL(访问控制列表)等网络安全配置的阻止。安全组配置允许控制内网通信的流量。

步骤:
  1. 检查并配置安全组

    • 登录到 阿里云控制台,选择 ECSRDS 实例所在的安全组。
    • 确保应用服务器和数据库实例的安全组规则允许彼此之间的网络通信。通常需要确保应用服务器的安全组允许向数据库实例的内网 IP 地址和端口发起连接请求。

    示例:允许应用服务器向 RDS 数据库实例发送 MySQL 请求(默认端口 3306):

    • 来源 IP:应用服务器的内网 IP 或安全组
    • 目标端口:3306
    • 协议:TCP
  2. 检查并配置网络 ACL

    • 如果使用了 VPC 网络 ACL,请确保它允许应用服务器和数据库实例之间的流量通过。网络 ACL 可以在 VPC 控制台中设置。

5. 确保数据库和应用的带宽和延迟优化

虽然数据库和应用在同一内网中,确保它们之间的带宽和延迟仍然至关重要。对带宽和网络延迟进行优化可以进一步提升数据库通信性能。

步骤:
  1. 选择适当的实例规格

    • 根据应用的负载要求,选择合适的数据库实例规格和网络带宽。在阿里云 RDS 控制台中,可以根据性能需求调整数据库的规格(如 I/O 性能和带宽):
      • 如果数据库的读写压力较大,可以考虑使用高性能的 SSD 存储
      • 对于大规模的并发查询,选择较高规格的实例以提供更大的网络带宽。
  2. 优化 RDS 网络配置

    • 对于 RDS 实例,选择 Enhanced Networking(增强型网络)专用网络带宽,以提高数据库的吞吐量和降低延迟。

    操作步骤

    • 阿里云 RDS 控制台 中,选择 网络和安全,启用增强型网络并调整带宽配置。

6. 避免使用公网访问数据库

如果数据库和应用服务器之间的通信通过公网进行,可能会带来额外的延迟和带宽消耗。为了最大化内网通信的性能,确保所有的数据库连接都通过内网进行。

步骤:
  1. 确保数据库实例不暴露于公网

    • 阿里云 RDS 控制台 中,确保数据库实例没有开启公网 IP 或关闭公网访问功能。使用内网 IP 地址进行通信。

    操作步骤

    • 打开 RDS 控制台 → 选择目标数据库实例 → 在 连接方式 中选择 仅内网访问
  2. 检查应用服务器是否通过公网访问数据库

    • 确保应用服务器通过内网 IP 地址访问数据库,而不是使用公网 IP。如果发现应用服务器错误地使用了公网 IP 地址,可以更新配置文件,确保使用内网地址。

以上小结一下

通过确保应用服务器和数据库实例都部署在同一阿里云 VPC 内,并通过内网 IP 进行通信,可以显著减少网络延迟和带宽开销,提高跨地域访问的性能。具体操作步骤包括:

  1. 确保应用服务器和数据库实例在同一 VPC 内
  2. 使用内网 IP 地址进行数据库连接,避免使用公网连接。
  3. 配置专有网络链接,增加网络通信的安全性和可靠性。
  4. 配置安全组和网络 ACL,确保内网通信不被阻塞。
  5. 优化带宽和延迟,选择适当的实例规格并使用增强型网络。
  6. 避免通过公网访问数据库,确保数据传输路径最优化。

通过这些策略的实施,可以有效降低网络延迟,提升数据库查询性能,并减少因跨地域网络通信带来的性能瓶颈。

6. 高并发读写分离

  • 读写分离:如果你系统的读操作较多,可以考虑将数据库进行主从分离,将读请求指向只读的从库,减轻主库的压力,从而提升读请求的响应速度。

  • 负载均衡:如果有多个数据库实例,可以通过负载均衡分发请求,减少单一数据库的负载和延迟。

高并发读写分离策略可以显著提高数据库的性能和可扩展性,特别是在高并发场景下。以下是实现该策略的关键步骤:

  1. 设计主从架构:将数据库分为主库(写)和从库(读),并配置负载均衡。
  2. 数据同步与一致性:配置主从数据库的数据同步,保证数据一致性。
  3. 缓存与优化:利用分布式缓存和查询优化,减少数据库的访问压力。
  4. 负载均衡与流量控制:合理分配读请求到多个从库,确保数据库负载均衡。

7. 监控与调优

  • 深入监控:除了普罗米修斯外,可以借助阿里云的CloudMonitor等监控工具,结合数据库的性能指标(如 QPS、响应时间、连接数等)进行持续优化。
  • 慢查询日志:查看阿里云RDS的慢查询日志,找出执行时间较长的查询,优化这些查询的SQL执行计划。

总结

  • 优化数据库连接和查询效率,确保网络传输过程中没有瓶颈。这个需要持续监控和调试,直到满足项目要求为止。

  • 使用缓存机制减少数据库访问。这条相信这位兄弟已经做了,可以再分析一下哪些数据在缓存。

  • 改进异步处理和负载均衡,避免对数据库的单点压力。

  • 考虑使用内网连接和跨区域加速服务来降低跨地域的网络延迟。

在多方位诊断优化后不知道能否解决谢同学的问题,小伙伴们,你们觉得还有更好的解决方案吗,可以说说你的见解,让谢同学试试,关注威哥爱编程,一起解决 BUG。

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

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

相关文章

2024 年将 Postman 文档导出为 HTML 或 Markdown

2024 年将 Postman 文档导出为 HTML 或 Markdown

访问网页的全过程(知识串联)

开发岗中总是会考很多计算机网络的知识点&#xff0c;但如果让面试官只靠一道题&#xff0c;便涵盖最多的计网知识点&#xff0c;那可能就是 网页浏览的全过程 了。本篇文章将带大家从头到尾过一遍这道被考烂的面试题&#xff0c;必会&#xff01;&#xff01;&#xff01; 总…

服务器硬件介绍

计算机介绍 现在的人们几乎无时无刻都在使用电脑&#xff01;而且已经离不开电脑了。像桌上的台式电脑(桌机)、笔记本电脑(笔电)、平板电脑、智能手机等等&#xff0c;这些东西都算是电脑。 台式机电脑介绍 计算机又被称为电脑。台式机电脑主要分为主机和显示器两个部分&…

04-HTTP协议、请求报文、响应报文

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

基于Multisim人数出入加减计数统计电路(含仿真和报告)

【全套资料.zip】人数出入加减计数统计电路Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 设计两路光控电路&#xff0c;一路放置在入口&#xff0c;另一路设置在出口&#xff0c;当有人…

车机安装第三方软件实现打开软件全屏教程

简介 越来越多的车友实现安装第三方软件了&#xff0c;但是有的车机的状态栏或者导航栏会遮挡安装的第三方软件。这样的话&#xff0c;第三方软件就会显示不全&#xff0c;体验感非常不好。所以&#xff0c;下面我教一下大家如何使用东君应用管家来实现打开第三方软件全屏。 全…

CLion配置QT开发环境

一、将qmake工程转为cmake工程&#xff08;方法一&#xff1a;用工具转换并做适当修改&#xff09; 1、工具链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1grW2QY3sW8X2JaHWM_ePPw 提取码&#xff1a;7at4 工具源码:https://github.com/milahu/qmake2cmake 2、执行…

第3章-需求 3.4 需求的合法合规性审查

3.4 需求的合法合规性审查 3.4.1 项目需求的合法性审查3.4.2 委托研发项目的法律问题3.4.3 项目实施过程中的知识产权问题1.开发成果的知识产权保护2.开发过程中的侵权风险防控 近年来随着依法治国的深度开展&#xff0c;企业合规的概念越来越多地出现在大众眼前&#xff0c;也…

怎么保护源代码,源代码防泄密的十种方法

在现代软件开发中&#xff0c;源代码被视为企业的“数字资产”&#xff0c;它不仅承载着企业的核心竞争力&#xff0c;更是推动技术创新和业务发展的基石。然而&#xff0c;随着信息技术的普及和开发环境的复杂化&#xff0c;源代码泄密的风险也在不断增加。保护源代码的安全已…

单相锁相环,原理与Matlab实现

单相锁相环基本原理 单相锁相环的基本原理图如下所示&#xff0c; u α u_\alpha uα​ u β u_\beta uβ​经Park变换、PI控制实现对角频率 ω \omega ω和角度 θ \theta θ的估算。不同锁相环方案之间的差异&#xff0c;主要表现在正交电压 u β u_\beta uβ​的生成&#x…

腾讯云双十一福利篇之CVM云服务器

&#x1f34b;引言 随着企业数字化转型的不断深入&#xff0c;对云计算的需求日益增长。腾讯云推出的云服务器&#xff08;CVM&#xff09;为企业提供了一种灵活、高效、经济的计算服务解决方案。CVM云服务器不仅能够快速响应业务需求&#xff0c;还可以帮助企业降低前期硬件投…

DDei在线设计器-国际化

国际化 从1.2.42版开始,DDei提供了国际化支持。默认提供了中文/英文两种语言。 编辑器会读取浏览器的语言设置&#xff0c;也能够在初始化时强行指定&#xff0c;默认使用zh_CN(中文)。 本示例基于教程快速指南开发&#xff0c;如果您不清楚怎样引入DDei设计器&#xff0c;请查…

NUXT3学习日记一(在我git中拉取代码、文件讲解)

Nuxt 3 是一个基于 Vue 3 的现代框架&#xff0c;用于构建服务器端渲染&#xff08;SSR&#xff09;和静态生成的应用程序。它提供了一种简化的方式来创建高性能的 Vue 应用&#xff0c;具有许多强大的功能和优点。以下是 Nuxt 3 的一些主要应用和优点&#xff1a; 一、应用场…

小米路由器3(R3)安装mixbox命令

sh -c /extdisks/sda1/ftp/install.sh && source /etc/profile &> /dev/null install.sh文件 或者在目录新建一个粘贴 #!/bin/sh -e #copyright by monlorclear logsh() {# 输出信息到/tmp/messages和标准输出logger -s -p 1 -t "$1" "$2&quo…

DAY27|贪心算法Part01|LeetCode:455.分发饼干、376. 摆动序列、53. 最大子序和

贪心算法 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 贪心算法并没有固定的套路&#xff0c;最难想的就在于如何通过局部最优去推出全局最优。在做一个题目的时候&#xff0c;靠自己手动模拟&#xff0c;如果模拟可行&#xff0c;就可以试一试贪心策略…

“反卷”风暴席卷双十一,商家们却卖爆了

文丨郭梦仪 11月12日零点&#xff0c;第16届双11落下帷幕&#xff0c;但商家的故事依然在继续。 “今年双11&#xff0c;没想到能月入千万&#xff0c;流量上升了200%。”乐尘家居主理人子旭向商业数据派表示&#xff0c;他今年最明显的感受是&#xff0c;认真经营的人在这个…

OCCT7.7.0 使用VTK9.2.0

1.前言 OCCT使用的VTK版本是VTK6.1.0&#xff0c;这个版本已经比较老了&#xff0c;如果要使用新版本的VTK&#xff0c;则需要自己引入新版本VTK&#xff0c;自己编译&#xff0c;我这里也比较好奇&#xff0c;为什么OCCT不升级一下VTK版本&#xff0c;下面自己来引入VTK9.2.0…

STM32项目实战:基于STM32U5的火灾报警系统(LVGL),附项目教程/源码

《火灾报警系统_STM32U5》项目完整文档、项目源码&#xff0c;点击下方链接免费领取。 项目资料领取https://s.c1ns.cn/F5XyU STM32项目实战之“火灾报警系统”&#xff08;基于STM32U5&#xff09; 今天小编来分享一个《火灾报警系统》的项目案例&#xff0c;硬件平台是STM…

C++初阶 --- 类和对象(1)

类和对象&#xff08;1&#xff09; 一、类的相关内容1.访问限定符2.class关键字与struct关键字的区别3.类域 二、this指针三、成员函数存放在哪里&#xff1f;1. 函数的存放位置2. 练习题 一、类的相关内容 1.访问限定符 &#xff08;1&#xff09;C⼀种实现封装的⽅式&…

Python 获取PDF的各种页面信息(页数、页面尺寸、旋转角度、页面方向等)

目录 安装所需库 Python获取PDF页数 Python获取PDF页面尺寸 Python获取PDF页面旋转角度 Python获取PDF页面方向 Python获取PDF页面标签 Python获取PDF页面边框信息 了解PDF页面信息对于有效处理、编辑和管理PDF文件至关重要。PDF文件通常包含多个页面&#xff0c;每个页…