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

线上救急-AWS限频

线上救急-AWS限频

问题

在一个天气炎热的下午,我正喝着可口可乐,悠闲地看着Cursor生成代码,忽然各大群聊中出现了加急➕@全体的消息,当时就心里一咯噔,点开一看,果然,线上服务出问题,多个能源统计接口报错未返回数据。

排查

首先排查线上ES日志,查询能源统计接口的日志中存在大量报错,报错提示如下:

GetEnergyAnalysisRpc err:error: code = 1083 reason = erdr: code = 10083 reason = error: code = 10003 reason = ThrottlingException: Request rate limit exceeded

日志显示得很清楚了,报错原因是AWS Timestream限频了。我们能源相关的数据都是时序的,技术选型的时候时序数据库采用了Timestream,Timestream的查询吞吐量是有限制的,会根据购买的TCU(查询容量单位)来计费和分配,每个TCU会提供一定量的查询资源(包括CPU、内存、存储和网络带宽)。

而当应用发起的查询请求频率或复杂度超过当前购买的TCU配额时,Timestream就会通过返回TooManyRequestsThrottlingException 等错误来限制后续请求。一般在短时间内大量并发查询、复杂查询(涉及大范围时间跨度、高基数的聚合操作或为未命中索引的查询),可能会导致TCU配额被快速耗尽。

解决

紧急措施

首先必须保证线上服务正常运行,因此决定对Timestream进行扩容,购买的一个TCU对应的资源是4个CPU和16GB的memory,这次紧急扩容了64个TCU,提供了更多的计算资源配额,支持更多并发、复杂以及高频次的查询,暂时解决了这个问题,能源统计数据得以正常显示。

追根溯源

解决了线上问题,但是不能直接结束,按照之前预测应该不会出现限频的问题,数据查询方面应该存在一定的问题,需要进一步排查,首先看一下主流的优化方案。

主流优化方案
  1. SQL执行日志记录与AI分析
  • 开启SQL日志记录:在AWS Timestream配置中启用详细日志,记录SQL语句、执行时间等,并将日志存储至Amazon CloudWatch Logs中。
  • AI统计分析:通过AWS Glue或Amazon SageMaker构建模型,对高频查询、执行时长等进行分析,识别低效SQL并分类优化。

在TimeStream对控制台上有一个新的功能,叫queryInsight,可以辅助查询优化调优。

  1. 高频接口缓存优化

ElastiCache应用:针对高频查询接口,采用Amazon ElastiCache(Redis或Memcached)缓存数据,降低数据库的直接查询压力。

缓存策略设计:写操作后立即更新缓存,读操作设置动态过期时间(如变化频繁数据设置过期时间,低频数据设置长过期时间)

  1. 数据分片与读写优化
  • 分片策略:按时间、地理位置或用户ID分片,分散读写负载,例如时间序列数据按天/周分片存储
  • 分区键优化:在user_id等具有唯一性的字段设置分区键(决定数据如何分布到不同分片),提升查询效率并减少TCU消耗
  1. 资源扩容与配置调整
  • 扩展TCU:根据监控临时提升集群的Query Limit或升级TCU配置以应对高并发
  • 调整热数据存储时间:延长Memory Retention时间(如12小时延长到30小时),扩大热数据缓存范围,优化查询性能
  1. SQL优化
  • 避免全表扫描:精确指定时间范围,减少扫描数据量
  • 合并宽表存储:将多条数据合并为宽表,降低I/O压力和存储成本
最终实行方案

原先我们的表没有进行分区,会导致每次数据查询都会扫全表进行查询,从而浪费大量计算资源,因此决定从数据分区进行修改。

  1. 分片策略制定

    根据数据特征选择分片维度:

    • Meature name分片(度量名称): 适用于时间序列数据
    • 自定义Partitionkey(特定业务字段): 使用特定业务场景使用

    缺点:分区键需在建表时定义,无法直接修改现有表结构,因为修改分片键需重新分配所有数据到新分片上,会导致系统长时间不可用或性能严重下降

  2. 分区键优化

    在查询高频字段(如user_id等)上设置分区键,提升查询效率并降低TCU消耗,在经过多字段比较后,统一使用用户id作为分区键,以用户维度作为数据多分区查询字段。

  3. 具体方案

    • 方案一:使用双写方式,新数据同时写入新旧数据表中,数据查询到时候根据数据分布情况查不同表,如果数据范围仅在旧表或仅在新表中,则分别查询对应的旧表或者新表,如果数据同时存在新表和旧表中,则使用union语句跨两张表进行查询。
    • 方案二:使用双写方式,新数据同时写入新旧数据表中,同时作数据迁移。

    方案对比:

    方案改动代码数据迁移对线上服务影响综合对比建议
    双写+Union兼容union查询跨新旧表时有影响,
    但新表有分区键,影响是可控的
    1. 不需要迁移数据
    2. 不需要确认数据保留时长
    3. 对线上数据影响很小
    4. 符合用户数据使用场景,一般用户只会查询当天最新数据,这些数据都会在新表中。
    采纳
    双写+数据迁移迁移数据时会影响查询1. 需要迁移数据
    2. 需要确认保留时间
    3. 会影响线上服务查询
    4. 迁移后数据都查询新表
    需要迁移数据,还需要确认数据保留时间,比较麻烦

    最后综合来看,选择了方案一来进一步解决这个问题。

展望

一期方案通过分区键来进行解决,最终经测试验证,用户48小时内的最新数据查询效率提升48%,效果显著。不过为了类似问题不再发生,我们制定了二期优化方案-AWS Timestream Redis缓存。

高频接口筛选的AI分析方法

  • **数据来源:**从 Timestream 的 SQL 执行日志中提取查询接口的执行频次、响应时间、资源消耗等指标。

  • AI分析逻辑:

    1. **特征提取:**通过日志分析工具(如 AWS CloudWatch Logs、Amazon Kinesis Data Analytics)提取查询接口的类型(如 SELECT、INSERT)、时间分布、参数模式等特征。

    2. **模式识别:**利用机器学习模型(如 AWS SageMaker 的分类算法或序列模型)识别高频接口的模式,

      • 每秒查询率(QPS)超过阈值(如 100 QPS)的接口。

      • 响应延迟超过业务容忍值(如 200ms)的接口。

      • 频繁访问相同或相似数据的接口(如固定时间窗口的查询)。

    3. **优先级排序:**根据接口的 QPS、延迟敏感度和资源消耗,生成需要优先缓存的接口列表。

  • **工具支持:**AWS 提供的 CloudWatch Logs、Amazon Athena(日志分析)或第三方日志分析工具(如 Splunk)可用于数据提取和初步分析。

缓存引擎

缓存选型

AWS ElastiCache 提供两种引擎:RedisMemcached。选型需基于业务场景需求:

引擎适用场景优势局限性
Redis需要支持复杂数据结构(如哈希表、列表、集合等)或需要高读写性能的场景。例如: 需要存储结构化数据(如用户会话、设备状态) ,需要原子操作(如计数器、队列管理)支持丰富数据类型和持久化;高并发读写性能(百万级 QPS)。内存占用较高;配置复杂度略高于 Memcached。
Memcached仅需简单键值对存储且并发访问量极高(如每秒数万次请求)的场景。例如: 高频访问的静态数据(如配置信息、简单元数据) ,需要极简配置的分布式缓存内存效率高;极简设计支持极高并发性能。仅支持简单键值存储;无数据结构扩展;默认不支持持久化。

综合以上对比,Redis明显更加适合复杂业务的使用,因此计划选择Redis作为缓存引擎。

缓存策略设计:写后更新机制

**核心目标:**确保缓存数据与 Timestream 中的数据强一致性。

实现机制

  • 同步更新流程:

    1. 应用层执行 写操作(如 INSERT、UPDATE)到 Timestream。
    2. 写操作成功后,触发 缓存更新事件(可通过 AWS Lambda 或应用层代码实现)。
    3. 立即更新 Redis/Memcached 中的对应缓存键值,覆盖旧数据。
  • 一致性保证:

    • 避免缓存与数据库数据不一致导致的“脏读”问题。

    • 需确保缓存更新操作与 Timestream 写操作在事务层面的顺序性(如通过分布式锁或队列保证)。

[!WARNING]

  • 写延迟风险:同步更新机制会延长写操作的总耗时,需在业务允许范围内平衡一致性与性能。
  • 失败处理:若缓存更新失败(如网络中断),需设计补偿机制(如重试、异步队列处理)。
  • 适用范围:仅适用于写操作与读操作强关联的场景(例如需要实时展示最新数据的仪表盘)。

分级过期策略

**背景:**时间序列数据的访问模式通常存在波动,分级过期策略通过动态管理缓存生命周期,平衡性能与资源占用。

分级过期策略设计
  • 高频变化数据(TTL:5-30分钟):

    • 适用场景:数据频繁更新且业务需要实时性(如传感器实时数据)。
    • 实现:为这类数据设置短过期时间(TTL),确保缓存中的数据不会过时太久。
    • 优势:减少因数据过期引发的缓存缺失(Cache Miss),同时避免陈旧数据被访问。
  • 低频变化数据(TTL:24小时):

    • 适用场景:数据更新周期较长但访问频率高(如用户配置、静态元数据)。

    • 实现:设置较长的 TTL,延长数据在缓存中的存活时间。

    • 优势:提高命中率,降低 Timestream 的查询压力。

主动预热机制

**定义:**在业务高峰前(如促销活动、每日早高峰),通过分析历史访问模式,将热点数据提前加载到缓存中。

实现步骤:

  • 数据分析:通过 AWS CloudTrail 或应用日志分析历史热点数据(如高频查询的时间范围、设备 ID、用户 ID 等)。
  • 触发条件:利用 AWS Lambda 或计划任务(如 cron job)在高峰前启动预热。
  • 数据加载:执行批量查询(如 SELECT 语句)将数据写入缓存,并设置合适的 TTL。

实际优化中的注意事项

缓存命中率监控
  • 监控指标:在 AWS CloudWatch 中监控以下指标:

    • 命中率(Cache Hit Ratio):衡量缓存是否有效减少 Timestream 查询量。

    • 缓存请求延迟:确保读取缓存的性能满足业务要求。

    • 缓存大小与内存使用率:避免因缓存过大导致内存溢出或交换(Swap)。

  • 告警阈值:

    • 当命中率低于 85% 时触发告警,可能原因包括:

      • TTL 设置不当:热点数据过早失效。

      • 缓存未命中策略:缓存未覆盖高频查询接口。

      • 数据更新频率过高:导致缓存频繁失效。

Redis缓存与Timestream热数据时间调整方案的配合
  • Timestream 的存储分层:

    • Timestream 默认将数据分为 热数据(Hot Storage) 和 冷数据(Cold Storage),其中热数据存储在内存中,查询性能更高。

    • 可通过配置调整热数据的保留时间(默认为 1 天),延长保留时间可减少冷数据访问频率,但会增加热存储成本。

  • 优化组合:

    • Redis 缓存:通过缓存高频查询结果,进一步减少 Timestream 的查询压力。

    • 热数据时间延长:确保低频但需长期保留的热点数据仍保留在热存储层,避免冷数据查询的高延迟。

  • 实施要求:

    • 间隔执行变更:例如:

      1. 先调整 Timestream 的热数据保留时间,观察指标(如查询延迟、成本)变化。

      2. 再实施 Redis 缓存优化,单独评估其性能提升效果。

    • 目的:避免两个策略的效果相互干扰,便于分析优化方案的独立贡献。

最佳实践

  1. 缓存键设计:

    • 使用有意义的键名(如 device:123:status),方便按业务维度管理缓存生命周期。

    • 对于复杂查询,可采用 Query Caching(将 SQL 表达式哈希为键)或 Query Pattern Caching(缓存查询模式而非具体数据)。

  2. 分布式缓存:

    • 数据一致性:Memcached 的分布式缓存基于哈希分片,需确保写操作同步到所有节点(若使用集群模式)。

    • 缓存雪崩/击穿:采用 随机过期时间(如在基础 TTL 上随机加 0-5 分钟)和 互斥锁(如 Redis 的 Redlock 算法)缓解这些问题。

  3. 成本优化:

    • 结合 Timestream 的按需付费模式,通过缓存减少查询量可显著降低 Timestream 费用。

    • Redis 的持久化(如 RDB、AOF)需谨慎配置,避免额外 I/O 开销。

相关文章:

线上救急-AWS限频

线上救急-AWS限频 问题 在一个天气炎热的下午,我正喝着可口可乐,悠闲地看着Cursor生成代码,忽然各大群聊中出现了加急➕全体的消息,当时就心里一咯噔,点开一看,果然,线上服务出问题&#xff0…...

JavaWeb学习打卡-Day1-分层解耦、Spring IOC、DI

三层架构 Controller(控制层):接收前端发送的请求,对请求进行处理,并响应数据。Service(业务逻辑层):处理具体的业务逻辑。DAO(数据访问层/持久层)&#xff…...

【LeetCode】1.两数之和

目录 📚 题目概要🧰 前置知识🚧 问题难点🔑 关键思路步骤拆解 💻 代码实现代码注释 📊 复杂度分析❗ 易错点与测试案例易错点测试案例 🔗 总结与扩展模式归纳核心思维 📚 题目概要 在…...

mongodb 存储数据的具体实现方式

MongoDB 存储数据的具体实现方式涉及数据模型、存储引擎、分片机制等多个核心模块,以下是其实现原理的详细分析: 一、数据模型 1.1 文档型数据模型‌ MongoDB 使用 BSON格式存储数据,支持键值对、嵌套文档和数组等复杂结构。 1.2 无模式设…...

【手机】vivo手机应用声音分离方案

文章目录 前言方案 前言 尝试分离vivo手机音乐与其他应用的声音 方案 最佳方案:网易云音乐设置内关闭音量均衡 上传不同的白噪音,成功 goodlock,主要适用于三星手机,vivo不一定适用 app volume control ,可行...

多级缓存架构,让系统更快的跑起来!

大家好,今天,咱们来聊聊一个超级实用的话题——多级缓存架构。别一听“架构”俩字就头大,我保证,这篇文章既有趣又易懂,让你秒变缓存小达人! 一、多级缓存,为啥这么火? 在互联网的汪洋大海里,数据就是咱们的宝藏。但每次从数据库里捞数据,都跟挖宝藏似的,慢得很!…...

Vibracostic EDI 需求分析

Vibracostic 是德国Freudenberg集团旗下全球领先的减振与噪音控制技术公司,专注于为汽车及工业领域提供高效振动管理和隔音解决方案,客户涵盖宝马、奔驰、特斯拉等主流车企。 Vibracostic EDI 需求分析 供应商接收Vibracostic发来的DELFOR交付预测报文…...

基于超启发鲸鱼优化算法的混合神经网络多输入单输出回归预测模型 HHWOA-CNN-LSTM-Attention

基于超启发鲸鱼优化算法的混合神经网络多输入单输出回归预测模型 HHWOA-CNN-LSTM-Attention 随着人工智能技术的飞速发展,回归预测任务在很多领域得到了广泛的应用。尤其在金融、气象、医疗等领域,精确的回归预测模型能够为决策者提供宝贵的参考信息。为…...

Linux卸载删除gitlab

1、停止 gitlab服务 gitlab-ctl stop 2、卸载 gitlab(社区版) rpm -e gitlab-ce 或者 yum remove gitlab-ce 3、查看 gitlab 进程 ps aux | grep gitlab 4、杀掉gitlab service进程,该进程与runsvdir相关(带有好多..........…...

高品质性价比之王-特伦斯便携钢琴V10

在电子钢琴选购过程中,预算与品质的平衡常常让消费者感到纠结。但特伦斯 V10 88 键可折叠电子钢琴的出现,为广大音乐爱好者带来了惊喜,亲民的价格实现了高品质的音乐体验。​ 先看便携性,同价位的电子钢琴大多体型庞大&#xff0c…...

解决方案评测|告别复杂配置!基于阿里云云原生应用开发平台CAP快速部署Bolt.diy

写在前面的话 突然看到上线了关于Bolt.new开源版本的解决方案测评,其实心里还是挺高兴的,我最早接触到Bolt.new的时候应该是在去年的11月份,当时是撰写了一篇名为一种基于通义千问prompt辅助Qwen2.5-coder-32bBolt.newv0Cursor的无代码对话…...

python测试框架之pytest

Pytest pytest 基础使用pytest安装pytest的测试case收集规则pytest - fixture的使用skip and xfailpytest - 属性标记测试函数pytest - 参数化测试pytest - mock/monkeypatch的使用pytest - 运行方式pytest - 运行方式/命令pytest - 处理测试失败的case pytest - 测试输出捕获 …...

uni-app 开发企业级小程序课程

课程大小:7.7G 课程下载:https://download.csdn.net/download/m0_66047725/90616393 更多资源下载:关注我 备注:缺少两个视频5-14 tabs组件进行基本的数据展示和搜索历史 处理searchData的删除操作 1-1导学.mp4 2-10小程序内…...

深度图可视化

import cv2# 1.读取一张深度图 depth_img cv2.imread("Dataset_depth/images/train/1112_0-rgb.png", cv2.IMREAD_UNCHANGED) print(depth_img.shape) cv2.imshow("depth", depth_img) # (960, 1280) print(depth_img)# 读取一张rgb的图片做对比 input_p…...

Java实现希尔排序算法

1. 希尔排序原理图解 希尔排序是插入排序的一种高效改进版本,通过比较和交换间隔较远的元素来减少数据的移动次数。以下是希尔排序的步骤: 1. 选择初始间隔:通常选择数组长度的一半作为初始间隔。 2. 分组和插入排序:将数组分成若…...

Apache RocketMQ 荣获 2024 开源创新榜单“年度开源项目

持续深耕 RocketMQ 领域,更多实战避坑指南、源码解析、最佳实践,已整理至「RocketMQ 中文社区」 🔍 近日,以“新纪天工、开物焕彩——致敬开源的力量”为活动主题的“重大科技成就发布会(首场)”在国家科技…...

2025年智慧交通与能源技术国际会议(ITNET 2025)

The 2nd International Conference on Intelligent Transportation and Energy Technology 一、大会信息 会议简称:ITNET 2025 大会时间:(以官网为准) 大会地点:中国南京 收录检索:提交Ei Compendex,CPCI,CNKI,Google…...

Spring Boot 集成 Redis 实战总结

Spring Boot 集成 Redis 实战总结 一、基础集成与配置 依赖引入 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>默认使用 Lettuce 作为连接池&#xf…...

ubuntu18.04启动不了修复

参考: 虚拟机里的Ubuntu18.4启动时进入到grub rescue救援模式&#xff08;无法正常进入到系统&#xff09;&#xff0c;ls查看后只有一个硬盘和分区&#xff0c;且无法找到/boot/grub文件【已解决】_ubuntu grub rescue-CSDN博客 本人fdisk错误使用,导致了grub启动不了 第一步…...

人类行为的原动力是自我保存-来自ChatGPT

自我保存&#xff08;Self-Preservation&#xff09;确实可以说是人类行为最原始、最底层的驱动力。 简单来说&#xff1a; 无论我们做什么&#xff0c;表面看动机五花八门&#xff0c;实际上归根到底都绕不开活下去、保护自己。 &#x1f4a1; 从不同层面理解这个观点&#…...

退役淘汰的硬盘数据安全处置不可忽视-硬盘数据抹除清零

在信息化时代&#xff0c;硬盘作为数据存储的核心载体&#xff0c;其退役处理直接关系到信息安全&#xff0c;淘汰硬盘中往往留存大量敏感信息&#xff0c;若处置不当&#xff0c;极易引发数据泄露风险&#xff0c;造成难以挽回的损失。因此&#xff0c;建立规范的硬盘数据销毁…...

创建 Node.js Playwright 项目:从零开始搭建自动化测试环境

一、环境准备 在开始创建 Playwright 项目之前&#xff0c;确保你的电脑上已经安装了以下工具&#xff1a; Node.js&#xff1a;Playwright 依赖于 Node.js 环境&#xff0c;确保你已经安装了最新版本的 Node.js。可以通过以下命令检查是否安装成功&#xff1a; node -v npm -…...

1+X: Python程序开发职业技能等级要求(初级)练习资料分享

以下将根据表1中Python程序开发职业技能等级要求&#xff08;初级&#xff09;的不同工作领域和任务&#xff0c;分别给出练习代码或操作步骤。 Python基础编程 开发环境搭建 操作步骤&#xff1a;以Windows系统为例&#xff0c;首先从Python官方网站&#xff08;https://www…...

【漏洞复现】CVE-2024-38856(ApacheOfbiz RCE)

【漏洞复现】CVE-2024-38856&#xff08;ApacheOfbiz RCE&#xff09; 1. 漏洞描述 Apache OFBiz 是一个开源的企业资源规划&#xff08;ERP&#xff09;系统。它提供了一套企业应用程序&#xff0c;用于集成和自动化企业的许多业务流程。 这个漏洞是由于对 CVE-2023-51467 的…...

【React】获取元素距离页面顶部的距离

文章目录 代码实现 代码实现 import { useEffect, useRef, useState } from react;const DynamicPositionTracker () > {const [distance, setDistance] useState(0);const divRef useRef(null);useEffect(() > {const targetDiv divRef.current;if (!targetDiv) re…...

【Markdown】【HTML】在Markdown中实现康奈尔笔记模式(右侧留白)

文章目录 HTML表格——康奈尔笔记法标签解释<table> 相关标签文本内容标签注释标签 最低限度应了解的HTML标签 (Essential HTML Tags)结构标签 (Structure Tags)文本标签 (Text Tags)列表标签 (List Tags)链接和图片 (Links and Images)格式化 (Formatting)表格 (Tables)…...

Go语言中的Context

目录 Go语言中的Context 1. Context的基本概念 1.1 Context的核心作用 2. Context的基本用法 2.1 创建Context 背景Context 可取消的Context 带有超时的Context 2.2 在Goroutine间传递Context 2.3 获取Context的值 为Context添加自定义数据 访问Context中的值 3. C…...

基于Python的图片/签名转CAD小工具开发方案

基于Python的图片/签名转CAD工具开发方案 一、项目背景 传统设计流程中&#xff0c;设计师常常需要将手写签名或扫描图纸转换为CAD格式。本文介绍如何利用Python快速开发图像矢量化工具&#xff0c;实现&#xff1a; &#x1f4f7; 图像自动预处理✏️ 轮廓精确提取⚙️ 参数…...

uniapp微信小程序:WIFI设备配网之TCP/UDP开发AP配网

一、AP配网技术原理 1.1 配网模式选择 AP配网&#xff08;SoftAP模式&#xff09;是IoT设备配网成功率最高的方案之一 1、其核心原理&#xff1a; ​​设备端​​&#xff1a;启动AP模式&#xff08;如SSID格式YC3000_XXXX&#xff0c;默认IP192.168.4.1&#xff09;​​手…...

docker部署seata

seata版本&#xff1a;2.0.0 使用eureka作为注册中心&#xff0c;mysql作为存储 拉取镜像 docker pull seataio/seata-server:2.0.0mysql建表语句 可从 github下载sql脚本 -- seata_server.branch_table definition CREATE TABLE branch_table (branch_id bigint NOT NULL,…...

JVM 内存分布详解

/*** 示例类&#xff0c;展示各种成员在JVM中的存储位置*/ public class MemoryDistributionExample {// 1. 实例变量&#xff08;普通成员变量&#xff09; - 存储在堆内存的对象实例中private int instanceVar 10;private String instanceRef "Instance Reference&quo…...

AR行业应用案例与NXP架构的结合

1. 工业巡检AR头盔 场景示例&#xff1a;宁德核电基地使用AR智能头盔进行设备巡检&#xff0c;通过实时数据叠加和远程指导&#xff0c;将工作效率提升35%。头盔需处理传感器数据、图像渲染和低延迟通信1。 NXP架构支持&#xff1a; 协处理器角色&#xff1a;NXP i.MX RT系列M…...

OpenCV 图形API(49)颜色空间转换-----将 NV12 格式的图像数据转换为 BGR 颜色空间函数NV12toBGR()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像从NV12&#xff08;YUV420p&#xff09;颜色空间转换为BGR。 该函数将输入图像从NV12颜色空间转换为RGB。Y、U和V通道值的常规范围是0到25…...

Transformer中Post-Norm和Pre-Norm如何选择?

pre-norm: x n 1 x n f ( n o r m ( x n ) ) x_{n1}x_nf(norm(x_n)) xn1​xn​f(norm(xn​)) 其中第二项的方差由于有 norm 是不随层数变化的&#xff0c;于是 x 的方差会在主干上随层数积累。到了深层以后&#xff0c;单层对主干的影响可以视为小量&#xff0c;而不同层的 …...

jvm-描述符与特征签名的区别

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;存储的是方法签名&#xff0c;而不是仅仅方法描述符。方法签名包含了方法的参数类型和返回值类型的信息&#xff0c;而方法描述符通常指的是仅包含参数类型的那部分信息。为了更清晰地理解这两者的区别以及它们如何在JVM…...

JVM有什么调优参数?

-Xms&#xff1a;堆最小值 -Xmx&#xff1a;堆最大值。-Xms与-Xmx 的单位默认字节都是以k、m做单位的。 通常这两个配置参数相等&#xff0c;避免每次空间不足&#xff0c;动态扩容带来的影响。 -Xmn&#xff1a;新生代大小 -Xss&#xff1a;每个线程池的栈大小。在jdk5以上…...

QT:Qt5 串口模块 (QSerialPort) 在 VS2015 中正确关闭串口避免被占用

以下是使用 Qt5 串口模块 (QSerialPort) 在 VS2015 中正确关闭串口避免被占用的完整示例代码&#xff1a; #include <QSerialPort> #include <QDebug>// 创建全局或类成员变量&#xff08;推荐使用智能指针&#xff09; QSerialPort *serialPort nullptr; // 打开…...

14.QT-多元素控件|QListWidget|QTableWidget|QTreeWidget(C++)

Qt中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView 以QTableWidget和QTableView为例. QTableView是基于MVC设计的控件.QTableView⾃⾝不持有数据.使⽤QTableView的时候需要⽤⼾创建⼀个Model对象(⽐如 QStandardModel ),并且把Model…...

单页面应用的特点,什么是路由,VueRouter的下载,安装和使用,路由的封装抽离,声明式导航的介绍和使用

文章目录 一.什么是单页面应用?二.什么是路由?生活中的路由和Vue中的路由 三.VueRouter(重点)0.引出1.介绍2.下载与使用(5个基本步骤2个核心步骤)2.1 五个基本步骤2.2 两个核心步骤 一.什么是单页面应用? 定义和特点:所有功能都在一个HTML中实现 示例:网易云音乐 多页面应…...

Java并发编程-线程通讯

Java并发编程-线程通讯 线程通讯常见场景实现方法等待通知信号量实现栅栏实现锁机制实现 CountDownLatchCountDownLatch 常用方法说明模拟报表统计场景其他样例 CyclicBarrier 线程通讯 线程通讯指的是多个线程之间通过共享内存或消息传递等方式来协调和同步它们的执行。在多线…...

ubuntu学习day4

4 Linux 文件操作 4.1 基于文件指针的文件操作 Linux 中对目录和设备的操作都是文件操作&#xff0c;文件分为普通文件&#xff0c;目录文件&#xff0c;链接文件和设备文件。普通文件&#xff1a;也称磁盘文件&#xff0c;并且能够进行随机的数据存储(能够自由 seek 定位到某…...

百度暑期实习岗位超3000个,AI相关岗位占比87%,近屿智能携AIGC课程加速人才输出

今年3月&#xff0c;百度重磅发布3000暑期实习岗位&#xff0c;聚焦大模型、机器学习、自动驾驶等AI方向的岗位比例高达87%。此次实习岗位涉及技术研发、产品策划、专业服务、管理支持、政企解决方案等四大类别&#xff0c;覆盖超300个岗位细分方向。值得一提的是&#xff0c;百…...

vin码识别技术-车辆vin识别代码-Java接口集成

快速识别车辆vin码有助于提升汽车保险行业、4s店车辆出入库、二手车交易、车辆租赁公司等众多业务流程的管理。vin码识别接口&#xff0c;为汽车后市场实现车辆vin信息的快速提取提供了高效且可靠的解决方案。基于先进的ocr技术&#xff0c;能够迅速定位图片中的VIN码区域&…...

随机深林算法是分类还是回归?

随机森林算法既可以用于分类也可以用于回归。 一、随机森林用于分类的情况 原理 随机森林是一种集成学习算法&#xff0c;它通过构建多棵决策树来提高预测性能。在分类任务中&#xff0c;每棵决策树都是基于随机选择的特征子集和随机抽样的数据子集&#xff08;通常是通过自助…...

【现代深度学习技术】循环神经网络05:循环神经网络的从零开始实现

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…...

北京大学|第8讲:《生成未必理解:基于扩散模型能否实现视觉世界模型》

导 读INTRODUCTION 随着人工智能技术的飞速发展&#xff0c;AI在图像和视频生成领域取得了显著成就&#xff0c;但生成和理解之间的统一仍然是一个挑战。北京大学深圳研究生院助理教授袁粒的团队正在探索如何实现这一目标&#xff0c;他们的研究可能会改变我们对AI生成和理解能…...

C++如何处理多线程环境下的异常?如何确保资源在异常情况下也能正确释放

多线程编程的基本概念与挑战 多线程编程的核心思想是将程序的执行划分为多个并行运行的线程&#xff0c;每个线程可以独立处理任务&#xff0c;从而充分利用多核处理器的性能优势。在C中&#xff0c;开发者可以通过std::thread创建线程&#xff0c;并使用同步原语如std::mutex、…...

Gmssl实战

最近项目要引入gm算法&#xff0c;实现aes和sm4数据加密&#xff0c;研究了一下两个系统的安装和测试用例 linux&#xff0c;从github下载GmSSL库&#xff08; https://github.com/guanzhi/GmSSL.git &#xff09;&#xff0c;以下为安装方法。 ## GmSSL库安装编译,需要确认…...

C语言 函数(上)

目录 1.函数的概念 2.库函数 3.自定义函数 4.形参和实参 5.return语句 1.函数的概念 数学中我们其实就见过函数的概念&#xff0c;比如&#xff1a;一次函数y kx b&#xff0c;k和b都是常数&#xff0c;给一个任意的x&#xff0c; 就得到一个y值。 其实在C语言也引入…...

2025.04.20【Lollipop】| Lollipop图绘制命令简介

Customize markers See the different options allowing to customize the marker on top of the stem. Customize stems See the different options allowing to customize the stems. 文章目录 Customize markersCustomize stems Lollipop图简介R语言中的Lollipop图使用ggp…...